Почему цены и остатки на сайте расходятся с 1С: карта причин и проверки
В 1С цена 2 400 ₽, на сайте — 2 200 ₽. Или последнюю единицу уже продали, а кнопка покупки осталась. Начните с карточки товара в административной части Битрикс: если там значение правильное, проверять нужно вывод и условия покупки. Если оно старое — найдите этот товар в файле обмена и проверьте, завершился ли импорт.
Ниже — действия для «1С-Битрикс: Управление сайтом». Пути в 1С показаны для УТ 11.5 с модулем обмена Битрикс 8.1.x; отличия старой ветки указаны отдельно. В УНФ, ERP и собственном обмене формы другие. Числа и идентификаторы взяты для примера.
Откройте нужное предложение в Битрикс
- В админке откройте Магазин → Каталог товаров → ваш каталог. Найдите позицию по артикулу или названию и откройте редактирование. Каталог также может находиться в разделе «Контент» под своим названием.
- Если у товара есть размер, цвет или другая характеристика, перейдите в «Торговые предложения» и откройте именно выбранный на витрине вариант. Запишите его ID и внешний код. Цена родительской карточки не заменяет цену предложения.
- В торговом каталоге откройте «Цены»: запишите сумму, тип цены и валюту. В «Параметрах» — доступное количество. Если передаются остатки по складам, посмотрите и вкладку «Склады». В разных формах эти вкладки могут быть вложены в блок торгового каталога.
- Откройте тот же вариант на витрине. Для цены сравните одинаковое количество товара и одну группу покупателя, без купона. Запишите время проверки: заказ между замерами может изменить остаток.
Названия товарных полей приведены в справке Битрикс. Не нашли внешний код? Администратор может включить его показ: Настройки → Настройки продукта → Настройки модулей → Информационные блоки → «Показывать код загрузки из внешних источников». Вернитесь в карточку. Это поле связи с 1С; не путайте его с числовым ID сайта или символьным кодом URL. Описание поля.
| Что получилось | Следующее действие |
|---|---|
| В админке 2 400 ₽, на витрине или в корзине 2 200 ₽ | Перейдите к шагу 5: тип цены, права покупателя и скидки. Кэш проверяется после них. |
| В админке старые цена или количество | В разделе 2 найдите эту позицию в XML, затем проверьте результат импорта по разделу 3. |
| В админке 0, товар всё ещё можно купить | Откройте пункт «Ноль записан, но покупка разрешена» в разделе 6. |
| Сразу после обмена верно, позже снова старое | Зафиксируйте оба времени и перейдите к разделу 8: ищем следующий сеанс или другую запись. |
Получите файл обмена и найдите в нём товар
Как выгрузить XML на диск в модуле 8.1.x
- Откройте в 1С 1С-Битрикс: Управление сайтом → Настройки обмена с сайтами. Найдите настройку, которая отправляет нужный каталог.
- Для диагностики используйте её копию без автоматического запуска либо тестовую базу. В разделе назначения выберите «Выгружать в каталог на диске» и укажите папку. В серверной базе это путь, доступный службе 1С, а не обязательно диск вашего компьютера.
- Запустите выгрузку из диагностической настройки. Если копия не содержит истории изменений, сформируйте полный пакет только на диск. Такая выгрузка проверит текущие данные и отборы, но не докажет, что рабочий обмен зарегистрировал прежнее изменение.
- Сохраните полученные XML. Рабочую настройку оставьте направленной на сайт. Для проверки сбоя конкретного сеанса нужны именно отправленные им файлы: запросите их сохранение у администратора до следующего обмена.
Назначение выгрузки и режимы модуля 8.1.x. Не отправляйте на рабочий сайт полный пакет, ограниченный одним товаром: при соответствующих настройках остальные позиции могут деактивироваться. Для проверки такого пакета нужен стенд.
Что искать внутри файла
Откройте копии XML в текстовом редакторе и найдите внешний код предложения через поиск. В старых схемах цены и количество находятся в offers.xml, в новых — в отдельных prices.xml и rests.xml, иногда в подпапках и нескольких частях. Состав файлов в документации. Если позиция не нашлась, ищите во всём пакете; название и артикул могут отсутствовать в файле цен.
<Предложение>
<Ид>товар-001#вариант-XL</Ид>
<Цены>
<Цена>
<ИдТипаЦены>цена-розница</ИдТипаЦены>
<ЦенаЗаЕдиницу>2400</ЦенаЗаЕдиницу>
<Валюта>руб</Валюта>
</Цена>
</Цены>
</Предложение>Из этого фрагмента выпишите три значения: Ид предложения, ИдТипаЦены и ЦенаЗаЕдиницу. Сравнивайте запись одной цены, а не первую попавшуюся сумму файла. Через # может быть указана характеристика товара; точный формат берите из своего пакета. Пример структуры цен.
<Предложение>
<Ид>товар-001#вариант-XL</Ид>
<Остатки>
<Остаток>
<Склад>
<Ид>склад-основной</Ид>
<Количество>0</Количество>
</Склад>
</Остаток>
</Остатки>
</Предложение>Здесь ноль относится к одному складу и одному предложению. Другие склады могут иметь остаток. Если предложения или поля количества нет вовсе, файл не сообщает это обновление. Пример структуры остатков.
| Результат | Что проверять |
|---|---|
| В файле цена 2 200 ₽ вместо ожидаемых 2 400 ₽ | Раздел 4: выбранный прайс и данные цены в 1С. |
| Количество неверно уже в файле | Раздел 6: склады, учёт резерва и отборы в 1С. |
| Товара нет в пакете изменений | Раздел 8: регистрацию изменения. Отсутствие в таком пакете не означает нулевой остаток. |
| Файл верен, админка сайта — нет | Сначала раздел 3: доставка и обработка этого файла. Только после этого — внешние коды в разделе 5. |
Проверьте, завершился ли импорт файла
В модуле 8.1.x откройте 1С-Битрикс: Управление сайтом → Журнал обменов и выберите время проблемного запуска. Сохраните первую ошибку и имя файла. Описание журнала. В старой ветке 7.x используются узлы обмена и команда «Открыть лог».
Если журнал сообщает только общую ошибку, передайте администратору сайта время сеанса и попросите сопоставить запросы обмена с журналом ошибок PHP/веб-сервера. Вкладка с названием «Лог работы» и полный журнал импорта товаров есть не в каждой установке — искать её бесконечно не нужно.
| Ответ | Значение |
|---|---|
| mode=file → success | Сайт принял файл или его часть. Обработка ещё не подтверждена. |
| mode=import → progress | Импорт продолжается, нужен результат следующих шагов. |
| mode=import → success | Обработка данного файла завершена; теперь проверьте значение конкретного предложения. |
| failure или страница с ошибкой | Сохраните текст ответа. HTTP 200 без проверки содержимого не означает успешный импорт. |
Этапы разделены в протоколе Битрикс. Если правильный файл сформировался на диске, это ещё не доказывает, что рабочий сайт его получил.
Что делать с ошибкой
- Ошибка авторизации. Проверьте адрес обмена и учётную запись в настройке 1С. На сайте администратор сверяет её группу с разрешёнными группами загрузки на странице Магазин → Настройки → Интеграция с 1С → Каталог. Проверка соединения должна пройти до повторного импорта.
- Превышено время выполнения. Если серверный журнал подтвердил тайм-аут PHP именно на шаге импорта, уменьшите длительность шага в расширенных настройках этой же вкладки. Например, при лимите PHP 30 секунд испытайте шаг 10 секунд. Значение 0 запускает обработку одним шагом. Если зависает одна тяжёлая операция, дробление её не исправит — нужен разбор обработчика.
- Allowed memory size exhausted. Попросите администратора проверить объём пакета и потребление памяти обработчиком. Уменьшение интервала не заменяет проверку памяти. Общий failure сам по себе не доказывает ни эту ошибку, ни тайм-аут.
Параметры импорта каталога. После исправления нужен завершённый импорт и новое значение в карточке, а не только зелёный статус соединения.
Неверная цена уже в XML: исправьте источник
Пример: менеджер ожидает розницу 2 400 ₽, но в файле у этого предложения 2 200 ₽. Повторный импорт сайта передаст те же 2 200 ₽.
- В УТ откройте CRM и маркетинг → Цены (прайс-лист). Выберите проблемный товар, его характеристику и нужный вид цены. Сверьте дату действия, валюту и единицу продажи. Если там тоже 2 200 ₽, сначала исправляется цена в учёте, а не обмен.
- Если прайс показывает 2 400 ₽, откройте настройку обмена 8.1.x: «Выгрузка информации о номенклатуре» → «Настроить». Выберите каталог слева, затем вкладку «Цены». Сверьте состав прайсов: должен передаваться тот, по которому продаёт сайт.
- Если выбран оптовый прайс вместо розничного, исправьте именно это соответствие. Сохраните настройку и сформируйте новый диагностический пакет. У нужного предложения должны появиться ожидаемые 2 400 ₽ и идентификатор нужного типа цены.
- После штатной отправки проверьте 2 400 ₽ в карточке того же предложения в Битрикс. Если XML верен, а карточка осталась прежней, переходите к разделу 5.
Проверка цен в УТ; Настройки выгрузки 8.1.x. Если в прайсе нет ожидаемой цены, проверьте документ её установки: нужные товар и характеристику, вид цены, начало действия и проведение. Не перепроводите задним числом документы ради эксперимента на рабочей базе.
XML верен, но цена на сайте другая
Админка не получила новую цену: сверьте внешние коды
- Сравните Ид предложения из файла с внешним кодом открытого предложения сайта. Не сравнивайте его только с родительским товаром и не используйте артикул вместо идентификатора.
- Откройте Магазин → Настройки → Цены → Типы цен. В меню нужного типа выберите «Изменить тип цен». Сравните поле внешнего кода с ИдТипаЦены из XML. Внутренний «Код» типа цены — другое поле.
- Если у единственного розничного типа неверный внешний код, сначала убедитесь, что другой тип уже не связан с нужным идентификатором. Если соответствие однозначно и подтверждено настройкой 1С, сохраните прежнее значение, исправьте внешний код и повторите обмен на стенде. Затем проверьте, что обновилась существующая цена, а новая дублирующая запись не появилась.
- Если не совпал код самого товара или характеристики, найдите в каталоге запись с кодом из XML. При дублях или переносе базы не подставляйте GUID наугад: разработчику нужна карта соответствий товаров и предложений. Иначе можно обновить чужой вариант или нарушить связи заказов.
Список типов цен и поля их редактирования. Несколько типов цен доступны не во всех редакциях; в «Малом бизнесе» работа ведётся с единственным типом. Если коды совпадают и импорт завершён, а значение не изменилось, передайте разработчику ID предложения, фрагмент XML и время импорта: проверять нужно обработку записи и доработки, а не переименовывать тип цены.
В карточке 2 400 ₽, в корзине 2 200 ₽: проверьте права на цены
Рассмотрим пример. У предложения есть розничная цена 2 400 ₽ и базовая 2 200 ₽. Каталог выводит только розничную, но покупателю разрешена покупка по обеим. В штатном расчёте корзины может примениться более дешёвая доступная цена. Это описанный Битрикс сценарий.
- Сначала воспроизведите случай на стенде: права типа цены действуют на все товары. На странице типов цен откройте оба типа и проверьте все группы, в которые входит тестовый покупатель, а не только одну. Если базовая цена служебная и покупатель не должен по ней покупать, уберите эту группу из прав покупки по базовому типу; оставьте её у розничного. Перед сохранением убедитесь, что у продаваемых товаров есть альтернативная цена, по которой эта группа сможет покупать. Не ограничивайте оптовую группу, которой низкая цена положена по правилам магазина. Переносите исправление после проверки групп покупателей.
- На странице каталога включите режим правки, откройте параметры компонента каталога и проверьте «Цены» → «Тип цены». Выберите предусмотренный для этой витрины тип. Для стандартного компонента это параметр PRICE_CODE; в собственном шаблоне место настройки уточняет разработчик.
- Повторите проверку в новой корзине тестового покупателя без купона, с одной единицей нужного предложения. Ожидаемый результат в нашем примере — 2 400 ₽ в карточке и корзине. Затем отдельно проверьте оптовую учётную запись.
Параметры вывода цены. Если доступны правильные типы, проверьте активные скидки: Маркетинг → Товарный маркетинг → Правила работы с корзиной (описание списка). Например, 2 400 ₽ минус 10% дают 2 160 ₽. При положенной покупателю скидке это верный расчёт; ошибочную скидку исправляют по её условиям на стенде. Не отключайте все акции магазина для проверки одной карточки.
Не сходится количество: склад, резерв или ноль
На складе 10, на сайте 7: сравните состав остатка
- В УТ откройте Склад и доставка → Отчеты по складу → Остатки и доступность товаров. Установите отбор по одному товару, характеристике и складу. Запишите физическое количество и резерв отдельно.
- В настройке выгрузки номенклатуры 8.1.x откройте вкладку «Остатки». Сопоставьте склады в таблице со складом отчёта; проверьте, учитывает ли выгрузка резерв. Не меняйте это правило, пока не выяснили, какое количество магазин должен продавать.
- Если физически есть 10, три единицы зарезервированы, а согласованное правило передаёт свободные 7, то XML с количеством 7 корректен. Если выбран склад брака вместо основного — исправьте состав складов выгрузки и проверьте новый файл.
- При передаче по складам сравните идентификатор склада из XML с XML_ID в Магазин → Складской учет → Склады → нужный склад. Затем в карточке предложения проверьте вкладку «Склады». Одно название «Основной» не подтверждает связь записей.
Поля склада Битрикс. Если 1С уже передала свободные 7, а сайт повторно вычел тот же резерв 3 и показывает 4, проверьте номера заказов, включённых в оба резерва. Здесь исправляют передачу и обработку резервов; увеличение количества вручную только скроет ошибку до следующего сеанса.
После продажи последней единицы на сайте остаётся 1
- На стенде временно остановите автоматический обмен. Воспроизведите переход 1 → 0 у одного предложения, проверьте регистрацию изменения до отправки, затем выполните обмен и сохраните пакет. Найдите его внешний код и количество нужного склада.
- Если позиции нет, откройте в настройке номенклатуры «Отборы». Найдите условие, исключающее товар при нулевом остатке. Исправьте именно это условие, чтобы ранее выгруженная позиция могла передать ноль; остальные ограничения каталога сохраняйте.
- Если отбор не исключает позицию, посмотрите результат проверки формы «Зарегистрированные изменения» перед отправкой. Изменения не было уже тогда — нужна проверка его регистрации в модуле или доработке. После успешной отправки запись могла сняться; пустая форма после обмена не доказывает ошибку. Редактирование названия не заменяет проверку изменения остатка.
- Если ноль есть в XML, убедитесь в завершении импорта и проверьте количество в админке Битрикс. Ноль не применился — передайте файл, ID предложения и результат импорта разработчику сайта. Затем повторите обратный переход 0 → 1.
Старое значение может сохраниться, если схема не определяет иное поведение.
Проверьте, что импорт принял ноль и применил его к нужному предложению.
Ноль записан, но покупка разрешена
В карточке нужного предложения откройте параметры торгового каталога. Для магазина без предзаказа установите «Включить количественный учет» — «Да» и «Разрешить покупку при отсутствии товара» — «Нет», затем сохраните. Если выбрано «По умолчанию», значение наследуется из настроек модуля. Название переключателя учёта может отображаться как режим количественного учёта.
Проверьте добавление одной единицы в новую корзину при нуле, затем после поступления. Если при нуле стандартные настройки запрещают покупку, а собственная кнопка всё равно добавляет товар, нужен разбор шаблона и обработчика корзины. Включать или выключать весь складской учёт для этого не требуется.
В админке верно, на витрине старое: проверьте кэш
- Убедитесь, что сравниваются одно предложение, тип цены и условия покупателя. Режим инкогнито меняет сеанс, но не очищает серверный кэш.
- Под администратором откройте проблемную страницу с параметром ?clear_cache=Y. Если в адресе уже есть ?, добавьте &clear_cache=Y. Сравните результат до и после в той же администраторской сессии; затем проверьте обычную страницу под тестовым покупателем.
- Если после сброса значение исправилось, откройте Магазин → Настройки → Интеграция с 1С → Каталог. Найдите «Тегированный кеш инфоблока». Если он отключён без специально реализованного сброса, выберите сброс после завершения импорта, сохраните и проверьте следующий обмен.
- Измените цену контрольного товара на стенде, дождитесь полного импорта и откройте страницу без параметра очистки. Новая цена должна появиться сама. Если нет, разработчик проверяет зависимость кэша компонента от каталога, композитный кэш и внешний CDN — если эти слои используются.
Параметр проверки кэша; настройки его сброса при импорте. Ручная очистка всего сайта не является исправлением причины и не нужна как первый шаг.
Вручную работает, автоматически нет — или значение откатывается
Нет автоматического обновления
- В настройке обмена 8.1.x проверьте способ выполнения: если установлен только ручной режим, задайте предусмотренное для каталога расписание. Не путайте его с обменом документами в реальном времени.
- Откройте журнал за время, когда запуск должен был состояться. Запуска нет: администратор 1С проверяет исполнение и блокировку регламентных заданий. Запуск есть, но оборвался: исправляется зафиксированная ошибка, а не частота расписания.
- При жалобе на одну позицию на стенде остановите автоматическую отправку, измените её цену или остаток и откройте «Зарегистрированные изменения» до запуска обмена. Затем запустите обмен и проверьте «Неотправленные пакеты данных». Если изменение зарегистрировано, но пакет остаётся неотправленным, сохраните ошибку этого пакета. Не удаляйте очередь ради успешного статуса.
- После исправления дождитесь запуска по расписанию без ручного вмешательства. Проверьте, что изменение попало в XML и применилось в карточке сайта.
Изменения и пакеты в модуле 8.1.x. В старой ветке 7.x есть «Узлы обмена с сайтами» и флаг «Использовать периодический обмен данными» — это другой интерфейс, не дополнительная обязательная галочка для 8.1.x.
После правильного значения возвращается старое
Запишите время: например, в 12:05 после импорта было 2 400 ₽, в 12:10 стало 2 200 ₽. Сверьте журналы обоих моментов и сохранённые пакеты. Если второй профиль отправил 2 200 ₽, устраните конкурирующую выгрузку цены: оставьте один согласованный источник этого поля. Если второй файл тоже содержит 2 400 ₽, разработчик включает диагностическое логирование записи цены и проверяет обработчики и загрузки прайсов. Само время изменения карточки не всегда показывает отдельную запись цены.
Проверьте исправление на следующем обмене
| Действие на стенде | Что должно получиться |
|---|---|
| Изменить цену нужного вида, например с 2 400 на 2 450 ₽ | Новая сумма в XML и админке того же предложения; витрина и корзина рассчитываются для заданного покупателя. |
| Провести переходы количества 1 → 0 → 1 | Все три значения передаются и применяются; покупка при нуле соответствует правилам магазина. |
| Создать и снять резерв на один тестовый заказ | При передаче свободного остатка число меняется; при передаче физического может остаться прежним. Доступность покупки следует выбранной модели, резерв не вычитается дважды. |
| Проверить соседний размер или цвет | Цена и количество другого предложения не изменились из-за ошибочной связи. |
| Дождаться двух плановых циклов | Обновление работает без ручной выгрузки и очистки кэша; старые значения не возвращаются. |
Если ветка привела к ошибке кода, приложите к задаче URL, ID и внешний код предложения, конфигурацию и релиз 1С, версию модуля обмена, время сеанса, фрагмент XML и текст первой ошибки. Формулировка результата должна быть проверяемой: «В prices.xml цена 2 450, импорт завершён в 12:05, у предложения ID 317 в админке осталось 2 400». Уберите из вложений пароли и данные покупателей.
Не меняйте механизм обмена только из-за одного расхождения. Если выяснилось, что требуемое правило не поддерживается, сравнить варианты поможет разбор типового обмена, доработки и API.
Обсудим задачу — от разработки и дизайна до продвижения
Документация и применимость инструкции
Инструкция сверена 8 сентября 2026 года с официальной документацией 1С-Битрикс; ссылки на формы и параметры приведены в соответствующих шагах. Основной пример — УТ 11.5 и модуль 8.1.x. Права пользователя, редакция Битрикс и доработки могут менять доступные формы. XML и суммы приведены для примера; в своей базе подставьте данные нужного товара.