При интеграции кассового оборудования и доработке механизмов фискализации чеков разработчики сталкиваются с необходимостью формирования пакета данных в формате XML. Согласно стандарту интеграции подключаемого оборудования 1С, все фискальные данные передаются в драйвер ККТ в виде унифицированного пакета CheckPackage. Разберем структуру этого документа, правила заполнения реквизитов для новых ставок НДС, а также типичные требования к оборудованию и программным компонентам.
Рассмотрим типовой пример XML-документа, сформированного для фискализации чека прихода. В данном примере представлены позиции с прямыми ставками НДС 5% и 7%, а также позиция предоплаты с расчетной ставкой 5/105:
<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
<Parameters CashierName="Иванов И. И." CashierINN="770123456789" OperationType="1" TaxationSystem="1" SaleAddress="г. Москва, ул. Примерная, д. 1" CustomerEmail="" CustomerPhone=""/>
<Positions>
<FiscalString Name="Товар со ставкой 5%" Quantity="1" PriceWithDiscount="105.00" AmountWithDiscount="105.00" DiscountAmount="0" Department="1" VATRate="5" VATAmount="5.00" PaymentMethod="4" CalculationSubject="1" MeasureOfQuantity="0"/>
<FiscalString Name="Товар со ставкой 7%" Quantity="1" PriceWithDiscount="107.00" AmountWithDiscount="107.00" DiscountAmount="0" Department="1" VATRate="7" VATAmount="7.00" PaymentMethod="4" CalculationSubject="1" MeasureOfQuantity="0"/>
<FiscalString Name="Аванс со ставкой 5/105" Quantity="1" PriceWithDiscount="105.00" AmountWithDiscount="105.00" DiscountAmount="0" Department="1" VATRate="5/105" VATAmount="5.00" PaymentMethod="1" CalculationSubject="10" MeasureOfQuantity="0"/>
</Positions>
<Payments Cash="0" ElectronicPayment="317.00" PrePayment="0" PostPayment="0" Barter="0"/>
</CheckPackage>
В фискальной строке FiscalString ключевым реквизитом для определения ставки налога выступает атрибут VATRate. Для новых ставок НДС стандартом предусмотрены следующие строковые значения:
Обратим внимание на обязательный атрибут VATAmount. Если для позиции указана любая ставка, отличная от none (без НДС), заполнение атрибута VATAmount является строго обязательным. Сумма налога рассчитывается по математическим правилам округления с точностью до двух знаков после запятой. ККТ контролирует сходимость: сумма налога по строкам должна в точности соответствовать общему расчету налога по чеку во избежание расхождений и ошибок фискализации.
Проанализируем технические нюансы, несоблюдение которых приводит к ошибкам при отправке чека на ККТ:
Если требуется перехватить реальный XML-пакет, формируемый типовой конфигурацией 1С, разберем доступные варианты отладки:
CheckPackage записывается в текстовый лог-файл драйвера на клиентском рабочем месте.СформироватьЧек(). Это позволит просмотреть значение строковой переменной с XML в окне табло или вычислить выражение.