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