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