Как подключить торговое оборудование (ККТ, сканеры, принтеры) в самописную конфигурацию 1С 8.3

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработка собственной конфигурации (так называемой «самописки») с нуля дает разработчику полную свободу действий и исключительную производительность системы. Однако рано или поздно перед создателем такой конфигурации встает серьезная прикладная задача — автоматизация розничных продаж и подключение специализированного оборудования. К нему относятся сканеры штрихкодов, принтеры чеков и, самое сложное, фискальные регистраторы (контрольно-кассовая техника, или ККТ).

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

---

Два принципиальных пути интеграции оборудования

Когда перед нами встает задача подружить самописку с кассой и сканером, у нас есть два пути решения:

  1. Использование БПО (Библиотеки подключаемого оборудования) от фирмы «1С». Это готовое стандартизированное решение, которое содержит предопределенные интерфейсы, обработчики драйверов и формы для настройки параметров устройств.
  2. Прямая работа с драйверами производителей (через COM-объекты или Native API). Это низкоуровневый подход, при котором разработчик самостоятельно обращается к функциям DLL-библиотек (например, ДТО от АТОЛ или драйверу Штрих-М) и формирует пакеты данных вручную.

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

---

Вариант 1. Внедрение Библиотеки подключаемого оборудования (БПО)

Фирма «1С» выпускает и регулярно обновляет БПО. Эта библиотека является стандартом де-факто для всех типовых конфигураций. Основная ее ценность заключается в абстрагировании кода 1С от конкретных моделей устройств. Вы пишете код один раз под интерфейс БПО, а библиотека сама решает, как передать эти данные на ККТ «Атол», «Штрих-М», «Эвотор» или «Viki Print».

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

Шаг 1. Избирательный перенос объектов (минимизация объема)

Если вы просто объедините вашу конфигурацию с БПО «в лоб», база раздуется на десятки мегабайт, появится огромное количество неиспользуемых справочников, регистров и обработок. Выясним, как перенести только то, что действительно необходимо:

Шаг 2. Разрешение конфликтов с БСП

Если в вашей самописке уже используется Библиотека стандартных подсистем (БСП), то при объединении с БПО вы гарантированно столкнетесь с конфликтами общих модулей. Некоторые базовые модули, такие как ОбщегоНазначенияКлиентСервер, присутствуют в обеих библиотеках.

Ни в коем случае не заменяйте эти модули автоматически! Нам потребуется ручное сопоставление. Проанализируйте различия в коде модулей и аккуратно перенесите недостающие экспортные процедуры и функции из БПО в ваши существующие общие модули БСП. Также не забудьте прописать инициализацию оборудования в модуле управляемого приложения и модуле сеанса, как это описано в файле Readme.html, идущем в комплекте поставки БПО.

Шаг 3. Адаптация логики под свои нужды

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

---

Вариант 2. Прямая работа с драйвером (без БПО)

Если вы принципиально хотите сохранить конфигурацию «чистой» от стороннего кода, вы можете реализовать интеграцию напрямую. В этом случае взаимодействие происходит через внешнюю компоненту производителя торгового оборудования.

Посмотрим на пример интеграции фискального регистратора АТОЛ через ДТО 10 (Драйвер торгового оборудования версии 10), работающий через Native API платформы 1С. При необходимости можно воспользоваться готовым инструментом для независимой печати чеков на кассах АТОЛ напрямую через драйвер.

Рассмотрим подробнее программный код инициализации устройства и работы с ним:


