Бесшовная интеграция между 1С:ERP Управление предприятием и 1С:Документооборот (ДО) — это мощный механизм, который позволяет пользователям работать в интерфейсе одной системы, автоматически создавая и обновляя объекты в другой. Однако на практике администраторы и разработчики часто сталкиваются с ситуацией, когда обмен «зависает», а регистры сведений переполняются сообщениями с тысячами попыток отправки. Разберем подробно, почему это происходит и как исправить возникающие ошибки.
Для начала проанализируем ситуацию, когда в регистре сведений Очередь сообщений в 1С Документооборот скапливается огромное количество записей. Этот регистр предназначен для асинхронного обмена данными. Когда в ERP происходит событие, требующее передачи данных в ДО (например, изменение реквизитов интегрированного документа), система не всегда пытается выполнить запись немедленно в транзакции. Вместо этого формируется сообщение XDTO, которое помещается в очередь.
Рассмотрим причины, по которым сообщения могут годами висеть в очереди:
Обработка очереди сообщений. Если оно выключено или завершается с системной ошибкой, очередь будет расти бесконечно.Проанализируем ситуацию с количеством попыток более 1000. Это явный сигнал того, что сообщение корректно доставлено в базу ДО, но внутренняя бизнес-логика ДО отвергает его. Оставлять такие записи «как есть» нельзя — их нужно либо исправлять, либо очищать, предварительно выяснив причину отказа.
Часто при интеграции возникает специфическая ошибка: В строке 0 для стороны "" не указан подписант. Самое интересное здесь то, что ошибка может появляться даже в том случае, если в настройках вида документа в ДО флаг Вести учет сторон снят.
Выясним причину, обратившись к коду модуля ОбработкаЗапросовXDTO в конфигурации «Документооборот». Проверка часто выглядит следующим образом:
Если ВестиУчетСторон Тогда
Для Каждого Строка Из Объект.Стороны Цикл
Если Строка.Подписан И Не ЗначениеЗаполнено(Строка.Подписал) Тогда
Если ЗначениеЗаполнено(Строка.Сторона) И ТипЗнч(Строка.Сторона) = Тип("СправочникСсылка.Контрагенты")
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Строка.Сторона, "ЮрФизЛицо") = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
Продолжить;
Иначе
НомерСтроки = Объект.Стороны.Индекс(Строка);
ТекстСообщения = ТекстСообщения
+ СтрШаблон(НСтр("ru = 'В строке %1 для стороны ""%2"" не указан подписант'"), НомерСтроки, Строка.Сторона)
+ Символы.ПС;
ЕстьОшибки = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Почему же проверка срабатывает, если учет сторон выключен? Рассмотрим по шагам возможные варианты:
Стороны, то при создании документа через интеграцию система начинает проверять заполнение этой строки, игнорируя общие настройки вида документа.ВестиУчетСторон инициализируется некорректно при вызове через веб-сервис.Поскольку ошибка возникает внутри кода веб-сервиса, обычная отладка через запуск предприятия не поможет. Разберем алгоритм подключения отладчика к процессу интеграции:
Во-первых, необходимо убедиться, что сервер «1С:Предприятия» запущен в режиме отладки (параметр -debug для сервера на Windows или соответствующая настройка в conf.cfg). Далее выполним следующие действия:
Web-сервисы.ОбработкаЗапросовXDTO или в модуле менеджера соответствующего документа установим точку останова.Важный нюанс: Веб-сервисы обычно работают под специально выделенным пользователем. Убедитесь, что вы ищете сеанс именно этого пользователя в списке доступных для подключения.
Многие специалисты рекомендуют использовать Apache для публикации веб-сервисов 1С, так как он проще в настройке «из коробки». Однако, если вы используете IIS (Internet Information Services), следует обратить внимание на критические параметры, влияющие на бесшовную интеграцию.
Рассмотрим основные настройки IIS, которые помогут избежать обрывов соединения:
AlwaysRunning. Это исключит задержки при «холодном» старте первого обращения к интеграции после простоя.Проанализируем также рекомендацию по увеличению максимального размера сообщения в самой 1С. В настройках интеграции в ERP можно ограничить размер передаваемого блока данных. Если сообщения слишком большие, попробуйте дробить их, хотя это требует доработки механизмов обмена на уровне кода.
Если вы обнаружили в регистре Очередь сообщений старые записи (за прошлые месяцы) с количеством попыток 1000+, их можно считать «мусорными». Рассмотрим план действий:
РегистрСведений.ОчередьСообщенийВ1СДокументооборот по фильтру даты или количества попыток.Таким образом, стабильная работа бесшовной интеграции зависит не только от корректности кода, но и от настройки инфраструктуры (веб-сервера) и регулярного мониторинга очереди сообщений в базе Документооборота.