В нашей компании примерно девять обращений в техподдержку из десяти так или иначе касаются ЭДО. Причём почти никогда это не поломка: пользователь не понимает, почему УПД висит «Ожидается подтверждение», подписал ли его покупатель и что значит ошибка 20025. Ответ на все эти вопросы уже лежит в базе, только разбросан по пяти регистрам, и открыть их из интерфейса обычный пользователь не может.
Ниже карта этих регистров для новой библиотеки БЭД (объекты с суффиксом «ЭДО»). Она одинаковая в УТ 11, КА 2, ERP, БП 3.0, УНФ 3.0 и отраслевых решениях на их основе, поэтому запросы из статьи переносятся между конфигурациями без правок.
Где что лежит

| Что нужно узнать | Объект метаданных |
|---|---|
| Сам электронный документ: номер, вид, контрагент, сумма, дата получения или отправки | Документ.ЭлектронныйДокументВходящийЭДО, Документ.ЭлектронныйДокументИсходящийЭДО |
| Текущее состояние и причина отклонения (её контрагент пишет в поле Комментарий) | РегистрСведений.СостоянияДокументовЭДО |
| Какой реализации или поступлению соответствует документ | РегистрСведений.ОбъектыУчетаДокументовЭДО, РегистрСведений.СостоянияПоОбъектамУчетаЭДО |
| Что не доделано по входящему: не создан учётный документ, не сопоставлена номенклатура, не проведено | РегистрСведений.КонтрольОтраженияВУчетеЭДО |
| Текст ошибки оператора с кодом | РегистрСведений.ОшибкиПередачиЭДО (связь по ИдентификаторДокументооборота) |
| Кто и когда подписал, отклонил, отправил | РегистрСведений.ЖурналДействийПоЭДО |
| Приглашения и подключённость контрагентов | РегистрСведений.ПриглашенияКОбменуЭлектроннымиДокументами, РегистрСведений.СостоянияКонтрагентовБЭД |
| Учётные записи и срок действия сертификатов | РегистрСведений.УчетныеЗаписиЭДО, РегистрСведений.СертификатыУчетныхЗаписейЭДО |
Проверить, что в базе именно новая библиотека, можно одной строкой: Метаданные.РегистрыСведений.Найти("СостоянияДокументовЭДО") <> Неопределено. В старых конфигурациях на обычных формах (УТ 10.3 и её ровесники) этих объектов нет, и всё описанное ниже к ним не относится.
Сводка за месяц одним запросом
Для вопроса «что у нас вообще с ЭДО» хватает двух выборок в одном пакете: сколько документов в каждом состоянии по организациям и когда по каждой организации последний раз что-то пришло или ушло.
ВЫБРАТЬ РАЗРЕШЕННЫЕ
"in" КАК Направление, Д.Организация КАК Организация, С.Состояние КАК Состояние,
КОЛИЧЕСТВО(*) КАК Количество, СУММА(Д.СуммаДокумента) КАК Сумма
ИЗ Документ.ЭлектронныйДокументВходящийЭДО КАК Д
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументовЭДО КАК С ПО С.ЭлектронныйДокумент = Д.Ссылка
ГДЕ НЕ Д.ПометкаУдаления И Д.Дата >= &НачалоПериода
СГРУППИРОВАТЬ ПО Д.Организация, С.Состояние
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"out", Д.Организация, С.Состояние, КОЛИЧЕСТВО(*), СУММА(Д.СуммаДокумента)
ИЗ Документ.ЭлектронныйДокументИсходящийЭДО КАК Д
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументовЭДО КАК С ПО С.ЭлектронныйДокумент = Д.Ссылка
ГДЕ НЕ Д.ПометкаУдаления И Д.Дата >= &НачалоПериода
СГРУППИРОВАТЬ ПО Д.Организация, С.Состояние
;
ВЫБРАТЬ РАЗРЕШЕННЫЕ "in" КАК Направление, Д.Организация КАК Организация, МАКСИМУМ(Д.Дата) КАК Последний
ИЗ Документ.ЭлектронныйДокументВходящийЭДО КАК Д
ГДЕ НЕ Д.ПометкаУдаления
СГРУППИРОВАТЬ ПО Д.Организация
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ "out", Д.Организация, МАКСИМУМ(Д.Дата)
ИЗ Документ.ЭлектронныйДокументИсходящийЭДО КАК Д
ГДЕ НЕ Д.ПометкаУдаления
СГРУППИРОВАТЬ ПО Д.Организация
Вторая выборка выглядит скучно, но именно она ловит самую неприятную проблему: документы перестали приходить, а никто не заметил. Если последняя дата входящего по организации отстаёт от сегодняшней на несколько дней, почти наверняка не работает автоматический обмен или истёк сертификат.
Двадцать пять состояний и восемь смыслов
В перечислении СостоянияДокументовЭДО около двадцати пяти рабочих значений, и пользователю они ничего не говорят. Зато по имени значения их легко разложить на группы, которые отвечают на единственный важный вопрос: кто сейчас должен что-то сделать.
Функция ГруппаСостоянияЭДО(ИмяСостояния)
Имя = ИмяСостояния;
Если Имя = "ОбменЗавершен" Или Имя = "ОбменЗавершенСИсправлением" Тогда
Возврат "Завершён";
ИначеЕсли СтрНайти(Имя, "Приглашени") > 0 Тогда
Возврат "Контрагент не подключён";
ИначеЕсли СтрНайти(Имя, "Аннулир") > 0 Тогда
Возврат "Аннулирование";
ИначеЕсли СтрНайти(Имя, "Ошибк") > 0 Или Имя = "НеПолучен" Тогда
Возврат "Ошибка передачи";
ИначеЕсли Имя = "ТребуетсяУточнение" Или Имя = "ЗакрытСОтклонением"
Или СтрНайти(Имя, "ОтказалВПодписи") > 0 Или СтрНайти(Имя, "ОтказаноВПодписи") > 0 Тогда
Возврат "Отклонён контрагентом";
ИначеЕсли СтрНачинаетсяС(Имя, "Требуется") Тогда
Возврат "Нужно наше действие";
ИначеЕсли СтрНачинаетсяС(Имя, "Ожидается") Тогда
Возврат "Ждём контрагента";
КонецЕсли;
Возврат "Прочее";
КонецФункции

