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