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