После обновления конфигурации «1С:Розница» до версии 2.2 (2.2.11.24) и выше многие пользователи столкнулись с неприятной проблемой: если продавец по графику смен переходит работать из одного магазина в другой, программа при запуске Рабочего места кассира (РМК) выдает критическую ошибку: «Ошибка определения доступных касс ККМ». При этом открыть смену или войти в режим регистрации продаж становится невозможно.
В этой статье мы подробно разберем, почему разработчики 1С изменили логику работы системы, детально проанализируем технические причины конфликта и рассмотрим несколько эффективных способов решения этой проблемы — от простых организационных настроек до программной автоматизации с помощью расширения.
---
Для начала проанализируем, как система вела себя в старых релизах (например, в линейке 2.2.7) и что изменилось теперь. Ранее платформа лояльнее относилась к параметрам текущего сеанса пользователя. В новых же релизах разработчики ужесточили контроль за безопасностью и корректностью ведения кассовой дисциплины.
Когда кассир запускает сеанс РМК, программа выполняет инициализацию рабочего места. В этот момент происходит обращение к справочнику КассыККМ с целью сопоставить текущий компьютер, с которого запущен сеанс, с подключенным фискальным регистратором. Запрос к базе данных накладывает жесткий двусторонний фильтр:
ПараметрыСеанса.РабочееМестоКлиента).ПараметрыСеанса.ТекущийМагазин).Значение ТекущийМагазин система считывает напрямую из карточки пользователя (раздел Администрирование -> Настройки пользователей и прав -> Пользователи) либо из регистра сведений персональных настроек.
Суть конфликта: Представим, что за продавцом в его учетной записи жестко закреплен «Магазин А». Сегодня по графику смен этот продавец приезжает работать на торговую точку «Магазин Б» и заходит в 1С под своим именем. Платформа определяет, что текущий компьютер физически находится в «Магазине Б» (через привязку оборудования), но при этом устанавливает ПараметрыСеанса.ТекущийМагазин равным «Магазину А» (так как он прописан в карточке пользователя).
В результате поисковый запрос пытается найти в справочнике кассу, которая одновременно подключена к компьютеру «Магазина Б», но числится за «Магазином А». Разумеется, такой кассы не существует. Запрос возвращает пустой результат, и система блокирует работу, выдавая ошибку определения касс ККМ.
---
Часто владельцы бизнеса настаивают на том, чтобы каждый продавец заходил в саму операционную систему и в 1С под своей персональной учетной записью, аргументируя это необходимостью расчета индивидуального процента с продаж и премий. Однако в «1С:Розница» этот процесс можно организовать гораздо элегантнее и без возникновения ошибок кассового оборудования.
Рассмотрим по шагам, как настроить работу через обезличенные интерфейсные учетные записи и персональные карты продавцов:
Пользователи создаем учетные записи вида «Кассир Магазина 1» и «Кассир Магазина 2».Физические лица (или Физические лица в связке со справочником сотрудников) и заносим туда всех реальных продавцов (Иванова, Петрова, Сидорова).Как это работает на практике: Утром на точке «Магазин 1» запускается компьютер. Программа автоматически (или вручную один раз за день) открывается под общим системным пользователем «Кассир Магазина 1». Касса ККМ определяется мгновенно и без ошибок.
Когда к кассе подходит условная продавщица Иванова, она сканирует свой персональный бейдж перед тем, как пробить товар. В текущем чеке в качестве продавца фиксируется именно Иванова. Когда на смену заступает Петрова, она сканирует свой бейдж. Программа автоматически переключает автора продаж. В конце месяца вы получите абсолютно точные отчёты по личным продажам для расчета премий, а база данных не будет перегружена лишними сессиями пользователей.
---
Если на предприятии принципиально важно, чтобы продавцы работали в системе исключительно под своими персональными учетными записями 1С, нам потребуется обойти жесткую привязку магазина к пользователю при запуске программы. Лучше всего сделать это с помощью механизма расширений конфигурации, чтобы не снимать основную конфигурацию с поддержки.
Проанализируем задачу: нам необходимо перехватить момент инициализации сеанса РМК, определить текущий компьютер, найти привязанную к нему кассу, узнать ее реальный магазин и принудительно записать этот магазин в параметры сеанса пользователя «на лету».
Создадим расширение и добавим в него процедуру-обработчик перед инициализацией формы РМК. Примерный код решения будет выглядеть следующим образом:
&НаСервере
Процедура Расш_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Получаем рабочее место текущего сеанса (компьютер)
ТекущееРабочееМесто = ПараметрыСеанса.РабочееМестоКлиента;
Если ЗначениеЗаполнено(ТекущееРабочееМесто) Тогда
// Запрашиваем из базы данных магазин, к которому относится касса этого рабочего места
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
| КассыККМ.Магазин КАК Магазин
|ИЗ
| Справочник.КассыККМ КАК КассыККМ
|ГДЕ
| КассыККМ.РабочееМесто = &РабочееМесто
| И НЕ КассыККМ.ПометкаУдаления";
Запрос.УстановитьПараметр("РабочееМесто", ТекущееРабочееМесто);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
// Динамически подменяем параметр текущего магазина для сеанса
ПараметрыСеанса.ТекущийМагазин = Выборка.Магазин;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Преимущество этого метода: Полная автоматизация. Продавец заходит под своей учетной записью на любом торговом объекте, система определяет физическое местоположение компьютера и сама переключает контекст магазина в фоновом режиме. Кассир даже не заметит изменений и сможет сразу приступить к продажам.
---
Иногда требуется решить проблему прямо сейчас, «в полевых условиях», когда нет времени писать расширение или перенастраивать карты сотрудников. Если у продавцов заблокирован интерфейс РМК (отключена кнопка «Закрыть»), они физически не могут выйти в главное меню 1С, чтобы сменить магазин.
Для обхода этой блокировки мы можем использовать встроенные возможности платформы 1С:
Важное предупреждение: Данный метод является временным костылем. Он требует обучения линейного персонала и создает риск человеческого фактора (продавец может забыть переключить магазин, выбрать не тот объект или случайно сбить другие важные настройки программы).
---
Если ваши магазины удалены друг от друга, а связь осуществляется через интернет (посредством VPN или веб-сервера), постоянная работа в единой онлайн-базе может приводить к задержкам отклика интерфейса и зависаниям торгового оборудования. В таком случае оптимальным архитектурным решением станет переход на РИБ (Распределенную информационную базу) по магазинам.
При использовании РИБ в каждом магазине разворачивается своя локальная информационная база (узел), которая периодически синхронизируется с центральным офисом. В локальной базе каждого магазина физически отсутствуют настройки других торговых точек, а параметр ПараметрыСеанса.ТекущийМагазин намертво привязан к конкретному узлу РИБ.
В такой схеме под каким бы пользователем кассир ни зашел в программу, система всегда будет работать в контексте локального магазина текущей торговой точки, что полностью исключает возникновение подобных ошибок кассового оборудования.