Как правильно сформировать данные для фискального чека в 1С с использованием БСП 3.0?

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

При разработке собственных механизмов или интеграций, связанных с печатью чеков на контрольно-кассовой технике (ККТ), часто возникает вопрос выбора правильных программных методов. В современных конфигурациях 1С, использующих Библиотеку стандартных подсистем (БСП) версии 3.0 и выше, существует два схожих по названию, но разных по сути общих модуля для работы с оборудованием. Разберемся, какой из них использовать и почему.

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

В чем разница: старый и новый подходы в Библиотеке подключаемого оборудования

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

1. Устаревший подход: ПодключаемоеОборудованиеВызовСервера

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

2. Актуальный подход: МенеджерОборудованияВызовСервера

Модуль МенеджерОборудованияВызовСервера является частью новой архитектуры работы с подключаемым оборудованием, представленной в БСП 3.0. Функция СформироватьСтруктуруДанныхЧека — это современный, рекомендуемый способ подготовки данных для фискализации. Этот подход обладает рядом преимуществ:

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

Практический пример: формируем и печатаем чек по-новому

Рассмотрим по шагам, как программно сформировать и отправить на печать фискальный чек, используя актуальный механизм БСП 3.0. Процесс состоит из нескольких логических этапов: подготовка параметров, формирование структуры данных и выполнение команды печати.

  1. Подготовка исходных данных

    Сначала необходимо подготовить структуру с параметрами операции. Это основной объект, который будет содержать всю информацию о чеке, устройстве и документе-основании. В него нужно поместить идентификатор рабочего места, идентификатор устройства ККТ, ссылку на документ-основание и массив строк с данными чека.

    
    // Создаем основную структуру параметров
    ПараметрыОперации = Новый Структура;
    
    // Указываем идентификатор рабочего места текущего пользователя
    ПараметрыОперации.Вставить("ИдентификаторРабочегоМеста", МенеджерОборудованияКлиентСервер.ИдентификаторРабочегоМеста());
    
    // Указываем идентификатор устройства. Его можно получить из справочника "ПодключаемоеОборудование"
    // Например, для определенного устройства с известным кодом:
    // Устройство = Справочники.ПодключаемоеОборудование.НайтиПоКоду("000000001");
    // ПараметрыОперации.Вставить("ИдентификаторУстройства", Устройство.Ссылка);
    // В данном примере будем считать, что он уже получен и хранится в переменной ИдентификаторУстройства
    ПараметрыОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства);
    
    // Вставляем ссылку на документ-основание, например, "Реализация товаров и услуг"
    ПараметрыОперации.Вставить("ДокументОснование", СсылкаНаДокументОснование);
    
    // Готовим массив строк для чека. Это еще одна структура внутри основной.
    ДанныеЧека = Новый Структура;
    ДанныеЧека.Вставить("МассивСтрок", Новый Массив); // Сюда будут добавляться товарные позиции
    // ... здесь будет код добавления товаров
    
    ПараметрыОперации.Вставить("ДанныеЧека", ДанныеЧека);
    
  2. Заполнение товарных позиций чека

    Теперь нужно заполнить массив товарных позиций (МассивСтрок). Каждая позиция — это структура с определенным набором полей: Номенклатура, Количество, Цена, СтавкаНДС и т.д. Пройдемся по табличной части документа-основания и добавим каждую строку в наш массив.

    
    // Предположим, что ДокументОбъект - это объект документа "РеализацияТоваровУслуг"
    Для Каждого ТекСтрокаТовары Из ДокументОбъект.Товары Цикл
        
        СведенияОТоваре = Новый Структура;
        СведенияОТоваре.Вставить("Номенклатура",          ТекСтрокаТовары.Номенклатура);
        СведенияОТоваре.Вставить("Наименование",         ТекСтрокаТовары.Номенклатура.Наименование);
        СведенияОТоваре.Вставить("Количество",           ТекСтрокаТовары.Количество);
        СведенияОТоваре.Вставить("Цена",                 ТекСтрокаТовары.Цена);
        СведенияОТоваре.Вставить("Сумма",                ТекСтрокаТовары.Сумма);
        СведенияОТоваре.Вставить("СтавкаНДС",            ТекСтрокаТовары.СтавкаНДС);
        СведенияОТоваре.Вставить("СуммаНДС",             ТекСтрокаТовары.СуммаНДС);
        СведенияОТоваре.Вставить("ЕдиницаИзмерения",     ТекСтрокаТовары.ЕдиницаИзмерения.Наименование);
        
        // Добавляем заполненную структуру в массив строк чека
        ПараметрыОперации.ДанныеЧека.МассивСтрок.Добавить(СведенияОТоваре);
        
    КонецЦикла;
    

    Важно: набор полей в структуре СведенияОТоваре может отличаться в зависимости от требований к чеку (например, для маркировки, агентских схем и т.д.). Необходимо сверяться с документацией к БСП для вашей версии конфигурации.

  3. Вызов функции формирования данных

    Когда структура ПараметрыОперации полностью заполнена, вызываем функцию СформироватьСтруктуруДанныхЧека. Она обработает наши данные и вернет новую структуру, готовую для передачи драйверу ККТ.

    
    // Вызываем серверную функцию для формирования данных для фискализации
    ПараметрыКоманды = МенеджерОборудованияВызовСервера.СформироватьСтруктуруДанныхЧека(ПараметрыОперации);
    

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

  4. Выполнение команды печати чека

    Последний шаг — отправка подготовленных данных на устройство. Для этого используется метод ВыполнитьКоманду, которому мы передаем идентификатор команды (в нашем случае "НапечататьЧек") и полученную на предыдущем шаге структуру ПараметрыКоманды.

    
    // Определяем идентификатор команды
    ИдентификаторКоманды = "НапечататьЧек";
    
    // Выполняем команду на сервере
    РезультатВыполнения = МенеджерОборудованияВызовСервера.ВыполнитьКоманду(
        ИдентификаторКоманды,
        ПараметрыКоманды
    );
    
    // Проверяем результат
    Если НЕ РезультатВыполнения.Выполнена Тогда
        // Обрабатываем ошибку печати чека
        Сообщить("Не удалось напечатать чек: " + РезультатВыполнения.ИнформацияОбОшибке);
    КонецЕсли;
    

    Структура РезультатВыполнения содержит информацию об успехе операции. Если флаг Выполнена равен Ложь, то в свойстве ИнформацияОбОшибке будет содержаться текст ошибки, полученный от драйвера ККТ.

Таким образом, мы рассмотрели полный цикл программной печати чека с использованием актуальной архитектуры БСП 3.0. Всегда отдавайте предпочтение методам из модуля МенеджерОборудованияВызовСервера, чтобы ваш код был современным, надежным и легко адаптируемым к будущим изменениям в законодательстве и технологиях 1С.

← На главную