Как правильно оформить и пробить чек на аванс или предоплату в 1С 7.7 с онлайн-кассой Атол

Программист 1С v7.7 Налоговый учет Торговля и дистрибуция
← На главную

Переход на онлайн-кассы по закону 54-ФЗ преподнес немало сюрпризов пользователям классических решений. Особенно остро эта проблема встала перед владельцами конфигурации «1С:Торговля и Склад 7.7». В старые добрые времена оформление предоплаты выглядело элементарно: создавался документ Приходный кассовый ордер, распечатывался чек с надписью «аванс», и на этом процесс завершался. Сейчас же законодательство требует строгого соблюдения форматов фискальных документов (ФФД). Выясним, как правильно организовать этот процесс с технической и методологической точек зрения.

Нормативная база: «Аванс» или «Предоплата»?

Для начала разберем терминологию, установленную актуальным Приказом ФНС России от 14.09.2020 № ЕД-7-20/662@ (который заменил устаревший Приказ № ММВ-7-20/229@). Законодательство четко разграничивает понятия предоплаты и аванса, что напрямую влияет на реквизит «Признак способа расчета» (тег 1214 в фискальном документе):

  1. Предоплата 100% или Частичная предоплата — применяется в тех случаях, когда на момент получения денег от покупателя состав и объем товаров точно известны и согласованы. В чеке обязательно должно быть указано конкретное наименование номенклатуры (например, «Телевизор Samsung R8J600»).
  2. Аванс — используется тогда, когда в момент приема денежных средств невозможно определить точный перечень товаров или услуг. Классический пример — покупка подарочного сертификата или внесение обобщенного депозита под будущие заказы. В этом случае в наименовании чека пишется обобщенное название (например, «Аванс за строительные материалы»), а количество устанавливается равным «1».

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

Технические ограничения платформы 1С 7.7 и ДТО 10

Основная сложность интеграции современных онлайн-касс Атол с платформой 1С 7.7 заключается в устаревших драйверах. ДТО 8 и ДТО 9, которые использовались на заре реформы 54-ФЗ, полностью сняты с поддержки и не подходят для работы с новыми требованиями (такими как маркировка товаров или ФФД 1.2). Нам необходимо использовать актуальный ДТО 10 (Драйвер ККТ 10.х).

Поскольку 1С 7.7 является 32-битным приложением, напрямую работать с ККТ через современные XML-пакеты (как в 1С 8.3) она не умеет. Нам потребуется использовать внешнюю компоненту ActiveX/OLE. Разберем по шагам, как подготовить систему к работе:

  1. Скачаем актуальный драйвер ККТ Атол 10.х с официального сайта производителя.
  2. Найдем в папке установленного драйвера файл addin_fptr10_x86.dll (нам нужна именно 32-битная библиотека).
  3. Скопируем ее в каталог базы данных 1С или в системную папку C:\Windows\System32 (либо SysWOW64 для 64-битных ОС).
  4. Зарегистрируем библиотеку в операционной системе. Для этого запустим командную строку от имени Администратора и выполним команду:
    regsvr32 addin_fptr10_x86.dll

Реализация программной логики в 1С 7.7

Для управления кассой через ДТО 10 из среды 1С 7.7 нам необходимо использовать объектную модель драйвера. Рассмотрим пример инициализации подключения к кассе и настройки параметров для чека предоплаты.

Проанализируем пример кода подключения ККТ:


// Инициализация объекта драйвера Атол ДТО 10
Попытка
    ЗагрузитьВнешнююКомпоненту("addin_fptr10_x86.dll");
    Касса = СоздатьОбъект("AddIn.Fptr10");
Исключение
    Предупреждение("Ошибка загрузки внешней компоненты Атол ДТО 10!");
    Возврат;
КонецПопытки;

// Настройка связи с кассой
Касса.setParam(Касса.LIBFPTR_PARAM_COMM_PORT, Касса.LIBFPTR_PORT_USB);
Касса.open();

Если Касса.isOpened() = 0 Тогда
    Предупреждение("Не удалось установить связь с ККТ!");
    Возврат;
КонецЕсли;

Теперь разберем, как передать в кассу параметры чека для первого этапа — получения предоплаты. Основная задача — правильно передать тег 1214 (Признак способа расчета). В ДТО 10 для этого используются предопределенные константы.

Рассмотрим процедуру добавления позиции в чек предоплаты:


// Открываем чек прихода (продажи)
Касса.setParam(Касса.LIBFPTR_PARAM_RECEIPT_TYPE, Касса.LIBFPTR_RT_SELL);
Касса.openReceipt();

