новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
sova73
Приватное сообщение
Новый заказчик

Нужно доработать отчет 1С 7.7 ПроцедуруВедомость.

Задание в категории песочница
2 февраля 2014 в 16:40:13 (10 лет 8 недель 22 часа назад)
Текст задания
Перем СписокСотрудников;
Перем СписокПредметов;

//******************************************************************************
// Название: РаботаСоСписком
// Параметры:
// Режим - строка, принимающая 4 значения:
// "Добавить"
// "ДобавитьНесколько"
// "Удалить"
// "УдалитьВсе"
// Список - список значений, в котором задается множественный фильтр
// ТипСправочника - строка, содержащая идентификатор справочнника, по
// которому осуществляется мноджественный фильтр
// Возвращаемое значение:
// НЕТ
// Вызывается из формул элементов диалога:
// кнопок работы с множественными фильтрами ("...",".....","X","XX")
// Наименование,.
// Описание:
// процедура предназначена для добавления и удаления элементов
// из множественных фильтров


Процедура РаботаСоСписком(Режим,Список,ТипСправочника)
Перем ТекПоз;
Перем ТекЭлемент;
Перем Фрм;

ТекПоз = Список.ТекущаяСтрока();
Если ТекПоз>0 Тогда
ТекЭлемент=Список.ПолучитьЗначение(ТекПоз);
КонецЕсли;

Если Режим="Добавить" Тогда // добавляем в список один элемент
СписокПодбора = Список;
СправочникПодбора = ВРег(ТипСправочника);
// открываем окно подбора
ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,0,ТекЭлемент);
Фрм.ВыборГруппы(1);

ИначеЕсли Режим="ДобавитьНесколько" Тогда // добавляем в список несколько элементов
СписокПодбора = Список;
СправочникПодбора = ВРег(ТипСправочника);
// открываем окно подбора
ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,1,ТекЭлемент);
Фрм.ВыборГруппы(1);

ИначеЕсли Режим="УдалитьВсе" Тогда // удаляем все элементы из списка
Список.УдалитьВсе();

ИначеЕсли Режим="Удалить" Тогда // удаляем из списка один элемент
Если ТекПоз>0 Тогда
Список.УдалитьЗначение(ТекПоз);
КонецЕсли;
КонецЕсли;
КонецПроцедуры // работа со списком

//-----------------------------
Процедура ОбработкаПодбора(ЗначПод)
Если ЗначПод.Вид()="Сотрудники" Тогда
Сотрудники.ДобавитьЗначение(ЗначПод,СокрЛП(ЗначПод.Наименование));
Сотрудники.ТекущаяСтрока(Сотрудники.РазмерСписка());
ИначеЕсли ЗначПод.Вид()="Предметы" Тогда
Предметы.ДобавитьЗначение(ЗначПод,СокрЛП(ЗначПод.Наименование));
Предметы.ТекущаяСтрока(Предметы.РазмерСписка());
КонецЕсли;
КонецПроцедуры



//-----------------------------
Процедура ПриОткрытии()
Если ПустоеЗначение(ВыбНачПериода)=1 Тогда
ВыбНачПериода=НачМесяца(ТекущаяДата());
КонецЕсли;
Если ПустоеЗначение(ВыбКонПериода)=1 Тогда
ВыбКонПериода=КонМесяца(ТекущаяДата());
КонецЕсли;
КонецПроцедуры

