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