Как вывести цену и сумму без скидки в чеке на ККТ Атол из 1С?

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

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

Однако при реализации этой задачи разработчики сталкиваются с техническими трудностями. Информация выводится некрасиво, "съезжает" в конец чека или ломает фискальные блоки. В этой статье мы подробно разберем, почему возникают такие сложности, какие ограничения накладывает кассовое законодательство и как правильно реализовать вывод скидок на ККТ Атол из 1С.

---

Почему в «Редакторе шаблонов» Атол нет готового поля «Сумма без скидки»?

Попытка настроить этот функционал напрямую через встроенный «Редактор шаблонов чеков Атол» обычно заводит в тупик. Реквизит «Цена без скидки» в редакторе присутствует, а вот «Суммы без скидки» там нет. Выясним причину этого ограничения.

Все современные кассовые аппараты работают в строгом соответствии с 54-ФЗ и Форматами фискальных документов (ФФД 1.05 / 1.1 / 1.2). Согласно закону:

  1. Фискальный накопитель (ФН) и ККТ регистрируют продажу только по фактической цене продажи (то есть цене с учетом всех скидок) и фактической сумме.
  2. Математическое правило Цена со скидкой * Количество = Итоговая сумма по позиции проверяется процессором кассы на уровне прошивки. Если округление скидки выполнено некорректно хотя бы на копейку, касса вернет ошибку и чек не пробьется.
  3. Параметры «Цена без скидки» и «Сумма без скидки» не являются фискальными реквизитами. Они носят исключительно справочный (информационный) характер.

Поскольку ККТ Атол не производит фискальных расчетов по "старым" ценам, внутренняя прошивка кассы не умеет самостоятельно перемножать исходную цену на количество для вычисления виртуальной суммы без скидки. Соответственно, в редакторе шаблонов ККТ такой переменной нет. Эту информацию должна рассчитывать и передавать товароучетная система (1С).

---

Техническое ограничение: можно ли разделить фискальную строку?

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

  1. Наименование товара
  2. Предмет расчета / Признак расчета
  3. Цена без скидки * Количество = Сумма без скидки (нефискальная справочная строка)
  4. Скидка
  5. Цена со скидкой * Количество = Сумма со скидкой (итоговая фискальная строка)

Важно понимать: напрямую разделить фискальную позицию текстовой строкой «посередине» технически невозможно.

Фискальная строка (блок регистрации позиции) отправляется в ККТ как единый объект. Печатью этого блока полностью управляет внутренний шаблон ККТ (например, компактный шаблон ATEC или стандартный ATCP на Платформе 5.0). Касса печатает наименование, цену, количество и итоговую сумму фискальной позиции слитно, по жестко заложенному в логику прошивки алгоритму. Текстовую строку (нефискальный текст) драйвер ККТ может напечатать либо строго ДО фискального блока регистрации товара, либо строго ПОСЛЕ него.

---

Варианты решения задачи в 1С

Проанализируем три основных способа реализации красивого чека со скидками в зависимости от используемой версии конфигурации 1С и платформы ККТ.

Способ 1. Программное добавление текстовых строк в массив позиций чека (для старых конфигураций, например, Розница 1.0)

Если вы работаете в конфигурации на обычных формах (где используется API версии 2.05 и ниже), вы можете управлять порядком вывода за счет очередности элементов в массиве ОбщиеПараметры.ПозицииЧека. Порядок добавления объектов в этот массив критически важен: драйвер ККТ обрабатывает их последовательно.

Чтобы справочная информация выводилась красиво и логично, мы должны для каждого товара сначала добавить фискальную позицию (которая напечатает название и цену со скидкой), а затем сразу же добавить текстовую нефискальную строку с расчетом скидки.

Рассмотрим пример реализации этого алгоритма в коде 1С:


