В процессе эксплуатации большого парка контрольно-кассовой техники (ККТ) перед системными администраторами и программистами 1С встает критически важная задача: своевременный мониторинг срока действия фискальных накопителей (ФН). Пропуск даты замены ФН ведет к блокировке кассы и невозможности осуществлять торговые операции, что в условиях розничной сети может обернуться серьезными убытками и штрафными санкциями со стороны налоговых органов.
В этой статье мы подробно разберем, как автоматизировать процесс получения данных о сроке действия ФН программными средствами, рассмотрим специфику драйверов основных производителей (Атол и Штрих-М) и выясним, какие универсальные механизмы предоставляет платформа 1С.
Начнем наш анализ с оборудования компании «Штрих-М». Драйверы этого производителя обладают развитым программным интерфейсом, позволяющим напрямую опрашивать состояние ФН. Рассмотрим подробнее метод FNGetExpirationTime (в русской локализации — ФНЗапросСрокаДействия).
Для программной реализации в среде 1С нам необходимо выполнить следующие шаги:
Проанализируем пример кода для работы с драйвером «Штрих-М»:
// Предположим, ОбъектДрайвера уже инициализирован и связь установлена
ОбъектДрайвера.Password = 30; // Пароль администратора по умолчанию
Результат = ОбъектДрайвера.FNGetExpirationTime();
Если Результат = 0 Тогда
ДатаОкончания = ОбъектДрайвера.Date;
Сообщить("Срок действия ФН истекает: " + Формат(ДатаОкончания, "ДЛФ=D"));
Иначе
Сообщить("Ошибка при запросе данных: " + ОбъектДрайвера.ResultCodeDescription);
КонецЕсли;
Обратите внимание, что после успешного выполнения метода FNGetExpirationTime, дата считывается из свойства Date объекта драйвера. Это надежный способ, который работает непосредственно с физическим чипом ФН.
Ситуация с ККТ «Атол» несколько сложнее, так как подходы различаются в зависимости от используемой версии драйвера (ДТО 8, 9 или 10). Рассмотрим сначала классический подход для 8-й версии драйвера (ДТО 8), который до сих пор встречается во многих внедрениях.
Для получения параметров ФН в ДТО 8 используется метод ReadFNParam() (или ЧтениеПараметраФН()). Чтобы получить именно срок действия, необходимо передать в качестве параметра значение ValuePurpose = 2. Выясним, как это выглядит в коде:
Объект.ValuePurpose = 2; // Признак запроса срока действия ФН
Объект.ReadFNParam();
Если Объект.ResultCode = 0 Тогда
// Срок действия возвращается по компонентам
День = Объект.Day;
Месяц = Объект.Month;
Год = 2000 + Объект.Year;
ДатаСрока = Дата(Год, Месяц, День);
Сообщить("ФН действителен до: " + ДатаСрока);
// Также можно узнать ресурс перерегистраций
ОсталосьПопыток = Объект.Duration;
Сообщить("Осталось перерегистраций: " + ОсталосьПопыток);
КонецЕсли;
В современной 10-й версии драйвера (ДТО 10), которая является наиболее актуальной, логика работы построена на объектах данных. Для получения информации используется метод queryData(). Мы устанавливаем тип запроса в значение LIBPTR_DT_FN_EXPIRATION_DATE, а результат получаем через структуру параметров LIBPTR_PARAM_DATE_TIME. Это более универсальный и современный подход, который мы рекомендуем использовать в новых разработках.
Если ваша конфигурация 1С использует современную БПО, мы можем абстрагироваться от конкретной модели кассы и версии драйвера. В БПО реализован унифицированный интерфейс. Разберем по шагам, как получить данные через 1С:
Метод ПолучитьПараметрыККТ возвращает XML-структуру, содержащую детальную информацию о состоянии устройства. В этом XML-пакете присутствует узел, отвечающий за фискальный накопитель.
// Пример получения параметров через БПО
ПараметрыККТ = "";
Результат = МенеджерОборудованияКлиент.ПолучитьПараметрыККТ(ИдентификаторУстройства, ПараметрыККТ);
Если Результат Тогда
// Анализируем XML в переменной ПараметрыККТ
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ПараметрыККТ);
// Находим узел "FNExpirationDate" (ДатаОкончанияФН)
КонецЕсли;
Этот метод хорош тем, что 1С сама транслирует команду на язык нужного драйвера, будь то Атол, Штрих-М, Дримкас или Эвотор. Это избавляет программиста от необходимости изучать документацию к каждому конкретному драйверу.
Проанализируем важный технический момент, который часто упускают при автоматизации контроля. ФН может выйти из строя (заблокироваться) по двум причинам:
Рекомендация: При программном опросе кассы обязательно считывайте не только дату, но и текущий номер последнего фискального документа. Если номер документа приближается к 200 000, стоит запланировать замену ФН заранее, даже если календарный срок еще позволяет работать. Современные ФН также передают в драйвер флаги предупреждения: «Ресурс ФН менее 30 дней» или «Память ФН почти заполнена». Проверяйте эти биты состояния в ответах драйвера.
Если у вас сотни касс в разных регионах, постоянный опрос каждой кассы через драйвер может быть затруднен из-за нестабильного интернет-соединения или специфики работы (например, касса подключена к мобильному приложению). В этом случае рассмотрим альтернативный вариант — использование API вашего ОФД.
Почти все крупные операторы («Такском», «Платформа ОФД», «Первый ОФД») предоставляют программный доступ к личному кабинету. С каждым пробитым чеком касса передает в ОФД информацию о своем состоянии. Сделав один запрос к API ОФД, вы получите таблицу по всем своим кассам с указанием дат окончания ФН. Это позволяет построить централизованную панель мониторинга в 1С без прямого обращения к каждой кассе.
Мы выяснили, что наиболее эффективным способом для контроля небольшого количества касс является использование методов драйверов ReadFNParam (Атол) и FNGetExpirationTime (Штрих-М). Для крупных сетей оптимальным выбором станет сочетание универсальных методов 1С:БПО и регулярного сбора данных через API ОФД. Помните, что автоматизация этого процесса — лучший способ избежать внезапных остановок торговли и штрафных рисков.