Почему в 1С:Розница 2.2 в периферийном узле РИБ отображаются старые цены и как это исправить

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

Проблема расхождения цен в распределенной информационной базе (РИБ) — это одна из наиболее часто встречающихся задач при поддержке конфигурации 1С:Розница 2.2. Ситуация, когда в центральном узле цена установлена корректно, а в магазине (периферии) касса продолжает «упорно» подтягивать старые значения, может привести к убыткам и конфликтам с покупателями. Разберем детально, почему это происходит и как навести порядок в ценообразовании.

Анализ механизма «Применение цен номенклатуры»

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

  1. Установка цен номенклатуры: Этот документ создает общие записи в базе (своего рода прайс-лист компании). Он фиксирует намерение изменить цену.
  2. Применение цен номенклатуры: Это критически важный шаг для розничной точки. Пока этот документ не проведен в конкретном магазине, кассовый модуль (РМК) не увидит новых цен, даже если документ установки уже пришел по обмену.

Выясним причину: если в настройках магазина включена опция «Использовать применение цен», то система ожидает подтверждения от сотрудников магазина. Если документ «Применение цен» не был создан или был проведен некорректно, в регистре ЦеныНоменклатурыМагазинов останутся старые данные. Проверим наличие этого документа в периферийной базе и убедимся, что в нем присутствуют нужные позиции номенклатуры.

Влияние системного времени и периодичности регистров

Обратим внимание на сообщения опытных участников форума (сообщение 3 и 5). Одной из самых коварных причин является рассинхронизация времени на компьютерах. Разберем, как это работает в 1С.

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

Представим, что на компьютере в магазине системное время спешит на 1 час. Вы проводите документ в центре в 10:00. При обмене документ попадает в периферию. Но если там уже существует какая-то запись (например, корректировка или ошибочный документ), датированная 10:30 того же дня, то ваша «новая» цена от 10:00 технически станет «прошлой» по отношению к записи от 10:30.

Проанализируем ситуацию с «1970-м годом», упомянутую в обсуждении. Если на кассовом компьютере сбилась батарейка BIOS и установилась дата из прошлого, новые документы из центра (с датой 2024 года) будут иметь приоритет, но если произойдет обратная ситуация (в периферии дата из «будущего»), актуальные цены из центра просто не вступят в силу. Всегда проверяйте синхронизацию времени по протоколу NTP на всех узлах РИБ.

Различие между регистрами цен

Посмотрим на структуру данных. В 1С:Розница 2.2 существуют два ключевых регистра:

  1. ЦеныНоменклатуры — основной регистр, куда пишет данные документ «Установка цен номенклатуры».
  2. ЦеныНоменклатурыМагазинов — регистр, из которого данные попадают в чек ККМ.

Если данные в первом регистре обновились, а во втором — нет, значит, механизм «перетекания» цен нарушен. Это может произойти из-за того, что в периферийном узле не отработали регламентные задания или возникли ошибки при записи объектов. Для диагностики рекомендуется использовать консоль запросов в периферийной базе, чтобы сравнить срезы последних по обоим регистрам для проблемной позиции номенклатуры.

Проверка правил обмена и регистрации объектов

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

  1. В центральном узле перейдем в раздел «Администрирование» — «Синхронизация данных».
  2. Откроем «Состав отправляемых данных» для конкретного узла магазина.
  3. Найдем в списке тип документа Установка цен номенклатуры.

Если документа нет в списке выгрузки, значит, он либо уже был отправлен (и тогда проблему нужно искать в периферии), либо он не попал под фильтры обмена. Например, если в настройках обмена указана фильтрация по магазинам или организациям, а в документе установки цен указана организация, не привязанная к данному магазину, 1С проигнорирует этот объект при выгрузке.

Работа с отладчиком и программный анализ

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

Посмотрим на пример логики, которую стоит проверить (условный код):


// Пример функции получения розничной цены
Функция ПолучитьЦенуДляРМК(Номенклатура, Склад, Дата)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ЦеныМагазиновСрезПоследних.Цена КАК АктуальнаяЦена
        |ИЗ
        |	РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних(&Дата, Номенклатура = &Номенклатура И Магазин = &Магазин) КАК ЦеныМагазиновСрезПоследних";
    
    Запрос.УстановитьПараметр("Дата", Дата);
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("Магазин", Склад.Магазин);
    
    // ... выполнение запроса
КонецФункции

При отладке в периферийном узле обратите внимание на параметр &Дата. Если в качестве даты передается текущий момент, а цена в регистре записана «будущим» числом (даже на 1 секунду позже из-за разницы времени серверов), срез последних вернет предыдущее значение.

Коллизии при обмене данными

В распределенных базах существует понятие коллизии. Если один и тот же товар был изменен и в центре, и в периферии одновременно (например, в периферии кто-то вручную попытался поправить цену), при синхронизации система должна решить, чьи данные важнее. По умолчанию приоритет у центрального узла, но при определенных настройках или сбоях объект может быть помечен как «непринятый» из-за коллизии. Проверьте регистр сведений КоллизииПриОбмене на наличие записей, связанных с проблемными документами.

Итоговый чек-лист для исправления проблемы:

  1. Синхронизация времени: Убедитесь, что время на сервере 1С, сервере СУБД и кассовых терминалах совпадает до секунды.
  2. Документ «Применение цен»: Проверьте, создан ли и проведен ли этот документ в периферийной базе. Если нет — создайте его на основании пришедшей «Установки цен».
  3. Проверка регистра ЦеныНоменклатурыМагазинов: Откройте регистр напрямую через «Все функции» и посмотрите записи по конкретной номенклатуре. Обратите внимание на колонку «Период».
  4. Правила ценообразования: Убедитесь, что вид цены, указанный в документе установки, совпадает с тем видом цены, который назначен магазину в его карточке.
  5. Перепроведение: Иногда помогает простое перепроведение документа «Установка цен» в центральном узле для повторной регистрации его в плане обмена.

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

← На главную