Почему в 1С:Розница 2.2 и 2.3 путаются склады и магазины при продаже в РМК и как это исправить?

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

В процессе работы с конфигурацией 1С:Розница версий 2.2 и 2.3 пользователи часто сталкиваются с критической ошибкой: во время оформления продаж через РМК (Рабочее место кассира) система внезапно меняет текущий магазин или склад. Это приводит к тому, что выручка и списания товаров отражаются на другой торговой точке, что вызывает хаос в складском учете и отчетах о розничных продажах. Особенно остро проблема проявляется в распределенных базах (РИБ) или при работе в облачных сервисах.

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

Выясним причину: почему склад «соскакивает»?

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

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

Также стоит учитывать влияние настроек рабочего места. 1С определяет параметры РабочееМестоККМ по сетевому имени компьютера. Если для разных магазинов созданы рабочие места с одинаковыми именами или используются дублирующие записи в справочнике РабочиеМеста, система может подхватить некорректные настройки при открытии смены.

Решение №1: Настройка ограничения доступа на уровне записей (RLS)

Самым надежным и проверенным способом решения проблемы без программирования является использование механизма RLS (Record Level Security). Это позволит физически запретить кассиру видеть и выбирать «чужие» магазины и склады, даже если в программном коде произойдет сбой переключения контекста.

Разберем этот процесс по шагам:

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав.
  2. Установим флаг Ограничивать доступ на уровне записей. Это включит возможность тонкой настройки прав.
  3. Перейдем по гиперссылке Группы доступа. Нам необходимо создать уникальную группу доступа для кассиров каждого конкретного магазина. Например, «Кассиры Магазин №1», «Кассиры Магазин №2».
  4. В созданной группе доступа на закладке Участники добавим пользователей (кассиров), которые работают именно в этой торговой точке.
  5. Самый важный этап: перейдем на закладку Ограничение доступа.
    • В списке Вид доступа выберем пункт Магазины.
    • Установим значение Все запрещены, исключения подобраны.
    • В нижней табличной части выберем только тот магазин, к которому привязан данный кассир.
    • Повторим аналогичные действия для видов доступа Склады и Кассы ККМ, если они доступны в списке.
  6. Сохраним настройки и удалим данных пользователей из общих (стандартных) групп доступа, где ограничения не настроены.

После применения этих настроек, даже если кассир попытается найти чек другого магазина, система просто не выдаст ему эти данные, и параметры сеанса останутся неизменными. Это жестко блокирует возможность продажи с «чужого» склада.

Решение №2: Проверка справочника «Настройки РМК» и рабочих мест

Рассмотрим еще один аспект — привязку оборудования к рабочему месту. Если настройка RLS кажется вам избыточной или замедляет работу системы, необходимо убедиться в чистоте справочников.

Проанализируем следующие моменты:

Решение №3: Программное исправление через расширение (для программистов)

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

Посмотрим на пример логики, которую можно реализовать в процедуре ПередЗаписью документа ЧекККМ или в модуле менеджера при обработке формы РМК:


// В расширении для документа ЧекККМ
&После("ПередЗаписью")
Процедура ИТ_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    // Получаем правильный магазин из настроек текущего узла или рабочего места
    ПравильныйМагазин = ПолучитьМагазинПоРабочемуМесту(ПараметрыСеанса.РабочееМестоКлиента);
    
    Если ЗначениеЗаполнено(ПравильныйМагазин) И ЭтотОбъект.Магазин <> ПравильныйМагазин Тогда
        // Записываем ошибку в журнал регистрации для анализа
        ЗаписьЖурналаРегистрации("ИсправлениеСклада", УровеньЖурналаРегистрации.Предупреждение, , , 
            "Попытка записи чека с чужим магазином! Исправлено с " + ЭтотОбъект.Магазин + " на " + ПравильныйМагазин);
        
        ЭтотОбъект.Магазин = ПравильныйМагазин;
        // Аналогично проверяем и устанавливаем склад
        ЭтотОбъект.Склад = ПравильныйМагазин.СкладУправляющейСистемы; 
    КонецЕсли;
    
КонецПроцедуры

Данный код принудительно сверяет магазин в документе с тем, который должен быть привязан к конкретному рабочему месту, и исправляет его в случае расхождения. Это гарантирует, что даже при сбое интерфейса данные в базе останутся корректными.

Дополнительные рекомендации

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

  1. Очистка кэша: Иногда некорректные настройки «залипают» в локальном кэше пользователя. Рекомендуется полностью удалить информационную базу из списка запуска 1С и добавить её заново. Это принудительно очистит папку AppData и сбросит настройки форм.
  2. Обновление платформы: В некоторых релизах платформы 8.3 (например, 8.3.12) наблюдались проблемы с хранением параметров сеанса в тонком клиенте. Убедитесь, что вы используете актуальную и стабильную версию платформы.
  3. Проверка прав администратора: Если администратор заходит в базу с разных компьютеров под одной учетной записью, система может «запомнить» последний выбранный им магазин как значение по умолчанию для всех последующих сессий на этом ПК. Используйте разные учетные записи для настройки каждой торговой точки.

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

← На главную