// Предположим, мы находимся в процедуре формирования XML или структуры чека для ККТ
Для Каждого СтрокаТЧ Из СсылкаНаОбъект.Товары Цикл

    // 1. Формируем стандартную фискальную позицию чека (со скидкой)
    СтрокаЧекаФискальная = Новый Структура;
    СтрокаЧекаФискальная.Вставить("Наименование", СтрокаТЧ.Номенклатура.Наименование);
    СтрокаЧекаФискальная.Вставить("Количество", СтрокаТЧ.Количество);
    СтрокаЧекаФискальная.Вставить("Цена", СтрокаТЧ.ЦенаСоСкидкой); // Фактическая цена продажи
    СтрокаЧекаФискальная.Вставить("Сумма", СтрокаТЧ.СуммаСоСкидкой); // Итоговая сумма по чеку
    СтрокаЧекаФискальная.Вставить("СтавкаНДС", СтрокаТЧ.СтавкаНДС);
    СтрокаЧекаФискальная.Вставить("ПризнакСпособаРасчета", ПредопределенноеЗначение("Перечисление.ПризнакиСпособовРасчетаОплатами.ПередачаСПолнойОплатой"));
    СтрокаЧекаФискальная.Вставить("ПризнакПредметаРасчета", ПредопределенноеЗначение("Перечисление.ПризнакиПредметовРасчета.Товар"));

    // Добавляем фискальный блок в общий массив чека
    ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧекаФискальная);

    // 2. Рассчитываем скидки и выводим нефискальную текстовую строку
    ЦенаБезСкидки = СтрокаТЧ.Цена; // Исходная цена номенклатуры
    СуммаБезСкидки = ЦенаБезСкидки * СтрокаТЧ.Количество;
    СуммаСкидки = СуммаБезСкидки - СтрокаТЧ.СуммаСоСкидкой;

    // Выводим информацию о скидке только если она действительно была предоставлена
    Если СуммаСкидки > 0 Тогда
        
        // Формируем понятный и красивый текст для покупателя
        ШаблонТекста = "[Без скидки: %1 * %2 = %3 | Скидка: %4]";
        ТекстСтроки = СтрШаблон(ШаблонТекста, 
                                 Формат(ЦенаБезСкидки, "ЧДЦ=2; ЧГ=0"), 
                                 Формат(СтрокаТЧ.Количество, "ЧДЦ=3; ЧГ=0"), 
                                 Формат(СуммаБезСкидки, "ЧДЦ=2; ЧГ=0"), 
                                 Формат(СуммаСкидки, "ЧДЦ=2; ЧГ=0"));
        
        // Используем стандартную функцию БСП для создания параметров текстовой строки
        // Третий параметр "Истина" отвечает за перенос текста, если он шире ленты ККТ
        СтрокаЧекаТекстовая = МенеджерОборудованияКлиентСервер.ПараметрыТекстовойСтрокиЧека(ТекстСтроки, , Истина);
        
        // Добавляем текстовую строку СРАЗУ вслед за фискальной
        ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧекаТекстовая);
        
    КонецЕсли;

КонецЦикла;

При таком подходе на чековой ленте мы получим аккуратный и структурированный вид:

Шоколад молочный Аленка
1.000 шт. х 80.00 = 80.00
[Без скидки: 100.00 * 1.000 = 100.00 | Скидка: 20.00]

Это выглядит профессионально, не нарушает фискальный блок кассы и дает покупателю полную информацию о его выгоде.

---

Способ 2. Использование СКД-шаблонов чеков (для современных конфигураций 1С)

Если вы работаете в современных конфигурациях 1С (таких как «1С:Розница 2.3 / 3.0», «1С:Управление нашей фирмой» или «1С:Управление торговлей 11»), программировать вывод строк вручную нет необходимости. В этих системах разработан удобный графический редактор чеков на базе Системы компоновки данных (СКД).

Разберем по шагам, как настроить отображение скидки через интерфейс 1С:

  1. Перейдите в раздел Администрирование -> Продажи -> Шаблоны чеков ККМ.
  2. Создайте новый шаблон или откройте существующий для редактирования.
  3. В структуре чека найдите табличную часть «Товары».
  4. Добавьте в строку товарной позиции доступные поля СКД:
    • [ЦенаБезСкидки] — исходная цена товара;
    • [СуммаСкидки] — общая величина скидки на позицию;
    • [ПроцентСкидки] — относительный размер скидки.
  5. Используя визуальный конструктор, скомпонуйте строку. Например, вы можете настроить вывод строки скидки сразу под наименованием товара мелким шрифтом или в скобках.
  6. Сохраните шаблон и назначьте его для использования на вашей кассе. При пробитии чека 1С сама сформирует XML-пакет нужной структуры и отправит его на ККТ Атол.

---

Способ 3. Использование встроенных шаблонов дополнения ККТ (Платформа 5.0 и ДТО 10)

В современных кассовых аппаратах Атол, работающих под управлением Платформы 5.0 и управляемых Драйвером торгового оборудования (ДТО) версии 10, появился внутренний механизм «Шаблонов дополнения чека».

Касса может автоматически дописывать информацию о скидках в чеке, если включить соответствующую настройку драйвера:

  1. Откройте утилиту «Тест драйвера ККТ» (версии 10.x).
  2. Перейдите в режим «Свойства» ККТ и выберите раздел «Параметры ККТ».
  3. Найдите вкладку «Шаблоны» или «Печать» (интерфейс может незначительно отличаться в зависимости от версии прошивки).
  4. Активируйте параметр «Печатать скидки» (или выберите режим детального отображения скидок).
  5. При отправке чека из 1С касса будет автоматически анализировать разницу между переданной ценой и ценой без скидки и самостоятельно формировать информационные строки внизу фискального документа.

---

Резюме и рекомендации

Подведем итоги нашего анализа:

← На главную