Как настроить печать тегов 1227 и 1228 (данные покупателя и ИНН) в УТ 10.3 на кассах АТОЛ и Штрих-М?

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

При расчетах между организациями и индивидуальными предпринимателями с использованием наличных или электронных средств платежа закон требует указывать в кассовом чеке наименование покупателя (тег 1227) и его ИНН (тег 1228). В современных конфигурациях 1С на управляемых формах этот функционал давно реализован "из коробки". Однако пользователи старых, но до сих пор активно используемых конфигураций на обычных формах (таких как 1С:Управление торговлей, редакция 10.3 или 1С:Управление производственным предприятием, редакция 1.3) сталкиваются с серьезной технической проблемой.

Давайте подробно разберем, почему возникает эта сложность и как решить ее по шагам для кассового оборудования брендов АТОЛ и Штрих-М.

Выясняем причину: почему возникает ошибка "Слишком много фактических параметров"?

Попытка просто обновить драйвер АТОЛ ДТО до версии 10.5.0.0 и выше в УТ 10.3 приводит к аварийному завершению работы или ошибке Слишком много фактических параметров при открытии смены или печати чека. Это происходит из-за несовместимости версий требований к разработке драйверов (БПО — Библиотеки подключаемого оборудования):

  1. Новые версии драйверов используют Ревизию требований 3.0.
  2. УТ 10.3 старых релизов (например, 10.3.53.2) жестко ориентирована на работу с интеграционными компонентами под Ревизию требований 2.2 и ниже.
  3. Методы инициализации оборудования и получения описания в новых dll-библиотеках изменили состав и количество принимаемых параметров.

Для решения этой проблемы без тотального обновления БПО всей конфигурации (что часто невозможно в сильно измененных базах) мы применим метод подмены интеграционной компоненты внутри обработки обслуживания и точечно доработаем общий модуль формирования XML-пакета чека.

---

Решение для ККТ АТОЛ (ДТО 10)

Для того чтобы обойти несовместимость интерфейсов и передать теги 1227 и 1228, мы воспользуемся переходной версией внешней компоненты, которую компания АТОЛ выпустила специально для поддержки старых стандартов БПО. Проанализируем процесс настройки по шагам.

Шаг 1. Подготовка и замена внешней компоненты

Нам понадобится специальная библиотека fptr10_1c_win32_0_0_0_237.dll (также известная как переходная компонента под БПО 2.5). Она поддерживает передачу тегов покупателя, но сохраняет старую сигнатуру функций.

  1. Откроем конфигуратор вашей базы данных 1С:Управление торговлей 10.3.
  2. Найдем внешнюю обработку обслуживания ККТ АТОЛ (обычно это файл ATOLkkt.epf) или откроем ее через меню "Файл" -> "Открыть", если она хранится на диске.
  3. Перейдем в макеты обработки обслуживания и найдем макет с именем ИнтеграционнаяКомпонента (тип макета — Двоичные данные).
  4. Загрузим в этот макет подготовленный файл библиотеки fptr10_1c_win32_0_0_0_237.dll (при необходимости переименовав его в соответствии с тем, как файл назывался в макете изначально, или сохранив исходное имя компоненты).
  5. Сохраним обработку обслуживания и обновим ее в справочнике "Подключаемое оборудование" в режиме предприятия.

Шаг 2. Модификация общего модуля МенеджерОборудованияВызовСервера

Теперь нам нужно научить конфигурацию передавать ИНН и наименование контрагента в XML-пакет, который отправляется на кассу. Откроем общий модуль МенеджерОборудованияВызовСервера и внесем изменения в процедуры формирования XML.

Найдем функцию ПолучитьXMLПакетДляФискализацияЧека_ТО (в некоторых релизах она может называться СформироватьXMLПакетДляФискализацияЧека) и найдем место, где формируются атрибуты шапки чека. Добавим запись тегов 1227 и 1228:


// Вставляем код формирования тегов покупателя
Если Не ПустаяСтрока(ОбщиеПараметры.Получатель) Тогда
    ЗаписьXML.ЗаписатьАтрибут("CustomerInfo", XMLСтрока(ОбщиеПараметры.Получатель));
КонецЕсли;

Если Не ПустаяСтрока(ОбщиеПараметры.ПолучательИНН) Тогда
    ЗаписьXML.ЗаписатьАтрибут("CustomerINN", XMLСтрока(ОбщиеПараметры.ПолучательИНН));
КонецЕсли;

Обратите внимание: если ваша конфигурация обновлена до релизов 10.3.54.x и выше, код формирования XML-пакета разделяется в зависимости от ревизии интерфейса. В этом случае вставку нужно делать в блоке проверки версии стандарта (например, для версии 2.2 и выше):


