При работе со старыми конфигурациями 1С на платформе 8.1 или 8.2 (например, Бухгалтерия предприятия 2.0), пользователи часто сталкиваются с трудностями при настройке отображения реквизитов в чеках онлайн-касс. Основная проблема заключается в том, что требования законодательства (54-ФЗ) жестко разделяют понятия «что мы продаем» и «как за это платят». В данной статье мы подробно разберем, как программно изменить эти данные, проанализируем структуру кода и выясним, почему простая замена текста в коде не всегда приводит к желаемому результату.
Прежде чем вносить изменения в код, нам необходимо четко разграничить два ключевых тега фискальных данных (ФФД):
Важный момент: Мы не можем просто заменить «Полный расчет» на «Оплата за ТО», так как это разные поля чека. «Оплата за ТО» должна быть в названии товара, а «Полный расчет» — это статус операции, подтверждающий, что услуга оказана и оплачена полностью в данный момент.
Рассмотрим типовой фрагмент кода, используемый в обработках групповой печати чеков для старых версий 1С. Проанализируем, как формируются данные перед отправкой на фискальный регистратор (ФР):
// Создание таблицы платежей, которая будет передана в драйвер ККТ
ТаблицаПлатежей = Новый ТаблицаЗначений;
ТаблицаПлатежей.Колонки.Добавить("Заголовок");
ТаблицаПлатежей.Колонки.Добавить("Сумма");
ТаблицаПлатежей.Колонки.Добавить("НДС");
Для Каждого Позиция Из Документ.РасшифровкаПлатежа Цикл
СтрокаТаблицы = ТаблицаПлатежей.Добавить;
// Здесь формируется наименование, которое будет напечатано в чеке
СтрокаТаблицы.Заголовок = "Принято от " + Документ.ПринятоОт + " |Основание: " + Документ.Основание;
СтрокаТаблицы.Сумма = Позиция.СуммаПлатежа;
СтрокаТаблицы.НДС = УчетНДС.ПолучитьСтавкуНДС(Позиция.СтавкаНДС);
КонецЦикла;
// Вызов метода печати через сервер торгового оборудования
Результат = ПолучитьСерверТО.ПечатьЧекаПКО(ФР,
ПарольКассира,
Документ.НомерЧекаККМ,
НомерСмены,
ТаблицаПлатежей,
0,
Документ.Ссылка);
В этом примере за наименование отвечает переменная СтрокаТаблицы.Заголовок. Если мы хотим, чтобы в чеке вместо фразы «Принято от...» печаталось «Оплата за ТО», нам нужно изменить именно эту строку формирования данных.
Разберем, как поменять текст наименования. Для этого в цикле обхода строк документа внесем изменения в формирование колонки Заголовок. Мы можем использовать условие или просто заменить текст, если данная обработка предназначена только для одного вида услуг:
// Вариант 1: Жесткая подстановка текста
СтрокаТаблицы.Заголовок = "Оплата за ТО по док. №" + Документ.Номер;
// Вариант 2: Получение из содержания документа
Если ЗначениеЗаполнено(Документ.Содержание) Тогда
СтрокаТаблицы.Заголовок = Документ.Содержание;
Иначе
СтрокаТаблицы.Заголовок = "Оплата за услуги";
КонецЕсли;
После этого изменения в фискальном чеке в поле наименования товара (услуги) появится нужный нам текст.
Ситуация с изменением Признака способа расчета (тег 1214) сложнее. В старых конфигурациях 1С 8.1, которые не были изначально рассчитаны на онлайн-кассы с ФФД 1.05 и выше, этот признак часто передается «зашитым» в коде или вообще не передается, и тогда драйвер ККТ подставляет значение по умолчанию (обычно это 4 — «Полный расчет»).
Чтобы установить значение «Оплата кредита» (код 7), выполним следующие шаги:
ПечатьЧекаПКО. Если эта функция находится во внешней обработке обслуживания ККТ, нам нужно открыть эту обработку в Конфигураторе.ПодготовитьДанныеЧека (или аналогичную). Именно там формируется XML-пакет, который отправляется в драйвер.PaymentMethodType.Пример модификации структуры данных в коде обработки обслуживания:
// Внутри обработки обслуживания ККТ при формировании строки чека
ОбъектПозиции.ЗаписатьАтрибут("PaymentMethodType", "7"); // 7 соответствует Оплате кредита
ОбъектПозиции.ЗаписатьАтрибут("PaymentSubjectType", "1"); // 1 соответствует Товару/Услуге
Если вы меняете «4 на 7» в коде, но в чеке все равно выходит «Полный расчет», выясним возможные причины:
Проанализируем ситуацию: вы внесли правки, но результат не изменился. Рассмотрим алгоритм действий для поиска ошибки:
1. Включите лог драйвера ККТ. В настройках драйвера (например, АТОЛ или Штрих-М) можно включить ведение текстового лога. Там вы увидите реальную XML-структуру или список команд, которые 1С посылает на кассу. Если в логе вы видите PaymentMethodType="4", значит, правку нужно искать глубже в коде 1С.
2. Проверьте обработку обслуживания. В старых версиях «Бухгалтерии 2.0» механизмы ТО (торгового оборудования) вынесены во внешние обработки. Перейдите в меню Сервис — Торговое оборудование — Подключение и настройка. Посмотрите, какая именно обработка используется для вашего ФР, и именно её открывайте в конфигураторе.
3. Использование расшифровки платежа. Если в документе ПКО (Приходный кассовый ордер) есть несколько строк, убедитесь, что ваш код корректно обрабатывает каждую строку в цикле Для Каждого Позиция Из Документ.РасшифровкаПлатежа. Ошибка часто кроется в том, что программист меняет значение для первой строки, а в чек уходят данные из последующих.
Подведем итог: Для успешного изменения чека необходимо четко разделять текстовое описание услуги и фискальный признак способа оплаты. Изменение текста в ТаблицеПлатежей решит вопрос с наименованием («Оплата за ТО»), а для смены режима «Полный расчет» на «Оплата кредита» потребуется вмешательство в логику формирования XML-пакета внутри обработки обслуживания ККТ. Помните, что использование признака «Оплата кредита» корректно только в том случае, если ранее уже был пробит чек с признаком «Передача в кредит».