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