При автоматизации розничной торговли в программах семейства 1С (Управление торговлей, Розница, УНФ) часто используется схема работы, когда менеджеры в торговом зале оформляют и откладывают чеки на своих персональных компьютерах, а кассир на центральном рабочем месте открывает их и пробивает на физическом фискальном регистраторе. Однако при настройке такой схемы специалисты часто сталкиваются с неприятной ошибкой: в документе Кассовая смена не заполняется реквизит Касса ККМ, из-за чего на подчиненных компьютерах становится невозможно сохранить или отложить чек, и система выдает ошибку «Не заполнено поле КассаККМ».
В этой статье мы подробно проанализируем ситуацию, выясним глубинную причину такого поведения системы, разберем по шагам логику работы торгового оборудования в 1С и рассмотрим несколько эффективных способов решения проблемы — от простых административных настроек до программного обхода.
Для того чтобы понять природу ошибки, проанализируем, как взаимосвязаны объекты торгового оборудования в экосистеме 1С. Логика работы розничных продаж жестко завязана на понятие Рабочее место. Рабочее место в 1С — это уникальный идентификатор, который создается автоматически для каждого физического компьютера (или сессии пользователя) на основе имени компьютера в сети и учетной записи операционной системы.
Справочник Кассы ККМ служит связующим звеном. Каждая запись в этом справочнике сопоставляет конкретную кассу организации с определенным Рабочим местом и конкретным экземпляром Подключаемого оборудования. Когда на основном компьютере (где физически подключена ККТ) открывается смена, система легко определяет связку. Но на втором («клиентском») компьютере уникальный идентификатор рабочего места другой, и физического оборудования к нему не подключено.
Проанализируем программное поведение документа Кассовая смена. В типовом коде заложено разделение логики:
ФискальноеУстройство, но при этом реквизит Касса ККМ может оставаться пустым.Касса ККМ, игнорируя фискальное устройство.Когда менеджер на втором компьютере пытается создать документ Чек ККМ, система обращается к открытой кассовой смене. Не найдя заполненного реквизита Касса ККМ в текущей кассовой смене, программа блокирует запись чека. Посмотрим на практические методы решения этой проблемы.
Рассмотрим метод, который часто помогает решить проблему без изменения программного кода. Он особенно актуален, если сбой произошел внезапно (например, после обновления платформы, конфигурации или драйверов торгового оборудования), из-за чего сбились внутренние идентификаторы рабочих мест.
Разберем этот процесс по шагам:
Кассы ККМ и откроем его. Обратите внимание, что нам нужен именно этот справочник, а не просто список обычных касс предприятия.После этой процедуры очистите кэш программы и перезапустите 1С. Попробуйте закрыть текущую кассовую смену и открыть ее заново. Во многих случаях перевыбор элементов позволяет системе корректно сопоставить новое рабочее место с существующими настройками оборудования.
Если административные настройки не помогают, а бизнес-процесс требует немедленного запуска работы, можно прибегнуть к программному заполнению реквизитов. Посмотрим на пример кода, который решает проблему незаполненного поля.
Нам необходимо принудительно устанавливать значение реквизита КассаККМ при создании или записи документов. Для этого мы можем использовать расширение конфигурации или внести изменения непосредственно в модуль объекта документа КассоваяСмена.
Рассмотрим пример кода, который принудительно назначает кассу ККМ из настроек текущего пользователя:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
// Проверяем, заполнено ли поле КассаККМ
Если Не ЗначениеЗаполнено(ЭтотОбъект.КассаККМ) Тогда
// Заполняем реквизит КассаККМ из настроек текущего пользователя
ЭтотОбъект.КассаККМ = Пользователи.ТекущийПользователь.КассаККМ;
КонецЕсли;
КонецПроцедуры
Этот простой обработчик гарантирует, что при создании или перезаписи документа Кассовая смена реквизит КассаККМ всегда будет заполнен. После того как реквизит установится в документе смены хотя бы один раз (это можно сделать даже вручную с помощью групповой обработки реквизитов), все чеки на втором компьютере будут успешно сохраняться и проводиться вплоть до момента закрытия этой смены.
Если второй компьютер используется исключительно для набивки чеков («компьютер-клиент»), правильным с точки зрения методологии 1С решением будет создание отдельной виртуальной кассы. Проанализируем, как настроить эту схему:
Кассы ККМ создадим новую запись для второго компьютера.При такой схеме менеджер на втором компьютере сможет безпрепятственно открывать смену, подбирать товары, создавать и откладывать чеки, так как система не будет требовать от него физического фискального регистратора. На основном же компьютере кассир в интерфейсе РМК (Рабочее место кассира) сможет выбирать отложенные чеки, созданные на виртуальной кассе, и фискализировать их на реальном принтере чеков.
Современные драйверы оборудования (например, драйвер ККТ АТОЛ 10-й версии или драйверы ШТРИХ-М) поддерживают работу по сети. Это позволяет двум компьютерам одновременно взаимодействовать с одной физической кассой:
В этом случае оба компьютера будут иметь полноценный доступ к кассе. Программа 1С на обоих рабочих местах будет корректно видеть состояние кассовой смены, заполнять реквизиты фискального устройства и проводить чеки напрямую с печатью на одном ФР.