Как подключить онлайн-кассу к 1С:Предприятие 7.7 и настроить печать чеков по 54-ФЗ?

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

Переход на онлайн-кассы по требованиям 54-ФЗ вызвал множество вопросов у пользователей и разработчиков решений на базе 1С:Предприятие 7.7. Платформа 7.7 официально снята с активного развития, однако подключить современные фискальные регистраторы и работать в рамках закона возможно. Разберем практические способы интеграции ККТ с конфигурациями 1С 7.7 (включая типовую конфигурацию «Торговля + Склад 9.2»), посмотрим на примеры взаимодействия с драйверами через COM-объекты и разберем частые ошибки при работе с форматами фискальных данных (ФФД).

Варианты подключения онлайн-ККТ к 1С 7.7

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

  1. Использование обновлений типовых конфигураций: в типовую конфигурацию «Торговля + Склад» редакции 9.2 (начиная с релиза 7.70.988) была добавлена штатная поддержка драйвера «АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ)» версии 8.12. Это позволило работать «из коробки» с моделями Атол 11Ф, Атол 15Ф, Атол 22Ф / FPrint-22ПТК, Атол 25Ф, Атол 30Ф, Атол 42ФС, Атол 52Ф, Атол 55Ф, Атол 60Ф, Атол 77Ф, Атол 90Ф, а также Эвотор СТ2Ф.
  2. Прямая работа с COM-объектами драйверов производителей: для касс производителя «Штрих-М» (Штрих-Лайт-01Ф, Штрих-ФР-01Ф, Штрих-02Ф и др.) и касс «АТОЛ» в нетиповых конфигурациях обмен настраивается через внешние компоненты и OLE/COM-объекты драйверов (например, DrvFR.dll от «Штрих-М» или FprnM1C.dll от «АТОЛ»).
  3. Использование внешних промежуточных веб-сервисов (HTTP-шлюзов): на компьютер с кассой устанавливается локальная служба, принимающая запросы по протоколу HTTP. 1С 7.7 передает данные чека с помощью стандартного системного COM-объекта работы с HTTP-запросами, что исключает прямую привязку к 32-битным DLL кассы и снимает проблемы блокировки интерфейса.

Реализация открытия смены для ККТ «Штрих-М» через драйвер DrvFR

Рассмотрим пример кода на встроенном языке 1С 7.7, который выполняет установку соединения с фискальным регистратором, инициализирует таблицы налогов, реквизитов организации, признаков работы по 54-ФЗ и выполняет операцию открытия смены. В данном примере используется обращение к COM-объекту драйвера DrvFR:


Функция ОперацияОткрытьСмену(Объект, НомерЛУ, Пароль, ПараметрыККТ)
    Результат = "";
    Если Объект = Неопределено Тогда
        Результат = "Торговое оборудование не подключено.";
        Возврат Результат;
    КонецЕсли;

    Объект.НомерЛУ = НомерЛУ;
    Объект.УстановитьАктивноеЛУ;
    Если Объект.Результат <> 0 Тогда
        Результат = Объект.ОписаниеРезультата;
        Возврат Результат;
    КонецЕсли;

    Объект.Пароль = Пароль;
    Объект.УстановитьСвязь;
    Если Объект.Результат <> 0 Тогда
        Результат = Объект.ОписаниеРезультата;
        Возврат Результат;
    КонецЕсли;

    Если ПараметрыККТ.ККМФз54ОнЛайн Тогда
        // Запись налоговых ставок в таблицу 6
        Для НомерНалога = 1 По 6 Цикл
            Объект.Пароль = Пароль;
            Объект.TableNumber = 6;
            Объект.RowNumber = НомерНалога;
            Объект.FieldNumber = 1;
            Объект.ValueofFieldInteger = ПараметрыККТ.ПолучитьАтрибут("Налог" + НомерНалога);
            Объект.GetFieldStruct;
            Объект.WriteTable;
            Если Объект.Результат <> 0 Тогда
                Результат = Объект.ОписаниеРезультата;
                Возврат Результат;
            КонецЕсли;
        КонецЦикла;

        // Режим исчисления скидок (Таблица 17, Поле 3)
        Объект.Пароль = Пароль;
        Объект.TableNumber = 17;
        Объект.RowNumber = 1;
        Объект.FieldNumber = 3;
        Объект.ValueofFieldInteger = 2;
        Объект.GetFieldStruct;
        Объект.WriteTable;
        Если Объект.Результат <> 0 Тогда
            Результат = Объект.ОписаниеРезультата;
            Возврат Результат;
        КонецЕсли;

        // Настройка печати бумажного чека (0 - печатать, 2 - только электронно)
        Объект.Пароль = Пароль;
        Объект.TableNumber = 17;
        Объект.RowNumber = 1;
        Объект.FieldNumber = 7;
        Если ПараметрыККТ.ОтправлятьТолькоЭлектронно Тогда
            Объект.ValueofFieldInteger = 2;
        Иначе
            Объект.ValueofFieldInteger = 0;
        КонецЕсли;
        Объект.GetFieldStruct;
        Объект.WriteTable;
        Если Объект.Результат <> 0 Тогда
            Результат = Объект.ОписаниеРезультата;
            Возврат Результат;
        КонецЕсли;

        // Настройка системы налогообложения и реквизитов (Таблица 18)
        Объект.Пароль = Пароль;
        Объект.TableNumber = 18;
        Объект.RowNumber = 1;
        Объект.FieldNumber = 5;
        Объект.ValueofFieldInteger = ПараметрыККТ.КодНалогооблажения;
        Объект.GetFieldStruct;
        Объект.WriteTable;

        // Реквизиты организации и адреса
        Объект.FieldNumber = 7;
        Объект.ValueofFieldString = ВРЕГ(СокрЛП(ПараметрыККТ.Организация));
        Объект.GetFieldStruct;
        Объект.WriteTable;

        Объект.FieldNumber = 9;
        Объект.ValueofFieldString = ВРЕГ(СокрЛП(ПараметрыККТ.Адрес));
        Объект.GetFieldStruct;
        Объект.WriteTable;

        Объект.FieldNumber = 14;
        Объект.ValueofFieldString = ВРЕГ(СокрЛП(ПараметрыККТ.МестоРасчетов));
        Объект.GetFieldStruct;
        Объект.WriteTable;

        // Передача ИНН кассира для ФФД 1.05 и выше (Тег 1203)
        Если ПараметрыККТ.ФФД > 0 Тогда
            Если ПустаяСтрока(ПараметрыККТ.ИННКассира) = 0 Тогда
                Объект.Пароль = Пароль;
                Объект.НомерТега = 1203;
                Объект.ТипТега = 7;
                Объект.ЗначениеТегаСтрока = СокрЛП(ПараметрыККТ.ИННКассира);
                Объект.FNSendTagOperation;
                Объект.СтрокаДляПечати = "";
                Если Объект.Результат <> 0 Тогда
                    Результат = Объект.ОписаниеРезультата;
                    Объект.РазорватьСвязь;
                    Возврат Результат;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

    // Выполнение команды открытия смены
    Объект.ОткрытьСмену;
    Если Объект.Результат <> 0 Тогда
        Результат = Объект.ОписаниеРезультата;
    КонецЕсли;

    Объект.РазорватьСвязь;
    Возврат Результат;
КонецФункции

Анализ и устранение частых ошибок

Разберем типичные неполадки, возникающие при эксплуатации кассового оборудования под управлением 1С 7.7:

  1. Зависание кассы или обрыв связи при закрытии смены (снятии Z-отчета):

    Во время формирования Z-отчета фискальный накопитель выполняет серию криптографических процедур и формирует итоговый фискальный документ для передачи в ОФД. Этот процесс занимает значительно больше времени, чем печать стандартного фискального чека. Если в модуле 1С установлен стандартный таймаут ожидания ответа устройства (100–300 мс), платформа 7.7 разрывает соединение по таймауту, не дождавшись подтверждения от ККТ. При этом печать чека прерывается.

    Решение: перед выполнением команд ЗакрытьСмену или ПечатьОтчетаСГашением увеличьте таймаут порта драйвера (свойство Timeout) до 3000–5000 мс, а при подключении кассы через сеть (Ethernet, RNDIS) или через удаленный рабочий стол (RDP) — до 10000 мс.

  2. Ошибка «Команда не поддерживается в данной реализации» при отправке тегов (например, Тег 1222):

    Данная ошибка возникает в драйверах при попытке передать параметры формата ФФД 1.05/1.2 с помощью методов, предназначенных для простых атомарных реквизитов (например, вызов FNSendTagOperation для реквизитов агентских схем).

    Решение: тег 1222 (признак агента по предмету расчета) относится к составным структурам (STLV-тегам) либо передается строго внутри структуры описания товарной позиции (предмета расчета). Кроме того, проверьте параметры фискализации аппарата: если при регистрации ККТ в накопителе не был включен признак работы в качестве агента, прошивка кассы будет возвращать ошибку неподдерживаемой команды на любые попытки передать агентские теги.

  3. Несовпадение параметров секций и налоговых ставок между версиями ФФД:

    В зависимости от версии ФФД (1.00, 1.05, 1.2) и производителя ККТ меняется привязка секций к ставкам НДС. Убедитесь, что номера налоговых ставок в таблицах кассового аппарата (таблица 6 для «Штрих-М») строго соответствуют индексам ставок, передаваемым из модуля 1С 7.7.

← На главную