// Формируем позицию чека
Касса.setParam(Касса.LIBFPTR_PARAM_COMMODITY_NAME, "Предоплата за холодильник Atlant");
Касса.setParam(Касса.LIBFPTR_PARAM_PRICE, 15000.00);
Касса.setParam(Касса.LIBFPTR_PARAM_QUANTITY, 1);
Касса.setParam(Касса.LIBFPTR_PARAM_TAX_TYPE, Касса.LIBFPTR_TAX_VAT20); // Расчетная ставка НДС 20/120

// Устанавливаем Признак способа расчета (тег 1214)
// Значение LIBFPTR_BM_PREPAYMENT_FULL (или значение 1) - Полная предоплата
// Значение LIBFPTR_BM_PREPAYMENT_PART (или значение 2) - Частичная предоплата
// Значение LIBFPTR_BM_ADVANCE (или значение 3) - Аванс
Касса.setParam(1214, 1); // Передаем Полную предоплату

// Устанавливаем Признак предмета расчета (тег 1212)
// Значение 1 - Товар (если предоплата), значение 10 - Платеж/Выплата (если аванс)
Касса.setParam(1212, 1); 

// Регистрируем позицию
Касса.registration();

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


// Оплата наличными (тип оплаты 0 в терминах Атол)
Касса.setParam(Касса.LIBFPTR_PARAM_PAYMENT_TYPE, Касса.LIBFPTR_PT_CASH);
Касса.setParam(Касса.LIBFPTR_PARAM_PAYMENT_SUM, 15000.00);
Касса.closeReceipt();

Оформление закрывающего чека (Отгрузка товара)

Вторым шагом бизнес-процесса является передача товара клиенту. В этот момент мы оформляем документ Реализация. Из этого документа необходимо пробить закрывающий чек. Главное отличие здесь в том, что признак способа расчета (тег 1214) принимает значение «Полный расчет» (значение 4), а вид оплаты передается как «Зачет аванса» (в терминологии Атол ДТО 10 — тип оплаты «Встречное предоставление» или «Предоплата», тип платежа обычно равен 3).

Разберем пример кода для закрывающего чека:


// Открываем чек продажи
Касса.setParam(Касса.LIBFPTR_PARAM_RECEIPT_TYPE, Касса.LIBFPTR_RT_SELL);
Касса.openReceipt();

// Формируем позицию отгружаемого товара
Касса.setParam(Касса.LIBFPTR_PARAM_COMMODITY_NAME, "Холодильник Atlant");
Касса.setParam(Касса.LIBFPTR_PARAM_PRICE, 15000.00);
Касса.setParam(Касса.LIBFPTR_PARAM_QUANTITY, 1);
Касса.setParam(Касса.LIBFPTR_PARAM_TAX_TYPE, Касса.LIBFPTR_TAX_VAT20); // Обычная ставка НДС 20%

// Признак способа расчета - Полный расчет (тег 1214 = 4)
Касса.setParam(1214, 4);
Касса.setParam(1212, 1); // Предмет расчета - Товар
Касса.registration();

// Регистрируем оплату как ЗАЧЕТ АВАНСА (тип оплаты 3 - предварительный платеж)
Касса.setParam(Касса.LIBFPTR_PARAM_PAYMENT_TYPE, 3); 
Касса.setParam(Касса.LIBFPTR_PARAM_PAYMENT_SUM, 15000.00);
Касса.closeReceipt();

Интеграция в типовую конфигурацию «Торговля и Склад 7.7»

Чтобы автоматизировать этот процесс и избавить кассира от ручного выбора параметров, рекомендуется модернизировать логику проведения документов в 1С:

  1. Документ ПКО (Приходный кассовый ордер): При формировании ПКО на основании Заказа покупателя (или при выборе соответствующего вида операции «Предоплата») обработка обслуживания ККТ должна автоматически анализировать табличную часть связанного документа. Если перечень товаров заполнен — формируем чек с признаком «Предоплата» и перечислением номенклатуры. Если ПКО оформляется просто как взнос на договор без привязки к спецификации — бьем «Аванс».
  2. Документ Реализация (Расходная накладная): При печати чека из реализации обработка должна проверять наличие связанных документов оплаты (ПКО или выписок). Если по данной сделке ранее проходила предоплата, алгоритм должен автоматически разбивать оплату в чеке: часть, которая закрывается авансом, отправлять по типу оплаты «Зачет аванса», а оставшуюся часть (если клиент доплачивает на месте) — по типу оплаты «Наличные» или «Электронные».

Для минимизации затрат на разработку с нуля мы рекомендуем использовать доработанные внешние обработки обслуживания ККТ для 1С 7.7, поддерживающие ДТО 10. Их можно найти на специализированных порталах для разработчиков 1С. Такие обработки уже содержат встроенные механизмы анализа структуры подчиненности документов и корректно передают все обязательные теги в фискальный накопитель.

← На главную