При разработке и тестировании торговых операций в устаревших конфигурациях, таких как Управление торговлей 10.3, УПП 1.3 или КА 1.1, программисты часто сталкиваются с проблемой отсутствия физического оборудования. Старые эмуляторы ККТ уже не справляются с современными требованиями: они не поддерживают форматы фискальных данных ФФД 1.05, 1.1 и 1.2, а также не умеют работать с маркировкой честных знаков. Решением становится использование новой библиотеки от 1С — FPEmulatorKKT1C2.dll.
В этой статье мы подробно разберем, как интегрировать эту компоненту в систему, работающую на обычных формах, минуя сложную установку всей Библиотеки Подключаемого Оборудования (БПО), и какие нюансы программной реализации необходимо учесть.
Разберем основные причины, по которым старый EmulatorKKT.dll больше не подходит для качественной отладки:
Для начала нам необходимо раздобыть саму библиотеку FPEmulatorKKT1C2.dll. Проще всего ее найти в составе дистрибутивов последних версий «Библиотеки подключаемого оборудования» на портале 1С или выгрузить из современных типовых конфигураций (например, УТ 11 или Розница 2.3).
В конфигурации 1С на обычных формах рекомендуется создать новый объект типа Макет (двоичные данные) внутри обработки обслуживания ККТ или непосредственно в дереве конфигурации. Назовем его ИнтеграционнаяКомпонента.
Рассмотрим ситуацию, когда стандартное подключение через COM не срабатывает. Несмотря на то, что в манифесте может быть указан тип «com», современная компонента написана с использованием Native API. Проанализируем правильный код инициализации:
// Помещаем компоненту во временное хранилище или работаем напрямую с макетом
Макет = ПолучитьМакет("ИнтеграционнаяКомпонента");
Адрес = ПоместитьВоВременноеХранилище(Макет);
// Пробуем подключить компоненту по технологии Native
РезультатПодключения = ПодключитьВнешнююКомпоненту(Адрес, "ЭмуляторККТ", ТипВнешнейКомпоненты.Native);
Если РезультатПодключения Тогда
Попытка
// Используем актуальный ProgID для второй версии эмулятора
Драйвер = Новый("AddIn.ЭмуляторККТ.FPEmulatorKKT1C2");
Сообщить("Эмулятор ККТ успешно подключен!");
Исключение
Сообщить("Ошибка создания объекта драйвера: " + ОписаниеОшибки());
КонецПопытки;
Иначе
Сообщить("Не удалось подключить внешнюю компоненту.");
КонецЕсли;
Важный нюанс: Если вы работаете в 64-битной версии клиента 1С, убедитесь, что библиотека соответствует разрядности платформы. В противном случае метод ПодключитьВнешнююКомпоненту вернет Ложь.
После создания объекта Драйвер, его необходимо настроить. Даже эмулятору нужны параметры, чтобы он понимал, какой формат данных имитировать. Разберем, как передать параметры без использования механизмов БПО:
// Установка версии ФФД (например, 1.2)
Драйвер.УстановитьПараметр("FiscalDataFormat", "1.2");
// Указываем путь к лог-файлу, где будут храниться "напечатанные" чеки в XML
Драйвер.УстановитьПараметр("LogFile", "C:\Logs\KKT_Emulator_Log.xml");
// Соединение с устройством (имитация)
РезультатСоединения = Драйвер.Подключить();
Если Не РезультатСоединения Тогда
ТекстОшибки = "";
Драйвер.ПолучитьОшибку(ТекстОшибки);
Сообщить("Ошибка соединения: " + ТекстОшибки);
КонецЕсли;
Главная сложность при работе с FPEmulatorKKT1C2.dll в старых конфигурациях — это формат передаваемых данных. Старые обработки обслуживания УТ 10.3 использовали простые методы вроде НапечататьСтроку(). Новый эмулятор работает по Стандарту 3.0, где весь чек передается одним XML-пакетом в метод СформироватьЧек.
Проанализируем примерную структуру формирования XML для передачи в драйвер:
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("CheckPackage");
// Описание позиций чека
ЗаписьXML.ЗаписатьНачалоЭлемента("Positions");
ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name", "Товар тестовый");
ЗаписьXML.ЗаписатьАтрибут("Quantity", "1");
ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount", "100.00");
ЗаписьXML.ЗаписатьАтрибут("SumWithDiscount", "100.00");
ЗаписьXML.ЗаписатьАтрибут("VATRate", "20");
ЗаписьXML.ЗаписатьАтрибут("CalculationMethod", "4"); // Полный расчет
ЗаписьXML.ЗаписатьАтрибут("CalculationSubject", "1"); // Товар
ЗаписьXML.ЗаписатьКонецЭлемента(); // FiscalString
ЗаписьXML.ЗаписатьКонецЭлемента(); // Positions
// Описание оплат
ЗаписьXML.ЗаписатьНачалоЭлемента("Payments");
ЗаписьXML.ЗаписатьАтрибут("Cash", "100.00");
ЗаписьXML.ЗаписатьКонецЭлемента(); // Payments
ЗаписьXML.ЗаписатьКонецЭлемента(); // CheckPackage
ДанныеЧекаXML = ЗаписьXML.Закрыть();
// Вызов печати чека на эмуляторе
Результат = Драйвер.СформироватьЧек(ДанныеЧекаXML);
При интеграции мы можем столкнуться со следующими проблемами:
AddIn.EmulatorKKT1C2 или иметь префикс, указанный при регистрации.LogFile.Таким образом, использование нового эмулятора позволяет полноценно тестировать функционал маркировки и современных форматов фискальных данных даже в тех системах, которые формально считаются устаревшими. Это избавляет от необходимости покупки дорогостоящих "боевых" ККТ для нужд разработки и минимизирует количество ошибок при внедрении обновлений на реальных торговых точках.