| НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки
| НачисленияДанныеГрафика. НомерСтроки КАК НомерСтроки |ИЗ | РегистрРасчета. Начисления. ДанныеГрафика(Регистратор = & Регистратор И | ВидРасчета = & ВидРасчета И Сотрудник В (& СписокСотрудников)) | КАК НачисленияДанныеГрафика"; Запрос. УстановитьПараметр(" Регистратор", Регистратор); Запрос. УстановитьПараметр(" ВидРасчета", ТребуемыйВидРасчета); Запрос. УстановитьПараметр(" СписокСотрудников", СписокСотрудников); ВыборкаРезультата = Запрос. Выполнить(). Выбрать(); // Рассчитать вторичные записи ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета. ОсновныеНачисления. Премия Тогда КонецЕсли; КонецПроцедуры В этом запросе мы выбираем из виртуальной таблицы данных графика регистра расчета значение графика для периода действия и для фактического периода действия. При задании параметров вирту- альной таблицы мы ограничиваем выборку регистратором, нужным нам видом расчета и списком сотрудников, по которым нужно получить значения графика. Теперь добавим обход переданного в процедуру набора записей и расчет записей, для которых получены значения графика (листинг 18. 5). листинг 18. 5. Добавление обхода набора записей и расчета первичных записей Процедура РассчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Эспорт Регистратор = НаборЗаписейРегистра. Отбор. Регистратор. Значение; // Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета. ОсновныеНачисления. Оклад Тогда … ВыборкаРезультата = Запрос. Выполнить(). Выбрать(); Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл СтруктураНомер = Новый Структура(" НомерСтроки" ); СтруктураНомер. НомерСтроки = ЗаписьРегистра. НомерСтроки; ВыборкаРезультата. Сбросить();
Если ВыборкаРезультата. НайтиСледующий(СтруктураНомер) Тогда Если ВыборкаРезультата. Норма = 0 Тогда Сообщение = Новый СообщениеПользователю; Сообщение. Текст = " Вид расчета: Оклад – Нет рабочих дней в заданном периоде"; Иначе Сообщение. Сообщить(); ЗаписьРегистра. Результат = 0; // Рассчитать оклад по фактическому периоду и исходным данным ЗаписьРегистра. Результат = (ЗаписьРегистра. ИсходныеДанные ВыборкаРезультата. Норма) * ВыборкаРезультата. Факт; Сообщение = Новый СообщениеПользователю; Сообщение. Текст =" Выполнен расчет" + ЗаписьРегистра. Регистратор +" –" + ЗаписьРегистра. ВидРасчета +" –" + ЗаписьРегистра. Сотрудник; Сообщение. Сообщить(); КонецЕсли; КонецЕсли; КонецЦикла; // Рассчитать вторичные записи ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета. ОсновныеНачисления. Премия Тогда КонецЕсли; КонецПроцедуры Для каждой записи из набора записей регистра расчета мы получаем номер строки, идентифицирующий начисление для конкретного сотрудника, и по этому номеру ищем соответствующую запись в выборке из результата запроса. Если в результате запроса есть запись с таким номером строки, мы рассчитываем результат записи регистра расчета. То есть мы получаем начисление по окладу для каждого сотрудника как результат от деления начисленной суммы (поле регистра Исходные- Данные) на количество рабочих дней в месяце (Норма) и умножения на фактически отработанные рабочие дни (Факт). Добавим текст запроса во вторую ветку условия Если… с той лишь разницей, что теперь мы будем получать значения базы, используя виртуальную таблицу регистра расчета РегистрРасчета. Начис- ления. БазаНачисления (листинг 18. 6).
листинг 18. 6. Добавление текста запроса во вторую ветку условия Процедура РассчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Экспорт Регистратор = НаборЗаписейРегистра. Отбор. Регистратор. Значение; // Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета. ОсновныеНачисления. Оклад Тогда … // Рассчитать вторичные записи ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета. ОсновныеНачисления. Премия Тогда Запрос = Новый Запрос; Запрос. Текст = " ВЫБРАТЬ | НачисленияБазаНачисления. РезультатБаза КАК База,
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|