Как решить проблемы с очередью сообщений и ошибками заполнения сторон при интеграции 1С:ERP и 1С:Документооборот?

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

Бесшовная интеграция между 1С:ERP Управление предприятием и 1С:Документооборот (ДО) — это мощный механизм, который позволяет пользователям работать в интерфейсе одной системы, автоматически создавая и обновляя объекты в другой. Однако на практике администраторы и разработчики часто сталкиваются с ситуацией, когда обмен «зависает», а регистры сведений переполняются сообщениями с тысячами попыток отправки. Разберем подробно, почему это происходит и как исправить возникающие ошибки.

Механизм работы очереди сообщений в 1С:Документооборот

Для начала проанализируем ситуацию, когда в регистре сведений Очередь сообщений в 1С Документооборот скапливается огромное количество записей. Этот регистр предназначен для асинхронного обмена данными. Когда в ERP происходит событие, требующее передачи данных в ДО (например, изменение реквизитов интегрированного документа), система не всегда пытается выполнить запись немедленно в транзакции. Вместо этого формируется сообщение XDTO, которое помещается в очередь.

Рассмотрим причины, по которым сообщения могут годами висеть в очереди:

Проанализируем ситуацию с количеством попыток более 1000. Это явный сигнал того, что сообщение корректно доставлено в базу ДО, но внутренняя бизнес-логика ДО отвергает его. Оставлять такие записи «как есть» нельзя — их нужно либо исправлять, либо очищать, предварительно выяснив причину отказа.

Решение ошибки: В строке 0 для стороны не указан подписант

Часто при интеграции возникает специфическая ошибка: В строке 0 для стороны "" не указан подписант. Самое интересное здесь то, что ошибка может появляться даже в том случае, если в настройках вида документа в ДО флаг Вести учет сторон снят.

Выясним причину, обратившись к коду модуля ОбработкаЗапросовXDTO в конфигурации «Документооборот». Проверка часто выглядит следующим образом:


Если ВестиУчетСторон Тогда
    Для Каждого Строка Из Объект.Стороны Цикл
        Если Строка.Подписан И Не ЗначениеЗаполнено(Строка.Подписал) Тогда
            Если ЗначениеЗаполнено(Строка.Сторона) И ТипЗнч(Строка.Сторона) = Тип("СправочникСсылка.Контрагенты")
                И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Строка.Сторона, "ЮрФизЛицо") = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
                Продолжить;
            Иначе
                НомерСтроки = Объект.Стороны.Индекс(Строка);
                ТекстСообщения = ТекстСообщения 
                    + СтрШаблон(НСтр("ru = 'В строке %1 для стороны ""%2"" не указан подписант'"), НомерСтроки, Строка.Сторона)
                    + Символы.ПС;
                ЕстьОшибки = Истина;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
КонецЕсли;

Почему же проверка срабатывает, если учет сторон выключен? Рассмотрим по шагам возможные варианты:

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

Как отладить веб-сервис бесшовной интеграции

Поскольку ошибка возникает внутри кода веб-сервиса, обычная отладка через запуск предприятия не поможет. Разберем алгоритм подключения отладчика к процессу интеграции:

Во-первых, необходимо убедиться, что сервер «1С:Предприятия» запущен в режиме отладки (параметр -debug для сервера на Windows или соответствующая настройка в conf.cfg). Далее выполним следующие действия:

  1. Откроем конфигуратор базы 1С:Документооборот.
  2. Перейдем в меню Отладка -> Подключение.
  3. В появившемся окне нажмем кнопку Автоматическое подключение и установим флажок Web-сервисы.
  4. После этого в модуле ОбработкаЗапросовXDTO или в модуле менеджера соответствующего документа установим точку останова.
  5. В базе ERP инициируем действие, вызывающее обмен (например, нажмем кнопку «Записать» в документе).

Важный нюанс: Веб-сервисы обычно работают под специально выделенным пользователем. Убедитесь, что вы ищете сеанс именно этого пользователя в списке доступных для подключения.

Настройка веб-сервера: IIS против Apache

Многие специалисты рекомендуют использовать Apache для публикации веб-сервисов 1С, так как он проще в настройке «из коробки». Однако, если вы используете IIS (Internet Information Services), следует обратить внимание на критические параметры, влияющие на бесшовную интеграцию.

Рассмотрим основные настройки IIS, которые помогут избежать обрывов соединения:

Проанализируем также рекомендацию по увеличению максимального размера сообщения в самой 1С. В настройках интеграции в ERP можно ограничить размер передаваемого блока данных. Если сообщения слишком большие, попробуйте дробить их, хотя это требует доработки механизмов обмена на уровне кода.

Практические рекомендации по очистке очереди

Если вы обнаружили в регистре Очередь сообщений старые записи (за прошлые месяцы) с количеством попыток 1000+, их можно считать «мусорными». Рассмотрим план действий:

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

Таким образом, стабильная работа бесшовной интеграции зависит не только от корректности кода, но и от настройки инфраструктуры (веб-сервера) и регулярного мониторинга очереди сообщений в базе Документооборота.

← На главную