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