Как подключить новый эмулятор ККТ (FPEmulatorKKT1C2.dll) к УТ 10.3 или УПП 1.3 без использования БПО

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

При разработке и тестировании торговых операций в устаревших конфигурациях, таких как Управление торговлей 10.3, УПП 1.3 или КА 1.1, программисты часто сталкиваются с проблемой отсутствия физического оборудования. Старые эмуляторы ККТ уже не справляются с современными требованиями: они не поддерживают форматы фискальных данных ФФД 1.05, 1.1 и 1.2, а также не умеют работать с маркировкой честных знаков. Решением становится использование новой библиотеки от 1С — FPEmulatorKKT1C2.dll.

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

Зачем использовать новый эмулятор версии 2.0?

Разберем основные причины, по которым старый EmulatorKKT.dll больше не подходит для качественной отладки:

  1. Поддержка ФФД 1.2: Новый эмулятор позволяет тестировать продажу маркированных товаров, имитируя проверку кодов маркировки и возвращая статусы проверки.
  2. Сложные распределения оплат: Мы можем проверить, как программа поведет себя при частичной оплате, авансах или кредитах, что критично для ФФД 1.05.
  3. Логирование: Компонента сохраняет подробные XML-пакеты, которые 1С передает драйверу. Это позволяет отладить структуру чека без печати бумажных копий.
  4. Обучение персонала: Кассиры могут тренироваться на реальных бизнес-процессах без риска зафискализировать лишнюю сумму.

Шаг 1: Получение компоненты и подготовка макета

Для начала нам необходимо раздобыть саму библиотеку FPEmulatorKKT1C2.dll. Проще всего ее найти в составе дистрибутивов последних версий «Библиотеки подключаемого оборудования» на портале 1С или выгрузить из современных типовых конфигураций (например, УТ 11 или Розница 2.3).

В конфигурации 1С на обычных формах рекомендуется создать новый объект типа Макет (двоичные данные) внутри обработки обслуживания ККТ или непосредственно в дереве конфигурации. Назовем его ИнтеграционнаяКомпонента.

Шаг 2: Программное подключение компоненты

Рассмотрим ситуацию, когда стандартное подключение через COM не срабатывает. Несмотря на то, что в манифесте может быть указан тип «com», современная компонента написана с использованием Native API. Проанализируем правильный код инициализации:


// Помещаем компоненту во временное хранилище или работаем напрямую с макетом
Макет = ПолучитьМакет("ИнтеграционнаяКомпонента");
Адрес = ПоместитьВоВременноеХранилище(Макет);

// Пробуем подключить компоненту по технологии Native
РезультатПодключения = ПодключитьВнешнююКомпоненту(Адрес, "ЭмуляторККТ", ТипВнешнейКомпоненты.Native);

Если РезультатПодключения Тогда
    Попытка
        // Используем актуальный ProgID для второй версии эмулятора
        Драйвер = Новый("AddIn.ЭмуляторККТ.FPEmulatorKKT1C2");
        Сообщить("Эмулятор ККТ успешно подключен!");
    Исключение
        Сообщить("Ошибка создания объекта драйвера: " + ОписаниеОшибки());
    КонецПопытки;
Иначе
    Сообщить("Не удалось подключить внешнюю компоненту.");
КонецЕсли;

Важный нюанс: Если вы работаете в 64-битной версии клиента 1С, убедитесь, что библиотека соответствует разрядности платформы. В противном случае метод ПодключитьВнешнююКомпоненту вернет Ложь.

Шаг 3: Настройка параметров эмулятора

После создания объекта Драйвер, его необходимо настроить. Даже эмулятору нужны параметры, чтобы он понимал, какой формат данных имитировать. Разберем, как передать параметры без использования механизмов БПО:


// Установка версии ФФД (например, 1.2)
Драйвер.УстановитьПараметр("FiscalDataFormat", "1.2");

// Указываем путь к лог-файлу, где будут храниться "напечатанные" чеки в XML
Драйвер.УстановитьПараметр("LogFile", "C:\Logs\KKT_Emulator_Log.xml");

// Соединение с устройством (имитация)
РезультатСоединения = Драйвер.Подключить();
Если Не РезультатСоединения Тогда
    ТекстОшибки = "";
    Драйвер.ПолучитьОшибку(ТекстОшибки);
    Сообщить("Ошибка соединения: " + ТекстОшибки);
КонецЕсли;

Шаг 4: Формирование чека по новому стандарту

Главная сложность при работе с 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);

Типичные ошибки и их решение

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

Таким образом, использование нового эмулятора позволяет полноценно тестировать функционал маркировки и современных форматов фискальных данных даже в тех системах, которые формально считаются устаревшими. Это избавляет от необходимости покупки дорогостоящих "боевых" ККТ для нужд разработки и минимизирует количество ошибок при внедрении обновлений на реальных торговых точках.

← На главную