При работе в распределенных информационных базах (РИБ / РБД) на платформе «1С:Предприятие 8» (особенно в конфигурациях на обычных формах, таких как «Комплексная автоматизация 1.1», «Управление производственным предприятием 1.3» или «Управление торговлей 10.3») технические специалисты часто сталкиваются с трудностями при подключении фискальных регистраторов (ККТ) в разных узлах сети. Типичный сценарий: в дочерней базе кассовый аппарат успешно подключен и функционирует, но при попытке добавить аналогичное устройство в головном офисе система выдает ошибку: «К данной обработке уже подключено торговое оборудование» и блокирует запись элемента.
В этой статье мы подробно разберем, почему возникает данное ограничение в архитектуре подсистемы торгового оборудования 1С, проанализируем внутренние механизмы платформы и рассмотрим два практических способа решения этой проблемы, включая особенности работы в терминальном режиме (RDP).
---
Для того чтобы понять природу ошибки, рассмотрим, как именно старые конфигурации 1С на обычных формах хранят и обрабатывают сведения о торговом оборудовании. Вся подсистема опирается на взаимодействие трех ключевых объектов метаданных:
ОбработкиОбслуживанияТорговогоОборудования. Он предназначен для хранения файлов обработок обслуживания (с расширением .epf), которые выступают промежуточным звеном (драйвером) между кодом 1С и физическим устройством.ТорговоеОборудование. Хранит перечень виртуальных (логических) устройств. Каждая запись в этом справочнике связывает конкретную обработку обслуживания из первого справочника и конкретную модель ККТ, которую эта обработка умеет обслуживать.ПараметрыПодключенияТорговогоОборудования. В отличие от справочников, этот регистр хранит сугубо индивидуальные физические настройки подключения (номер COM-порта, IP-адрес, скорость передачи данных, сетевой порт и т. д.), жестко привязанные к конкретному рабочему месту, а именно к имени локального компьютера (значению, возвращаемому функцией ИмяКомпьютера()).Проблема кроется в использовании так называемых универсальных обработок обслуживания (например, популярной обработки Карпова для ККТ-онлайн по 54-ФЗ). Для упрощения разработки и интеграции такие универсальные драйверы сообщают системе 1С о поддержке только одной предопределенной модели оборудования (например, «Универсальный фискальный регистратор» или «ККТ-Онлайн»).
Когда мы пытаемся добавить вторую кассу в базу данных, встроенный «Помощник подключения торгового оборудования» проверяет связку «Обработка обслуживания + Модель устройства». Видя, что в справочнике ТорговоеОборудование уже существует запись, где выбранная обработка ассоциирована с этой единственной моделью, алгоритм 1С жестко блокирует создание дублирующей записи, выдавая ошибку: «к данной обработке уже подключено торговое оборудование».
Ситуация осложняется в распределенных базах (РБД). Справочники ОбработкиОбслуживанияТорговогоОборудования и ТорговоеОборудование подлежат миграции и синхронизируются между всеми узлами сети. В то же время регистр сведений с физическими параметрами портов является локальным для каждого рабочего места. Ниже мы детально разберем, как обойти ограничение платформы и корректно настроить оборудование во всех узлах.
---
Этот способ является наиболее правильным с точки зрения архитектуры 1С. Нам не потребуется дублировать файлы обработок или вносить изменения в программный код конфигурации. Мы воспользуемся тем, что физические настройки касс разделяются по именам компьютеров.
Разберем процесс настройки по шагам:
ТорговоеОборудование перенесется во все узлы распределенной системы.Результат работы схемы: В системе будет зарегистрирована всего одна запись в справочнике ТорговоеОборудование, но в регистре сведений ПараметрыПодключенияТорговогоОборудования будут созданы две независимые записи для разных компьютеров. Каждая касса будет обращаться к общей логической записи, но инициализироваться со своими локальными физическими портами.
---
Если в силу особенностей ведения учета или требований администрирования вам критически важно иметь в справочнике ТорговоеОборудование физически раздельные элементы для каждого филиала или кассового узла (например, чтобы жестко привязать разные кассы к разным группам пользователей), можно применить обходной путь с размножением epf-файлов.
Рассмотрим этот алгоритм подробнее:
kkt_karpov.epf).kkt_karpov_main.epf — для касс головного офиса.kkt_karpov_filial.epf — для касс подчиненного узла.ТорговоеОборудование, так как каждый из них будет ссылаться на свою уникальную обработку обслуживания. Конфликт уникальности связки «Обработка + Модель» будет полностью исчерпан.---
Если вы настраиваете ККМ в распределенной базе, узлы которой развернуты на одном и том же терминальном сервере (или пользователи разных филиалов работают удаленно через сессии Windows Server), стандартный механизм привязки оборудования по имени компьютера перестанет работать корректно.
Проанализируем причину сбоя: функция платформы ИмяКомпьютера() в терминальной сессии возвращает сетевое имя самого сервера, а не клиентской машины. В результате параметры подключения ККМ, заданные пользователем «Кассир 1», будут постоянно перезаписываться параметрами пользователя «Кассир 2», так как система считает, что они работают за одним ПК.
Для исправления этой проблемы программисту 1С необходимо доработать конфигурацию в части определения уникального рабочего места. Выясним, как это сделать по шагам:
ТОСервер или ПолучениеОбновленийШаблоновКлиент).ПолучитьИмяКомпьютераТО() (или аналогичную процедуру, возвращающую имя рабочего места для сохранения параметров).Посмотрим на пример реализации такого кода:
Функция ПолучитьИмяКомпьютераТО() Экспорт
// Стандартное получение имени физического сервера
ИмяСервера = ИмяКомпьютера();
// Получаем имя пользователя 1С для уникализации сессии
ИмяПользователя1С = ИмяПользователя();
// Формируем уникальный идентификатор рабочего места
УникальноеИмяРабочегоМеста = ИмяСервера + "_" + ИмяПользователя1С;
Возврат УникальноеИмяРабочегоМеста;
КонецФункции
Используя данную доработку, система начнет сохранять индивидуальные настройки COM-портов и IP-адресов кассовых аппаратов в регистре сведений раздельно для каждой учетной записи, даже если все операторы физически подключены к одному терминальному серверу.