Как решить проблему «К данной обработке уже подключено торговое оборудование» при подключении ККМ в РБД?

Программист 1С v8.3 (Обычные формы) 1С:Комплексная автоматизация Торговля и дистрибуция
← На главную

При работе в распределенных информационных базах (РИБ / РБД) на платформе «1С:Предприятие 8» (особенно в конфигурациях на обычных формах, таких как «Комплексная автоматизация 1.1», «Управление производственным предприятием 1.3» или «Управление торговлей 10.3») технические специалисты часто сталкиваются с трудностями при подключении фискальных регистраторов (ККТ) в разных узлах сети. Типичный сценарий: в дочерней базе кассовый аппарат успешно подключен и функционирует, но при попытке добавить аналогичное устройство в головном офисе система выдает ошибку: «К данной обработке уже подключено торговое оборудование» и блокирует запись элемента.

В этой статье мы подробно разберем, почему возникает данное ограничение в архитектуре подсистемы торгового оборудования 1С, проанализируем внутренние механизмы платформы и рассмотрим два практических способа решения этой проблемы, включая особенности работы в терминальном режиме (RDP).

---

Почему возникает ошибка: анализируем архитектуру подсистемы ТО

Для того чтобы понять природу ошибки, рассмотрим, как именно старые конфигурации 1С на обычных формах хранят и обрабатывают сведения о торговом оборудовании. Вся подсистема опирается на взаимодействие трех ключевых объектов метаданных:

  1. Справочник ОбработкиОбслуживанияТорговогоОборудования. Он предназначен для хранения файлов обработок обслуживания (с расширением .epf), которые выступают промежуточным звеном (драйвером) между кодом 1С и физическим устройством.
  2. Справочник ТорговоеОборудование. Хранит перечень виртуальных (логических) устройств. Каждая запись в этом справочнике связывает конкретную обработку обслуживания из первого справочника и конкретную модель ККТ, которую эта обработка умеет обслуживать.
  3. Регистр сведений ПараметрыПодключенияТорговогоОборудования. В отличие от справочников, этот регистр хранит сугубо индивидуальные физические настройки подключения (номер COM-порта, IP-адрес, скорость передачи данных, сетевой порт и т. д.), жестко привязанные к конкретному рабочему месту, а именно к имени локального компьютера (значению, возвращаемому функцией ИмяКомпьютера()).

Проблема кроется в использовании так называемых универсальных обработок обслуживания (например, популярной обработки Карпова для ККТ-онлайн по 54-ФЗ). Для упрощения разработки и интеграции такие универсальные драйверы сообщают системе 1С о поддержке только одной предопределенной модели оборудования (например, «Универсальный фискальный регистратор» или «ККТ-Онлайн»).

Когда мы пытаемся добавить вторую кассу в базу данных, встроенный «Помощник подключения торгового оборудования» проверяет связку «Обработка обслуживания + Модель устройства». Видя, что в справочнике ТорговоеОборудование уже существует запись, где выбранная обработка ассоциирована с этой единственной моделью, алгоритм 1С жестко блокирует создание дублирующей записи, выдавая ошибку: «к данной обработке уже подключено торговое оборудование».

Ситуация осложняется в распределенных базах (РБД). Справочники ОбработкиОбслуживанияТорговогоОборудования и ТорговоеОборудование подлежат миграции и синхронизируются между всеми узлами сети. В то же время регистр сведений с физическими параметрами портов является локальным для каждого рабочего места. Ниже мы детально разберем, как обойти ограничение платформы и корректно настроить оборудование во всех узлах.

---

Решение №1: Использование одного элемента справочника для всех узлов (Рекомендуемый способ)

Этот способ является наиболее правильным с точки зрения архитектуры 1С. Нам не потребуется дублировать файлы обработок или вносить изменения в программный код конфигурации. Мы воспользуемся тем, что физические настройки касс разделяются по именам компьютеров.

Разберем процесс настройки по шагам:

  1. Создание логического устройства в одном из узлов. Перейдем в меню «Сервис» — «Торговое оборудование» — «Подключение и настройка торгового оборудования». В одном из узлов (например, в подчиненной базе) добавим новую запись. Выберем нашу универсальную обработку обслуживания и создадим связанное устройство (например, «АТОЛ-30Ф»).
  2. Выполнение синхронизации данных (обмена РБД). Проведем сеанс обмена данными между дочерней и главной базами. В результате созданный элемент справочника ТорговоеОборудование перенесется во все узлы распределенной системы.
  3. Локальная настройка параметров в другом узле. Перейдем на компьютер во втором узле (например, в главной базе), к которому физически подключен второй аппарат ККМ. Откроем форму «Подключение и настройка торгового оборудования».
    • Важно: Не нажимайте кнопку «Добавить» и не запускайте «Помощник подключения»! Попытка создать новый элемент вызовет анализируемую ошибку.
    • Вместо этого найдем в списке оборудования уже существующую строку, которая пришла по обмену из первого узла.
    • Выделим её и нажмем кнопку «Параметры» (или дважды кликнем по строке).
    • Перед нами откроется окно настройки драйвера ККМ. Укажем параметры, актуальные именно для текущего компьютера: выберем нужный COM-порт (например, COM3 вместо COM1, настроенного в первом узле), укажем скорость и модель фискального накопителя.
    • Нажмем кнопку «Записать» или «ОК».

