Как решить проблему с ошибкой определения доступных касс ККМ в 1С:Розница при работе кассиров в разных магазинах?

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

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

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

---

Выясняем причину: почему возникает технический конфликт?

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

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

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

Значение ТекущийМагазин система считывает напрямую из карточки пользователя (раздел Администрирование -> Настройки пользователей и прав -> Пользователи) либо из регистра сведений персональных настроек.

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

В результате поисковый запрос пытается найти в справочнике кассу, которая одновременно подключена к компьютеру «Магазина Б», но числится за «Магазином А». Разумеется, такой кассы не существует. Запрос возвращает пустой результат, и система блокирует работу, выдавая ошибку определения касс ККМ.

---

Решение №1. Использование механизма «Смены продавца» в РМК (Рекомендуемый стандартный метод)

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

Рассмотрим по шагам, как настроить работу через обезличенные интерфейсные учетные записи и персональные карты продавцов:

  1. Создаем системные учетные записи для магазинов. В справочнике Пользователи создаем учетные записи вида «Кассир Магазина 1» и «Кассир Магазина 2».
  2. Привязываем жесткие настройки. Для пользователя «Кассир Магазина 1» в карточке прописываем основным магазином «Магазин 1». Для «Кассира Магазина 2» указываем «Магазин 2». Теперь у этих пользователей кассы всегда будут определяться корректно, так как компьютер и настройки магазина совпадают.
  3. Заводим реальных сотрудников. Переходим в справочник Физические лица (или Физические лица в связке со справочником сотрудников) и заносим туда всех реальных продавцов (Иванова, Петрова, Сидорова).
  4. Генерируем персональные штрихкоды. Для каждого физического лица регистрируем персональную карту сотрудника со штрихкодом или магнитным кодом (это делается в карточке физлица). Распечатываем штрихкоды на обычном принтере этикеток и выдаем сотрудникам в виде бейджей.
  5. Настраиваем права и авторизацию. В настройках РМК (раздел Продажи -> Настройки РМК) включаем опцию авторизации продавцов. Указываем, что для оформления чека требуется авторизация.

Как это работает на практике: Утром на точке «Магазин 1» запускается компьютер. Программа автоматически (или вручную один раз за день) открывается под общим системным пользователем «Кассир Магазина 1». Касса ККМ определяется мгновенно и без ошибок.

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

---

Решение №2. Автоматизация процесса с помощью расширения (Технический метод)

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

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

Создадим расширение и добавим в него процедуру-обработчик перед инициализацией формы РМК. Примерный код решения будет выглядеть следующим образом:


&НаСервере
Процедура Расш_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    // Получаем рабочее место текущего сеанса (компьютер)
    ТекущееРабочееМесто = ПараметрыСеанса.РабочееМестоКлиента;
    
    Если ЗначениеЗаполнено(ТекущееРабочееМесто) Тогда
        
        // Запрашиваем из базы данных магазин, к которому относится касса этого рабочего места
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
            |	КассыККМ.Магазин КАК Магазин
            |ИЗ
            |	Справочник.КассыККМ КАК КассыККМ
            |ГДЕ
            |	КассыККМ.РабочееМесто = &РабочееМесто
            |	И НЕ КассыККМ.ПометкаУдаления";
            
        Запрос.УстановитьПараметр("РабочееМесто", ТекущееРабочееМесто);
        РезультатЗапроса = Запрос.Выполнить();
        
        Если Не РезультатЗапроса.Пустой() Тогда
            Выборка = РезультатЗапроса.Выбрать();
            Выборка.Следующий();
            
            // Динамически подменяем параметр текущего магазина для сеанса
            ПараметрыСеанса.ТекущийМагазин = Выборка.Магазин;
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры

Преимущество этого метода: Полная автоматизация. Продавец заходит под своей учетной записью на любом торговом объекте, система определяет физическое местоположение компьютера и сама переключает контекст магазина в фоновом режиме. Кассир даже не заметит изменений и сможет сразу приступить к продажам.

---

Решение №3. Быстрый обход проблемы «вручную» (Альтернативный метод)

Иногда требуется решить проблему прямо сейчас, «в полевых условиях», когда нет времени писать расширение или перенастраивать карты сотрудников. Если у продавцов заблокирован интерфейс РМК (отключена кнопка «Закрыть»), они физически не могут выйти в главное меню 1С, чтобы сменить магазин.

Для обхода этой блокировки мы можем использовать встроенные возможности платформы 1С:

  1. Находясь на заблокированном экране РМК с ошибкой определения касс, нажмите на клавиатуре комбинацию клавиш Ctrl + Shift + Q (в некоторых версиях и операционных системах может сработать сочетание Alt + F10).
  2. Это сочетание клавиш вызывает системное меню или командную панель функций (если правами пользователя не заблокировано абсолютно всё системное окружение).
  3. Через открывшееся меню перейдите по пути: Главное меню -> Сервис -> Параметры или найдите пункт «Персональные настройки».
  4. В открывшемся окне персональных настроек вручную измените значение в поле «Текущий магазин» на тот магазин, в котором физически находится продавец.
  5. Нажмите кнопку «Записать и закрыть», после чего перезапустите сеанс 1С.

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

---

Решение №4. Настройка распределенной информационной базы (РИБ)

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

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

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

← На главную