Как настроить работу 1С 7.7 с онлайн-кассами Атол и Штрих-М по закону 54-ФЗ

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

Переход на онлайн-кассы для пользователей платформы 1С 7.7 стал серьезным вызовом. Несмотря на то что платформа официально считается устаревшей, она продолжает активно использоваться в торговле. Основная сложность заключается в необходимости поддержки форматов фискальных данных (ФФД) 1.05 и 1.2, а также в корректной работе с драйверами торгового оборудования. Разберем по шагам наиболее эффективные решения для интеграции 1С 7.7 с современными кассовыми аппаратами.

Выбор драйвера и компоненты для Атол

Проанализируем ситуацию с драйверами Атол. Традиционно для 7.7 использовался драйвер 8.х. Однако с переходом на ФФД 1.05 многие столкнулись с проблемой передачи новых тегов. Рассмотрим два основных пути взаимодействия:

  1. Использование FprnM1C82_54FZ.dll: это так называемая «прокладка», работающая через XML-пакеты. Она проста в настройке, но часто ограничена функционально.
  2. Прямое обращение к драйверу через FprnM45 (COM-объект): этот метод дает полный доступ к функционалу драйвера FPrnM1C.dll. Программисты рекомендуют именно этот способ для реализации сложных задач, таких как частичная оплата или передача ИНН кассира.

Важно учитывать, что для работы с новыми прошивками под НДС 20% и ФФД 1.05/1.2 наиболее стабильно показывают себя драйверы версии 8.16 и выше. При использовании драйверов 10.х (ДТО 10) в 1С 7.7 потребуется использование Native-компоненты или создание JSON-запросов к Web-серверу Атол.

Передача данных кассира: ФИО и ИНН

Одной из частых проблем является печать на чеке «Системного администратора» вместо реального кассира. Согласно 54-ФЗ, ФИО и ИНН кассира являются обязательными реквизитами. Выясним причину: часто смена открывается автоматически под паролем администратора, и эти данные «залипают» на первый чек.

Рассмотрим, как программно передать ИНН (тег 1203) и ФИО (тег 1021) кассира перед пробитием чека в драйвере Атол 8.х:


// Установка ФИО кассира
Объект.AttrNumber = 1021;
Объект.AttrValue = "Иванов Иван Иванович";
Объект.WriteAttribute();

// Установка ИНН кассира
Объект.AttrNumber = 1203;
Объект.AttrValue = "123456789012";
Объект.WriteAttribute();

Проанализируем ситуацию, если данные все равно не печатаются в первом чеке после открытия смены. В этом случае необходимо явно вызывать метод OpenSession() и повторно устанавливать атрибуты перед регистрацией позиций, как показано ниже:


Если Объект.SessionOpened = 0 Тогда
    Объект.OpenSession();
    Объект.AttrNumber = 1021;
    Объект.AttrValue = "Иванов И.И.";
    Объект.WriteAttribute();
КонецЕсли;

Работа с налогами: НДС 18% и 20%

При переходе на ставку НДС 20% недостаточно просто изменить значение в 1С. Кассовый аппарат должен быть прошит под актуальные налоговые ставки. В коде 1С 7.7 необходимо передавать правильный индекс налоговой группы. Посмотрим на пример сопоставления для Атол:


Если СтавкаНДС = "20" Тогда
    Объект.TaxTypeNumber = 3; // Индекс может зависеть от настроек таблиц ККТ
ИначеЕсли СтавкаНДС = "10" Тогда
    Объект.TaxTypeNumber = 2;
Иначе
    Объект.TaxTypeNumber = 4; // Без НДС
КонецЕсли;

Если после обновления прошивки на чеке вместо 18% или 20% печатается «НДС 18/118», попробуйте обновить драйвер до версии 8.16.1 или выше. В этих версиях алгоритм передачи налоговых групп был скорректирован под новые требования ФНС.

Реализация различных видов оплаты (наличные, карта)

