Как в 1С 7.7 правильно отразить предоплату при печати чека на ККТ АТОЛ 30Ф?

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

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

В этой статье мы подробно разберем, как решить эту задачу в системе 1С:Предприятие 7.7 при работе с популярным фискальным регистратором АТОЛ 30Ф. Мы рассмотрим логику работы с драйверами АТОЛ ДТО 8 (на котором написана большая часть старых обработок) и современным ДТО 10, а также приведем готовые примеры кода для внедрения в ваши конфигурации.

В чем суть проблемы и требования законодательства?

Если касса при печати чека выводит «Полный расчет» вместо «Предоплата», это означает, что драйверу ККТ не были переданы специальные фискальные признаки для конкретной позиции чека. Начиная с ФФД 1.05, за это отвечают два ключевых реквизита:

  1. Тег 1214 — Признак способа расчета. Он определяет, в какой момент и в каком объеме происходит оплата. Основные значения этого тега:
    • 1 — Предоплата 100% (полная предварительная оплата до момента передачи товара).
    • 2 — Предоплата (частичная предварительная оплата до момента передачи товара).
    • 3 — Аванс (когда деньги принимаются, но конкретный список товаров или услуг еще не определен).
    • 4 — Полный расчет (оплата в момент передачи товара, значение по умолчанию).
  2. Тег 1212 — Признак предмета расчета. Он указывает, что именно передается покупателю. Основные значения:
    • 1 — Товар (используется при предоплате за конкретную номенклатурную позицию).
    • 10 — Платеж / Выплата / Аванс (используется при оформлении общего аванса).

Давайте выясним, как передать эти теги в фискальный регистратор программным путем.

Решение для драйвера АТОЛ ДТО 8

Рассмотрим структуру кода, который используется во многих конфигурациях 1С 7.7. Взаимодействие с кассой происходит через OLE-объект драйвера АТОЛ ДТО 8. Чтобы передать теги 1214 и 1212, нам необходимо установить свойства PaymentMode (признак способа расчета) и ItemType (признак предмета расчета) непосредственно перед вызовом метода Registration() или Return() для каждой товарной позиции в цикле.

Проанализируем ситуацию на примере доработки стандартного цикла печати чека из обработки обслуживания. Мы добавим условия, которые будут определять тип оплаты на основе данных нашей учетной системы.


// Предположим, у нас есть СписокТоваров с колонками: ТовНаим, Цена, Количество, СтавкаНДС, ТипРасчета
СписокТоваров.ВыбратьСтроки();

Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
    
    Объект.Name = СписокТоваров.ТовНаим;
    Объект.Price = СписокТоваров.Цена;
    Объект.Quantity = СписокТоваров.Количество;
    
    // Определение признака способа расчета (Тег 1214) и предмета расчета (Тег 1212)
    Если СписокТоваров.ТипРасчета = "Предоплата100" Тогда
        Объект.PaymentMode = 1; // Предоплата 100%
        Объект.ItemType = 1;    // Товар
    ИначеЕсли СписокТоваров.ТипРасчета = "ПредоплатаЧастичная" Тогда
        Объект.PaymentMode = 2; // Предоплата
        Объект.ItemType = 1;    // Товар
    ИначеЕсли СписокТоваров.ТипРасчета = "Аванс" Тогда
        Объект.PaymentMode = 3; // Аванс
        Объект.ItemType = 10;   // Платеж / Аванс
    Иначе
        // Обычная продажа (Полный расчет)
        Объект.PaymentMode = 4; // Полный расчет
        Объект.ItemType = 1;    // Товар
    КонецЕсли;

    // Установка ставки НДС
    Если СписокТоваров.СтавкаНДС = "none" Тогда
        Объект.TaxTypeNumber = 4;
    ИначеЕсли СписокТоваров.СтавкаНДС = "20" Тогда
        Объект.TaxTypeNumber = 3;
    ИначеЕсли СписокТоваров.СтавкаНДС = "10" Тогда
        Объект.TaxTypeNumber = 2;
    ИначеЕсли СписокТоваров.СтавкаНДС = "0" Тогда
        Объект.TaxTypeNumber = 1;        
    КонецЕсли;
    
    // Регистрация позиции
    Если ПризнВозврата = 0 Тогда
        Если Объект.Registration() <> 0 Тогда
            ОписаниеРезультата = Объект.ResultDescription;
            Возврат 0;
        КонецЕсли;
    Иначе    
        Если Объект.Return() <> 0 Тогда
            ОписаниеРезультата = Объект.ResultDescription;
            Возврат 0;
        КонецЕсли;
    КонецЕсли;
    
