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