При настройке обмена данными между локальной конфигурацией «Управление торговлей» (УТ 11.5) и облачной «Бухгалтерией предприятия» (БП 3.0) специалисты часто сталкиваются с двумя критическими проблемами: бесконечным анализом данных на этапе сопоставления и программными ошибками в модулях обмена. Рассмотрим подробно, как диагностировать эти ситуации и какие шаги предпринять для успешного завершения синхронизации.
Когда обе базы (и УТ, и БП) уже наполнены данными (например, за полгода работы), стандартный механизм сопоставления может «зависать» на десятки часов. Проанализируем, почему это происходит. Система 1С использует универсальный формат EnterpriseData. Если базы велись независимо, внутренние идентификаторы объектов (GUID) в них не совпадают. В этом случае программа вынуждена выполнять поиск по полям (Наименование, Артикул, ИНН, КПП).
Представим ситуацию: у вас 20 000 позиций номенклатуры и 30 000 документов. При попытке интерактивного сопоставления система пытается построить дерево зависимостей и проверить каждое совпадение через веб-сервис. В условиях облачного обмена (через интернет-соединение) любая микро-задержка или ограничение ресурсов со стороны облачного провайдера (например, 1C:Fresh) приводит к тому, что процесс на стороне сервера прерывается, а локальный клиент продолжает бесконечно ждать ответа, отображая окно «Выполняется анализ полученных данных».
Разберем наиболее надежный метод решения этой проблемы, который позволяет избежать ограничений веб-сервисов и нестабильного интернет-соединения. Этот метод часто называют «спуском базы на землю».
WS (интернет-сервис) на FILE (обмен через сетевую папку).WS. Теперь обмен будет проходить мгновенно, так как система будет находить объекты по уже созданным уникальным идентификаторам.Иногда при попытке ручной отправки данных или выполнении интерактивного обмена возникает ошибка в общем модуле ОбменДаннымиСервер. Проанализируем техническую причину падения системы. Ошибка выглядит следующим образом: «Получение элемента по индексу для значения не определено» в контексте инициализации транспорта сообщений.
Выясним причину, изучив фрагмент кода функции ИмяОбработкиТранспортаСообщенийОбмена. В некоторых релизах конфигураций 1С разработчики забывают добавить обработку типа транспорта WS (веб-сервис) в коллекцию соответствий. Посмотрим на проблемный участок кода:
Функция ИмяОбработкиТранспортаСообщенийОбмена(ВидТранспорта)
ВидыТранспортаИОбработки = Новый Соответствие();
ВидыТранспортаИОбработки.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL, Метаданные.Обработки.ТранспортСообщенийОбменаEMAIL.Имя);
ВидыТранспортаИОбработки.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE, Метаданные.Обработки.ТранспортСообщенийОбменаFILE.Имя);
ВидыТранспортаИОбработки.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP, Метаданные.Обработки.ТранспортСообщенийОбменаFTP.Имя);
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда
ВидыТранспортаИОбработки.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема, "ТранспортСообщенийОбменаВнешняяСистема");
КонецЕсли;
Возврат ВидыТранспортаИОбработки.Получить(ВидТранспорта);
КонецФункции
Как мы видим, если в ВидТранспорта передается значение Перечисления.ВидыТранспортаСообщенийОбмена.WS, функция возвращает Неопределено. В результате следующая за ней процедура пытается создать обработку по пустому имени и вызывает исключение.
Чтобы не снимать конфигурацию с поддержки, рекомендуется использовать механизм расширений. Нам необходимо перехватить выполнение функции и добавить недостающий ключ. Рассмотрим пример кода для расширения:
&Вместо("ИмяОбработкиТранспортаСообщенийОбмена")
Функция Расш_ИмяОбработкиТранспортаСообщенийОбмена(ВидТранспорта)
Результат = ПродолжитьВызов(ВидТранспорта);
Если Результат = Неопределено И ВидТранспорта = ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.WS") Тогда
Возврат "ТранспортСообщенийОбменаWS";
КонецЕсли;
Возврат Результат;
КонецФункции
Важный момент: Перед внесением правок убедитесь, что в метаданных вашей конфигурации присутствует обработка с именем ТранспортСообщенийОбменаWS. В актуальных версиях БСП она является стандартной для облачных обменов.
Разберем еще несколько нюансов, которые помогут ускорить процесс обмена:
Подводя итог, можно сказать, что решение проблемы долгой синхронизации кроется в декомпозиции задачи: сначала решаем программные ошибки в коде (добавляем поддержку WS транспорта), а затем оптимизируем процесс передачи данных, временно переходя на локальный формат обмена для сопоставления тяжелых справочников.