При работе со старыми конфигурациями 1С 7.7, разработанными до появления онлайн-касс, часто возникает проблема: на бумажном чеке товары печатаются списком, но в налоговую (через ОФД) уходит только общая сумма продажи. Это происходит из-за того, что логика обмена с оборудованием была заточена под устаревшие требования ФЗ, где фискальный регистратор не требовал детальной передачи состава чека в электронном виде.
Давайте разберем, почему «галочки» в настройках драйвера не помогают и как программно реализовать передачу номенклатуры в фискальный накопитель.
Многие пользователи пытаются найти в настройках драйвера флаги типа Каждая позиция как отдельная регистрация. Важно понимать: этот параметр влияет на процесс печати, но не меняет архитектуру взаимодействия 1С с кассой. Драйвер не «видит» базу данных 1С и не может самостоятельно разбить сумму на товары. Если программа не передает структуру документа (наименование, цена, количество, сумма) по каждому товару до момента закрытия чека, фискальный накопитель не зафиксирует позиции.
Для корректной работы необходимо переписать логику формирования чека. Мы должны отказаться от «печатного» подхода и перейти к «регистрационному». Суть заключается в последовательном вызове методов драйвера для каждой строки документа.
Рассмотрим основной алгоритм, который нужно реализовать в модуле обработки обслуживания ККТ:
OpenCheck().FNSendTag() можно передать дополнительные теги (например, ИНН).ФискальныйРегистратор и подтвердить их регистрацию командой FNOperation().FNCloseCheckEx().Давайте проанализируем фрагмент кода, который обеспечивает корректную регистрацию каждой позиции товара:
// Перед циклом по строкам документа
ФискальныйРегистратор.CheckType = 0; // Тип чека: продажа
Рез = ФискальныйРегистратор.OpenCheck();
// Цикл по строкам документа
Пока ОбрДок.ПолучитьСтроку() > 0 Цикл
// Заполняем свойства для текущей позиции
ФискальныйРегистратор.StringForPrinting = Лев(ОбрДок.Номенклатура.Наименование, 40);
ФискальныйРегистратор.Price = ПредстЦена;
ФискальныйРегистратор.Quantity = ОбрДок.Количество;
ФискальныйРегистратор.Summ1Enabled = 1;
ФискальныйРегистратор.Summ1 = ПредстЦена * ОбрДок.Количество;
// Тип оплаты и признак предмета расчета
ФискальныйРегистратор.PaymentTypeSign = 4;
ФискальныйРегистратор.PaymentItemSign = 1;
// Регистрация позиции в ФН
Рез = ФискальныйРегистратор.FNOperation();
КонецЦикла;
При доработке модуля обязательно учитывайте следующие моменты:
1. Использование актуальных методов: Убедитесь, что вы используете метод FNOperation(). Если в вашей текущей конфигурации этого метода нет, значит, компонента или внешняя обработка, отвечающая за работу с ФР, устарела. Вам потребуется обновить драйвер до актуальной версии (например, 5.17 и выше).
2. Очистка буфера: После выполнения цикла регистрации позиций и перед закрытием чека, убедитесь, что вы задали пустую строку для StringForPrinting, чтобы избежать повторной печати последней позиции товара в фискальном документе.
3. Работа с защищенными модулями: Если в вашей конфигурации работа с ККТ «спрятана» в защищенную внешнюю компоненту (например, ShtrihContext.dll), которая не позволяет использовать современные методы, рекомендуем полностью переписать процедуру взаимодействия с оборудованием. «Режьте» старую логику и пишите вызовы драйвера напрямую из 1С — это самый надежный способ.
4. Проверка на живом оборудовании: Помните, что отладка работы с фискальным регистратором невозможна без реального аппарата. Обязательно тестируйте изменения на кассе, подключенной в режиме регистрации, чтобы убедиться, что ОФД получает все данные в нужном формате.
Реализация такого подхода позволит вам успешно перейти на современные стандарты передачи фискальных данных, сохранив при этом привычную старую конфигурацию 1С 7.7.