Почему при загрузке реализации в 1С:Бухгалтерии не отображаются и не заполняются счета доходов и расходов?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет Торговля и дистрибуция
← На главную

При интеграции с маркетплейсами (в частности, Ozon) часто применяется схема передачи товаров с видом операции «Отгрузка без перехода права собственности». Нередко разработчики и бухгалтеры сталкиваются с ситуацией, когда документ создается программно через внешнюю обработку или модуль загрузки, но при открытии формы документа в табличной части отсутствуют колонки «Счет доходов» и «Счет расходов». При этом если вручную перевыбрать договор или номенклатуру, колонки моментально появляются и заполняются счетами плана счетов (например, 90.01.1 и 90.02.1).

Разберем подробно, почему возникает такая коллизия, как устроена внутренняя логика форм в 1С:Бухгалтерии 3.0 и какими способами можно гарантировать корректное заполнение и отображение счетов учета.

Анализ проблемы: логика формы против объектной модели

Проанализируем механику работы типовой конфигурации. В управляемом приложении 1С поведение формы и самого объекта базы данных разделено:

  1. Интерактивная работа пользователя: когда документ создается вручную через интерфейс, при выборе контрагента, договора и добавлении строк в табличную часть Товары срабатывают события формы (ПриСозданииНаСервере, ДоговорКонтрагентаПриИзменении, ТоварыНоменклатураПриИзменении). В этих процедурах система обращается к регистрам сведений («Счета учета номенклатуры», «Счета учета расчетов с контрагентами») и автоматически подставляет нужные счета.
  2. Программное создание через загрузчик: при создании объекта кодом (например, Документы.РеализацияТоваровУслуг.СоздатьДокумент()) события формы не вызываются. Если в коде загрузки явно не прописано заполнение счетов учета, соответствующие реквизиты строк табличной части остаются пустыми ссылками.
  3. Динамическое условное оформление: видимость и доступность колонок ТоварыСчетДоходов, ТоварыСчетРасходов и ТоварыСчетУчетаНДСПоРеализации в форме настраивается в процедуре УстановитьУсловноеОформлениеТовары(). Условное оформление оценивает заполненность реквизитов и параметры договора. Когда счета в табличной части пусты или не пересчитаны условия отбора, колонки визуально скрываются. Перевыбор договора запускает серверный пересчет оформления, что создает иллюзию, будто «колонки появились только при смене договора».

Несмотря на то, что операция отгрузки без перехода права собственности при проведении делает проводку по списанию себестоимости на 45 счет (Дт 45.01 Кт 41.01), реквизиты счетов 90-го порядка должны быть корректно записаны в табличной части, так как они понадобятся в дальнейшем при оформлении документа «Реализация отгруженных товаров».

Способ 1. Программное заполнение счетов перед записью документа

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

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


// Устанавливаем признак для типовых подсистем БСП / Бухгалтерии
ДокОбъект.ДополнительныеСвойства.Вставить("ЗаполнитьСчетаУчетаПередЗаписью", Истина);
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);

При наличии свойства ЗаполнитьСчетаУчетаПередЗаписью типовые обработчики подсистемы учета перед сохранением в базу данных самостоятельно заполнят все пустые счета учета, доходов и расходов на основании настроек регистра сведений «Счета учета номенклатуры».

Способ 2. Явный вызов методов подсистемы «Счета учета в документах»

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

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

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

// Заполнение счетов учета для всей табличной части "Товары"
СчетаУчетаВДокументах.ЗаполнитьСчетаУчетаТабличнойЧасти(ДокОбъект, "Товары");

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

Способ 3. Решение для базовых версий и типовых загрузчиков без изменения кода

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

  1. Проверка персональных настроек: перейдем в раздел Главное → Персональные настройки и проверим, включен ли флаг «Показывать счета учета в документах». Если флаг снят, счета учета скрыты глобально для текущего пользователя.
  2. Проверка регистра «Счета учета номенклатуры»: убедимся, что для организации, номенклатурных групп или конкретных позиций заданы правила подстановки: счет доходов (90.01.1), счет расходов (90.02.1), счет НДС (90.03), счет передачи (45.01).
  3. Групповая обработка документов: если документы уже загружены с пустыми счетами, воспользуемся инструментом «Групповое изменение реквизитов» (раздел Администрирование → Обслуживание → Корректировка данных). Выберем документы реализации с видом операции «Отгрузка без перехода права собственности», в дополнительных настройках включим запись с вызовом обработчиков событий и выполним перезапись. Это инициирует типовой алгоритм пересчета счетов без ручного открытия каждого документа.
← На главную