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