При автоматизации бизнес-процессов в 1С часто возникает задача программного создания документов. Однако разработчики нередко сталкиваются с ситуацией, когда документ (например, Счет на оплату или Реализация) успешно создается и записывается в базе, но совершенно игнорируется модулем 1С-ЭДО. Он не появляется в интерфейсе «Текущие дела ЭДО», для него не формируется статус, и отправить его контрагенту становится невозможно без ручного переоткрытия и пересохранения формы.
Особенно странно это выглядит, когда документы одного типа (например, Акты) подхватываются системой ЭДО без проблем, а другие (Счета) — игнорируются. Давайте подробно разберем, почему так происходит и как заставить программно созданные объекты корректно регистрироваться в системе электронного документооборота.
В типовых конфигурациях (БП 3.0, ERP, КА) интеграция с ЭДО реализована через подписки на события (например, ПриЗаписи или ОбработкаПроведения). Когда вы записываете документ из формы, эти события отрабатывают всегда. Однако при программном создании документа программисты часто совершают одну и ту же ошибку.
Проанализируем типичный код записи объекта:
НовыйДок = Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
// Заполнение реквизитов...
НовыйДок.ОбменДанными.Загрузка = Истина; // ВОТ ОШИБКА
НовыйДок.Записать(РежимЗаписиДокумента.Запись);
Использование свойства ОбменДанными.Загрузка = Истина — это первый момент, который мы должны проверить. Когда этот флаг установлен, платформа намеренно отключает выполнение большинства подписок на события, чтобы ускорить загрузку данных. В результате механизмы ЭДО просто «не видят», что был создан новый объект, требующий регистрации.
Решение: Никогда не используйте ОбменДанными.Загрузка = Истина при программном создании документов, которые должны уйти в ЭДО, если только вы не планируете вручную прописывать всю логику регистрации в регистрах сведений ЭДО.
Основным «двигателем» интерфейса ЭДО является регистр сведений СостоянияПоОбъектамУчетаЭДО. Если в этом регистре нет записи по вашему документу, то интерфейс «Текущие дела ЭДО» (или «Интерфейс документов ЭДО») о нем ничего не узнает. Рассмотрим ситуацию, когда документ записан правильно, но запись в регистре все равно не появилась.
Для документов типа Реализация товаров и услуг логика ЭДО часто завязана на проведение документа. Поскольку реализация — это первичный учетный документ, система автоматически инициирует создание записи ЭДО при его проведении. Счет на оплату во многих конфигурациях может не иметь режима проведения или записываться без него. Если механизм ЭДО в вашей версии конфигурации ожидает именно проведения для инициации статуса, программная «простая запись» счета не сработает.
Вместо того чтобы пытаться вручную заполнять сложные технические регистры (что чревато ошибками и потерей целостности данных), мы рекомендуем использовать встроенные методы типовых конфигураций. В современных версиях Библиотеки ЭДО за актуализацию состояний отвечают общие модули ИнтеграцияЭДО или ЭлектронныеДокументыЭДО.
Рассмотрим правильный алгоритм программного создания документа с последующей регистрацией в ЭДО:
// 1. Создаем и заполняем объект
НовыйДок = Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата();
НовыйДок.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "1234567890");
// ... заполнение остальных реквизитов ...
// 2. Обязательно записываем БЕЗ флага Загрузка
НовыйДок.Записать(РежимЗаписиДокумента.Запись);
// 3. Вызываем принудительное обновление состояния ЭДО
// В зависимости от версии конфигурации метод может находиться в разных модулях
Попытка
ИнтеграцияЭДО.ОбновитьСостояниеДокумента(НовыйДок.Ссылка);
Исключение
// Если метод не найден, попробуем альтернативный путь для более старых версий
ЭлектронныеДокументыЭДО.СформироватьДанныеДляЭДО(НовыйДок.Ссылка);
КонецПопытки;
Функция ИнтеграцияЭДО.ОбновитьСостояниеДокумента проанализирует метаданные документа, найдет настройки ЭДО для конкретного контрагента и создаст необходимую запись в регистре СостоянияПоОбъектамУчетаЭДО со статусом «Не начат». После этого счет мгновенно появится в списке исходящих документов ЭДО.
Если программный вызов обновления состояния не помогает, проанализируем настройки самой программы. Для «Актов» и «Реализаций» ЭДО часто включен по умолчанию как для обязательных документов. Для «Счетов на оплату» ситуация иная.
Посмотрим на настройки в режиме «1С:Предприятие»:
Если в настройках соглашения счет не выбран, никакие программные методы не заставят систему создать электронный документ, так как бизнес-логика программы считает, что по данному договору счета должны передаваться на бумаге.
Для того чтобы ваш программно созданный счет (или любой другой документ) корректно «подружился» с ЭДО, придерживайтесь следующих правил:
ОбменДанными.Загрузка = Истина — главный враг подписок на события ЭДО.Записать(), чтобы получить ссылку, затем — вызов процедур ЭДО.ИнтеграцияЭДО.ОбновитьСостояниеДокумента(Ссылка) — самый надежный способ, гарантирующий, что все служебные поля (Вид документа, Сумма, Валюта) в регистре ЭДО будут заполнены правильно.Организация, Контрагент и Договор, иначе система не сможет определить настройки обмена.Следуя этой методике, вы сможете автоматизировать массовое создание документов так, что пользователям останется только зайти в интерфейс ЭДО и нажать кнопку «Подписать и отправить».