//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Сотрудник = Регистр.ВзаиморасчетыСотрудники.Сотрудник;
|Предмет = Регистр.ВзаиморасчетыСотрудники.Предмет;
|Сумма = Регистр.ВзаиморасчетыСотрудники.Сумма;
|ВидОплаты = Регистр.ВзаиморасчетыСотрудники.ВидОплаты;
|Код = Регистр.ВзаиморасчетыСотрудники.Код;
|ТекущийДокумент = Регистр.ВзаиморасчетыСотрудники.ТекущийДокумент;
|Функция СуммаНачОст = НачОст(Сумма);
|Функция СуммаПриход = Приход(Сумма);
|Функция СуммаРасход = Расход(Сумма);
|Функция СуммаКонОст = КонОст(Сумма);
|Группировка Сотрудник без групп;
|Группировка Предмет без групп;
|Группировка ТекущийДокумент;
|Условие((Код<>Перечисление.КодыОпераций.СписаниеУдержания) И (Код<>Перечисление.КодыОпераций.Удержание));
|Условие(Сотрудник в СписокСотрудников);
|Условие(Предмет в Списокпредметов);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей Сотрудник
Таб.ВывестиСекцию("Сотрудник");
Если Групировка>1 Тогда
Пока Запрос.Группировка(2) = 1 Цикл
// Заполнение полей Предмет
Таб.ВывестиСекцию("Предмет");
Если Групировка>2 Тогда
Пока Запрос.Группировка(3) = 1 Цикл
// Заполнение полей ТекущийДокумент
Таб.ВывестиСекцию("ТекущийДокумент");
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
// Заполнение полей "Итого"
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
//*******************************************

Процедура Ведомость()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Ведомость");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сотрудник)
|Период с ВыбНачПериода по ВыбКонПериода;
|Группа = Регистр.ВзаиморасчетыСотрудники.Группа;
|Сотрудник = Регистр.ВзаиморасчетыСотрудники.Сотрудник;
|Предмет = Регистр.ВзаиморасчетыСотрудники.Предмет;
|Сумма = Регистр.ВзаиморасчетыСотрудники.Сумма;
|Код = Регистр.ВзаиморасчетыСотрудники.Код;
|Часов = Регистр.ВзаиморасчетыСотрудники.Часов;
|Стоимость = Регистр.ВзаиморасчетыСотрудники.Стоимость;
|ТекущийДокумент = Регистр.ВзаиморасчетыКлиенты.ТекущийДокумент;
|Функция СуммаПриход = Приход(Сумма);
|Группировка Сотрудник без групп;
|Группировка Группа без групп;
|Группировка Предмет без групп;
|Группировка Код;
|Условие(Сотрудник в СписокСотрудников);
|Условие(Предмет в Списокпредметов);
//|Условие(Код=Перечисление.КодыОпераций.НачислениеЗарплаты);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
ИтогоВыплата=0;
Пока Запрос.Группировка(1) = 1 Цикл
ТекСотрудник=Запрос.Сотрудник;
НалогСорудников=ТекСотрудник.ПроцентУдержания+ТекСотрудник.НакопительноеУдержание;

ИтогоВыплата=ИтогоВыплата+Запрос.СуммаПриход-Запрос.СуммаПриход*НалогСорудников/100;

Таб.ВывестиСекцию("Сотрудник2");
Если Групировка>1 Тогда
Пока Запрос.Группировка(2) = 1 Цикл
Таб.ВывестиСекцию("Группа2");
Если Групировка>2 Тогда
Пока Запрос.Группировка(3) = 1 Цикл
// Заполнение полей Предмет
Таб.ВывестиСекцию("Предмет2");
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;

КонецЦикла;


Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");

КонецПроцедуры

//*******************************************

Процедура Отчет(Парам=0)
Если ВыбКонПериода>ПолучитьДатуТА() Тогда
ВыбКонПериода=ПолучитьДатуТА();
КонецЕсли;
Если ВыбНачПериода>ВыбКонПериода Тогда
Предупреждение("Не правельный интервал дат");
Возврат;
КонецЕсли;

СписокСотрудников=СоздатьОбъект("СписокЗначений");
СписокСотрудников=СоздатьМассивЭлементов("","",Сотрудники,"Сотрудники");

СписокПредметов=СоздатьОбъект("СписокЗначений");
СписокПредметов=СоздатьМассивЭлементов("","",Предметы,"Предметы");
Если Парам=1 Тогда
Ведомость()
Иначе
Сформировать();
КонецЕсли;
КонецПроцедуры
0
Выбранные исполнители
Отклики