Результат работы схемы: В системе будет зарегистрирована всего одна запись в справочнике ТорговоеОборудование, но в регистре сведений ПараметрыПодключенияТорговогоОборудования будут созданы две независимые записи для разных компьютеров. Каждая касса будет обращаться к общей логической записи, но инициализироваться со своими локальными физическими портами.

---

Решение №2: Дублирование файлов обработок обслуживания (Альтернативный способ)

Если в силу особенностей ведения учета или требований администрирования вам критически важно иметь в справочнике ТорговоеОборудование физически раздельные элементы для каждого филиала или кассового узла (например, чтобы жестко привязать разные кассы к разным группам пользователей), можно применить обходной путь с размножением epf-файлов.

Рассмотрим этот алгоритм подробнее:

  1. Найдем исходный файл универсальной обработки обслуживания на диске компьютера (например, kkt_karpov.epf).
  2. Создадим копию этого файла в операционной системе и переименуем файлы так, чтобы они различались. Например:
    • kkt_karpov_main.epf — для касс головного офиса.
    • kkt_karpov_filial.epf — для касс подчиненного узла.
  3. Запустим 1С и откроем справочник «Обработки обслуживания торгового оборудования».
  4. Загрузим эти файлы как две разные обработки обслуживания, дав им понятные наименования (например, «Драйвер ККТ (Главная база)» и «Драйвер ККТ (Филиал)»).
  5. После выполнения обмена данными РБД обе обработки станут доступны во всех узлах.
  6. Теперь помощник подключения торгового оборудования позволит без ошибок создать отдельные элементы в справочнике ТорговоеОборудование, так как каждый из них будет ссылаться на свою уникальную обработку обслуживания. Конфликт уникальности связки «Обработка + Модель» будет полностью исчерпан.

---

Важный нюанс: Настройка работы в терминальном режиме (RDP)

Если вы настраиваете ККМ в распределенной базе, узлы которой развернуты на одном и том же терминальном сервере (или пользователи разных филиалов работают удаленно через сессии Windows Server), стандартный механизм привязки оборудования по имени компьютера перестанет работать корректно.

Проанализируем причину сбоя: функция платформы ИмяКомпьютера() в терминальной сессии возвращает сетевое имя самого сервера, а не клиентской машины. В результате параметры подключения ККМ, заданные пользователем «Кассир 1», будут постоянно перезаписываться параметрами пользователя «Кассир 2», так как система считает, что они работают за одним ПК.

Для исправления этой проблемы программисту 1С необходимо доработать конфигурацию в части определения уникального рабочего места. Выясним, как это сделать по шагам:

  1. Откроем конфигуратор 1С:Предприятие.
  2. Найдем общий модуль, отвечающий за работу торгового оборудования (обычно это модуль ТОСервер или ПолучениеОбновленийШаблоновКлиент).
  3. Найдем в нем функцию ПолучитьИмяКомпьютераТО() (или аналогичную процедуру, возвращающую имя рабочего места для сохранения параметров).
  4. Модернизируем код так, чтобы к стандартному имени компьютера добавлялось имя текущего пользователя Windows или имя учетной записи 1С.

Посмотрим на пример реализации такого кода:


Функция ПолучитьИмяКомпьютераТО() Экспорт
    
    // Стандартное получение имени физического сервера
    ИмяСервера = ИмяКомпьютера();
    
    // Получаем имя пользователя 1С для уникализации сессии
    ИмяПользователя1С = ИмяПользователя();
    
    // Формируем уникальный идентификатор рабочего места
    УникальноеИмяРабочегоМеста = ИмяСервера + "_" + ИмяПользователя1С;
    
    Возврат УникальноеИмяРабочегоМеста;
    
КонецФункции

Используя данную доработку, система начнет сохранять индивидуальные настройки COM-портов и IP-адресов кассовых аппаратов в регистре сведений раздельно для каждой учетной записи, даже если все операторы физически подключены к одному терминальному серверу.

← На главную