Как открыть кассовую смену на ККТ Штрих-М в устаревших конфигурациях 1С

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

При интеграции современного торгового оборудования с устаревшими конфигурациями «1С:Предприятие» (например, «1С:Общепит 2.5» или старыми версиями «1С:Управление торговлей 10.3», работающими на обычных формах) разработчики часто сталкиваются с техническими трудностями. Одна из самых распространенных проблем — невозможность открыть кассовую смену из интерфейса программы при использовании старых обработок обслуживания, таких как ShtrihMFiscalPrinters_v2.epf.

В этой статье мы подробно разберем, почему возникает данная проблема, рассмотрим физику взаимодействия торгового оборудования с платформой «1С» под требования 54-ФЗ и изучим несколько практических способов решения: от простых ручных манипуляций до изменения программного кода и прямого управления драйвером ККТ через COM-объект.

Почему возникает проблема с открытием смены?

Для того чтобы понять суть проблемы, проанализируем разницу в законодательстве и технологиях до и после введения 54-ФЗ:

  1. До введения 54-ФЗ: Фискальные регистраторы старого образца не требовали обязательной отправки отдельного электронного документа об открытии смены оператору фискальных данных (ОФД). Кассовая смена открывалась автоматически «по факту» — в момент печати первого фискального чека при вызове стандартного метода ОткрытьЧек (OpenCheck) драйвера. Именно под эту логику и проектировалась обработка ShtrihMFiscalPrinters_v2.epf.
  2. После введения 54-ФЗ: Согласно новым требованиям, формирование «Отчета об открытии смены» является строго обязательной операцией. Касса должна отправить этот отчет в ОФД до того, как будет пробит первый чек. Современные ККТ блокируют печать чеков, если команда открытия смены не была передана явно.

Поскольку в старой обработке обслуживания ShtrihMFiscalPrinters_v2.epf просто отсутствует программный вызов команды открытия смены, ККТ выдает ошибку, а пользователь не может начать работу. Ниже мы разберем четыре эффективных метода решения этой задачи.

Способ 1. Ручное управление сменой через тест драйвера (быстрый обходной путь)

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

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

  1. Закройте программу «1С», чтобы освободить COM-порт, к которому подключена касса (одновременное подключение «1С» и утилиты драйвера к одному порту невозможно).
  2. Запустите программу «Тест драйвера ККТ» (обычно она находится по пути Пуск -> ШТРИХ-М -> Тест драйвера ФР).
  3. Нажмите кнопку «Свойства» в правой части окна.
  4. В открывшемся окне настройте параметры связи (укажите правильный COM-порт или IP-адрес, скорость подключения) и нажмите кнопку «Проверка связи». Если внизу окна появилось название вашей модели ККТ (например, «ШТРИХ-ЛАЙТ-01Ф»), связь установлена успешно.
  5. Нажмите кнопку «ОК» (или «Применить»), чтобы сохранить настройки драйвера.
  6. Перейдите в левом меню в раздел «Операции» или «ФН» (в зависимости от версии драйвера).
  7. Найдите вкладку или кнопку «Открыть смену». Нажмите ее. Касса должна издать звуковой сигнал и распечатать «Отчет об открытии смены».
  8. После этого обязательно закройте утилиту «Тест драйвера», запустите «1С» и продолжайте работу. Пробитие чеков теперь будет доступно, так как смена на кассовом аппарате уже открыта.

Важно помнить: Этот метод является временным костылем, так как кассиру придется выполнять эти действия ежедневно при начале работы.

Способ 2. Программное открытие смены через COM-объект драйвера в 1С

Если вы разрабатываете собственную доработку (например, рабочее место кассира или модуль расчета обедов для сотрудников по табельным номерам, как у автора темы), самым надежным решением будет прямое управление кассовым аппаратом через COM-объект драйвера AddIn.DrvFR.

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


// Инициализируем подключение к драйверу ККТ Штрих-М
Попытка
    ПодключитьВнешнююКомпоненту("AddIn.DrvFR");
    ФР = Новый COMОбъект("AddIn.DrvFR");
