Untitled
unknown
plain_text
2 years ago
6.1 kB
10
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...