Переход на онлайн-кассы по закону 54-ФЗ преподнес немало сюрпризов пользователям классических решений. Особенно остро эта проблема встала перед владельцами конфигурации «1С:Торговля и Склад 7.7». В старые добрые времена оформление предоплаты выглядело элементарно: создавался документ Приходный кассовый ордер, распечатывался чек с надписью «аванс», и на этом процесс завершался. Сейчас же законодательство требует строгого соблюдения форматов фискальных документов (ФФД). Выясним, как правильно организовать этот процесс с технической и методологической точек зрения.
Для начала разберем терминологию, установленную актуальным Приказом ФНС России от 14.09.2020 № ЕД-7-20/662@ (который заменил устаревший Приказ № ММВ-7-20/229@). Законодательство четко разграничивает понятия предоплаты и аванса, что напрямую влияет на реквизит «Признак способа расчета» (тег 1214 в фискальном документе):
Важно помнить правило двух чеков. При работе по предоплате или авансу продавец обязан сформировать два фискальных документа:
Основная сложность интеграции современных онлайн-касс Атол с платформой 1С 7.7 заключается в устаревших драйверах. ДТО 8 и ДТО 9, которые использовались на заре реформы 54-ФЗ, полностью сняты с поддержки и не подходят для работы с новыми требованиями (такими как маркировка товаров или ФФД 1.2). Нам необходимо использовать актуальный ДТО 10 (Драйвер ККТ 10.х).
Поскольку 1С 7.7 является 32-битным приложением, напрямую работать с ККТ через современные XML-пакеты (как в 1С 8.3) она не умеет. Нам потребуется использовать внешнюю компоненту ActiveX/OLE. Разберем по шагам, как подготовить систему к работе:
addin_fptr10_x86.dll (нам нужна именно 32-битная библиотека).C:\Windows\System32 (либо SysWOW64 для 64-битных ОС).regsvr32 addin_fptr10_x86.dll
Для управления кассой через ДТО 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();
Чтобы автоматизировать этот процесс и избавить кассира от ручного выбора параметров, рекомендуется модернизировать логику проведения документов в 1С:
Заказа покупателя (или при выборе соответствующего вида операции «Предоплата») обработка обслуживания ККТ должна автоматически анализировать табличную часть связанного документа. Если перечень товаров заполнен — формируем чек с признаком «Предоплата» и перечислением номенклатуры. Если ПКО оформляется просто как взнос на договор без привязки к спецификации — бьем «Аванс».Для минимизации затрат на разработку с нуля мы рекомендуем использовать доработанные внешние обработки обслуживания ККТ для 1С 7.7, поддерживающие ДТО 10. Их можно найти на специализированных порталах для разработчиков 1С. Такие обработки уже содержат встроенные механизмы анализа структуры подчиненности документов и корректно передают все обязательные теги в фискальный накопитель.