Почему в РИБ не передается подключаемое оборудование и как это исправить?

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

При работе в распределенных информационных базах (РИБ) конфигурации 1С:Розница (начиная с версий 2.2 и выше) администраторы часто сталкиваются с крайне неприятной проблемой. После настройки синхронизации между магазинами и центральным офисом данные по продажам передаются успешно, но карточки касс ККМ и кассовые документы в центральном узле начинают пестрить битыми ссылками вида <Объект не найден> (91:a75e...) в поле Подключаемое оборудование. При попытке выполнить проверку базы данных через режим тестирования и исправления (ТиИ) система выдает тысячи ошибок ссылочной целостности.

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

Выясняем причину: почему разработчики 1С заблокировали миграцию оборудования?

Для начала проанализируем архитектурную логику разработчиков фирмы «1С». Начиная с интеграции современных версий БСП (Библиотеки стандартных подсистем) и БПО (Библиотеки подключаемого оборудования), справочник ПодключаемоеОборудование (в некоторых редакциях — ЭкземплярыПодключаемогоОборудования) был намеренно исключен из стандартных планов обмена РИБ.

Логика такого решения вполне понятна:

  1. Физическое подключаемое оборудование (фискальные регистраторы, сканеры штрихкодов, эквайринговые терминалы) всегда жестко привязано к конкретному физическому компьютеру (рабочему месту).
  2. Каждая локальная касса имеет свои уникальные параметры подключения: COM-порты, сетевые IP-адреса, пути к драйверам оборудования на конкретной операционной системе.
  3. Если бы эти параметры синхронизировались через РИБ «как есть», настройки торгового оборудования из одного магазина при обмене затирали бы настройки оборудования в другом магазине. Это привело бы к моментальной и полной блокировке работы кассовых зон по всей торговой сети.

Но здесь разработчики допустили серьезную методологическую ошибку. Заблокировав миграцию самого справочника ПодключаемоеОборудование, они оставили в планах обмена справочник РабочиеМеста, а также все финансовые документы (такие как ОтчетОРозничныхПродажах, ЧекККМ, КассоваяСмена) и справочник КассыККМ, которые содержат прямые реквизитные ссылки на конкретное оборудование. В итоге в центральную базу прилетают документы со ссылками на уникальные идентификаторы (GUID) оборудования, которого в этой базе физически не существует. Так и рождаются раздражающие битые ссылки <Объект не найден>.

---

Способ 1. Синхронизация GUID через XML (Самый быстрый и безопасный метод)

Рассмотрим самый надежный практический способ решения проблемы, не требующий внесения изменений в конфигурацию программы. Наша задача — перенести сами элементы справочника оборудования из подчиненных узлов (где они физически настроены и работают) в центральную базу с сохранением их уникальных идентификаторов (GUID).

Разберем этот процесс по шагам:

  1. Запустим подчиненный узел РИБ (базу магазина, где физически работает касса) в режиме «1С:Предприятие».
  2. Откроем стандартную обработку ВыгрузкаЗагрузкаДанныхXML83.epf (ее можно найти на диске ИТС или в каталоге инструментов разработчика).
  3. В открывшемся дереве метаданных найдем справочник Экземпляры подключаемого оборудования (или Подключаемое оборудование). Отметим его галочкой.
  4. Настроим отбор, чтобы не выгружать лишние данные, а выбрать только те кассовые аппараты и сканеры, которые привязаны к данному магазину.
  5. Нажмем кнопку Выгрузить данные и сохраним полученный XML-файл на диск.
  6. Теперь перейдем в Центральную базу данных (ЦБ) и запустим в ней ту же самую обработку ВыгрузкаЗагрузкаДанныхXML83.epf.
  7. Перейдем на вкладку Загрузка, выберем наш сохраненный файл и нажмем кнопку Загрузить данные.

Что произошло в результате? Обработка перенесла элементы оборудования, сохранив их точные внутренние GUID. Теперь все кассовые документы и карточки касс ККМ, прилетающие из этого магазина по каналам РИБ, увидят реально существующие элементы в справочнике оборудования центральной базы. Битые ссылки пропадут, а тестирования базы данных больше не будут сыпать ошибками. Настраивать порты и драйверы для этих виртуальных карточек в центральной базе не требуется — они нужны там исключительно для соблюдения ссылочной целостности данных.

---

Способ 2. Автоматизация обмена через расширение конфигурации (Решение для программистов)

Если в вашей торговой сети десятки или сотни магазинов, заниматься ручным переносом XML-файлов при подключении каждого нового фискального регистратора становится нецелесообразно. Рассмотрим, как автоматизировать этот процесс программным путем с помощью механизма расширений.

Для реализации этого сценария выполним следующие действия:

  1. Создадим новое расширение конфигурации и снимем с него режим безопасности.
  2. Добавим в расширение план обмена, используемый для РИБ (например, ПланОбмена.ПоМагазинам).
  3. Включим справочник ПодключаемоеОборудование в состав этого плана обмена с авторегистрацией.
  4. Чтобы избежать конфликтов с локальными портами и настройками на местах, напишем программный обработчик в расширении, который будет очищать сугубо локальные параметры при отправке данных между узлами. Для этого используем модуль регистрации или подписку на события.

Проанализируем пример кода, который предотвратит затирание локальных настроек торгового оборудования:


Процедура ПередЗаписьюРегистрацииПараметровОборудования(Источник, Отказ) Экспорт
    // Если запись происходит в подчиненном узле при приеме данных из ЦБ, 
    // предотвратим перезапись локальных физических параметров подключения.
    Если Источник.ОбменДанными.Загрузка Тогда
        // Очищаем или блокируем перезапись полей: ПараметрыПодключения, РабочееМесто, ЛокальныйДрайвер
        Источник.ПараметрыПодключения = Новый ХранилищеЗначений(Неопределено);
    КонецЕсли;
КонецПроцедуры

Использование данного метода позволяет автоматически передавать наименования и GUID оборудования во все узлы РИБ, полностью решая проблему битых ссылок «на лету» без ручного вмешательства администратора.

---

Важное предупреждение: как правильно проводить "Тестирование и исправление" (ТиИ)

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

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

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

Поэтому, выполняя регламентные операции ТиИ, всегда выбирайте либо режим Не изменять, либо Создавать объекты.

← На главную