Как получить заводской и регистрационный номер ККТ в 1С 7.7 с использованием драйвера АТОЛ 8

Программист 1С v7.7 Торговля и дистрибуция
← На главную

При работе с торговым оборудованием в среде 1С 7.7 часто возникает необходимость программно получить идентификационные данные кассового аппарата (ККТ). Несмотря на повсеместный переход на 10-ю версию драйверов АТОЛ, парк оборудования с устаревшими прошивками (ниже платформы 2.5) или специфические требования конфигураций заставляют разработчиков продолжать использовать драйвер АТОЛ ДТО 8. В этой статье мы подробно разберем, как получить заводской номер кассы, номер фискального накопителя и регистрационный номер через объект драйвера.

Метод 1: Получение заводского номера через статус устройства

Самый простой и быстрый способ узнать серийный номер аппарата — использовать встроенный метод GetStatus. Этот метод заполняет свойства объекта драйвера актуальными данными о состоянии ККТ. Разберем этот процесс по шагам:

Для начала необходимо убедиться, что связь с объектом установлена. После вызова метода данные будут доступны в свойстве SerialNumber.


// Предположим, что Объект — это созданный экземпляр драйвера АТОЛ 8 (AddIn.FPrnM45)
Объект.GetStatus();
ЗаводскойНомерККТ = Объект.SerialNumber;
Сообщить("Заводской номер кассы: " + ЗаводскойНомерККТ);

Этот способ является универсальным и работает практически на всех версиях прошивок. Однако он возвращает только основной серийный номер самого устройства.

Метод 2: Использование регистров ККТ (универсальный подход)

Более гибкий и профессиональный способ получения данных в драйверах 8-й серии — это прямое обращение к внутренним регистрам ККТ. Каждому параметру (номер ФН, заводской номер, регистрационный номер) соответствует определенный номер регистра. Рассмотрим подробнее, как это реализовать программно.

Проанализируем ситуацию: для чтения данных из регистра нам нужно сначала передать его номер в свойство RegisterNumber, затем вызвать метод GetRegister(), и, если выполнение прошло без ошибок (результат равен 0), считать значение из соответствующего поля.

Получение заводского номера ККТ (регистр 22):


Объект.RegisterNumber = 22;
Если Объект.GetRegister() = 0 Тогда
    ЗаводскойНомерККТ = Объект.SerialNumber;
    Сообщить("Серийный номер устройства: " + ЗаводскойНомерККТ);
КонецЕсли;

Получение номера фискального накопителя (регистр 47):

Для идентификации конкретного экземпляра ФН используется 47-й регистр. Это критически важно при замене накопителя или проверке его срока действия.


Объект.RegisterNumber = 47;
Если Объект.GetRegister() = 0 Тогда
    НомерФН = Объект.SerialNumber; // В этом контексте SerialNumber вернет номер ФН
    Сообщить("Серийный номер ФН: " + НомерФН);
КонецЕсли;

Метод 3: Получение регистрационного номера ККТ (РН ККТ)

Выясним причину, по которой получение регистрационного номера вызывает больше всего вопросов. В отличие от заводского номера, который жестко "прошит" в железе, регистрационный номер (РН ККТ) присваивается налоговой службой и записывается в кассу при фискализации. В 8-й версии драйвера эти данные хранятся в 54-м регистре (или 52-м, в зависимости от версии прошивки и формата фискальных данных).

Рассмотрим пример получения регистрационного номера:


Объект.RegisterNumber = 54;
Если Объект.GetRegister() = 0 Тогда
    РегНомерККТ = Объект.RegistrationNumber;
    ИНН_Владельца = Объект.INN;
    Сообщить("Регистрационный номер: " + РегНомерККТ);
    Сообщить("ИНН организации: " + ИНН_Владельца);
Иначе
    // Если 54-й регистр не поддерживается, попробуем 52-й
    Объект.RegisterNumber = 52;
    Объект.GetRegister();
    РегНомерККТ = Объект.RegistrationNumber;
    Сообщить("Рег. номер (из 52 рег.): " + РегНомерККТ);
КонецЕсли;

Особенности работы с поздними версиями ДТО 8 (8.16.x)

Если вы используете одну из последних версий драйвера 8.16.x, которая была выпущена для поддержки ФФД 1.05, в ней реализован более современный метод GetRegistrationParameters. Он позволяет получить всю структуру данных регистрации одним вызовом, без необходимости перебирать регистры вручную.

Посмотрим на пример использования этого метода:


// Метод заполняет свойства RegistrationNumber, INN и другие
Если Объект.GetRegistrationParameters() = 0 Тогда
    ЗаводскойНомер = Объект.SerialNumber;
    РегНомер = Объект.RegistrationNumber;
    ИНН = Объект.INN;
    Сообщить("Данные успешно получены через параметры регистрации.");
КонецЕсли;

Важные замечания и рекомендации

При реализации вышеуказанных методов стоит учитывать несколько технических нюансов, характерных для платформы 1С 7.7 и старых драйверов:

  1. Режимы работы: Для чтения большинства регистров ККТ должна находиться в режиме "Выбор" (Mode 0) или "Регистрация" (Mode 1). Если на кассе открыт чек или она находится в режиме администратора, метод GetRegister() может вернуть ошибку.
  2. Обработка ошибок: Всегда проверяйте результат выполнения функций. В 1С 7.7 это делается сравнением возвращаемого значения с нулем. Если значение отлично от нуля, описание ошибки можно получить в свойстве ResultDescription.
  3. Версии прошивок: Помните, что драйвер 8.16 перестал поддерживаться АТОЛом и не работает с современными требованиями ФФД 1.2 (маркировка). Если перед вами стоит задача работы с маркированным товаром, оборудование придется обновить до платформы 5.0 и перейти на 10-й драйвер.
  4. Длина строк: В 1С 7.7 строковые реквизиты в справочниках часто имеют ограниченную длину (например, 10-15 символов). Современные заводские номера АТОЛ могут быть длиннее, поэтому убедитесь, что в конфигурации достаточно места для хранения номера.

Таким образом, мы проанализировали основные способы взаимодействия с кассовым аппаратом АТОЛ через устаревший, но все еще актуальный драйвер 8-й версии. Использование регистров 22, 47 и 54 является наиболее надежным методом получения идентификационных данных в среде 1С 7.7.

← На главную