Как настроить корректную выгрузку подарков с нулевой ценой из 1С-Битрикс в 1С:Управление торговлей 11.3?

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

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

Рассмотрим подробно причины такого поведения системы и разберем несколько эффективных способов решения проблемы: от простых настроек модуля до глубокой отладки кода.

Метод 1. Программная отладка процесса загрузки

Если типовые настройки не помогают, первым делом проанализируем, как именно 1С интерпретирует данные, приходящие из XML-файла сайта. Для этого нам потребуется режим конфигуратора и запуск сеанса отладки.

Разберем по шагам процесс поиска проблемного участка:

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

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


// Пример логики в процедуре заполнения строки
Если ДанныеСайта.Цена = 0 Тогда
    СтрокаТовара.Цена = 0;
    СтрокаТовара.СпособУстановкиЦены = Перечисления.СпособыУстановкиЦен.Вручную;
КонецЕсли;

Метод 2. Настройка приоритета цен в модуле обмена

Прежде чем приступать к изменению кода, проверим настройки самого модуля интеграции "Битрикс", установленного в 1С. В современных версиях модуля (особенно 7.x и выше) предусмотрены механизмы, предотвращающие пересчет цен силами 1С.

Проанализируем вкладку настроек "Заказы" в узле обмена:

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

Метод 3. Способ отображения скидок

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

Существует три основных режима:

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

Метод 4. Проверка прав пользователя и минимальных цен

Иногда причина кроется не в модуле обмена, а в настройках безопасности 1С:УТ 11.3. В программе может быть включен контроль минимальных цен продажи. Если для товара установлена минимальная цена (например, 100 рублей), то система просто не позволит записать в документ цену 0 рублей, автоматически заменяя её на минимально допустимую.

Для решения этой ситуации проанализируем следующие моменты:

  1. Под каким пользователем выполняется обмен? Обычно это специально созданный пользователь "Администратор обмена".
  2. У этого пользователя в дополнительных правах должна быть разрешена "Продажа ниже минимальной цены".
  3. Если используется запрет на редактирование цен, убедимся, что для документа "Заказ клиента", создаваемого обменом, эти правила не блокируют установку нулевых значений.

Метод 5. Обновление модуля интеграции

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

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

Резюме по решению проблемы

Для исправления ситуации с подарками мы рекомендуем придерживаться следующего алгоритма: сначала активируем опцию "Цены заказа всегда брать с сайта" и проверяем режим передачи скидок "В каждой строке". Если это не помогает, проводим сеанс отладки в модуле Б_ОбменССайтомСерверЗагрузкиДанных, чтобы убедиться, что нулевые значения не отсекаются на этапе парсинга XML. И, наконец, проверяем права пользователя обмена на предмет разрешения продаж ниже минимальной цены.

← На главную