Как программно создавать и заполнять документы начислений в 1С:ЗУП 3.1

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При переходе с версии 1С:ЗУП 2.5 на 1С:ЗУП 3.1 разработчики часто сталкиваются со сложностями автоматической загрузки и создания расчетных документов (таких как Разовое начисление или Материальная помощь). В редакции 3.1 значительная часть логики подготовки данных, пересчета показателей и распределения сумм вынесена в контекст управляемых форм и специализированные модули подсистемы расчета. Разберем особенности архитектуры ЗУП 3.1 и пошагово рассмотрим правильные способы решения этой задачи.

Архитектурные особенности и скрытые реквизиты

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

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

  1. Реквизиты графиков работы: привязаны к учету нормы и факта времени. Алгоритм их заполнения строится по следующим правилам:

    — ГрафикРаботы: если для сотрудника в месяце начисления введен документ Табель или Индивидуальный график, устанавливается ссылка на самого сотрудника (тип СправочникСсылка.Сотрудники); в противном случае подставляется график работы сотрудника на дату начала начисления.

    — ГрафикРаботыНорма: если введен индивидуальный график, устанавливается ссылка на сотрудника; иначе — график работы сотрудника на дату начала.

    — ОбщийГрафик: всегда заполняется основным графиком работы сотрудника на дату начала.

    — ПериодРегистрацииВремени и ПериодРегистрацииНормыВремени: заполняются датой месяца начисления (периодом регистрации), если есть табель или индивидуальный график; иначе остаются пустыми.

  2. Табличная часть «Физические лица»: во всех документах начислений присутствует скрытая коллекция, связывающая строки начислений с физическими лицами. Если ее не заполнить, документ выдаст ошибку при проведении.
  3. Табличные части «НДФЛ» и «Примененные вычеты»: если в документе выбран способ выплаты «В межрасчетный период» или «С авансом», исчисление налога и применение налоговых вычетов (например, вычет по коду 503 для материальной помощи) происходит непосредственно внутри самого документа.
  4. Реквизит «Планируемая дата выплаты»: расчет НДФЛ жестко привязан к дате получения дохода. Некорректная дата приведет к ошибкам в налоговом учете (6-НДФЛ).

Способ 1. Загрузка фиксированных сумм с заполнением реквизитов времени

Если из внешней системы загружаются готовые суммы, которые не требуют перерасчета по формулам ЗУП, настроим начисление как фиксированную сумму. В этом случае мы программно создаем объект, заполняем основные и служебные реквизиты и записываем документ.

Посмотрим на пример заполнения документа Разовое начисление:


ДокументОбъект = Документы.РазовоеНачисление.СоздатьДокумент();
ДокументОбъект.Дата = ТекущаяДатаСеанса();
ДокументОбъект.Организация = ВыбраннаяОрганизация;
ДокументОбъект.МесяцНачисления = НачалоМесяца(ДатаНачисления);
ДокументОбъект.Начисление = ВыбранныйВидНачисления;
ДокументОбъект.ДатаВыплаты = ДатаВыплатыДохода;

// Заполнение строки начисления
СтрокаНачисления = ДокументОбъект.Начисления.Добавить();
СтрокаНачисления.Сотрудник = ТекущийСотрудник;
СтрокаНачисления.Результат = ЗагружаемаяСумма;
СтрокаНачисления.ДатаНачала = НачалоМесяца(ДатаНачисления);
СтрокаНачисления.ДатаОкончания = КонецМесяца(ДатаНачисления);

// Заполнение служебных реквизитов графиков
ГрафикСотрудника = ТекущийСотрудник.ГрафикРаботы; // Получаем срез последних кадровых данных
СтрокаНачисления.ГрафикРаботы = ГрафикСотрудника;
СтрокаНачисления.ГрафикРаботыНорма = ГрафикСотрудника;
СтрокаНачисления.ОбщийГрафик = ГрафикСотрудника;

// Обязательное заполнение служебной таблицы физических лиц
СтрокаФизЛица = ДокументОбъект.ФизическиеЛица.Добавить();
СтрокаФизЛица.ФизическоеЛицо = ТекущийСотрудник.ФизическоеЛицо;

ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);

Способ 2. Создание внешней обработки заполнения табличной части

Наиболее надежный подход, рекомендуемый стандартами БСП, — разработка внешней обработки с назначением ЗаполнениеТабличнойЧасти. Пользователь интерактивно создает пустой документ, нажимает кнопку заполнения и выбирает внешний источник.

Преимущества данного метода:

  1. Обработка выполняется в контексте формы документа.
  2. Автоматически отрабатывают типовые клиентские события (ОбработкаВыбора, пересчет сумм, начисление НДФЛ, заполнение вычетов).
  3. Конфигурация остается полностью типовой и не требует доработок при обновлениях.

Способ 3. Вызов серверного расчета через Менеджер расчета зарплаты

Когда требуется полностью автоматическое создание документов в регламентных фоновых заданиях (где нет клиентского контекста формы), используем серверный расчетный механизм. В ЗУП 3.1 вся расчетная логика инкапсулирована в обработке МенеджерРасчетаЗарплаты и общих модулях РасчетЗарплатыРасширенный и УчетНДФЛ.

Разберем последовательность действий для полной программной сборки документа:

  1. Инициализируем объект документа и заполняем исходную таблицу сотрудников и сумм.
  2. Создаем экземпляр объекта Обработки.МенеджерРасчетаЗарплаты.Создать().
  3. Передаем сформированные таблицы в менеджер расчета для получения расчетных данных по налогам, взносам и вычетам.
  4. Заполняем рассчитанными структурами таблицы НДФЛ, ПримененныеВычетыНалогоплательщика и ФизическиеЛица.
  5. Записываем и проводим документ штатными методами без использования флага ОбменДанными.Загрузка = Истина.

Способ 4. Использование типового механизма «Данные для расчета зарплаты»

Если бизнес-процесс допускает расчет НДФЛ и окончательных начислений в общем документе Начисление зарплаты и взносов, оптимальным решением будет отказ от создания прямых расчетных документов в пользу ввода показателей.

Рассмотрим порядок настройки:

  1. В настройках расчета зарплаты создаем числовой показатель (например, СуммаРазовойПремии или СуммаМатпомощи).
  2. Создаем шаблон ввода исходных данных через Настройка — Шаблоны ввода исходных данных.
  3. Программно загружаем данные только в документ Данные для расчета зарплаты. Это простой учетный документ без сложных зависимостей по графикам и налогам.
  4. При итоговом расчете зарплаты за месяц система автоматически рассчитает суммы, вычеты и налоги по настроенным формулам.
← На главную