// Функция инициализации и подключения ККТ напрямую
Функция ПодключитьКассуНапрямую() Экспорт
    
    // Пытаемся подключить внешнюю компоненту из макета или системной директории
    Попытка
        РезультатПодключения = ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверАтол10", "AtolDrivers10", ТипВнешнейКомпоненты.Native);
    Исключение
        ЗаписатьЛогОшибки("Ошибка вызова ПодключитьВнешнююКомпоненту: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
    
    Если Не РезультатПодключения Тогда
        Сообщить("Не удалось загрузить внешнюю компоненту АТОЛ 10!");
        Возврат Неопределено;
    КонецЕсли;
    
    // Создаем экземпляр драйвера ККТ
    Попытка
        ДрайверККТ = Новый("AddIn.AtolDrivers10.AtolDevice10");
    Исключение
        Сообщить("Не удалось создать объект драйвера ККТ!");
        Возврат Неопределено;
    КонецПопытки;
    
    // Задаем параметры подключения к физическому устройству
    ДрайверККТ.setParam(ДрайверККТ.LIBFP_PORT, ДрайверККТ.LIBFP_PORT_USB); // Порт подключения USB
    ДрайверККТ.setParam(ДрайверККТ.LIBFP_MODEL, ДрайверККТ.LIBFP_MODEL_AUTOMATIC); // Автоопределение модели
    
    // Пробуем открыть соединение с кассой
    Если ДрайверККТ.open() <> 0 Тогда
        ОшибкаДрайвера = ДрайверККТ.errorDescription();
        Сообщить("Ошибка соединения с ККТ: " + ОшибкаДрайвера);
        Возврат Неопределено;
    КонецЕсли;
    
    Возврат ДрайверККТ;
    
КонецФункции

После успешного открытия соединения мы можем отправлять на ККТ команды печати чеков. Разберем по шагам алгоритм открытия смены и пробития простого чека продажи:


// Процедура печати чека продажи напрямую через ДТО 10
Процедура ПробитьЧекПродажиНапрямую(ДрайверККТ, МассивТоваров) Экспорт
    
    Если ДрайверККТ = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Открываем документ "Чек прихода" (продажа)
    ДрайверККТ.setParam(ДрайверККТ.LIBFP_OPERATOR_NAME, "Кассир Иванов И.И.");
    ДрайверККТ.setParam(ДрайверККТ.LIBFP_OPERATOR_INN, "123456789012");
    ДрайверККТ.openDocument();
    
    // Регистрируем позиции товаров в чеке
    Для Каждого СтрокаТовара Из МассивТоваров Цикл
        
        ДрайверККТ.setParam(ДрайверККТ.LIBFP_NAME, СтрокаТовара.Наименование);
        ДрайверККТ.setParam(ДрайверККТ.LIBFP_PRICE, СтрокаТовара.Цена);
        ДрайверККТ.setParam(ДрайверККТ.LIBFP_QUANTITY, СтрокаТовара.Количество);
        ДрайверККТ.setParam(ДрайверККТ.LIBFP_TAX_TYPE, ДрайверККТ.LIBFP_TAX_VAT_NO); // Без НДС
        
        // Регистрируем продажу позиции
        ДрайверККТ.registration();
        
    КонецЦикла;
    
    // Передаем сумму оплаты (например, наличными)
    ДрайверККТ.setParam(ДрайверККТ.LIBFP_PAYMENT_TYPE, ДрайверККТ.LIBFP_PAYMENT_CASH);
    ДрайверККТ.setParam(ДрайверККТ.LIBFP_PAYMENT_SUM, 1000.00); // Сумма, полученная от клиента
    ДрайверККТ.closeDocument(); // Закрываем документ и печатаем фискальный чек
    
КонецПроцедуры

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

Недостатки прямого пути: Полная привязка к одному производителю оборудования. Если клиент решит сменить кассу АТОЛ на Штрих-М, вам придется переписать весь код взаимодействия с ККТ с нуля.

---

Подводные камни для аптек: маркировка лекарств (МДЛП) и ФФД 1.2

Если ваша самописка внедряется в аптеке, требования к интеграции оборудования возрастают многократно. Законодательство в сфере оборота лекарственных средств обязывает разработчиков соблюдать строгие правила маркировки и использовать формат фискальных документов ФФД 1.2.

Выясним причину, почему это усложняет жизнь программисту при прямой работе с драйвером:

  1. При продаже маркированного лекарства ККТ обязана выполнить проверку кода маркировки в режиме реального времени. Это означает отправку запроса через фискальный накопитель (ФН-М) оператору маркировки «Честный ЗНАК».
  2. Программа должна не просто отправить название товара в ККТ, а разобрать структуру отсканированного кода GS1 DataMatrix, извлечь из него GTIN, серийный номер и передать их в виде специального XML-пакета или структуры JSON по требованиям ФФД 1.2 (заполняя фискальные теги 1162 / 1163 / 2108).
  3. После отправки запроса касса возвращает статус проверки (например, код прошел проверку успешно, статус [M+] в чеке). Программа должна корректно обработать этот статус и решить, разрешено ли завершать продажу препарата клиенту.

Если вы решите реализовывать этот сложнейший механизм проверки маркировки лекарств в ФФД 1.2 самостоятельно через прямой драйвер, вам придется прочитать сотни страниц технической документации ФНС и спецификаций производителей ККТ. Любое микроскопическое изменение в законах заставит вас экстренно переписывать низкоуровневый код разбора маркировки.

Именно в таких жестко регулируемых отраслях, как фармацевтика, использование БПО от 1С становится безальтернативным решением. БПО берет на себя всю рутину по разбору структуры DataMatrix, формированию XML-пакетов под требования ФФД 1.2 и получению статусов проверки от ККТ. Вам останется лишь передать строку считанного штрихкода в методы БПО.

---

Резюме и рекомендации

Подводя итоги нашего анализа, дадим четкие рекомендации по выбору архитектуры решения:

← На главную