Почему программно созданный счет на оплату не появляется в 1С-ЭДО и как это исправить?

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

При автоматизации бизнес-процессов в 1С часто возникает задача программного создания документов. Однако разработчики нередко сталкиваются с ситуацией, когда документ (например, Счет на оплату или Реализация) успешно создается и записывается в базе, но совершенно игнорируется модулем 1С-ЭДО. Он не появляется в интерфейсе «Текущие дела ЭДО», для него не формируется статус, и отправить его контрагенту становится невозможно без ручного переоткрытия и пересохранения формы.

Особенно странно это выглядит, когда документы одного типа (например, Акты) подхватываются системой ЭДО без проблем, а другие (Счета) — игнорируются. Давайте подробно разберем, почему так происходит и как заставить программно созданные объекты корректно регистрироваться в системе электронного документооборота.

Разберем причину: почему подписки на события не срабатывают?

В типовых конфигурациях (БП 3.0, ERP, КА) интеграция с ЭДО реализована через подписки на события (например, ПриЗаписи или ОбработкаПроведения). Когда вы записываете документ из формы, эти события отрабатывают всегда. Однако при программном создании документа программисты часто совершают одну и ту же ошибку.

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


НовыйДок = Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
// Заполнение реквизитов...
НовыйДок.ОбменДанными.Загрузка = Истина; // ВОТ ОШИБКА
НовыйДок.Записать(РежимЗаписиДокумента.Запись);

Использование свойства ОбменДанными.Загрузка = Истина — это первый момент, который мы должны проверить. Когда этот флаг установлен, платформа намеренно отключает выполнение большинства подписок на события, чтобы ускорить загрузку данных. В результате механизмы ЭДО просто «не видят», что был создан новый объект, требующий регистрации.

Решение: Никогда не используйте ОбменДанными.Загрузка = Истина при программном создании документов, которые должны уйти в ЭДО, если только вы не планируете вручную прописывать всю логику регистрации в регистрах сведений ЭДО.

Выясним роль регистра «Состояния по объектам учета ЭДО»

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

Для документов типа Реализация товаров и услуг логика ЭДО часто завязана на проведение документа. Поскольку реализация — это первичный учетный документ, система автоматически инициирует создание записи ЭДО при его проведении. Счет на оплату во многих конфигурациях может не иметь режима проведения или записываться без него. Если механизм ЭДО в вашей версии конфигурации ожидает именно проведения для инициации статуса, программная «простая запись» счета не сработает.

Использование программного API модуля ЭДО

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

Рассмотрим правильный алгоритм программного создания документа с последующей регистрацией в ЭДО:


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

// 2. Обязательно записываем БЕЗ флага Загрузка
НовыйДок.Записать(РежимЗаписиДокумента.Запись); 

// 3. Вызываем принудительное обновление состояния ЭДО
// В зависимости от версии конфигурации метод может находиться в разных модулях
Попытка
    ИнтеграцияЭДО.ОбновитьСостояниеДокумента(НовыйДок.Ссылка);
Исключение
    // Если метод не найден, попробуем альтернативный путь для более старых версий
    ЭлектронныеДокументыЭДО.СформироватьДанныеДляЭДО(НовыйДок.Ссылка);
КонецПопытки;

Функция ИнтеграцияЭДО.ОбновитьСостояниеДокумента проанализирует метаданные документа, найдет настройки ЭДО для конкретного контрагента и создаст необходимую запись в регистре СостоянияПоОбъектамУчетаЭДО со статусом «Не начат». После этого счет мгновенно появится в списке исходящих документов ЭДО.

Проверка настроек соглашения ЭДО

Если программный вызов обновления состояния не помогает, проанализируем настройки самой программы. Для «Актов» и «Реализаций» ЭДО часто включен по умолчанию как для обязательных документов. Для «Счетов на оплату» ситуация иная.

Посмотрим на настройки в режиме «1С:Предприятие»:

  1. Перейдем в раздел Администрирование — Обмен электронными документами — Настройки ЭДО.
  2. Найдем действующее соглашение с нужным контрагентом.
  3. Проверим таблицу Настройки отправки. В списке должен присутствовать тип документа «Счет на оплату» и у него должен стоять флаг активности.

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

Резюме и практические советы

Для того чтобы ваш программно созданный счет (или любой другой документ) корректно «подружился» с ЭДО, придерживайтесь следующих правил:

Следуя этой методике, вы сможете автоматизировать массовое создание документов так, что пользователям останется только зайти в интерфейс ЭДО и нажать кнопку «Подписать и отправить».

← На главную