Современные требования обязывают разделять оплаты на наличные и безналичные. В драйверах Атол это реализуется через свойство TypeClose и метод Payment(). Разберем по шагам, как пробить чек с комбинированной оплатой:


// Регистрация товаров...
// Объект.Registration();

// Оплата наличными
Объект.TypeClose = 0;
Объект.Summ = СуммаНаличными;
Объект.Payment();

// Оплата картой (электронными)
Объект.TypeClose = 1;
Объект.Summ = СуммаКартой;
Объект.Payment();

// Закрытие чека
Объект.CloseCheck();

Важный момент: использование метода CloseCheck() без предварительного вызова Payment() считается устаревшим. Для ФФД 1.05 крайне рекомендуется использовать Payment() для каждой части суммы, так как это гарантирует корректную передачу тегов в ОФД.

Особенности работы с ККТ Штрих-М в 1С 7.7

Для аппаратов Штрих-М основным инструментом является драйвер DrvFR.dll. Проблема с кассирами здесь решается иначе — через запись в таблицы ККТ. Рассмотрим пример установки имени кассира через прямое редактирование таблицы:


Объект.Password = 30; // Пароль администратора
Объект.TableNumber = 2; // Таблица кассиров
Объект.FieldNumber = 2; // Поле имени
Объект.RowNumber = 1; // Номер ряда (соответствует паролю кассира 1)
Объект.ValueStr = "Кассир Петрова";
Объект.SetFieldValue();

Для получения номера чека или состояния смены в Штрих-М используйте метод GetStatus(), после чего обращайтесь к свойствам OpenDocumentNumber или CheckNumber.

Организация сетевой печати чеков

Часто возникает задача использовать одну кассу на несколько рабочих мест. Штатно 1С 7.7 подключается к COM-порту монопольно. Разберем два варианта решения:

  1. Служба Атол (EthOverUsb): позволяет обращаться к кассе по IP-адресу. В настройках торгового оборудования 1С указывается TCP-порт и адрес сервера.
  2. Менеджер очереди (собственная разработка): 1С записывает данные чека в промежуточную таблицу или XML-файл, а специальный «робот» (отдельный сеанс 1С или служба) считывает эти файлы и по очереди отправляет на печать.

Посмотрим на пример логики «робота» печати:


Процедура ПечатьИзОчереди()
    Файлы = ФС.НайтиПервыйФайл(ПутьКЧекам + "*.xml");
    Пока ПустоеЗначение(Файлы) = 0 Цикл
        Если ЗагрузитьИПробитьЧек(Файлы) = 1 Тогда
            ФС.УдалитьФайл(ПутьКЧекам + Файлы);
        КонецЕсли;
        Файлы = ФС.НайтиСледующийФайл();
    КонецЦикла;
КонецПроцедуры

Получение номера чека и фискального признака

Для хранения в базе 1С ссылки на фискальный документ необходимо получать данные из ККТ сразу после закрытия чека. Обратите внимание на нюанс: свойство CheckNumber у Атола после закрытия чека часто инкрементируется и показывает номер следующего (еще не пробитого) чека. Чтобы получить номер текущего, используйте следующий алгоритм:


Объект.CloseCheck();
Если Объект.ResultCode = 0 Тогда
    НомерЧека = Объект.CheckNumber - 1; // Корректировка для получения текущего номера
    // Также можно получить ФД и ФП через GetStatus
    Объект.GetStatus();
    ФискальныйДокумент = Объект.FiscalDocumentNumber;
КонецЕсли;

Подводя итог, можно сказать, что работа 1С 7.7 с онлайн-кассами требует глубокого понимания методов драйвера. Рекомендуется уходить от стандартных обработок 1С в сторону прямого управления объектами драйвера — это позволит реализовать все требования ФФД 1.05 и 1.2 без ожидания официальных обновлений, которые для версии 7.7 выпускаются крайне редко.

← На главную