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