Почему в Битриксе не отображается цена товара и пишется «нет в наличии» после выгрузки из 1С?

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

Ситуация, когда данные из 1С успешно передаются на сайт, но покупатели видят надпись «нет в наличии» вместо заветной цены, является одной из самых распространенных при настройке интеграции. Мы можем видеть остатки в административной панели Битрикс, наблюдать актуальные цифры в карточке товара, но публичная часть сайта упорно отказывается их выводить. В рамках данной статьи мы подробно разберем, почему это происходит, и пройдем по всем шагам настройки — от проверки прав доступа до нюансов фасетного индекса.

Настройка прав доступа к типам цен

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

  1. Перейдем в административную часть сайта.
  2. Откроем раздел Магазин, далее выберем пункт Цены и перейдем в Типы цен.
  3. Найдем в списке ту цену, которая выгружается из 1С (например, «Розничная» или «Base»).
  4. Зайдем в редактирование этого типа цены и перейдем на вкладку Права доступа.
  5. Проверим, установлены ли галочки в колонке «Просмотр» для групп «Все пользователи» (включая неавторизованных) и «Зарегистрированные пользователи».

Важно: если права не расшарены, компонент каталога просто игнорирует данные о цене при формировании страницы, что часто приводит к автоматическому срабатыванию статуса «нет в наличии», так как система считает товар невозможным к покупке без установленной стоимости.

Проверка параметров компонента в публичной части

Выясним вторую по популярности причину — неверную настройку самого компонента bitrix:catalog или bitrix:catalog.section. Даже если в системе настроено несколько типов цен, компонент выводит только те, что явно указаны в его параметрах.

Рассмотрим порядок действий в режиме редактирования сайта:

  1. Включим «Режим правки» и зайдем в настройки параметров компонента каталога.
  2. Найдем раздел Цены.
  3. В поле «Типы цен» выберем именно те названия, которые пришли из 1С.

Проанализируем ситуацию: часто после выгрузки из 1С создается новый тип цены с внешним кодом (XML_ID), а в компоненте остается выбранным старый тип цены (например, созданный вручную «Base»). В итоге компонент ищет цену, которой нет у новых товаров, и логично скрывает кнопку «Купить».

Конфликт внешних идентификаторов (XML_ID)

Рассмотрим техническую сторону обмена. При интеграции 1С и Bitrix связующим звеном является XML_ID (внешний код). Если в 1С тип цены называется «Розничная», а в Bitrix уже существует созданный вручную тип «Розничная», при импорте может возникнуть дублирование.

Посмотрим на структуру файла prices.xml, который генерирует 1С при обмене. В нем содержится идентификатор типа цены:


<ТипЦены>
    <Ид>60d1b32a-1c5d-11e2-9426-0015e9666f91</Ид>
    <Наименование>Розничная</Наименование>
    <Валюта>RUB</Валюта>
</ТипЦены>

Если этот Ид не совпадает с полем «Внешний код» в настройках типа цены в Битриксе, система создаст вторую «Розничную» цену. Вы будете менять настройки у одной, а данные будут лежать в другой. Всегда проверяйте соответствие XML_ID в административной панели сайта в разделе типов цен.

Обновление фасетного индекса

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

Разберем, как его пересоздать:

  1. Перейдем в Рабочий стол -> Магазин -> Настройки -> Складской учет (или через поиск в админке по слову «Фасетный»).
  2. Найдем пункт Фасетный индекс в настройках торгового каталога.
  3. Выберем нужный инфоблок товаров и нажмем кнопку «Создать» или «Пересоздать».

Без актуального индекса система может считать, что товаров с ценой выше нуля не существует, и скрывать их из выдачи или показывать статус «отсутствует».

Настройки складского учета и количественный учет

Проанализируем настройки модуля «Торговый каталог». В Битриксе есть жесткая логика: если включен количественный учет, и остаток товара равен нулю, система по умолчанию считает, что товара нет в наличии, даже если цена заполнена. Однако иногда 1С выгружает остатки на конкретные склады, а общий остаток (поле QUANTITY) не обновляется корректно.

Проверим следующие настройки:

Соответствие валют

Посмотрим на частую ошибку с валютами. 1С может передавать валюту как руб., в то время как в Bitrix базовой валютой является RUB. Если в справочнике валют Битрикса (Настройки -> Валюты) не настроен соответствующий псевдоним или номинал, цена просто не сможет быть сконвертирована и выведена на экран.

Рекомендуется проверить:

  1. Код валюты в 1С.
  2. Код валюты в Bitrix.
  3. Наличие курса валют (даже если он 1 к 1).

Итоги и отладка

Если ни один из вышеперечисленных методов не помог, проанализируем лог-файлы обмена. В папке /bitrix/admin/1c_exchange.php (через журнал событий) можно увидеть ошибки, возникающие в момент импорта. Иногда 1С пытается обновить цену, но из-за кастомных обработчиков (события OnBeforePriceUpdate или OnPriceUpdate) операция блокируется.

Помните, что комплексная проверка всегда начинается с прав доступа к типу цены и заканчивается сбросом кеша и перегенерацией фасетного индекса. Совместная работа этих инструментов обеспечит корректное отображение товаров для ваших покупателей.

← На главную