Почему цена в XML-выгрузке отличается от цены в 1С:Управление торговлей 10.3?

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

При настройке обмена данными между 1С и внешними системами (например, интернет-магазином на базе Bitrix или другими CMS) специалисты часто сталкиваются с проблемой: в файле выгрузки xml (стандарт CommerceML) цена товара не соответствует той, которую пользователь видит в карточке или прайс-листе. Особенно странно это выглядит, когда в поле Представление указана одна цена, а в поле ЦенаЗаЕдиницу — совершенно другая.

Рассмотрим подробнее, почему так происходит в конфигурации 1С:Управление торговлей 10.3, и проанализируем механизмы, которые влияют на формирование этих значений.

Механизм пересчета цен при выгрузке

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

  1. Базовая единица измерения — в ней ведется количественный учет остатков (например, «шт»). Коэффициент базовой единицы всегда равен 1.
  2. Единица хранения остатков — единица, в которой программа отображает остатки в отчетах.
  3. Единица для отчетов — используется для специфической отчетности.
  4. Единицы измерения (упаковки) — подчиненный справочник, где задаются альтернативные единицы (коробка, палета, литр и т.д.) с указанием коэффициента относительно базовой единицы.

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

Разбор примера с некорректным коэффициентом

Проанализируем ситуацию, описанную в теме. В 1С цена отображается как 20,3 BYN, но в XML-файле мы видим значение 30.53 BYN. Выясним причину, применив математический расчет. Автор указал, что обнаружил в карточке товара коэффициент 0,665.

Формула, по которой работает выгрузка, выглядит следующим образом:

Цена в системе / Коэффициент единицы измерения = Цена за базовую единицу

Подставим значения: 20,3 / 0,665 ≈ 30,5263.... При округлении до двух знаков после запятой мы получаем именно те самые 30.53, которые попали в XML. Таким образом, система «думает», что 20,3 — это цена за дробную часть товара, и вычисляет стоимость целой единицы.

Почему «Представление» и «ЦенаЗаЕдиницу» различаются?

В структуре XML-обмена (CommerceML) эти два поля имеют разное назначение, что и приводит к путанице:

1. ЦенаЗаЕдиницу — это строго числовое поле. Оно предназначено для автоматических расчетов на стороне принимающего сайта. Алгоритм выгрузки 1С жестко пересчитывает это значение к базовой единице измерения товара.

2. Представление — это текстовая строка, предназначенная для чтения человеком. В некоторых версиях правил обмена в это поле попадает «сырое» значение из документа или регистра цен без учета пересчета коэффициентов. В итоге мы получаем ситуацию, когда текстовое описание говорит об одной цене, а расчетный блок XML-файла — о другой.

Как проверить и исправить данные в 1С:УТ 10.3

Если вы обнаружили подобное расхождение, выполним следующие шаги по проверке справочников:

  1. Откроем карточку проблемного товара в справочнике Номенклатура.
  2. Перейдем на закладку Единицы.
  3. Проверим поле Базовая единица (внизу карточки) и список в табличной части Единицы измерения.
  4. Особое внимание обратим на колонку Коэффициент. Для единицы измерения, которая выбрана как «Единица хранения остатков», коэффициент чаще всего должен быть равен 1.
  5. Если для товара ценой 20,3 стоит коэффициент 0,665, значит, единица измерения настроена неверно. Исправьте коэффициент на 1, если это действительно базовая единица (штука), или пересчитайте его правильно, если это упаковка.

Посмотрим на пример правильной настройки. Если товар продается штуками, и в XML должна уходить цена 22,8 BYN, то в карточке это выглядит так:


Единица: шт.
Коэффициент: 1
Цена за единицу: 22,8
Результат в XML: 22.8 BYN

Настройка выгрузки в «Обмене с сайтом»

Также стоит проверить настройки самого узла обмена. Перейдем в меню Сервис — Обмен данными с сайтом — Настроить узлы обмена. В настройках выгрузки товаров обратите внимание на параметры формирования цен. Иногда там может быть установлен принудительный отбор или указание конкретной единицы измерения для выгрузки. Если 1С находит несоответствие между единицей в типе цен и единицей для выгрузки, она инициирует пересчет через Коэффициент.

Рекомендации по заполнению справочников

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

— Всегда устанавливайте базовую единицу с коэффициентом 1. Это «фундамент» всех расчетов в системе.

— Старайтесь не использовать дробные коэффициенты меньше единицы, если в этом нет острой производственной необходимости. Обычно упаковки кратны базовым единицам (например, коробка = 10 шт, коэффициент 10).

— Если вы изменили коэффициент в уже существующей карточке товара, обязательно перепроведите документ Установка цен номенклатуры для этой позиции. Цены хранятся в Регистре сведений в привязке к единице измерения, и простого изменения в справочнике может быть недостаточно для обновления записей в базе данных.

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

← На главную