НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки |ИЗ

ГДЕ

КАК НачисленияСотрудникамНачисления

|

| НачисленияСотрудникамНачисления.Ссылка = &ТекущийДокумент");

Запрос.УстановитьПараметр("ТекущийДокумент",Ссылка);

//сформируем список сотрудников ТаблЗнач= Запрос.ВыполнитьО.Выгрузить();

МассивСотрудников = ТаблЗнач.ВыгрузитьКолонкуО'Сотрудник"); СписокСотрудииков= Новый СписокЗначений; СписокСотрудников.ЗагрузитьЗначения(МассивСотрудников);

РасчитатьНачисления(Двюкения.Начисления,

ПлапыВидовРасчета.ОсновныеНачисления.Оклад,

СписокСотрудников); Движения.Начисления.Записать(,Истнна);

РасчитатьНачиеления(Движении.Начисления,

ПланыВидовРасчета.ОсновныеНачисления.Премия,

СписокСотрудииков);Движения.НачисленияЛаписать(,Истина);

//} }_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры


Теперь создадим в ветке «Общие» новый общий модуль «ПроведениеРасчетов». Добавим в него заготовку процедуры «РасчитатьНачисления»:

ПроцедураРасчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета,

СписокСотрудников) Экспорт //Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад тогда

//Рассчитать вторичные записи иначеЕсли ТребуемыйВидРасчета =

ПланыВидовРасчета.ОсновныеНачисления.Премия тогда КонецЕсяи; КонецПроцедуры

Алгоритм расчета начислений будет различным при расчете первичных и вторичных записей, и каждая из его частей будет находиться в своей ветке условия Если...

При расчете первичных записей нам понадобятся данные графика
из регистра расчета, поэтому добавим в первую ветку условия запрос
по виртуальной таблице регистра расчета

«РегистрРасчета.Начисления.ДанныеГрафика»:


 


Обратите внимание, что при проведении документа мы сначала записываем движения, сформированные документом, в регистр, а затем передаем этот набор записей регистра в процедуру расчета. Сначала для расчета первичных записей («Оклад»), а затем для расчета вторичных («Премия»). Процедура расчета, на основе описанных в ней алгоритмов и данных, содержащихся в записях регистра, должна сформировать значения ресурсов регистра. После того, как ресурсы будут рассчитаны, мы перезаписываем набор записей регистра без формирования записей перерасчета (второй параметр в методе Записать() - Истина.

Перед вызовом процедуры из общего модуля мы формируем список сотрудников, содержащихся в документе, чтобы передать его в вызываемую процедуру.


ПроцедураРасчитатьНачисления(НаборЗаписейРегистра,ТребуемыйВидРасчета,

СписокСотрудников) Экспорт /Рассчитать первичные записи Если ТребуемыйВидРасчета e ПланыВидовРасчета.ОсновныеНачисления.Оклад тогда

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ

|НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма, |НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия

|КАК Факт,

|РегистрРасчета.Начисления.ДанныеГрафика(

|Регистратор = &Регистратор И |ВидРасчета = &ВидРасчета И |Сотрудник В (&СписокСотрудников)) |КАКНачисленияДанныеГрафика";

Запрос.УстановитьПараметр("Регистратор",
______________________ НаборЗаписейРегистра.Отбор.Регистратор.Значеяие);


 




Использование основных объектов конфигурации


Использование регистра расчета


 


Запрос.УстановитьПараметр("ВидРасчета",ТребуемыйВидРасчета); ~^^

3anpoc.ycTaHOBHTbnapaMeTp("CnMcoKCoTpyflHHKOB",CnncoKCoTpyflHHKOB)-

ВыборкаРезультата = Залрос.Выполнить().Выбрать();

/Л>ассчитать вторичные записи иначеЕсли ТребуемыйВидРасчета =

ПланыВидовРасчета.ОсновныеНачисления.Премиятогда КонецЕсли; КонецПроцедуры

В этом запросе мы выбираем из виртуальной таблицы данных графика регистра расчета значение графика для периода действия и для фактического периода действия. При задании параметров виртуальной таблицы мы ограничиваем выборку регистратором, нужным нам видом расчета и списком сотрудников, по которым нужно получить значения графика.

Теперь добавим обход переданного в процедуру набора записей и расчет записей, для которых получены значения графика:

Процедура РасчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета,

СписокСотрудников) экспорт /Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад тогда

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма,

| НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия

| КАКФакт,

| НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки