В режиме "Конфигуратор"
страницаВ режиме «Конфигуратор»
Откроем конфигуратор и добавим новый объект конфигурации Документ. Назовем его НачисленияСотрудникам. Зададим представление объекта как Начисление сотрудникам. На закладке Нумерация установим:
Тип номера—Число,Длина номера—5(рис. 18.1).

Рис. 18.1. Нумерация документа
На закладке Подсистемы укажем, что документ будет отображаться в подсистеме РасчетЗарплаты.
На закладке Данные укажем, что этот документ будет иметь табличную часть Начисления, содержащую следующие реквизиты:
Сотрудник, тип СправочникСсылка.Сотрудники;ГрафикРаботы, тип СправочникСсылка.ВидыГрафиковРаботы;ДатаНачала, тип Дата;ДатаОкончания, тип Дата;ВидРасчета, тип ПланВидовРасчетаСсылка.ОсновныеНачисления;Начислено, Число, длина15, точность2.
Реквизиты ДатаНачала и ДатаОкончания понадобятся нам для того, чтобы задавать период, в котором должна действовать запись расчета.
На закладке Движения запретим оперативное проведение документа.
Отметим, что документ будет создавать движения по регистру расчета Начисления, и запустим конструктор движений (рис. 18.2).

Рис. 18.2. Движения документа
В окне конструктора выберем табличную часть Начисления и нажмем Заполнить выражения.
Для реквизитов ПериодДействияКонец и БазовыйПериодКонец укажем выражение КонецДня(ТекСтрокаНачисления.ДатаОкончания).
Для поля ПериодРегистрации укажем выражение Дата.
Реквизиту ИсходныеДанные поставим в соответствие реквизит табличной части Начислено, а для ресурса Результат оставим пустое выражение, так как мы будем его потом рассчитывать (рис. 18.3).

Рис. 18.3. Движения документа «НачисленияСотрудникам» по регистру расчета
Нажмем OK и посмотрим текст обработчика, созданный конструктором (листинг 18.1).
Листинг 18.1. Текст обработчика, созданный конструктором движений
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором
// При повторном использовании конструктора
// внесенные вручную изменения будут утеряны!!!
Движения.Начисления.Записывать = Истина;
// Регистр Начисления
Для Каждого ТекСтрокаНачисления Из Начисления Цикл
Движение = Движения.Начисления.Добавить();
Движение.Сторно = Ложь;
Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета;
Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала;
Движение.ПериодДействияКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания);
Движение.ПериодРегистрации = Дата;
Движение.БазовыйПериодНачало = ТекСтрокаНачисления.ДатаНачала;
Движение.БазовыйПериодКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания);
Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник;
Движение.ГрафикРаботы = ТекСтрокаНачисления.ГрафикРаботы;
Движение.ИсходныеДанные = ТекСтрокаНачисления.Начислено;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Прокомментируем этот код.
В целом в нем нет ничего принципиально нового по сравнению с прежними обработчиками проведения документов, создающими движения регистров.
Напомним лишь, что Начисления — имя регистра расчета, и в выражениях Движения.Начисления.Записывать() и Движения.Начисления.Добавить() мы обращаемся к методам набора записей этого регистра.
В строке Для Каждого ТекСтрокаНачисления Из Начисления Цикл мы обращаемся по имени (Начисления) к табличной части нашего документа и организуем цикл обхода этой табличной части.
В цикле мы добавляем к движениям новую запись и присваиваем ее полям значения из табличной части документа.
Для присвоения значений полям ПериодДействияКонец, БазовыйПериодКонец мы используем функцию КонецДня(). Аналогичным образом мы поступали при создании отчетов, чтобы последний день периода попал в отчет.
В заключение отредактируем командный интерфейс, чтобы в разделе Расчет зарплаты была доступна команда создания новых документов.
Для этого в дереве объектов конфигурации выделим подсистему РасчетЗарплаты, вызовем контекстное меню и выполним команду Открыть командный интерфейс.
В группе Панель действий.Создать включим видимость у команды Начисление сотрудникам: создать (рис. 18.4).

Рис. 18.4. Редактирование командного интерфейса подсистемы