Как сменить организацию-владельца XML-каталога при выгрузке на сайт из УТ 10.3?

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

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

Почему типовой обмен подставляет другую организацию?

Проанализируем архитектуру типового модуля обмена УТ 10.3 и требования стандарта выгрузки.

  1. Требования формата CommerceML 2: Формат электронного обмена, на котором базируется файл import.xml, использует жесткую XSD-схему. Согласно этой схеме, узел <Владелец> в каталоге товаров является строго обязательным.
  2. Справочник «Номенклатура» — общий: В архитектуре УТ 10.3 справочник товаров не подчинен конкретным организациям. Он единый для всей информационной базы. Разделение по организациям появляется только в регистрах учета (например, ТоварыОрганизаций) и в документах движения.
  3. Поведение типового модуля: В типовом модуле обмена нет механизма выбора организации-владельца. Чтобы сформировать валидный XML-файл, алгоритм просто выбирает первую найденную организацию из справочника (обычно по коду, например «000000000») и подставляет ее в узел владельца. Также для обмена остатками используется регистр ТоварыНаСкладах (или ТоварыВРознице), в котором измерение «Организация» вообще отсутствует.

Для большинства современных CMS (включая Битрикс) содержимое тега владельца носит исключительно информационный характер и никак не влияет на загрузку товарных позиций на сайт. То есть сайту все равно, какая организация указана владельцем файла.

Причины, по которым нужные товары не выгружаются

Если товары «Организации №2» вообще не попадают в файл выгрузки, причина кроется не в теге «Владелец». Посмотрим на основные факторы, блокирующие выгрузку:

  1. Ограничение прав доступа (RLS): Если регламентное задание или ручной запуск обмена выполняется под пользователем, у которого настроены ограничения на уровне записей (RLS) по организациям, система просто не сможет прочитать остатки и движения по «Организации №2». Следовательно, в выгрузку попадут только те данные, к которым у пользователя есть доступ.
  2. Отсутствие регистрации изменений: Механизм обмена основан на планах обмена. Система выгружает только те объекты (номенклатуру, цены, остатки), которые зарегистрированы как измененные для данного узла обмена. Если по нужным товарам давно не было приходов или изменения цен, они не попадут в выгрузку.

Посмотрим на фрагмент кода типовой процедуры регистрации изменений, где видно, что фильтрация по организации отсутствует (регистрируется либо сам объект, либо его владелец):


Процедура ЗарегистрироватьИзменения(Объект)
    Если Не ПараметрыСеанса.НаличиеОбменаССайтом Тогда
        Возврат;
    КонецЕсли;
    ТипОбъекта = ТипЗнч(Объект);
    
    Если ТипОбъекта = Тип("РегистрСведенийНаборЗаписей.ЗначенияСвойствОбъектов") Тогда
        МассивУзлов = ПолучитьМассивУзловДляРегистрации(Истина);
        Для каждого Запись Из Объект Цикл
            ТипДанных = ТипЗнч(Запись.Объект);
            Если ТипДанных = Тип("СправочникСсылка.Номенклатура") Тогда
                ПланыОбмена.ЗарегистрироватьИзменения(МассивУзлов, Запись.Объект);
            ИначеЕсли ТипДанных = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Тогда
                ПланыОбмена.ЗарегистрироватьИзменения(МассивУзлов, Запись.Объект.Владелец);
            КонецЕсли;
        КонецЦикла;
    // ... дальнейшая логика для регистров накопления и сведений
КонецПроцедуры

Как решить проблему выгрузки товаров конкретной организации?

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

Способ 1: Использование официального модуля от разработчика CMS (Рекомендуется)

Так как типовой обмен УТ 10.3 сильно ограничен, лучшим решением будет установить специализированный модуль обмена с сайтом (например, от 1С-Битрикс). В этих расширенных модулях реализован необходимый функционал:

Способ 2: Разделение через склады и типы цен (Косвенный метод)

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

  1. Выделим для «Организации №2» собственные склады (переместим туда остатки).
  2. Создадим для этой организации отдельные типы цен.
  3. В настройках узла типового веб-обмена настроим фильтрацию выгрузки: укажем в отборах только склады и типы цен, которые принадлежат второй организации.

Таким образом, в выгрузку попадут только те товары, у которых есть цены или остатки на выбранных складах.

Способ 3: Проверка прав доступа и принудительная регистрация

Для устранения проблем с RLS и регистрацией выполним следующие действия:

  1. Зайдем в настройки пользователя, под которым запускается обмен, и временно предоставим ему полные права или отключим ограничение по организациям (RLS). Сделаем тестовую выгрузку. Если товары появились — дело в правах.
  2. Откроем встроенную обработку «Регистрация изменений для обмена». Найдем наш узел обмена с сайтом.
  3. Очистим текущую регистрацию и вручную зарегистрируем к выгрузке нужные элементы справочника Номенклатура. Это заставит систему принудительно сформировать XML по выбранным товарам, даже если по ним не было недавних движений.

Подводя итоги: Владелец XML-каталога в типовой УТ 10.3 подставляется автоматически и на саму загрузку товаров на сайт не влияет. Если товары не выгружаются, необходимо проверять права пользователя, регистрацию изменений и настройки отборов. Для полноценной и гибкой выгрузки в разрезе организаций настоятельно рекомендуется использовать сторонние модули обмена.

← На главную