Как передать признак предмета и способа расчета в чек ККТ из 1С?

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

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

Разграничение реквизитов: способ расчета и предмет расчета

Проанализируем составной фискальный тег 1059 («Предмет расчета»). Чтобы кассовый аппарат корректно зафиксировал операцию аванса или предоплаты, используются два самостоятельных обязательных реквизита:

  1. Признак способа расчета (Тег 1214) — определяет характер совершаемой операции:
    1. 1 — Предоплата 100%
    2. 2 — Частичная предоплата
    3. 3 — Аванс
    4. 4 — Полный расчет
    5. 5 — Частичный расчет и кредит
    6. 6 — Передача в кредит
    7. 7 — Оплата кредита
  2. Признак предмета расчета (Тег 1212) — описывает тип реализуемой позиции:
    1. 1 — Товар (кроме подакцизного)
    2. 2 — Подакцизный товар
    3. 3 — Работа
    4. 4 — Услуга
    5. 10 — Платеж (аванс, предоплата, выплата, погашение займа)

Таким образом, для отражения предоплаты необходимо передавать комбинацию из соответствующего признака способа расчета (например, SignMethodCalculation="2") и признака предмета расчета (SignCalculationObject="10").

Структура XML-пакета чека в стандартах 1С (БПО)

Посмотрим на пример устаревшего XML-пакета формата ФФД 1.0, где эти реквизиты отсутствовали:


<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
    <Parameters PaymentType="1" TaxVariant="0" SenderEmail="" CustomerEmail="" CustomerPhone=""/>
    <Positions>
        <FiscalString Name="Частичная оплата " Quantity="1" Price="500" Amount="500" Department="1" Tax="none"/>
    </Positions>
    <Payments Cash="1000" CashLessType1="0" CashLessType2="0" CashLessType3="0"/>
</CheckPackage>

Выясним причину проблемы: в формате ФФД 1.0 теги 1214 и 1212 не были стандартизированы для построчной передачи в XML. Начиная с требований БПО версий 2.x и форматов ФФД 1.05/1.2, структура пакета чека расширяется новыми атрибутами в узле <FiscalString>.

Рассмотрим правильную структуру актуального XML-пакета CheckPackage:


<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
    <Parameters PaymentType="1" TaxVariant="0" SenderEmail="" CustomerEmail="" CustomerPhone=""/>
    <Positions>
        <FiscalString 
            Name="Предоплата за товар" 
            Quantity="1" 
            PriceWithDiscount="500" 
            SumWithDiscount="500" 
            Department="1" 
            Tax="none" 
            SignMethodCalculation="2" 
            SignCalculationObject="10" />
    </Positions>
    <Payments Cash="500" ElectronicPayment="0" AdvancePayment="0" Credit="0" CashProvision="0"/>
</CheckPackage>

Обратите внимание на атрибуты оплат в теге <Payments>:

  1. Cash — наличные средства.
  2. ElectronicPayment — безналичная оплата.
  3. AdvancePayment — предварительная оплата (зачет ранее внесенного аванса или предоплаты при финальной отгрузке).
  4. Credit — постоплата (предоставление кредита).
  5. CashProvision — встречное предоставление.

Технические требования к оборудованию и компонентам

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

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

Варианты реализации без глобального обновления конфигурации

Если конфигурация значительно доработана и выполнить полное обновление невозможно, рассмотрим альтернативные пути решения:

  1. Точечная модификация формирования XML: при условии, что драйвер кассы уже поддерживает стандарты БПО 2.x+, можно переопределить функцию сборки XML-пакета чека в кодовой базе 1С, вручную добавив формирование атрибутов SignMethodCalculation и SignCalculationObject в узлах FiscalString.
  2. Прямая работа через API драйвера ККТ: формирование фискального чека можно перевести на низкоуровневые COM/Native методы драйвера производителя, программно вызывая команды записи фискальных реквизитов (тегов 1214 и 1212) для каждой строки перед закрытием чека.
  3. Использование внешнего кассового сервера: отправка запросов на специализированный кассовый шлюз, который принимает упрощенные данные от 1С и самостоятельно транслирует их в команды ККТ по протоколу ФФД 1.05/1.2.
← На главную