Синхронизация данных между 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 — это стандартная процедура, которая, однако, может преподнести неприятные сюрпризы. Одной из наиболее труднодиагностируемых проблем является возникновение «Неизвестной ошибки» на этапе первоначального сопоставления данных. Чаще всего это происходит при использовании метода прямого подключения (COM-соединение).
В этой статье мы подробно разберем, почему возникает сбой в методе ПоместитьСообщениеДляСопоставленияДанных, проанализируем возможные причины и рассмотрим пошаговый алгоритм решения проблемы.
При использовании прямого подключения конфигурации обмениваются данными в оперативной памяти через COM-соединитель. Метод ПоместитьСообщениеДляСопоставленияДанных отвечает за передачу сформированного XML-пакета из базы-источника в базу-приемник для дальнейшего анализа. Если в процессе формирования или передачи этого пакета происходит программный сбой, 1С выдает лаконичное сообщение: «Неизвестная ошибка».
Рассмотрим основные факторы, провоцирующие этот затык:
Самая частая причина «падения» XML-сериализации — это наличие символов, которые не входят в стандарт Unicode, разрешенный для XML. Они могут попасть в базу при копировании текста из веб-браузеров или внешних документов (PDF, Excel). Проанализируем ситуацию: если в XML попадает символ с кодом менее 0x20 (кроме табуляции и перевода строки), парсер базы-приемника выдаст ошибку.
Для поиска таких символов в объектах, зарегистрированных к обмену, мы можем использовать встроенную функцию платформы НайтиНедопустимыеСимволыXML(). Выясним, в каких именно данных кроется проблема, с помощью небольшой обработки:
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
РезультатПроверки = НайтиНедопустимыеСимволыXML(Выборка.Наименование);
Если РезультатПроверки <> 0 Тогда
Сообщить("В справочнике Номенклатура найден плохой символ в объекте: " + Выборка.Ссылка);
КонецЕсли;
КонецЦикла;
Рекомендуется выполнить аналогичную проверку для всех основных справочников: Контрагенты, Партнеры, ДоговорыКонтрагентов и Организации. После нахождения объекта достаточно перезаписать его, предварительно очистив реквизит от странных символов.
Если данных для первоначального сопоставления слишком много, COM-соединение может просто «захлебнуться». Разберем, как локализовать ошибку путем уменьшения объема передаваемой информации. Воспользуемся стандартной обработкой «Регистрация изменений для обмена данными».
Выполним следующие шаги:
Организации и Склады. Снова запустим обмен.Контрагентов, затем Номенклатуру.На том этапе, где «Неизвестная ошибка» появится снова, мы поймем, в каком именно справочнике сидит проблемный объект. Это значительно сужает область поиска.
Проанализируем техническую сторону вопроса. При прямом подключении база УТ обращается к библиотеке comcntr.dll. Если на сервере установлено несколько версий платформы, может возникнуть конфликт версий.
Выполним регистрацию библиотеки вручную:
regsvr32 "C:\Program Files\1cv8\8.3.15.1656\bin\comcntr.dll"
Также проверим права доступа пользователя, под которым запущена служба 1C:Enterprise Server Agent. У него должны быть полные права на папку C:\Windows\Temp, так как именно там формируются временные файлы при обмене через COM.
Если ни очистка данных, ни перерегистрация компоненты не помогают, рассмотрим наиболее надежный способ обхода «Неизвестной ошибки». Прямое соединение (COM) крайне чувствительно к стабильности сессии и объему памяти. Синхронизация через общий сетевой ресурс (папку) лишена этих недостатков.
Рассмотрим порядок перехода:
При таком подходе данные сериализуются в XML-файл на диске, а база-приемник считывает их порциями. Это исключает падение процесса из-за нехватки оперативной памяти в COM-объекте и позволяет более наглядно увидеть ошибку XML-парсера, если она все же возникнет (указание конкретной строки и позиции символа).
Выясним еще несколько важных нюансов, которые могут помочь:
ТиИ в обеих базах с включенной проверкой логической и ссылочной целостности.Таким образом, последовательно исключая проблемы в данных и в программной среде, мы сможем успешно настроить обмен между УТ 11 и БП 3.0 даже при возникновении критических ошибок на старте.