При расчетах между организациями и индивидуальными предпринимателями с использованием наличных или электронных средств платежа закон требует указывать в кассовом чеке наименование покупателя (тег 1227) и его ИНН (тег 1228). В современных конфигурациях 1С на управляемых формах этот функционал давно реализован "из коробки". Однако пользователи старых, но до сих пор активно используемых конфигураций на обычных формах (таких как 1С:Управление торговлей, редакция 10.3 или 1С:Управление производственным предприятием, редакция 1.3) сталкиваются с серьезной технической проблемой.
Давайте подробно разберем, почему возникает эта сложность и как решить ее по шагам для кассового оборудования брендов АТОЛ и Штрих-М.
Попытка просто обновить драйвер АТОЛ ДТО до версии 10.5.0.0 и выше в УТ 10.3 приводит к аварийному завершению работы или ошибке Слишком много фактических параметров при открытии смены или печати чека. Это происходит из-за несовместимости версий требований к разработке драйверов (БПО — Библиотеки подключаемого оборудования):
dll-библиотеках изменили состав и количество принимаемых параметров.Для решения этой проблемы без тотального обновления БПО всей конфигурации (что часто невозможно в сильно измененных базах) мы применим метод подмены интеграционной компоненты внутри обработки обслуживания и точечно доработаем общий модуль формирования XML-пакета чека.
---
Для того чтобы обойти несовместимость интерфейсов и передать теги 1227 и 1228, мы воспользуемся переходной версией внешней компоненты, которую компания АТОЛ выпустила специально для поддержки старых стандартов БПО. Проанализируем процесс настройки по шагам.
Нам понадобится специальная библиотека fptr10_1c_win32_0_0_0_237.dll (также известная как переходная компонента под БПО 2.5). Она поддерживает передачу тегов покупателя, но сохраняет старую сигнатуру функций.
ATOLkkt.epf) или откроем ее через меню "Файл" -> "Открыть", если она хранится на диске.fptr10_1c_win32_0_0_0_237.dll (при необходимости переименовав его в соответствии с тем, как файл назывался в макете изначально, или сохранив исходное имя компоненты).Теперь нам нужно научить конфигурацию передавать ИНН и наименование контрагента в 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Строка(ОбщиеПараметры.ПолучательИНН));
КонецЕсли;
Теперь необходимо передать реальные данные из документа-основания (например, "Реализация товаров и услуг" или "Чек ККМ") в структуру параметров. Перейдем к функции ПодготовитьДанныеДляФискализацииЧека в том же модуле МенеджерОборудованияВызовСервера и пропишем получение данных контрагента:
// Извлекаем ИНН и наименование покупателя из документа-основания
Если ЗначениеЗаполнено(Ссылка) И ОбщегоНазначения.ЕстьРеквизитДокумента("Контрагент", Ссылка.Метаданные()) Тогда
Если ЗначениеЗаполнено(Ссылка.Контрагент) Тогда
ОбщиеПараметры.Получатель = СокрЛП(Ссылка.Контрагент.НаименованиеПолное);
ОбщиеПараметры.ПолучательИНН = СокрЛП(Ссылка.Контрагент.ИНН);
КонецЕсли;
КонецЕсли;
Важное замечание для конфигурации 1С:УПП 1.3: в этой программе данные могут передаваться через клиентский модуль ПодключаемоеОборудованиеУниверсальныйДрайверКлиент в функции ФискализацияЧека. Нам нужно получить ИНН и наименование напрямую из структуры входящих параметров перед формированием XML-пакета:
Попытка
ОбщиеПараметры.Получатель = СокрЛП(ВходныеПараметры[0].ДокументОснование.Контрагент.НаименованиеПолное);
ОбщиеПараметры.ПолучательИНН = СокрЛП(ВходныеПараметры[0].ДокументОснование.Контрагент.ИНН);
Исключение
// Обработка ситуации, если документ пробивается без контрагента (розница)
ОбщиеПараметры.Получатель = "";
ОбщиеПараметры.ПолучательИНН = "";
КонецПопытки;
Чтобы система не выдавала ошибку при обращении к несуществующим свойствам структуры, откроем общий модуль МенеджерОборудованияКлиентСервер. Найдем функцию ПараметрыОперацииФискализацииЧека и добавим инициализацию новых свойств в возвращаемую структуру:
// Инициализируем новые свойства структуры параметров чека
ПараметрыЧека.Вставить("Получатель", ""); // Строка
ПараметрыЧека.Вставить("ПолучательИНН", ""); // Строка
---
Для владельцев кассовых аппаратов Штрих-М алгоритм решения схож, однако имеет свои особенности, связанные со спецификой работы драйвера и таблиц ККМ. Разберем по шагам, как настроить Штрих-М.
C:\Program Files (x86)\SHTRIH-M\DrvFR 4.14\Bin\1C\shtrih-m_25.zip (или аналогичный файл с поддержкой требований БПО 2.5).МенеджерОборудованияВызовСервера внедрен программный код из Шага 2 и Шага 3 (формирование XML-атрибутов CustomerInfo и CustomerINN).---
После внесения доработок и обновления компонент обязательно обратите внимание на следующие моменты:
СокрЛП и проверять длину строки.Таким образом, выполнив подмену внутренних компонент на стабильные переходные версии и точечно скорректировав логику формирования XML-пакета, мы получаем полностью рабочее решение для печати B2B-реквизитов на кассах АТОЛ и Штрих-М без необходимости сложного и рискованного обновления всей конфигурации 1С:Управление торговлей 10.3.