Почему не загружаются заказы из Битрикс в 1С:УНФ и как восстановить потерянные данные?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

Интеграция 1С:Управление нашей фирмой (УНФ) и интернет-магазина на платформе 1С-Битрикс — стандартная задача для многих торговых компаний. Однако нередко возникает ситуация, когда часть заказов исправно попадает в учетную систему, а другая часть исчезает бесследно. При этом в 1С конфигурация не менялась, а на сайте заказы существуют.

В этой статье мы подробно разберем, почему может происходить выборочная потеря заказов, рассмотрим неочевидные причины, связанные с тестовыми базами, и научимся принудительно перевыгружать "потерянные" документы с сайта в 1С.

Диагностика проблемы: поиск "призрака"

Когда вы сталкиваетесь с ситуацией, что большинство заказов загружается, но некоторые отсутствуют, первым делом нужно понять механику обмена. Стандартный обмен по протоколу CommerceML работает следующим образом:

  1. 1С инициирует сеанс связи с сайтом.
  2. Сайт формирует XML-файл с изменениями, произошедшими с момента последней успешной выгрузки.
  3. 1С забирает файл, обрабатывает его и отправляет на сайт подтверждение успешной загрузки.
  4. Сайт, получив подтверждение, ставит у выгруженных заказов пометку (флаг или дату), чтобы не отправлять их повторно.

Самая распространенная причина пропажи заказов, которую мы детально проанализируем — это наличие **копии информационной базы (тестовой базы)**.

Часто для доработок или тестирования разворачивается копия рабочей базы. Если в этой копии не отключены регламентные задания или настройки обмена с сайтом, происходит следующее:

  1. Тестовая база запускает обмен по расписанию.
  2. Она "стучится" на сайт под видом боевой базы (настройки ведь скопированы).
  3. Сайт отдает ей пачку свежих заказов.
  4. Тестовая база сохраняет их у себя и сообщает сайту: "Я всё загрузила".
  5. Сайт помечает эти заказы как выгруженные.
  6. Через минуту запускается обмен в реальной рабочей базе. Она спрашивает сайт: "Есть что-то новое?".
  7. Сайт отвечает: "Нет, всё уже отдано" (так как он уже отдал данные тестовой базе).

В итоге заказы оказываются "размазаны" между рабочей и тестовой базами.

Почему блокировка регламентных заданий может не сработать?

Многие администраторы уверены, что если при запуске базы они видят сообщение о том, что это копия, или если они установили флаг Блокировка работы с внешними ресурсами, то база безопасна. Давайте разберем, почему это заблуждение.

В серверном варианте работы 1С действительно существует механизм блокировки регламентных заданий. Однако, как выяснилось в ходе анализа ситуации, обмен с сайтом может продолжать работать даже при наличии блокировок. Это происходит по нескольким причинам:

  1. Файловая база: Если копия развернута в файловом варианте, серверные блокировки регламентных заданий работают иначе или требуют явного подтверждения при первом запуске.
  2. Особенности модуля обмена Битрикс: Если используется внешний модуль обмена от Битрикс (а не типовой механизм платформы), он может использовать HTTP-методы, которые игнорируют глобальную настройку БлокировкаРаботыСВнешнимиРесурсами, особенно если обмен инициируется "по кнопке" или через специфические фоновые процессы.
  3. Инициатива со стороны сайта: В некоторых сценариях настройки (Real-time обмен) сайт сам может отправлять запросы в 1С. В этом случае блокировка исходящих соединений в 1С не поможет, так как соединение входящее.

Поэтому единственно надежный способ обезопасить рабочую базу от "воровства" заказов тестовой базой — это испортить настройки подключения в копии.

Сразу после развертывания тестовой базы выполните следующие действия:

  1. Перейдите в раздел настройки интеграции (обычно это Компания - Интеграция с др. системами - Обмен с сайтом).
  2. Откройте узел обмена.
  3. Удалите или измените пароль пользователя сайта.
  4. Измените адрес сайта на несуществующий (например, добавьте _test в конце URL).

