| НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки
| НачисленияБазаНачисления. НомерСтроки КАК НомерСтроки |ИЗ | РегистрРасчета. Начисления. БазаНачисления(& ИзмеренияОсновного, | & ИзмеренияБазового, , Регистратор = | & Регистратор И ВидРасчета = & ВидРасчета И | Сотрудник В (& СписокСотрудников)) | КАК НачисленияБазаНачисления"; Измер = Новый Массив(1); Измер[0] =" Сотрудник"; Запрос. УстановитьПараметр(" ИзмеренияОсновного", Измер); Запрос. УстановитьПараметр(" ИзмеренияБазового", Измер); Запрос. УстановитьПараметр(" Регистратор", Регистратор); Запрос. УстановитьПараметр(" ВидРасчета", ТребуемыйВидРасчета); Запрос. УстановитьПараметр(" СписокСотрудников", СписокСотрудников); ВыборкаРезультата = Запрос. Выполнить(). Выбрать(); КонецЕсли; КонецПроцедуры В параметрах виртуальной таблицы запроса мы кроме привычных для нас регистратора, вида расчета и списка сотрудников задаем еще измерения основного и базового регистров. В нашем случае это будет один и тот же регистр Начисления, а нужное нам измерение – Сотрудник. В заключение осталось добавить во второе условие Если… обход набора записей регистра расчета и вычисление результата вторичных записей (листинг 18. 7). листинг 18. 7. Добавление обхода набора записей регистра и вычисления результата вторичных записей Процедура РассчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Экспорт Регистратор = НаборЗаписейРегистра. Отбор. Регистратор. Значение; // Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета. ОсновныеНачисления. Оклад Тогда
… // Рассчитать вторичные записи ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета. ОсновныеНачисления. Премия Тогда ВыборкаРезультата = Запрос. Выполнить(). Выбрать(); Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл СтруктураНомер = Новый Структура(" НомерСтроки" ); СтруктураНомер. НомерСтроки = ЗаписьРегистра. НомерСтроки; ВыборкаРезультата. Сбросить(); Если ВыборкаРезультата. НайтиСледующий(СтруктураНомер) Тогда ЗаписьРегистра. Результат = ВыборкаРезультата. База * (10 / 100); Сообщение = Новый СообщениеПользователю; Сообщение. Текст =" Выполнен расчет" + ЗаписьРегистра. Регистратор +" –" + ЗаписьРегистра. ВидРасчета +" –" + ЗаписьРегистра. Сотрудник; Сообщение. Сообщить(); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры Сумму начисленной премии мы рассчитываем как 10 % от рассчи- танной оплаты по окладу. В режиме «1С: Предприятие» Запустим «1С: Предприятие» в режиме отладки и проверим правиль- ность работы процедуры расчета. Отменим проведение документа Начисления сотрудникам № 3 (Еще } Отмена проведения) и перепроведем документы Начисления сотруд- никам № 1 и № 2. Регистр расчета Начисления должен выглядеть следующим образом (рис. 18. 14, 18. 15).
Мы видим, что всем сотрудникам произведены начисления по окладу (поле Результат) за полный месяц в соответствии с исходными данными (поле Исходные данные). Сотрудникам Гусакову и Деловому начислена премия в размере 10 % от суммы начисления по окладу. Проведем документ Начисление сотрудникам № 3, а затем № 1 и № 2. При этом отчет Перерасчет должен быть пуст. Состояние регистра изменится следующим образом (рис. 18. 16, 18. 17).
В результате невыхода Гусакова на работу сумма оплаты по окладу будет уменьшена, и соответствующим образом уменьшится начис- ленная ему премия.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|