Как зачесть аванс и предоплату в онлайн-кассах Штрих-М при интеграции с 1С?

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

При переходе на онлайн-кассы и форматы фискальных данных ФФД 1.05 и выше изменился порядок оформления расчетов с предоплатой. Если раньше операция закрывалась одним чеком по факту передачи денег, то теперь законодательство требует формировать два отдельных фискальных документа: при получении аванса и при окончательном расчете (передаче товара или оказании услуги) с зачетом ранее внесенных сумм.

Разберем, какие требования предъявляются к оборудованию, как формируются реквизиты чеков и каким образом реализовать зачет аванса программно через COM-объект драйвера AddIn.DrvFR.

1. Проверка готовности кассового узла к работе с авансами

Прежде чем переходить к доработке кода в учетной системе 1С, необходимо проверить техническую готовность кассового аппарата, фискального накопителя и учетной записи оператора фискальных данных (ОФД). Проанализируем обязательные условия:

  1. Версия ФФД в кассе: Зачет аванса как отдельная форма расчета не поддерживается в устаревшем формате ФФД 1.0. Требуется поддержка ФФД 1.05 или 1.1. Для этого прошивка кассового аппарата (включая загрузчик и модуль управления) должна быть обновлена до актуальной версии с поддержкой требуемого ФФД.
  2. Фискализация ФН: Версия формата фискальных данных фиксируется в фискальном накопителе в момент регистрации или перерегистрации кассы в ФНС. Если накопитель был фискализирован под ФФД 1.0, потребуется выполнить перерегистрацию ККТ с указанием версии ФФД 1.05.
  3. Поддержка со стороны ОФД: Оператор фискальных данных должен принимать и корректно обрабатывать теги, отвечающие за признаки способов расчета и зачет аванса (в частности, теги 1214, 1212, 1215).
  4. Настройки таблиц ККТ: В таблицах драйвера «Штрих-М» необходимо убедиться, что параметр используемого ФФД переведен в соответствующее значение.

2. Принцип формирования двухстадийных чеков

Рассмотрим, из каких этапов состоит цепочка операций при расчетах с авансом или предоплатой:

  1. Чек №1 (Получение предоплаты/аванса):

    Формируется в момент фактического поступления денежных средств от покупателя (наличными или безналичными). В чеке указывается:

    1. Признак способа расчета (тег 1214 / PaymentTypeSign):
      • 1 — Предоплата 100% (если перечень товаров известен и оплачен полностью);
      • 2 — Предоплата (частичная предоплата с известным составом товаров);
      • 3 — Аванс (если точный список товаров или объем услуг в момент оплаты определить невозможно).
    2. Признак предмета расчета (тег 1212 / PaymentItemSign): значение 10 (Платеж/выплата) либо 1 (Товар) / 4 (Услуга).
    3. Сумма оплаты относится на наличные (Summ1) или электронные средства (Summ2).
  2. Чек №2 (Отгрузка и окончательный расчет / Зачет аванса):

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

    1. Номенклатурные позиции регистрируются с их полной розничной стоимостью.
    2. Признак способа расчета (тег 1214): значение 4 (Полный расчет) или 5 (Частичный расчет и кредит, если осталась постоплата).
    3. Признак предмета расчета (тег 1212): значение 1 (Товар), 4 (Услуга) и т.д.
    4. Оплата: сумма, покрываемая ранее внесенным авансом, передается в реквизит предварительной оплаты (тег 1215), а оставшаяся доплата (при ее наличии) распределяется между наличными и картой.

3. Реализация зачета аванса в коде через AddIn.DrvFR

Разберем по шагам, как программно реализовать регистрацию чека отгрузки с зачетом аванса при прямой работе с 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;
КонецЕсли;

4. Альтернативные методы передачи реквизитов

Проанализируем ситуации, когда свойства Summ14–Summ16 не обрабатываются используемой версией драйвера:

  1. Прямая отправка TLV-тегов: До вызова метода фиксации чека можно передать реквизит зачета аванса напрямую через низкоуровневые функции работы с фискальным накопителем — FNAddTag() или FNSendTag(), передав номер тега 1215 и соответствующую сумму.
  2. Переход на стандарт «1С:Совместимо» (БПО): При использовании библиотеки подключаемого оборудования (БПО) драйвер принимает XML-пакет операции (метод СформироватьЧек). В структуре XML оплаты разносятся по специализированным узлам: PrePayment (сумма зачета аванса), PostPayment (кредит), Cash (наличные) и ElectronicPayment (безналичные). Этот подход исключает необходимость ручного расчета низкоуровневых регистров драйвера.
← На главную