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