Как подключить две кассы АТОЛ с драйвером ДТО 10 к одному ПК на 1С 7.7?

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

При переходе на онлайн-кассы и новые версии драйверов (в частности, АТОЛ ДТО 10) у многих разработчиков, сопровождающих системы на платформе 1С:Предприятие 7.7, возникают вопросы архитектурного характера. Одной из частых задач является подключение онлайн-касс к нетиповым конфигурациям 1С 7.7 для организации работы нескольких фискальных регистраторов (ККТ) на одном физическом рабочем месте (ПК). Например, когда одна касса пробивает чеки по одному юридическому лицу, а вторая — по другому.

В этой статье мы подробно разберем, как реализовать механизм работы с двумя кассами АТОЛ (например, АТОЛ 30Ф) на одном компьютере, используя драйвер 10-й версии и платформу 7.7. Мы выясним, как управлять программным идентификатором (ProgID), как реализовать подключение кассы с поддержкой ФФД 1.05 через драйвер v10 и рассмотрим примеры кода.

Особенности архитектуры драйвера АТОЛ 10 (ДТО 10)

Прежде чем приступать к коду, давайте разберемся с главным вопросом, который часто ставит в тупик: "Как быть с программным идентификатором, если касс две?".

В старых версиях драйверов (ДТО 8) использовалось понятие "Логическое устройство" (ЛУ), настройки которого хранились в реестре Windows или конфигурационном файле драйвера. В 1С мы просто указывали номер ЛУ.

В ДТО 10 подход кардинально изменился:

  1. Драйвер больше не хранит настройки конкретных экземпляров устройств внутри себя.
  2. Программный идентификатор (ProgID) для OLE-объекта всегда один: AddIn.Fptr10.
  3. Вся ответственность за передачу параметров подключения (какой порт, какая скорость, какая модель) лежит на товароучетной системе (в нашем случае 1С).

Следовательно, чтобы работать с двумя кассами, нам не нужно искать "второй" ProgID. Мы будем использовать один и тот же класс, но инициализировать его с разными параметрами.

Стратегии реализации в 1С 7.7

Рассмотрим два основных способа организации работы. В качестве фундамента вы можете использовать обработку обслуживания торгового оборудования для печати чеков, адаптировав её под работу с несколькими устройствами.

Способ 1: Один объект, динамическое переключение

Мы создаем один глобальный или локальный объект драйвера. Каждый раз перед пробитием чека мы передаем драйверу настройки нужного COM-порта, устанавливаем связь, печатаем чек и (опционально) разрываем связь.

Плюсы: Экономия оперативной памяти.

Минусы: Небольшая задержка перед печатью на установку соединения (Connect). Если поток чеков большой, это может быть заметно.

Способ 2: Параллельные объекты (Рекомендуемый)

Мы создаем отдельные переменные для каждой кассы (например, глККМ1 и глККМ2). При запуске 1С инициализируем каждую переменную своим экземпляром драйвера, настраиваем на разные COM-порты и держим соединение активным постоянно.

Плюсы: Мгновенная печать.

Минусы: Нужно корректно обрабатывать ошибки потери связи для каждого объекта.

Практическая реализация и пример кода

Давайте реализуем механизм, при котором настройки касс хранятся в справочнике 1С. Для тех, кто только начинает разработку, будет полезна демонстрация того, как выполняется встраивание инструментов для работы с кассой АТОЛ в нетиповую 1С 7.7. Это позволит гибко настраивать привязку COM-портов к конкретному рабочему месту.

Предположим, у нас есть справочник СпрКассы, в котором есть реквизиты:

Рассмотрим функцию подключения, которая инициализирует драйвер с нужными настройками. В данном примере мы будем настраивать объект драйвера "на лету" (по Способу 1 или комбинированному).

Сначала создадим объект драйвера:


Попытка
    ДрайверККТ = СоздатьОбъект("AddIn.Fptr10");
Исключение
    Сообщить("Не удалось загрузить драйвер АТОЛ 10 (AddIn.Fptr10)!");
    Возврат 0;
КонецПопытки;

Теперь напишем процедуру настройки параметров. Обратите внимание на методы setSingleSetting и applySingleSettings. Именно они заменяют старую настройку через свойства.