КонецЦикла;

Важный нюанс: Обратите внимание, что свойства PaymentMode и ItemType должны устанавливаться заново для каждой позиции чека внутри цикла, иначе драйвер применит значения по умолчанию или сохранит параметры предыдущей строки чека.

Реализация схемы «Два чека» (Предоплата -> Отгрузка)

Согласно требованиям фискального законодательства РФ, при работе по предоплате вы обязаны пробить два документа:

  1. Первый чек (Получение денежных средств). Пробивается в момент получения денег от покупателя. В позициях чека указывается PaymentMode = 2 (Предоплата) или 1 (Предоплата 100%). Способ оплаты в конце чека указывается как наличные или безналичные.
  2. Второй чек (Передача товара покупателю). Пробивается в момент фактической отгрузки. В позициях чека способ расчета меняется на PaymentMode = 4 (Полный расчет), а способ оплаты в конце чека указывается как зачет аванса (в драйвере АТОЛ за это отвечает свойство TypeClose).

Рассмотрим, как реализовать закрытие чека в 1С 7.7 при зачете предоплаты. Посмотрим на пример кода, отвечающего за проведение оплаты в ККТ:


// Ввод оплаты в зависимости от ее типа
Если Док.ПолученоНаличными <> 0 Тогда
    Объект.TypeClose = 0; // Наличные
    Объект.Summ = Док.ПолученоНаличными;
    Объект.Payment();
КонецЕсли;

Если Док.ПолученоПоБанку <> 0 Тогда 
    Объект.TypeClose = 1; // Безналичные (Электронные)
    Объект.Summ = Док.ПоБанку;
    Объект.Payment();
КонецЕсли;

// Если происходит отгрузка ранее оплаченного товара (Зачет предоплаты)
Если Док.ЗачетПредоплаты <> 0 Тогда 
    // Тип закрытия 2 или 3 (зависит от настроек таблиц ККТ АТОЛ, обычно 2 - "Предварительная оплата (Аванс)")
    Объект.TypeClose = 2; 
    Объект.Summ = Док.ЗачетПредоплаты;
    Объект.Payment();
КонецЕсли;  

// Закрываем чек
Если Объект.CloseCheck() <> 0 Тогда
    ОписаниеРезультата = Объект.ResultDescription;
    Возврат 0;
КонецЕсли;

Перед внедрением этой логики обязательно убедитесь, какая секция оплат (какой номер TypeClose) в настройках вашей ККТ АТОЛ отвечает за "Зачет аванса/предоплаты". По умолчанию в большинстве прошивок это тип закрытия 2 или 3.

Рекомендация по переходу на современный драйвер АТОЛ ДТО 10

Разработчикам решений на базе 1С 7.7 важно помнить, что драйверы серии ДТО 8 уже давно признаны устаревшими и сняты с поддержки производителем. Они не поддерживают современные изменения законодательства, такие как работа с маркировкой («Честный знак») по ФФД 1.2. Если вы планируете долгосрочное использование оборудования АТОЛ 30Ф, мы настоятельно рекомендуем переписать функции фискализации под ДТО 10.

В ДТО 10 архитектура взаимодействия с кассой изменилась. Вместо прямого изменения свойств объекта используется универсальный метод setParam() с указанием номера тега по классификатору ФНС перед регистрацией позиции. Разберем по шагам, как это выглядит на практике:


// Пример регистрации позиции предоплаты в ДТО 10
Объект.setParam(65535, "Предоплата за холодильник"); // Наименование позиции чека
Объект.setParam(65536, 15000.00); // Цена за единицу
Объект.setParam(65537, 1);        // Количество
Объект.setParam(65538, 15000.00); // Общая сумма позиции

// Передача фискальных тегов ФФД 1.05
Объект.setParam(1214, 2); // Тег 1214: Способ расчета = Предоплата
Объект.setParam(1212, 1); // Тег 1212: Предмет расчета = Товар

// Передача ставки НДС (например, Без НДС - значение "none" или НДС 20% - значение "vat20")
Объект.setParam(1199, 6); // Тег 1199: 6 - Без НДС, 1 - НДС 20%

// Вызов метода регистрации позиции в чеке
Объект.registration();

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

← На главную