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