Имя значения берётся через Метаданные.Перечисления.СостоянияДокументовЭДО.ЗначенияПеречисления. Сравнение по подстроке выбрано намеренно: между релизами БЭД значения добавляются и переименовываются, а корни «Требуется», «Ожидается» и «Ошибк» живут годами.
Причина отклонения и текст ошибки
Два самых частых вопроса пользователей: «почему покупатель отклонил» и «что за ошибка». На первый отвечает поле Комментарий в СостоянияДокументовЭДО, туда попадает текст, который контрагент написал при отказе. В наших базах чаще всего встречались «Товар не поступал к нам» и «дубль, отмените».
Со вторым чуть сложнее. Ошибки оператора лежат в отдельном регистре ОшибкиПередачиЭДО, и связываются они не по ссылке на документ, а по идентификатору документооборота. Сначала собираем идентификаторы нужных документов, потом дочитываем ошибки:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
О.ИдентификаторДокументооборота КАК Ид,
О.КодОшибки КАК Код,
О.ОписаниеОшибки КАК Текст
ИЗ РегистрСведений.ОшибкиПередачиЭДО КАК О
ГДЕ О.ИдентификаторДокументооборота В (&Ид)
Коды, которые попадались нам чаще других: 20020 означает, что документ подписан недействительным сертификатом, а 20025 бывает при загрузке в роуминг к другому оператору и обычно сопровождается подробностью вроде «не заполнено НаимТов, строки 6 и 7». Во втором случае проблема не в ЭДО, а в пустом наименовании товара в самом документе 1С.
Вот как это выглядит в чате агента, когда пользователь спрашивает про конкретный отказ:

Что нашлось в трёх рабочих базах
Мы прогнали эти запросы по трём базам одной компании: розница на УТ 11.5, её копия и сервисная база на Альфа-Авто. Задача была проверить запросы, но заодно они показали, где в каждой базе копится работа.
- В одной базе из 4 961 входящего документа за два месяца 4 957 стояли в состоянии «Требуется подписание». При этом последний документ пришёл за неделю до проверки: автоматическое получение в этой базе не было настроено..
- В рознице около 3 600 исходящих УПД ждали подтверждения покупателей. Часть из них висела больше месяца, и без выборки «ждём контрагента дольше N дней» их не видно.
- У одного из сертификатов до окончания оставалось два с половиной месяца. Сам по себе это не пожар, но такие вещи обычно обнаруживаются в день, когда документ уже не подписывается.
- В базе нашлись реализации подключённым к ЭДО покупателям, по которым УПД вообще не создавался. Это отдельная выборка: реализации за период, у которых в СостоянияПоОбъектамУчетаЭДО нет записи, а контрагент в СостоянияКонтрагентовБЭД подключён.
Ни один пункт не требует доработки 1С; нужен список, который пользователь увидит вовремя.
Как мы отдали это пользователям
Запросы полезны разработчику, но бухгалтер их запускать не станет. Поэтому все выборки из статьи мы завернули в инструменты для ИИ-агента, который работает внутри 1С как чат. Пользователь пишет «что у нас с ЭДО?», агент вызывает сводку, группирует состояния по смыслу, дочитывает ошибки и отвечает человеческим текстом с конкретными номерами документов и тем, что с каждым делать.

Инструментов пять: сводка по организациям, список документов с отбором по группе состояний, статус одного документа с историей действий, карточка контрагента с приглашениями и выборка реализаций без отправленного УПД. Любой список можно выгрузить в Excel. Всё работает только на чтение и с правами того пользователя, который спрашивает, так что при настроенных ограничениях по организациям бухгалтер филиала увидит только свою.
Если хотите попробовать на своей базе, расширение называется ИИ Агент в 1С, у него есть бесплатная демо-версия на три дня. А если нужен только запрос, берите его из статьи: он работает в любой конфигурации с новой БЭД.
Вступайте в нашу телеграмм-группу Инфостарт