// Пример настройки драйвера на конкретный порт
// Параметр: НомерПорта (Строка, например "5")
Процедура НастроитьИПодключитьККТ(НомерПорта)
    
    // Сначала отключаемся, если были подключены
    ДрайверККТ.put_DeviceEnabled(0);

    // Устанавливаем модель (обычно Авто — 500)
    // LIBFPTR_SETTING_MODEL = 65536
    // LIBFPTR_MODEL_ATOL_AUTO = 500
    ДрайверККТ.setSingleSetting(65536, "500");

    // Устанавливаем канал связи (COM-порт)
    // LIBFPTR_SETTING_PORT = 65537
    // LIBFPTR_PORT_COM = 0
    ДрайверККТ.setSingleSetting(65537, "0");

    // Указываем номер COM-порта
    // LIBFPTR_SETTING_COM_FILE = 65538
    ДрайверККТ.setSingleSetting(65538, "COM" + СокрЛП(НомерПорта));

    // Настройки скорости (обычно 115200 для USB-COM)
    // LIBFPTR_SETTING_BAUDRATE = 65539
    // LIBFPTR_BAUDRATE_115200 = 115200
    ДрайверККТ.setSingleSetting(65539, "115200");

    // Применяем настройки
    ДрайверККТ.applySingleSettings();

    // Пытаемся подключиться
    ДрайверККТ.put_DeviceEnabled(1);

    Если ДрайверККТ.get_DeviceEnabled() = 0 Тогда
        Сообщить("Ошибка подключения к порту COM" + НомерПорта);
        // Можно получить код ошибки через get_ErrorDescription()
    КонецЕсли;

КонецПроцедуры

Алгоритм выбора кассы при печати чека

Самое важное — логика выбора. Когда кассир нажимает кнопку "Пробить чек", программа должна понять, на какое устройство отправить команду.

Рассмотрим сценарий, когда выбор происходит автоматически в зависимости от Фирмы документа или выбора пользователя.


// Фрагмент процедуры печати чека
Процедура ПечатьЧека(ДокументОснование)
    
    // Определяем, какая фирма
    Если ДокументОснование.Фирма = Константа.ОсновнаяФирма Тогда
        НужныйПорт = "3"; // Условно COM3 для первой фирмы
    Иначе
        НужныйПорт = "4"; // Условно COM4 для второй фирмы
    КонецЕсли;

    // Или ищем порт в справочнике по Имени ПК и Фирме
    // ... Код поиска в справочнике ...

    // Вызываем настройку
    НастроитьИПодключитьККТ(НужныйПорт);

    Если ДрайверККТ.get_DeviceEnabled() = 1 Тогда
        // Здесь идет код формирования чека (открытие смены, регистрации позиций)
        // ...
        // ...
        
        // После пробития чека, если используем один объект на всех, 
        // можно отключиться, чтобы освободить порт (не обязательно, но надежнее при сбоях)
        ДрайверККТ.put_DeviceEnabled(0);
    КонецЕсли;

КонецПроцедуры

Решение проблемы "плавающих" портов

При подключении двух одинаковых устройств (например, двух АТОЛ 30Ф) по USB, Windows создает виртуальные COM-порты. Главная проблема — при перезагрузке ПК или переподключении кабелей порты могут поменяться местами (ККТ 1 станет COM4, а ККТ 2 — COM3).

Как зафиксировать порты:

  1. Подключите обе кассы.
  2. Зайдите в "Диспетчер устройств" Windows.
  3. Найдите раздел "Порты (COM и LPT)".
  4. Откройте свойства порта АТОЛ, перейдите на вкладку "Параметры порта" -> "Дополнительно".
  5. Принудительно назначьте номер COM-порта (например, COM10 для первой кассы и COM11 для второй).
  6. Сделайте физические наклейки на USB-кабели и разъемы ПК, чтобы всегда включать их в одни и те же гнезда.

Важные нюансы работы с несколькими ККТ

Рассмотрим еще несколько технических моментов, которые обеспечат стабильность:

1. Передача данных в ОФД (EoU)
Если ваши кассы передают данные в налоговую через компьютер (Ethernet over USB), у вас будет запущена служба EoU. Для двух касс важно проверить файл настроек settings.xml (обычно лежит в C:\ProgramData\ATOL\EoU или в папке установки драйвера). Там должны быть прописаны секции для обоих устройств с указанием их портов передачи данных. Иначе чеки с одной из касс могут не уходить.

2. Идентификация по серийному номеру
Если вы хотите сделать систему "пуленепробиваемой", не полагайтесь только на номер COM-порта. После команды put_DeviceEnabled(1) запросите у кассы серийный номер через метод драйвера get_SerialNumber(). Сравните его с тем, что записан в базе 1С для этой фирмы. Если номера не совпадают — значит, порты перепутаны, и нужно выдать предупреждение кассиру, чтобы он не пробил чек не той организации.

3. Лицензирование драйвера
Драйвер АТОЛ 10 является бесплатным для работы с кассами АТОЛ. Никаких дополнительных лицензий для работы с несколькими устройствами на одном ПК не требуется.

Итог

Подключить две кассы АТОЛ к 1С 7.7 на одном компьютере абсолютно реально и не требует сложных "костылей". Ключевой момент — понимание, что объект AddIn.Fptr10 един, а управление выбором устройства осуществляется путем передачи параметра LIBFPTR_SETTING_COM_FILE перед установкой соединения. Рекомендуем хранить соответствие "Фирма — Номер порта" в справочнике вашей конфигурации для удобства администрирования.

← На главную