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