Как настроить автоматическую установку склада в заказе клиента при обмене УТ 11 с Битрикс

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

При интеграции 1С:Управление торговлей 11 и 1С-Битрикс пользователи часто сталкиваются с ситуацией, когда в загруженных заказах поле Склад остается пустым или заполняется некорректно (например, проставляется группа складов вместо конкретного места отгрузки). Особенно остро эта проблема проявляется, если в настройках 1С включена опция «Отгрузка с нескольких складов». Разберем подробно, почему так происходит и как правильно настроить модуль обмена для автоматического заполнения этих данных.

Разбор архитектуры обмена и причины проблемы

Прежде чем переходить к настройкам, проанализируем, как модуль обмена (в частности, версии 7.x) обрабатывает данные о складах. В типовой конфигурации ЗаказКлиента имеет склад как в шапке документа, так и в табличной части Товары. Если в системе разрешена отгрузка с нескольких складов, то склад в шапке может выступать в роли «Группы складов», а в строках должны быть указаны конкретные физические склады.

Выделим основные причины, по которым автоматическая подстановка не срабатывает:

  1. Несоответствие XML_ID: Пожалуй, самая частая причина. 1С пытается найти склад, пришедший из Битрикса, по внутреннему идентификатору (Внешний код). Если на сайте ID склада — это просто число, а в 1С это GUID, сопоставление не произойдет.
  2. Приоритет заполнения из шапки: Модуль часто настроен так, что склад из шапки документа принудительно копируется во все строки табличной части, перетирая данные, пришедшие с сайта.
  3. Некорректный источник данных: В настройках модуля указано брать склад «Из XML», но структура файла с сайта может передавать склад в другом узле или свойстве заказа.

Решение 1: Сопоставление складов по Внешнему коду (XML_ID)

Рассмотрим самый простой способ без написания кода. Чтобы 1С «узнала» склад, приходящий из XML, необходимо синхронизировать их идентификаторы. Для этого выполним следующие шаги:

  1. Выясним, какой идентификатор склада передает Битрикс. Это можно сделать, открыв XML-файл обмена или посмотрев ID склада в административной панели сайта (раздел Магазин -> Склады).
  2. В 1С перейдем в справочник Склады.
  3. Откроем карточку нужного склада и найдем поле Внешний код (иногда оно вынесено в дополнительные сведения или доступно через меню «Еще» -> «Изменить состав дополнительных реквизитов»).
  4. Впишем в это поле идентификатор с сайта (например, «1» или «S1»).

Теперь при загрузке документа модуль успешно найдет объект в базе данных по соответствию кодов.

Решение 2: Тонкая настройка модуля обмена в параметрах объектов

Разберем, как настроить правила заполнения реквизитов в самом модуле обмена (версия 7.x и выше). Нам необходимо разделить логику заполнения для шапки и для товаров.

В настройках обмена документами переходим на вкладку Настройка параметров обмена, выбираем нужный тип документа и заходим в Настройку реквизитов:

  1. Для реквизита «Склад» в шапке: Установим значение «Фиксированное». Здесь можно выбрать Группа складов, если вы используете мультискладскую отгрузку. Это позволит документу быть валидным, но не будет жестко определять место хранения для каждой позиции.
  2. Для реквизита «Склад» в табличной части «Товары»: Здесь важно выбрать источник «Из XML». В этом случае модуль будет пытаться найти склад для каждой строки отдельно на основании данных из файла.

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

Решение 3: Использование произвольного алгоритма заполнения

Если стандартное сопоставление по XML_ID не подходит (например, идентификаторы постоянно меняются или их сложно синхронизировать), проанализируем возможность использования алгоритмов. В настройках реквизитов модуля можно выбрать источник «По алгоритму».

Посмотрим на пример логики, которую можно реализовать в поле алгоритма для склада табличной части:


// Пример логики для поиска склада по наименованию или свойству
НаименованиеСкладаССайта = СообщенияXML.ТекущееЗначение("СкладНаименование"); 
НайденныйСклад = Справочники.Склады.НайтиПоНаименованию(НаименованиеСкладаССайта);

Если Не НайденныйСклад.Пустая() Тогда
    Значение = НайденныйСклад;
Иначе
    // Установка склада по умолчанию, если поиск не дал результатов
    Значение = Справочники.Склады.НайтиПоКоду("000000001");
КонецЕсли;

Этот способ позволяет гибко обрабатывать входящие данные, например, искать склад не по GUID, а по части наименования или по какому-то пользовательскому свойству заказа, которое Битрикс передает в XML.

Решение 4: Настройка свойств заказа на стороне Битрикса

Иногда склад отгрузки в Битриксе хранится не в стандартном узле Склад, а в свойствах заказа (особенно при использовании различных кастомных модулей доставки). В таком случае в 1С в настройках реквизита склада нужно указать источник «Из свойств заказа» и прописать код свойства с сайта (например, STORES_ID).

Выясним, как это работает: модуль при загрузке обращается к коллекции свойств заказа, ищет там указанный код и по его значению пытается найти соответствующий склад в справочнике 1С. Это часто решает проблему «пустого склада», когда сайт просто не передает тег <Склад> в блоке товаров.

Рекомендации по проверке

После внесения изменений выполните следующие действия:

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

Используя комплексный подход — от синхронизации XML_ID до настройки правил в табличной части товаров — вы обеспечите корректное и автоматическое заполнение складов, что критически важно для дальнейшего резервирования и отгрузки товаров в 1С:УТ 11.

← На главную