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

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

Программное создание документов выплаты в конфигурации 1С:Зарплата и управление персоналом 3.1 является одной из классических задач при автоматизации обмена данными или создании кастомных рабочих мест. Однако разработчики часто сталкиваются с проблемой: документ создается, проводится, но при открытии формы суммы «К выплате» оказываются нулевыми, хотя в отладчике данные присутствуют. В этой статье мы подробно разберем, как устроена архитектура ведомостей и как избежать типичных ошибок при их заполнении.

Архитектура табличных частей ведомости

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

Рассмотрим основные табличные части:

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

Критически важный момент: все эти таблицы связываются между собой не по номеру строки, а через специальный реквизит ИдентификаторСтроки, имеющий тип УникальныйИдентификатор.

Разбор типичной ошибки: Сотрудник или Физическое лицо?

Выясним причину, по которой суммы могут «обнуляться» при открытии документа. В ЗУП 3.1 разделяются понятия «Сотрудник» (ссылка на справочник Сотрудники) и «Физическое лицо» (ссылка на справочник ФизическиеЛица). Это сделано потому, что одно физлицо может работать на нескольких должностях (внутреннее совместительство).

Проанализируем ситуацию: если в поле, предназначенное для ФизическоеЛицо, программно подставить ссылку на Сотрудник, платформа может не выдать ошибку типа немедленно. Однако при открытии формы или выполнении стандартных процедур пересчета система увидит несоответствие типов или пустое значение, что приведет к очистке зависимых полей и обнулению суммы в интерфейсе. Именно это часто становится «невидимой» причиной проблем при программном создании документа.

Пошаговый алгоритм программного создания документа

Рассмотрим правильный порядок действий при написании кода. Нам необходимо сначала создать объект документа, заполнить его шапку, а затем последовательно наполнить табличные части, генерируя и транслируя уникальные идентификаторы.

Разберем пример кода для заполнения основных таблиц:


// Создаем новый документ
НоваяВедомость = Документы.ВедомостьНаВыплатуЗарплатыВКассу.СоздатьДокумент();
НоваяВедомость.Дата = ТекущаяДата();
НоваяВедомость.ПериодРегистрации = НачалоМесяца(ТекущаяДата());
НоваяВедомость.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7700000000");
НоваяВедомость.Касса = Справочники.Кассы.Выбрать().Следующий(); // Для примера
НоваяВедомость.СпособВыплаты = Перечисления.СпособыВыплатыЗарплаты.Зарплата;

// Предположим, у нас есть выборка данных для заполнения
Для Каждого СтрокаДанных Из ТаблицаДанных Цикл

    // 1. Заполняем ТЧ "Состав"
    НоваяСтрокаСостав = НоваяВедомость.Состав.Добавить();
    НоваяСтрокаСостав.ФизическоеЛицо = СтрокаДанных.ФизическоеЛицо; // Важно: тип СправочникСсылка.ФизическиеЛица
    
    // Генерируем уникальный идентификатор для связи
    УникальныйИд = Новый УникальныйИдентификатор;
    НоваяСтрокаСостав.ИдентификаторСтроки = УникальныйИд;

    // 2. Заполняем ТЧ "Зарплата"
    НоваяСтрокаЗарплата = НоваяВедомость.Зарплата.Добавить();
    НоваяСтрокаЗарплата.ИдентификаторСтроки = УникальныйИд; // Связываем с ТЧ Состав
    НоваяСтрокаЗарплата.Сотрудник = СтрокаДанных.Сотрудник;
    НоваяСтрокаЗарплата.ФизическоеЛицо = СтрокаДанных.ФизическоеЛицо;
    НоваяСтрокаЗарплата.Подразделение = СтрокаДанных.Подразделение;
    НоваяСтрокаЗарплата.ПериодВзаиморасчетов = НоваяВедомость.ПериодРегистрации;
    НоваяСтрокаЗарплата.СтатьяФинансирования = СтрокаДанных.СтатьяФинансирования;
    НоваяСтрокаЗарплата.СтатьяРасходов = СтрокаДанных.СтатьяРасходов;
    НоваяСтрокаЗарплата.КВыплате = СтрокаДанных.Сумма;
    
    // С 2020 года обязательно заполнение вида дохода для исполнительного производства
    НоваяСтрокаЗарплата.ВидДоходаИсполнительногоПроизводства = Перечисления.ВидыДоходовИсполнительногоПроизводства.ДоходыБезОграниченияВзыскания;

    // 3. Заполняем ТЧ "НДФЛ" (если налог удерживается ведомостью)
    НоваяСтрокаНДФЛ = НоваяВедомость.НДФЛ.Добавить();
    НоваяСтрокаНДФЛ.ИдентификаторСтроки = УникальныйИд; // Снова связываем по тому же ID
    НоваяСтрокаНДФЛ.Физлицо = СтрокаДанных.ФизическоеЛицо;
    НоваяСтрокаНДФЛ.Налог = СтрокаДанных.СуммаНДФЛ;
    // ... заполнение остальных реквизитов НДФЛ (организация, ставка и т.д.)

КонецЦикла;

НоваяВедомость.Записать(РежимЗаписиДокумента.Запись);

Важные реквизиты и «подводные камни»

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

Использование типовых механизмов заполнения

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

Посмотрим на преимущества использования типового механизма:

  1. Автоматический расчет: Система сама определит, сколько осталось выплатить сотруднику с учетом ранее выплаченных авансов.
  2. Корректный НДФЛ: Программа рассчитает налог к удержанию согласно законодательству на дату выплаты.
  3. Гарантия связей: Типовой код гарантированно проставит все ИдентификаторСтроки и заполнит служебные таблицы.

Однако, если ваша задача — загрузка данных из внешней системы (где суммы уже определены), ручное заполнение по алгоритму, описанному выше, остается единственным верным путем. Главное — помнить про связку через Уникальный Идентификатор и строгое соответствие справочников Сотрудники и Физические лица.

← На главную