Интеграция 1С:Управление нашей фирмой (УНФ) и интернет-магазина на платформе 1С-Битрикс — стандартная задача для многих торговых компаний. Однако нередко возникает ситуация, когда часть заказов исправно попадает в учетную систему, а другая часть исчезает бесследно. При этом в 1С конфигурация не менялась, а на сайте заказы существуют.
В этой статье мы подробно разберем, почему может происходить выборочная потеря заказов, рассмотрим неочевидные причины, связанные с тестовыми базами, и научимся принудительно перевыгружать "потерянные" документы с сайта в 1С.
Когда вы сталкиваетесь с ситуацией, что большинство заказов загружается, но некоторые отсутствуют, первым делом нужно понять механику обмена. Стандартный обмен по протоколу CommerceML работает следующим образом:
Самая распространенная причина пропажи заказов, которую мы детально проанализируем — это наличие **копии информационной базы (тестовой базы)**.
Часто для доработок или тестирования разворачивается копия рабочей базы. Если в этой копии не отключены регламентные задания или настройки обмена с сайтом, происходит следующее:
В итоге заказы оказываются "размазаны" между рабочей и тестовой базами.
Многие администраторы уверены, что если при запуске базы они видят сообщение о том, что это копия, или если они установили флаг Блокировка работы с внешними ресурсами, то база безопасна. Давайте разберем, почему это заблуждение.
В серверном варианте работы 1С действительно существует механизм блокировки регламентных заданий. Однако, как выяснилось в ходе анализа ситуации, обмен с сайтом может продолжать работать даже при наличии блокировок. Это происходит по нескольким причинам:
БлокировкаРаботыСВнешнимиРесурсами, особенно если обмен инициируется "по кнопке" или через специфические фоновые процессы.Поэтому единственно надежный способ обезопасить рабочую базу от "воровства" заказов тестовой базой — это испортить настройки подключения в копии.
Сразу после развертывания тестовой базы выполните следующие действия:
_test в конце URL).Допустим, мы нашли виновника — тестовую базу — и отключили её. Но заказы в рабочей базе так и не появились, потому что сайт считает их уже выгруженными. Рассмотрим методы, как заставить Битрикс отдать данные повторно.
Если пропущено всего несколько заказов, самым простым способом будет "обмануть" систему отслеживания изменений.
Для этого:
При сохранении обновится поле DATE_UPDATE заказа. При следующем сеансе обмена сайт увидит, что заказ изменился, и снова включит его в файл выгрузки.
Если заказов много, заходить в каждый долго. Можно использовать список заказов в админке:
Это также обновит метку времени изменения, и заказы уйдут в 1С.
Иногда нужно перегрузить вообще все заказы за определенный период. В теме упоминалось "удаление строчек", но более корректный способ — изменение настроек модуля интеграции на стороне сайта.
Разберем по шагам, где это находится:
После этого при следующем запуске обмена сайт сформирует файл со всеми заказами, созданными или измененными начиная с этой даты.
Важное предостережение: При массовой повторной выгрузке обратите внимание на идентификаторы. Если вы уже создали какие-то заказы в 1С вручную, чтобы закрыть дыру, и теперь загружаете их с сайта, могут возникнуть дубли. Стандартный обмен ищет заказы по полю XML_ID (внешний код). У созданного вручную документа он будет отличаться от того, что придет с сайта.
Для того чтобы в будущем не гадать, почему не прошел обмен, полезно знать, где искать следы.
В настройках узла обмена с сайтом часто есть опция Записывать файлы обмена на диск или Режим отладки. Включите эту опцию и укажите каталог на диске. 1С будет сохранять туда входящие XML-файлы (обычно с именами вида orders-***.xml). Открыв такой файл в Блокноте, вы можете проверить, присутствует ли там физически нужный вам заказ.
В настройках модуля "Интеграция с 1С" также можно включить логирование. Файлы обмена обычно складываются в папку /upload/1c_exchange/. Анализ этих файлов позволяет точно определить: сайт не отдал заказ (проблема в настройках сайта/фильтрах) или сайт отдал, но 1С не загрузила (проблема в 1С).
Если заказы пропадают выборочно: