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