Исключение
    Предупреждение("Не удалось загрузить драйвер ККТ Штрих-М! Проверьте установку локального драйвера.");
    Возврат;
КонецПопытки;

// Устанавливаем параметры связи (в реальном коде параметры лучше считывать из настроек торгового оборудования)
ФР.Password = 30; // Пароль системного администратора по умолчанию для Штрих-М

// Подключаемся к физическому устройству
ФР.Connect();

Если ФР.ResultCode <> 0 Тогда
    Сообщить("Ошибка подключения к ККТ: " + ФР.ResultCodeDescription);
    Возврат;
КонецЕсли;

// Запрашиваем текущее состояние ККТ, чтобы проверить статус смены
ФР.GetECRStatus();

// Анализируем текущий режим работы кассы (свойство ECRMode)
// Режим 3 означает, что смена закрыта. 
// Режим 2 означает, что смена открыта и длится менее 24 часов.
// Режим 4 означает, что смена превысила 24 часа (требуется Z-отчет).
Если ФР.ECRMode = 3 Тогда
    Сообщить("Кассовая смена закрыта. Выполняем автоматическое открытие...");
    
    // Вызываем команду открытия смены на фискальном накопителе
    ФР.OpenSession(); 
    
    Если ФР.ResultCode <> 0 Тогда
        Сообщить("Не удалось открыть смену на ККТ! Код ошибки: " + ФР.ResultCode + " (" + ФР.ResultCodeDescription + ")");
    Иначе
        Сообщить("Кассовая смена успешно открыта программно!");
    КонецЕсли;
ИначеЕсли ФР.ECRMode = 4 Тогда
    Предупреждение("Смена превысила 24 часа! Сначала снимите Z-отчет с гашением.");
Иначе
    Сообщить("Смена на ККТ уже открыта, можно продолжать продажи.");
КонецЕсли;

// Отключаемся от ККТ, чтобы освободить порт для других процессов
ФР.Disconnect();

Данный подход полностью решает проблему автоматизации. Перед каждой операцией продажи программа сама проверяет статус кассы и при необходимости открывает смену без участия человека.

Способ 3. Модернизация обработки обслуживания ShtrihMFiscalPrinters_v2.epf

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

Разберем этот процесс подробнее:

  1. Откройте обработку ShtrihMFiscalPrinters_v2.epf в режиме Конфигуратора «1С».
  2. Перейдите в модуль объекта обработки и найдите функции инициализации устройства. Нам необходимо перевести работу со старой библиотеки AddIn.DrvFR1C на новую библиотеку драйвера AddIn.SMDrvFR1C (компонента smDrvFR1CLib.dll), которая поставляется вместе с современными драйверами «Штрих-М» версии 4.13–4.15.
  3. Добавьте в интерфейсные функции обработки поддержку вызова метода открытия смены. В коде новой компоненты этот метод вызывается следующим образом: Результат = Объект.Драйвер.ОткрытьСмену(Объект.ИДУстройства);
  4. Зарегистрируйте библиотеку нового драйвера в операционной системе Windows. Для этого запустите командную строку от имени Администратора и выполните следующую команду (путь к файлу может отличаться в зависимости от установленной версии драйвера): regsvr32 "C:\Program Files (x86)\SHTRIH-M\DrvFR 4.15\Bin\1C\smDrvFR1CLib.dll"

После такой модернизации старая конфигурация «1С» сможет полноценно взаимодействовать с онлайн-кассой по новым протоколам 54-ФЗ.

Способ 4. Переход на БПО (Библиотеку подключаемого оборудования)

Этот способ является наиболее радикальным, но гарантирует стабильную работу в будущем. В современных конфигурациях «1С» механизмы работы с торговым оборудованием вынесены в отдельную подсистему — БПО.

Все обработки обслуживания для БПО содержат в своем названии префикс kkt (например, kktShtrihMFiscalPrinters.epf). При использовании этого механизма:

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

Резюме и рекомендации

Выбор конкретного решения зависит от ваших задач и квалификации:

← На главную