Как изменить «Полный расчет» на «Оплата кредита» и отредактировать наименование услуги в чеке 1С

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Разграничение понятий: Признак способа расчета и Наименование услуги

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

  1. Наименование предмета расчета (Тег 1030): Это текстовое поле, в котором указывается, за что приняты деньги (например, «Оплата за ТО», «Замена масла», «Услуги программиста»).
  2. Признак способа расчета (Тег 1214): Это системный признак, который может принимать только строго определенные значения: «Полный расчет», «Предоплата», «Аванс», «Оплата кредита» и другие.

Важный момент: Мы не можем просто заменить «Полный расчет» на «Оплата за ТО», так как это разные поля чека. «Оплата за ТО» должна быть в названии товара, а «Полный расчет» — это статус операции, подтверждающий, что услуга оказана и оплачена полностью в данный момент.

Анализ программного кода формирования чека

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


// Создание таблицы платежей, которая будет передана в драйвер ККТ
ТаблицаПлатежей = Новый ТаблицаЗначений;
ТаблицаПлатежей.Колонки.Добавить("Заголовок");
ТаблицаПлатежей.Колонки.Добавить("Сумма");
ТаблицаПлатежей.Колонки.Добавить("НДС");

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

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

В этом примере за наименование отвечает переменная СтрокаТаблицы.Заголовок. Если мы хотим, чтобы в чеке вместо фразы «Принято от...» печаталось «Оплата за ТО», нам нужно изменить именно эту строку формирования данных.

Как изменить наименование услуги на «Оплата за ТО»

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


// Вариант 1: Жесткая подстановка текста
СтрокаТаблицы.Заголовок = "Оплата за ТО по док. №" + Документ.Номер;

// Вариант 2: Получение из содержания документа
Если ЗначениеЗаполнено(Документ.Содержание) Тогда
    СтрокаТаблицы.Заголовок = Документ.Содержание;
Иначе
    СтрокаТаблицы.Заголовок = "Оплата за услуги";
КонецЕсли;

После этого изменения в фискальном чеке в поле наименования товара (услуги) появится нужный нам текст.

Как изменить «Полный расчет» на «Оплата кредита»

Ситуация с изменением Признака способа расчета (тег 1214) сложнее. В старых конфигурациях 1С 8.1, которые не были изначально рассчитаны на онлайн-кассы с ФФД 1.05 и выше, этот признак часто передается «зашитым» в коде или вообще не передается, и тогда драйвер ККТ подставляет значение по умолчанию (обычно это 4 — «Полный расчет»).

Чтобы установить значение «Оплата кредита» (код 7), выполним следующие шаги:

  1. Проверка параметров функции: Посмотрим на вызов метода ПечатьЧекаПКО. Если эта функция находится во внешней обработке обслуживания ККТ, нам нужно открыть эту обработку в Конфигураторе.
  2. Поиск формирования XML: Внутри обработки обслуживания найдем процедуру ПодготовитьДанныеЧека (или аналогичную). Именно там формируется XML-пакет, который отправляется в драйвер.
  3. Добавление тега: В структуре XML для каждой позиции чека должен присутствовать атрибут PaymentMethodType.

Пример модификации структуры данных в коде обработки обслуживания:


// Внутри обработки обслуживания ККТ при формировании строки чека
ОбъектПозиции.ЗаписатьАтрибут("PaymentMethodType", "7"); // 7 соответствует Оплате кредита
ОбъектПозиции.ЗаписатьАтрибут("PaymentSubjectType", "1"); // 1 соответствует Товару/Услуге

Если вы меняете «4 на 7» в коде, но в чеке все равно выходит «Полный расчет», выясним возможные причины:

Практические советы по отладке

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

1. Включите лог драйвера ККТ. В настройках драйвера (например, АТОЛ или Штрих-М) можно включить ведение текстового лога. Там вы увидите реальную XML-структуру или список команд, которые 1С посылает на кассу. Если в логе вы видите PaymentMethodType="4", значит, правку нужно искать глубже в коде 1С.

2. Проверьте обработку обслуживания. В старых версиях «Бухгалтерии 2.0» механизмы ТО (торгового оборудования) вынесены во внешние обработки. Перейдите в меню Сервис — Торговое оборудование — Подключение и настройка. Посмотрите, какая именно обработка используется для вашего ФР, и именно её открывайте в конфигураторе.

3. Использование расшифровки платежа. Если в документе ПКО (Приходный кассовый ордер) есть несколько строк, убедитесь, что ваш код корректно обрабатывает каждую строку в цикле Для Каждого Позиция Из Документ.РасшифровкаПлатежа. Ошибка часто кроется в том, что программист меняет значение для первой строки, а в чек уходят данные из последующих.

Подведем итог: Для успешного изменения чека необходимо четко разделять текстовое описание услуги и фискальный признак способа оплаты. Изменение текста в ТаблицеПлатежей решит вопрос с наименованием («Оплата за ТО»), а для смены режима «Полный расчет» на «Оплата кредита» потребуется вмешательство в логику формирования XML-пакета внутри обработки обслуживания ККТ. Помните, что использование признака «Оплата кредита» корректно только в том случае, если ранее уже был пробит чек с признаком «Передача в кредит».

← На главную