ИначеЕсли ПараметрыФискализации.РевизияИнтерфейса > 2001 Тогда // Версия стандарта 2.2 и выше
    // ... существующий код заполнения атрибутов ...
    Если Не ПустаяСтрока(ОбщиеПараметры.Получатель) Тогда
        ЗаписьXML.ЗаписатьАтрибут("CustomerInfo", XMLСтрока(ОбщиеПараметры.Получатель));
    КонецЕсли;
    Если Не ПустаяСтрока(ОбщиеПараметры.ПолучательИНН) Тогда
        ЗаписьXML.ЗаписатьАтрибут("CustomerINN", XMLСтрока(ОбщиеПараметры.ПолучательИНН));
    КонецЕсли;

Шаг 3. Заполнение параметров фискализации данными контрагента

Теперь необходимо передать реальные данные из документа-основания (например, "Реализация товаров и услуг" или "Чек ККМ") в структуру параметров. Перейдем к функции ПодготовитьДанныеДляФискализацииЧека в том же модуле МенеджерОборудованияВызовСервера и пропишем получение данных контрагента:


// Извлекаем ИНН и наименование покупателя из документа-основания
Если ЗначениеЗаполнено(Ссылка) И ОбщегоНазначения.ЕстьРеквизитДокумента("Контрагент", Ссылка.Метаданные()) Тогда
    Если ЗначениеЗаполнено(Ссылка.Контрагент) Тогда
        ОбщиеПараметры.Получатель = СокрЛП(Ссылка.Контрагент.НаименованиеПолное);
        ОбщиеПараметры.ПолучательИНН = СокрЛП(Ссылка.Контрагент.ИНН);
    КонецЕсли;
КонецЕсли;

Важное замечание для конфигурации 1С:УПП 1.3: в этой программе данные могут передаваться через клиентский модуль ПодключаемоеОборудованиеУниверсальныйДрайверКлиент в функции ФискализацияЧека. Нам нужно получить ИНН и наименование напрямую из структуры входящих параметров перед формированием XML-пакета:


Попытка
    ОбщиеПараметры.Получатель = СокрЛП(ВходныеПараметры[0].ДокументОснование.Контрагент.НаименованиеПолное);
    ОбщиеПараметры.ПолучательИНН = СокрЛП(ВходныеПараметры[0].ДокументОснование.Контрагент.ИНН);
Исключение
    // Обработка ситуации, если документ пробивается без контрагента (розница)
    ОбщиеПараметры.Получатель = "";
    ОбщиеПараметры.ПолучательИНН = "";
КонецПопытки;

Шаг 4. Объявление параметров в клиентском модуле

Чтобы система не выдавала ошибку при обращении к несуществующим свойствам структуры, откроем общий модуль МенеджерОборудованияКлиентСервер. Найдем функцию ПараметрыОперацииФискализацииЧека и добавим инициализацию новых свойств в возвращаемую структуру:


// Инициализируем новые свойства структуры параметров чека
ПараметрыЧека.Вставить("Получатель", "");    // Строка
ПараметрыЧека.Вставить("ПолучательИНН", ""); // Строка

---

Решение для ККТ Штрих-М

Для владельцев кассовых аппаратов Штрих-М алгоритм решения схож, однако имеет свои особенности, связанные со спецификой работы драйвера и таблиц ККМ. Разберем по шагам, как настроить Штрих-М.

  1. Скачайте актуальную версию драйвера Штрих-М (например, версию 4.14_772 или новее) и установите её на рабочий компьютер.
  2. Перейдите в каталог установки драйвера, найдите zip-архив с интеграционной компонентой 1С. Обычно он располагается по пути: C:\Program Files (x86)\SHTRIH-M\DrvFR 4.14\Bin\1C\shtrih-m_25.zip (или аналогичный файл с поддержкой требований БПО 2.5).
  3. Откройте обработку обслуживания Штрих-М в конфигураторе 1С и аналогично инструкции для АТОЛ замените двоичные данные в макете ИнтеграционнаяКомпонента на содержимое этого архива.
  4. Убедитесь, что в общем модуле МенеджерОборудованияВызовСервера внедрен программный код из Шага 2 и Шага 3 (формирование XML-атрибутов CustomerInfo и CustomerINN).
  5. Важнейший нюанс для Штрих-М: запустите утилиту "Тест драйвера ФР", подключитесь к вашей кассе и перейдите в Таблицы. Откройте таблицу 17 "Региональные настройки", найдите поле 25 "Печать реквизитов покупателя" (в некоторых версиях прошивок оно может называться "Автопечать тегов") и установите значение этого поля равным 1. Без этой настройки драйвер будет получать теги от 1С, но сама касса не выведет их на бумажную ленту.
  6. Сохраните изменения в таблицах ККТ, закройте тест драйвера, откройте смену в 1С и выполните тестовую продажу.

---

Важные нюансы и проверка корректности работы

После внесения доработок и обновления компонент обязательно обратите внимание на следующие моменты:

Таким образом, выполнив подмену внутренних компонент на стабильные переходные версии и точечно скорректировав логику формирования XML-пакета, мы получаем полностью рабочее решение для печати B2B-реквизитов на кассах АТОЛ и Штрих-М без необходимости сложного и рискованного обновления всей конфигурации 1С:Управление торговлей 10.3.

← На главную