При переходе на онлайн-кассы и форматы фискальных данных ФФД 1.05 и выше изменился порядок оформления расчетов с предоплатой. Если раньше операция закрывалась одним чеком по факту передачи денег, то теперь законодательство требует формировать два отдельных фискальных документа: при получении аванса и при окончательном расчете (передаче товара или оказании услуги) с зачетом ранее внесенных сумм.
Разберем, какие требования предъявляются к оборудованию, как формируются реквизиты чеков и каким образом реализовать зачет аванса программно через COM-объект драйвера AddIn.DrvFR.
Прежде чем переходить к доработке кода в учетной системе 1С, необходимо проверить техническую готовность кассового аппарата, фискального накопителя и учетной записи оператора фискальных данных (ОФД). Проанализируем обязательные условия:
1214, 1212, 1215).Рассмотрим, из каких этапов состоит цепочка операций при расчетах с авансом или предоплатой:
Формируется в момент фактического поступления денежных средств от покупателя (наличными или безналичными). В чеке указывается:
1214 / PaymentTypeSign):
1 — Предоплата 100% (если перечень товаров известен и оплачен полностью);2 — Предоплата (частичная предоплата с известным составом товаров);3 — Аванс (если точный список товаров или объем услуг в момент оплаты определить невозможно).1212 / PaymentItemSign): значение 10 (Платеж/выплата) либо 1 (Товар) / 4 (Услуга).Summ1) или электронные средства (Summ2).Формируется в момент передачи товара покупателю или подписания акта оказанных услуг. В чеке указывается:
1214): значение 4 (Полный расчет) или 5 (Частичный расчет и кредит, если осталась постоплата).1212): значение 1 (Товар), 4 (Услуга) и т.д.1215), а оставшаяся доплата (при ее наличии) распределяется между наличными и картой.Разберем по шагам, как программно реализовать регистрацию чека отгрузки с зачетом аванса при прямой работе с COM-объектом драйвера «Штрих-М».
В современных версиях драйвера регистрация товарных позиций осуществляется через фискальный метод FNOperation() вместо устаревших методов Sale()/Buy(), а разделение видов оплат при закрытии чека методом FNCloseCheckEx() использует расширенные свойства сумм.
Посмотрим на пример кода формирования чека окончательного расчета:
// Инициализация параметров товарной позиции
Драйвер.CheckType = 0; // 0 - Продажа (Приход)
Драйвер.StringForPrinting = "Товар номенклатурный";
Драйвер.Price = 1000.00;
Драйвер.Quantity = 1;
Драйвер.Tax1 = 1; // Код ставки НДС (например, 20%)
// Установка признаков по ФФД 1.05
Драйвер.PaymentTypeSign = 4; // 4 - Полный расчет (отгрузка)
Драйвер.PaymentItemSign = 1; // 1 - Товар
// Фискальная регистрация позиции
Если Драйвер.FNOperation() <> 0 Тогда
ВызватьИсключение "Ошибка регистрации позиции: " + Драйвер.ResultCodeDescription;
КонецЕсли;
// Распределение видов оплаты при закрытии чека:
// Предположим, товар стоит 1000 руб., из них 600 руб. - зачет аванса, 400 руб. - доплата картой.
Драйвер.Summ1 = 0.00; // Наличные
Драйвер.Summ2 = 400.00; // Безналичные / Электронные (тег 1081)
Драйвер.Summ14 = 600.00; // Зачет предварительной оплаты / Аванс (тег 1215)
Драйвер.Summ15 = 0.00; // Постоплата / Кредит (тег 1216)
Драйвер.Summ16 = 0.00; // Встречное предоставление (тег 1217)
// Закрытие чека
Если Драйвер.FNCloseCheckEx() <> 0 Тогда
ВызватьИсключение "Ошибка закрытия чека: " + Драйвер.ResultCodeDescription;
КонецЕсли;
Проанализируем ситуации, когда свойства Summ14–Summ16 не обрабатываются используемой версией драйвера:
FNAddTag() или FNSendTag(), передав номер тега 1215 и соответствующую сумму.СформироватьЧек). В структуре XML оплаты разносятся по специализированным узлам: PrePayment (сумма зачета аванса), PostPayment (кредит), Cash (наличные) и ElectronicPayment (безналичные). Этот подход исключает необходимость ручного расчета низкоуровневых регистров драйвера.