При интеграции с маркетплейсами (в частности, Ozon) часто применяется схема передачи товаров с видом операции «Отгрузка без перехода права собственности». Нередко разработчики и бухгалтеры сталкиваются с ситуацией, когда документ создается программно через внешнюю обработку или модуль загрузки, но при открытии формы документа в табличной части отсутствуют колонки «Счет доходов» и «Счет расходов». При этом если вручную перевыбрать договор или номенклатуру, колонки моментально появляются и заполняются счетами плана счетов (например, 90.01.1 и 90.02.1).
Разберем подробно, почему возникает такая коллизия, как устроена внутренняя логика форм в 1С:Бухгалтерии 3.0 и какими способами можно гарантировать корректное заполнение и отображение счетов учета.
Проанализируем механику работы типовой конфигурации. В управляемом приложении 1С поведение формы и самого объекта базы данных разделено:
Товары срабатывают события формы (ПриСозданииНаСервере, ДоговорКонтрагентаПриИзменении, ТоварыНоменклатураПриИзменении). В этих процедурах система обращается к регистрам сведений («Счета учета номенклатуры», «Счета учета расчетов с контрагентами») и автоматически подставляет нужные счета.Документы.РеализацияТоваровУслуг.СоздатьДокумент()) события формы не вызываются. Если в коде загрузки явно не прописано заполнение счетов учета, соответствующие реквизиты строк табличной части остаются пустыми ссылками.ТоварыСчетДоходов, ТоварыСчетРасходов и ТоварыСчетУчетаНДСПоРеализации в форме настраивается в процедуре УстановитьУсловноеОформлениеТовары(). Условное оформление оценивает заполненность реквизитов и параметры договора. Когда счета в табличной части пусты или не пересчитаны условия отбора, колонки визуально скрываются. Перевыбор договора запускает серверный пересчет оформления, что создает иллюзию, будто «колонки появились только при смене договора».Несмотря на то, что операция отгрузки без перехода права собственности при проведении делает проводку по списанию себестоимости на 45 счет (Дт 45.01 Кт 41.01), реквизиты счетов 90-го порядка должны быть корректно записаны в табличной части, так как они понадобятся в дальнейшем при оформлении документа «Реализация отгруженных товаров».
Если загрузка выполняется через внешнюю обработку, расширение или доработанный модуль, наиболее надежный путь — передать типовому механизму признак необходимости автозаполнения счетов учета.
Посмотрим на пример кода, который активирует типовой механизм заполнения счетов при записи объекта:
// Устанавливаем признак для типовых подсистем БСП / Бухгалтерии
ДокОбъект.ДополнительныеСвойства.Вставить("ЗаполнитьСчетаУчетаПередЗаписью", Истина);
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
При наличии свойства ЗаполнитьСчетаУчетаПередЗаписью типовые обработчики подсистемы учета перед сохранением в базу данных самостоятельно заполнят все пустые счета учета, доходов и расходов на основании настроек регистра сведений «Счета учета номенклатуры».
Если необходимо заполнить счета непосредственно в процессе формирования табличной части до момента записи, вызовем экспортные процедуры общего модуля конфигурации.
Разберем по шагам правильную последовательность заполнения реквизитов:
Организация, Контрагент, ДоговорКонтрагента, Склад, а также ВидОперации (Перечисление.ВидыОперацийРеализацияТоваров.ОтгрузкаБезПереходаПраваСобственности).Товары (номенклатура, количество, цена, сумма, ставка НДС).
// Заполнение счетов учета для всей табличной части "Товары"
СчетаУчетаВДокументах.ЗаполнитьСчетаУчетаТабличнойЧасти(ДокОбъект, "Товары");
Этот метод последовательно анализирует каждую строку, обращается к регистру правил счетов учета номенклатуры и прописывает счета учета, счета доходов, расходов и НДС. После открытия такого документа условное оформление сразу отобразит все колонки, так как условия видимости будут полностью удовлетворены.
Если используется базовая версия программы, в которой конфигурация закрыта для редактирования, а внешние обработки по регламенту компании не используются, применим штатные инструменты платформы:
90.01.1), счет расходов (90.02.1), счет НДС (90.03), счет передачи (45.01).