#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
НастройкиВида = Справочники.ВидыДокументовВводДанныхДляРасчетаЗарплаты.НастройкиВидаДокумента(ВидДокумента);
Если НастройкиВида.ВыполненныеРаботыВводятсяСводно Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "ВыполненныеРаботы.Период");
КонецЕсли;
Если НастройкиВида.ВыполненныеРаботыРаспределяютсяПоСотрудникам Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "ВыполненныеРаботы.Сотрудник");
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "ВыполненныеРаботы.Период");
Если ВыполненныеРаботы.Итог("Сумма") <> ЗначенияПоказателей.Итог("Значение") Тогда
ТекстСообщения = НСтр("ru = 'Сумма оплаты отличается от стоимости выполненных работ.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , , Отказ);
КонецЕсли;
КонецЕсли;
Если Не (НастройкиВида.РежимВводаСтатьиФинансирования = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВШапке) Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "СтатьяФинансирования");
КонецЕсли;
Если Не (НастройкиВида.РежимВводаСтатьиФинансирования = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти) Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "ВыполненныеРаботы.СтатьяФинансирования");
КонецЕсли;
Если Не (НастройкиВида.РежимВводаСпособаОтраженияЗарплатыВБухучете = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВШапке) Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "СпособОтраженияЗарплатыВБухучете");
КонецЕсли;
Если Не (НастройкиВида.РежимВводаСпособаОтраженияЗарплатыВБухучете = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти) Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "ВыполненныеРаботы.СпособОтраженияЗарплатыВБухучете");
КонецЕсли;
Если Не (НастройкиВида.РежимВводаОтношенияКЕНВД = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВШапке) Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "ОтношениеКЕНВД");
КонецЕсли;
Если Не (НастройкиВида.РежимВводаОтношенияКЕНВД = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти) Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "ВыполненныеРаботы.ОтношениеКЕНВД");
КонецЕсли;
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
НастройкиВида = Справочники.ВидыДокументовВводДанныхДляРасчетаЗарплаты.НастройкиВидаДокумента(ВидДокумента);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
МенеджерВТ = Новый МенеджерВременныхТаблиц;
СоздатьВТВыполненныеРаботыЭтогоДокумента(МенеджерВТ, НастройкиВида);
ТаблицаЗначенийПоказателей = ЗначенияПоказателей(МенеджерВТ, НастройкиВида);
ЗаписатьЗначенияПоказателейРасчетаЗарплаты(ТаблицаЗначенийПоказателей, Движения, Отказ);
ДанныеОВремени = ДанныеОВремени();
УчетРабочегоВремени.ПроверитьРегистрируемыеДанныхОВремени(Ссылка, ДанныеОВремени, Отказ, Истина);
УчетРабочегоВремени.ЗарегистрироватьРабочееВремяСотрудников(Движения, ДанныеОВремени);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ЗаписатьЗначенияПоказателейРасчетаЗарплаты(ТаблицаЗначенийПоказателей, Движения, Отказ)
Для Каждого СтрокаЗначений Из ТаблицаЗначенийПоказателей Цикл
НаборЗаписей = НаборЗаписейПоказателя(Движения, СтрокаЗначений.Назначение, СтрокаЗначений.СпособПрименения, СтрокаЗначений.СпособВвода);
Если НаборЗаписей = Неопределено Тогда
Продолжить;
КонецЕсли;
НаборЗаписей.Записывать = Истина;
Запись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(Запись, СтрокаЗначений);
Если НаборЗаписей = Движения.ЗначенияОперативныхПоказателейРасчетаЗарплатыСотрудников Тогда
Запись.Подразделение = СтрокаЗначений.ПодразделениеУчетаЗатрат;
Запись.ИспользоватьПриРасчетеПервойПоловиныМесяца = ИспользоватьПриРасчетеПервойПоловиныМесяца;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ЗначенияПоказателей(МенеджерВТ, НастройкиВида)
ВсеЗначенияПоказателей = ЗначенияПоказателей.Выгрузить();
РеквизитыДокумента = Метаданные().Реквизиты;
ВсеЗначенияПоказателей.Колонки.Удалить("НомерСтроки");
ВсеЗначенияПоказателей.Колонки.Добавить("СтатьяФинансирования", РеквизитыДокумента.СтатьяФинансирования.Тип);
ВсеЗначенияПоказателей.Колонки.Добавить("СпособОтраженияЗарплатыВБухучете", РеквизитыДокумента.СпособОтраженияЗарплатыВБухучете.Тип);
ВсеЗначенияПоказателей.Колонки.Добавить("ОтношениеКЕНВД", РеквизитыДокумента.ОтношениеКЕНВД.Тип);
ВсеЗначенияПоказателей.Колонки.Добавить("ПодразделениеУчетаЗатрат", РеквизитыДокумента.ПодразделениеУчетаЗатрат.Тип);
Если НастройкиВида.ВыполненныеРаботыРаспределяютсяПоСотрудникам Тогда
Если НастройкиВида.РегистрироватьСведенияОБухучете Тогда
РаспределитьПоказателиСотрудниковПоБухучету(ВсеЗначенияПоказателей, МенеджерВТ, НастройкиВида);
КонецЕсли;
Иначе
ДополнитьПоказателиИзВыполненныхРаботСотрудников(ВсеЗначенияПоказателей, МенеджерВТ, НастройкиВида);
КонецЕсли;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ДатаЭтогоДокумента", Дата);
Запрос.УстановитьПараметр("ПериодЭтогоДокумента", Период);
Запрос.УстановитьПараметр("ПериодОкончанияЭтогоДокумента", ПериодОкончания);
Запрос.УстановитьПараметр("ОрганизацияЭтогоДокумента", Организация);
Запрос.УстановитьПараметр("ВсеЗначенияПоказателей", ВсеЗначенияПоказателей);
Запрос.Текст =
"ВЫБРАТЬ
| *
|ПОМЕСТИТЬ ВТЗначенияПоказателейЭтогоДокумента
|ИЗ
| &ВсеЗначенияПоказателей КАК ЗначенияПоказателей";
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| &ПериодЭтогоДокумента КАК Период,
| ЗначенияПоказателей.Объект КАК Организация,
| ЗначенияПоказателей.Показатель
|ИЗ
| ВТЗначенияПоказателейЭтогоДокумента КАК ЗначенияПоказателей
|ГДЕ
| ЗначенияПоказателей.Объект ССЫЛКА Справочник.Организации
| И &ПериодЭтогоДокумента <> ДАТАВРЕМЯ(1, 1, 1)";
ИзмеренияДаты = Запрос.Выполнить().Выгрузить();
ПараметрыПостроенияСрезов = ЗарплатаКадрыОбщиеНаборыДанных.ПараметрыПостроенияДляСоздатьВТИмяРегистраСрез();
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(ПараметрыПостроенияСрезов.Отборы, "Регистратор", "<>", Ссылка);
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистраСрезПоследних(
"ЗначенияПериодическихПоказателейРасчетаЗарплатыОрганизаций",
Запрос.МенеджерВременныхТаблиц,
Истина,
ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(ИзмеренияДаты),
ПараметрыПостроенияСрезов);
Запрос.Текст =
"ВЫБРАТЬ
| &ПериодЭтогоДокумента КАК Период,
| ЗначенияПоказателей.Объект КАК Подразделение,
| ЗначенияПоказателей.Показатель
|ИЗ
| ВТЗначенияПоказателейЭтогоДокумента КАК ЗначенияПоказателей
|ГДЕ
| ЗначенияПоказателей.Объект ССЫЛКА Справочник.ПодразделенияОрганизаций
| И &ПериодЭтогоДокумента <> ДАТАВРЕМЯ(1, 1, 1)";
ИзмеренияДаты = Запрос.Выполнить().Выгрузить();
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистраСрезПоследних(
"ЗначенияПериодическихПоказателейРасчетаЗарплатыПодразделений",
Запрос.МенеджерВременныхТаблиц,
Истина,
ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(ИзмеренияДаты),
ПараметрыПостроенияСрезов);
Запрос.Текст =
"ВЫБРАТЬ
| ЗначенияПоказателей.Период КАК Период,
| ВЫБОР
| КОГДА ЗначенияПоказателей.ПериодОкончания <> ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА ДОБАВИТЬКДАТЕ(ЗначенияПоказателей.ПериодОкончания, ДЕНЬ, 1)
| ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
| КОНЕЦ КАК ДействуетДо,
| ЗначенияПоказателей.Период КАК ПериодДействия,
| Показатели.СпособПримененияЗначений КАК СпособПрименения,
| Показатели.СпособВводаЗначений КАК СпособВвода,
| Показатели.НазначениеПоказателя КАК Назначение,
| ВЫБОР
| КОГДА ЗначенияПоказателей.Объект ССЫЛКА Справочник.Организации
| ТОГДА ЗначенияПоказателей.Объект
| ИНАЧЕ &ОрганизацияЭтогоДокумента
| КОНЕЦ КАК Организация,
| ВЫБОР
| КОГДА ЗначенияПоказателей.Объект ССЫЛКА Справочник.ПодразделенияОрганизаций
| ТОГДА ЗначенияПоказателей.Объект
| КОНЕЦ КАК Подразделение,
| ВЫБОР
| КОГДА ЗначенияПоказателей.Объект ССЫЛКА Справочник.Сотрудники
| ТОГДА ЗначенияПоказателей.Объект
| КОНЕЦ КАК Сотрудник,
| ВЫБОР
| КОГДА ЗначенияПоказателей.Объект ССЫЛКА Справочник.Сотрудники
| ТОГДА Сотрудники.ФизическоеЛицо
| КОНЕЦ КАК ФизическоеЛицо,
| ЗначенияПоказателей.СтатьяФинансирования КАК СтатьяФинансирования,
| ЗначенияПоказателей.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
| ЗначенияПоказателей.ОтношениеКЕНВД КАК ОтношениеКЕНВД,
| ЗначенияПоказателей.ПодразделениеУчетаЗатрат КАК ПодразделениеУчетаЗатрат,
| ЗначенияПоказателей.Показатель КАК Показатель,
| ЗначенияПоказателей.Значение КАК Значение,
| ВЫБОР
| КОГДА ЗначенияПоказателей.Объект ССЫЛКА Справочник.Организации
| ТОГДА ЗначенияПериодическихПоказателейОрганизаций.Значение
| КОГДА ЗначенияПоказателей.Объект ССЫЛКА Справочник.ПодразделенияОрганизаций
| ТОГДА ЗначенияПериодическихПоказателейПодразделений.Значение
| КОНЕЦ КАК ЗначениеПоОкончании
|ИЗ
| ВТЗначенияПоказателейЭтогоДокумента КАК ЗначенияПоказателей
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
| ПО (Сотрудники.Ссылка = ЗначенияПоказателей.Объект)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПоказателиРасчетаЗарплаты КАК Показатели
| ПО (Показатели.Ссылка = ЗначенияПоказателей.Показатель)
| И (ВЫБОР
| КОГДА Показатели.СпособПримененияЗначений = ЗНАЧЕНИЕ(Перечисление.СпособыПримененияЗначенийПоказателейРасчетаЗарплаты.Постоянное)
| ТОГДА ИСТИНА
| ИНАЧЕ ЗначенияПоказателей.Значение <> 0
| КОНЕЦ)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗначенияПериодическихПоказателейРасчетаЗарплатыОрганизацийСрезПоследних КАК ЗначенияПериодическихПоказателейОрганизаций
| ПО (ЗначенияПериодическихПоказателейОрганизаций.Организация = ЗначенияПоказателей.Объект)
| И (ЗначенияПериодическихПоказателейОрганизаций.Показатель = ЗначенияПоказателей.Показатель)
| И (ЗначенияПериодическихПоказателейОрганизаций.Период = &ПериодЭтогоДокумента)
| И (&ПериодОкончанияЭтогоДокумента <> ДАТАВРЕМЯ(1, 1, 1))
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗначенияПериодическихПоказателейРасчетаЗарплатыПодразделенийСрезПоследних КАК ЗначенияПериодическихПоказателейПодразделений
| ПО (ЗначенияПериодическихПоказателейПодразделений.Подразделение = ЗначенияПоказателей.Объект)
| И (ЗначенияПериодическихПоказателейПодразделений.Показатель = ЗначенияПоказателей.Показатель)
| И (ЗначенияПериодическихПоказателейПодразделений.Период = &ПериодЭтогоДокумента)
| И (&ПериодОкончанияЭтогоДокумента <> ДАТАВРЕМЯ(1, 1, 1))";
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Функция РаспределитьПоказателиСотрудниковПоБухучету(ВсеЗначенияПоказателей, МенеджерВТ, НастройкиВида)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ВыполненныеРаботы.СтатьяФинансирования КАК СтатьяФинансирования,
| ВыполненныеРаботы.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
| ВыполненныеРаботы.ОтношениеКЕНВД КАК ОтношениеКЕНВД,
| ВыполненныеРаботы.ПодразделениеУчетаЗатрат КАК ПодразделениеУчетаЗатрат,
| СУММА(ВыполненныеРаботы.Сумма) КАК Сумма
|ИЗ
| ВТВыполненныеРаботыЭтогоДокумента КАК ВыполненныеРаботы
|
|СГРУППИРОВАТЬ ПО
| ВыполненныеРаботы.СтатьяФинансирования,
| ВыполненныеРаботы.СпособОтраженияЗарплатыВБухучете,
| ВыполненныеРаботы.ПодразделениеУчетаЗатрат,
| ВыполненныеРаботы.ОтношениеКЕНВД";
НастройкиБухУчетаСводно = Запрос.Выполнить().Выгрузить();
СуммыВыполненныхРабот = НастройкиБухУчетаСводно.ВыгрузитьКолонку("Сумма");
НовыеЗначенияПоказателей = ВсеЗначенияПоказателей.СкопироватьКолонки();
Для Каждого СтараяЗапись Из ВсеЗначенияПоказателей Цикл
Распределение = ЗарплатаКадрыКлиентСервер.РаспределитьПропорциональноКоэффициентам(СтараяЗапись.Значение, СуммыВыполненныхРабот);
Если Распределение = Неопределено Тогда
НоваяЗапись = НовыеЗначенияПоказателей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись, СтараяЗапись);
Если НастройкиБухУчетаСводно.Количество() = 0 Тогда
ЗаполнитьЗначенияСвойств(НоваяЗапись, ЭтотОбъект, "СтатьяФинансирования, СпособОтраженияЗарплатыВБухучете, ОтношениеКЕНВД, ПодразделениеУчетаЗатрат");
Иначе
ЗаполнитьЗначенияСвойств(НоваяЗапись, НастройкиБухУчетаСводно[0], "СтатьяФинансирования, СпособОтраженияЗарплатыВБухучете, ОтношениеКЕНВД, ПодразделениеУчетаЗатрат");
КонецЕсли;
Иначе
Индекс = 0;
Для Каждого НастройкаБухУчета Из НастройкиБухУчетаСводно Цикл
НоваяЗапись = НовыеЗначенияПоказателей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись, СтараяЗапись);
ЗаполнитьЗначенияСвойств(НоваяЗапись, НастройкаБухУчета, "СтатьяФинансирования, СпособОтраженияЗарплатыВБухучете, ОтношениеКЕНВД, ПодразделениеУчетаЗатрат");
НоваяЗапись.Значение = Распределение[Индекс];
Индекс = Индекс + 1;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если ВсеЗначенияПоказателей.Итог("Значение") <> НовыеЗначенияПоказателей.Итог("Значение") Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка при выполнении процедуры ""%1"": По колонке ""%2"" итог распределения %3, ожидался %4.'"),
"РаспределитьПоказателиСотрудниковПоБухучету",
"Значение",
НовыеЗначенияПоказателей.Итог("Значение"),
ВсеЗначенияПоказателей.Итог("Значение")
);
КонецЕсли;
ВсеЗначенияПоказателей = НовыеЗначенияПоказателей;
КонецФункции
Процедура ДополнитьПоказателиИзВыполненныхРаботСотрудников(ВсеЗначенияПоказателей, МенеджерВТ, НастройкиВида)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("ВидыРабот", ВыполненныеРаботы.ВыгрузитьКолонку("ВидРабот"));
Запрос.Текст =
"ВЫБРАТЬ
| ВыполненныеРаботы.Период КАК Период,
| ВыполненныеРаботы.Сотрудник КАК Сотрудник,
| ВыполненныеРаботы.СтатьяФинансирования КАК СтатьяФинансирования,
| ВыполненныеРаботы.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
| ВыполненныеРаботы.ОтношениеКЕНВД КАК ОтношениеКЕНВД,
| ВыполненныеРаботы.ПодразделениеУчетаЗатрат КАК ПодразделениеУчетаЗатрат,
| СУММА(Расценки.Расценка * ВыполненныеРаботы.ОбъемВыполненныхРабот) КАК Сумма
|ИЗ
| ВТВыполненныеРаботыЭтогоДокумента КАК ВыполненныеРаботы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РасценкиРаботСотрудников.СрезПоследних(&Дата, ВидРабот В (&ВидыРабот)) КАК Расценки
| ПО ВыполненныеРаботы.ВидРабот = Расценки.ВидРабот
|
|СГРУППИРОВАТЬ ПО
| ВыполненныеРаботы.Период,
| ВыполненныеРаботы.Сотрудник,
| ВыполненныеРаботы.СтатьяФинансирования,
| ВыполненныеРаботы.СпособОтраженияЗарплатыВБухучете,
| ВыполненныеРаботы.ОтношениеКЕНВД,
| ВыполненныеРаботы.ПодразделениеУчетаЗатрат";
СуммыРаботСотрудников = Запрос.Выполнить().Выгрузить();
СдельныйЗаработок = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.СдельныйЗаработок");
Для Каждого СтрокаРаботы Из СуммыРаботСотрудников Цикл
СтрокаПоказателя = ВсеЗначенияПоказателей.Добавить();
СтрокаПоказателя.Период = СтрокаРаботы.Период;
СтрокаПоказателя.Показатель = СдельныйЗаработок;
СтрокаПоказателя.Объект = СтрокаРаботы.Сотрудник;
СтрокаПоказателя.Значение = СтрокаРаботы.Сумма;
СтрокаПоказателя.СтатьяФинансирования = СтрокаРаботы.СтатьяФинансирования;
СтрокаПоказателя.СпособОтраженияЗарплатыВБухучете = СтрокаРаботы.СпособОтраженияЗарплатыВБухучете;
СтрокаПоказателя.ОтношениеКЕНВД = СтрокаРаботы.ОтношениеКЕНВД;
СтрокаПоказателя.ПодразделениеУчетаЗатрат = СтрокаРаботы.ПодразделениеУчетаЗатрат;
КонецЦикла;
КонецПроцедуры
Функция ДанныеОВремени()
ТаблицаДанных = УчетРабочегоВремениРасширенный.ПустаяТаблицаДляРегистрацииВремени();
Для Каждого СтрокаТабличнойЧасти Из ДанныеОВремениСводно Цикл
Если СтрокаТабличнойЧасти.Дней = 0 И СтрокаТабличнойЧасти.Часов = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаТаблицы = ТаблицаДанных.Добавить();
СтрокаТаблицы.Дата = Период;
СтрокаТаблицы.Сотрудник = СтрокаТабличнойЧасти.Сотрудник;
СтрокаТаблицы.ВидВремени = СтрокаТабличнойЧасти.ВидВремени;
СтрокаТаблицы.Дней = СтрокаТабличнойЧасти.Дней;
СтрокаТаблицы.Часов = СтрокаТабличнойЧасти.Часов;
СтрокаТаблицы.План = Ложь;
СтрокаТаблицы.Внутрисменное = Ложь;
СтрокаТаблицы.ВЦеломЗаПериод = Истина;
СтрокаТаблицы.Организация = Организация;
КонецЦикла;
Для Каждого СтрокаТабличнойЧасти Из ДанныеОВремениДетально Цикл
Для НомерДня = 1 По ЗарплатаКадрыКлиентСервер.КоличествоДнейМесяца(Период) Цикл
Если СтрокаТабличнойЧасти["Часов" + НомерДня] > 0 Тогда
СтрокаТаблицы = ТаблицаДанных.Добавить();
СтрокаТаблицы.Дата = Дата(Год(Период), Месяц(Период), НомерДня);
СтрокаТаблицы.Сотрудник = СтрокаТабличнойЧасти.Сотрудник;
СтрокаТаблицы.ВидВремени = СтрокаТабличнойЧасти.ВидВремени;
СтрокаТаблицы.Дней = 1;
СтрокаТаблицы.Часов = СтрокаТабличнойЧасти["Часов" + НомерДня];
СтрокаТаблицы.План = Ложь;
СтрокаТаблицы.Внутрисменное = Ложь;
СтрокаТаблицы.ВЦеломЗаПериод = Ложь;
СтрокаТаблицы.Организация = Организация;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ВремяВводитсяЗаМесяц = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидДокумента, "ВремяВводитсяЗаМесяц");
Если ВремяВводитсяЗаМесяц = Истина И ДанныеОВремениДетально.Количество() > 0 Тогда
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(ТаблицаДанных, "Сотрудник", Истина);
Для Каждого Сотрудник Из Сотрудники Цикл
СтрокиПоСотруднику = ТаблицаДанных.НайтиСтроки(Новый Структура("Сотрудник", Сотрудник));
РазличныеДаты = ОбщегоНазначения.ВыгрузитьКолонку(СтрокиПоСотруднику, "Дата", Истина);
Для НомерДня = 1 По ЗарплатаКадрыКлиентСервер.КоличествоДнейМесяца(Период) Цикл
ДатаДня = Дата(Год(Период), Месяц(Период), НомерДня);
Если РазличныеДаты.Найти(ДатаДня) <> Неопределено Тогда
Продолжить;
КонецЕсли;
СтрокаТаблицы = ТаблицаДанных.Добавить();
СтрокаТаблицы.Дата = ДатаДня;
СтрокаТаблицы.Сотрудник = Сотрудник;
СтрокаТаблицы.ВидВремени = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ВыходныеДни");
СтрокаТаблицы.Дней = 1;
СтрокаТаблицы.Часов = 0;
СтрокаТаблицы.План = Ложь;
СтрокаТаблицы.Внутрисменное = Ложь;
СтрокаТаблицы.ВЦеломЗаПериод = Ложь;
СтрокаТаблицы.Организация = Организация;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Возврат ТаблицаДанных;
КонецФункции
Функция НаборЗаписейПоказателя(Движения, Назначение, СпособПрименения, СпособВвода)
Если СпособПрименения = Перечисления.СпособыПримененияЗначенийПоказателейРасчетаЗарплаты.Постоянное Тогда
Если Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляПодразделения Тогда
Возврат Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыПодразделений;
ИначеЕсли Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляОрганизации Тогда
Возврат Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыОрганизаций;
КонецЕсли;
ИначеЕсли СпособПрименения = Перечисления.СпособыПримененияЗначенийПоказателейРасчетаЗарплаты.Разовое Тогда
Если СпособВвода = Перечисления.СпособыВводаЗначенийПоказателейРасчетаЗарплаты.ВводитсяЕдиновременно Тогда
Если Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляСотрудника Тогда
Возврат Движения.ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников;
ИначеЕсли Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляПодразделения Тогда
Возврат Движения.ЗначенияРазовыхПоказателейРасчетаЗарплатыПодразделений;
ИначеЕсли Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляОрганизации Тогда
Возврат Движения.ЗначенияРазовыхПоказателейРасчетаЗарплатыОрганизаций;
КонецЕсли;
ИначеЕсли СпособВвода = Перечисления.СпособыВводаЗначенийПоказателейРасчетаЗарплаты.НакапливаетсяПоОтдельнымЗначениям Тогда
Если Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляСотрудника Тогда
Возврат Движения.ЗначенияОперативныхПоказателейРасчетаЗарплатыСотрудников;
ИначеЕсли Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляПодразделения Тогда
Возврат Движения.ЗначенияОперативныхПоказателейРасчетаЗарплатыПодразделений;
ИначеЕсли Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляОрганизации Тогда
Возврат Движения.ЗначенияОперативныхПоказателейРасчетаЗарплатыОрганизаций;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура СоздатьВТВыполненныеРаботыЭтогоДокумента(МенеджерВТ, НастройкиВида)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.Текст =
"ВЫБРАТЬ
| ВыполненныеРаботы.Период КАК Период,
| ВыполненныеРаботы.Сотрудник КАК Сотрудник,
| ВыполненныеРаботы.ВидРабот КАК ВидРабот,
| ВыполненныеРаботы.СтатьяФинансирования КАК СтатьяФинансирования,
| ВыполненныеРаботы.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
| ВыполненныеРаботы.ОтношениеКЕНВД КАК ОтношениеКЕНВД,
| ВыполненныеРаботы.ПодразделениеУчетаЗатрат КАК ПодразделениеУчетаЗатрат,
| СУММА(ВыполненныеРаботы.ОбъемВыполненныхРабот) КАК ОбъемВыполненныхРабот,
| СУММА(ВыполненныеРаботы.Сумма) КАК Сумма,
| &Организация КАК Организация
|ПОМЕСТИТЬ ВТВыполненныеРаботыЭтогоДокумента
|ИЗ
| Документ.ДанныеДляРасчетаЗарплаты.ВыполненныеРаботы КАК ВыполненныеРаботы
|ГДЕ
| ВыполненныеРаботы.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ВыполненныеРаботы.Сотрудник,
| ВыполненныеРаботы.ВидРабот,
| ВыполненныеРаботы.Период,
| ВыполненныеРаботы.СпособОтраженияЗарплатыВБухучете,
| ВыполненныеРаботы.ОтношениеКЕНВД,
| ВыполненныеРаботы.ПодразделениеУчетаЗатрат,
| ВыполненныеРаботы.СтатьяФинансирования,
| &Организация";
Если НастройкиВида.РежимВводаСпособаОтраженияЗарплатыВБухучете <> Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВыполненныеРаботы.СпособОтраженияЗарплатыВБухучете", "&СпособОтраженияЗарплатыВБухучете");
Если НастройкиВида.РежимВводаСпособаОтраженияЗарплатыВБухучете = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВШапке Тогда
Запрос.УстановитьПараметр("СпособОтраженияЗарплатыВБухучете", СпособОтраженияЗарплатыВБухучете);
Иначе
Запрос.УстановитьПараметр("СпособОтраженияЗарплатыВБухучете", Справочники.СпособыОтраженияЗарплатыВБухУчете.ПустаяСсылка());
КонецЕсли;
КонецЕсли;
Если НастройкиВида.РежимВводаСтатьиФинансирования <> Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВыполненныеРаботы.СтатьяФинансирования", "&СтатьяФинансирования");
Если НастройкиВида.РежимВводаСтатьиФинансирования = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВШапке Тогда
Запрос.УстановитьПараметр("СтатьяФинансирования", СтатьяФинансирования);
Иначе
Запрос.УстановитьПараметр("СтатьяФинансирования", Справочники.СтатьиФинансированияЗарплата.ПустаяСсылка());
КонецЕсли;
КонецЕсли;
Если НастройкиВида.РежимВводаОтношенияКЕНВД <> Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВыполненныеРаботы.ОтношениеКЕНВД", "&ОтношениеКЕНВД");
Если НастройкиВида.РежимВводаОтношенияКЕНВД = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВШапке Тогда
Запрос.УстановитьПараметр("ОтношениеКЕНВД", ОтношениеКЕНВД);
Иначе
Запрос.УстановитьПараметр("ОтношениеКЕНВД", Перечисления.ОтношениеКЕНВДЗатратНаЗарплату.ПустаяСсылка());
КонецЕсли;
КонецЕсли;
Если НастройкиВида.РежимВводаПодразделенияУчетаЗатрат <> Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВыполненныеРаботы.ПодразделениеУчетаЗатрат", "&ПодразделениеУчетаЗатрат");
Если НастройкиВида.РежимВводаПодразделенияУчетаЗатрат = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВШапке Тогда
Запрос.УстановитьПараметр("ПодразделениеУчетаЗатрат", ПодразделениеУчетаЗатрат);
Иначе
Запрос.УстановитьПараметр("ПодразделениеУчетаЗатрат", Справочники.ПодразделенияОрганизаций.ПустаяСсылка());
КонецЕсли;
КонецЕсли;
Запрос.Выполнить();
КонецПроцедуры
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли