При оформлении авансов, частичных оплат или зачетов предоплат разработчики часто сталкиваются с ситуацией, когда стандартный XML-пакет, передаваемый на фискальный регистратор через Библиотеку подключаемого оборудования (БПО), не содержит признаков предоплаты, а в чеке печатается обычная продажа. Разберем по шагам, какие реквизиты отвечают за предоплату, как устроена структура XML-пакета и почему для корректной фискализации требуется обновление всей цепочки оборудования и программного обеспечения.
Проанализируем составной фискальный тег 1059 («Предмет расчета»). Чтобы кассовый аппарат корректно зафиксировал операцию аванса или предоплаты, используются два самостоятельных обязательных реквизита:
1 — Предоплата 100%2 — Частичная предоплата3 — Аванс4 — Полный расчет5 — Частичный расчет и кредит6 — Передача в кредит7 — Оплата кредита1 — Товар (кроме подакцизного)2 — Подакцизный товар3 — Работа4 — Услуга10 — Платеж (аванс, предоплата, выплата, погашение займа)Таким образом, для отражения предоплаты необходимо передавать комбинацию из соответствующего признака способа расчета (например, SignMethodCalculation="2") и признака предмета расчета (SignCalculationObject="10").
Посмотрим на пример устаревшего 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>:
Cash — наличные средства.ElectronicPayment — безналичная оплата.AdvancePayment — предварительная оплата (зачет ранее внесенного аванса или предоплаты при финальной отгрузке).Credit — постоплата (предоставление кредита).CashProvision — встречное предоставление.Передача указанных реквизитов требует слаженной работы всей технологической цепочки. Проанализируем все обязательные уровни:
ПризнакСпособаРасчета и КодПризнакаПредметаРасчета, а не оставлять их со значением Неопределено.Если конфигурация значительно доработана и выполнить полное обновление невозможно, рассмотрим альтернативные пути решения:
SignMethodCalculation и SignCalculationObject в узлах FiscalString.