Как восстановить потерянные заказы?

Допустим, мы нашли виновника — тестовую базу — и отключили её. Но заказы в рабочей базе так и не появились, потому что сайт считает их уже выгруженными. Рассмотрим методы, как заставить Битрикс отдать данные повторно.

Способ 1: Изменение заказа (точечно)

Если пропущено всего несколько заказов, самым простым способом будет "обмануть" систему отслеживания изменений.

Для этого:

  1. Зайдите в административную панель Битрикса.
  2. Откройте нужный заказ.
  3. В поле комментария менеджера или в любое другое незначительное поле добавьте пробел.
  4. Нажмите "Сохранить".

При сохранении обновится поле DATE_UPDATE заказа. При следующем сеансе обмена сайт увидит, что заказ изменился, и снова включит его в файл выгрузки.

Способ 2: Пакетное изменение (для группы заказов)

Если заказов много, заходить в каждый долго. Можно использовать список заказов в админке:

  1. В списке заказов отметьте галочками те, которые не попали в 1С.
  2. Внизу выберите действие "Редактировать".
  3. Не меняя никаких данных, просто нажмите кнопку "Сохранить" для всего списка.

Это также обновит метку времени изменения, и заказы уйдут в 1С.

Способ 3: Сброс даты последнего обмена (глобально)

Иногда нужно перегрузить вообще все заказы за определенный период. В теме упоминалось "удаление строчек", но более корректный способ — изменение настроек модуля интеграции на стороне сайта.

Разберем по шагам, где это находится:

  1. В админке Битрикса перейдите: Магазин — Настройки — Интеграция с 1С.
  2. Выберите профиль обмена (обычно "Обмен заказами").
  3. Найдите поле, отвечающее за время последнего обмена (может называться "Дата последней выгрузки" или храниться во внутренних параметрах модуля).
  4. Если интерфейс позволяет, измените эту дату на более раннюю (например, на неделю назад).

После этого при следующем запуске обмена сайт сформирует файл со всеми заказами, созданными или измененными начиная с этой даты.

Важное предостережение: При массовой повторной выгрузке обратите внимание на идентификаторы. Если вы уже создали какие-то заказы в 1С вручную, чтобы закрыть дыру, и теперь загружаете их с сайта, могут возникнуть дубли. Стандартный обмен ищет заказы по полю XML_ID (внешний код). У созданного вручную документа он будет отличаться от того, что придет с сайта.

Как найти и прочитать логи обмена?

Для того чтобы в будущем не гадать, почему не прошел обмен, полезно знать, где искать следы.

На стороне 1С

В настройках узла обмена с сайтом часто есть опция Записывать файлы обмена на диск или Режим отладки. Включите эту опцию и укажите каталог на диске. 1С будет сохранять туда входящие XML-файлы (обычно с именами вида orders-***.xml). Открыв такой файл в Блокноте, вы можете проверить, присутствует ли там физически нужный вам заказ.

На стороне сайта

В настройках модуля "Интеграция с 1С" также можно включить логирование. Файлы обмена обычно складываются в папку /upload/1c_exchange/. Анализ этих файлов позволяет точно определить: сайт не отдал заказ (проблема в настройках сайта/фильтрах) или сайт отдал, но 1С не загрузила (проблема в 1С).

Резюме

Если заказы пропадают выборочно:

  1. Срочно проверьте наличие тестовых баз и очистите в них пароли к сайту.
  2. Для перевыгрузки потерянных заказов измените их (добавьте пробел в комментарий) в админке сайта.
  3. Для массовой перевыгрузки используйте сброс даты последнего обмена в настройках интеграции на стороне Битрикса.
  4. Всегда контролируйте логи обмена при возникновении нестандартных ситуаций.
← На главную