При работе с торговыми решениями на базе 1С:Предприятие (например, 1С:Розница или 1С:Управление торговлей) администраторы и программисты иногда сталкиваются с крайне специфическим и неприятным поведением системы. Все установленные и поставляемые в составе конфигурации драйверы торгового оборудования (сканеры штрихкодов, фискальные регистраторы, дисплеи покупателя, терминалы сбора данных) внезапно «сваливаются» в одну единственную категорию — «Электронные весы». При этом остальные категории оборудования полностью исчезают из интерфейса, а отредактировать элементы вручную невозможно, так как они защищены платформой («поставляются в режиме конфигурации»).
В этой статье мы подробно проанализируем причины возникновения этой проблемы при работе на СУБД PostgreSQL и разберем несколько способов её решения — от простых «костылей» до системного программного восстановления данных.
---
Данный дефект практически никогда не связан с физическим изменением конфигурации разработчиком. Источник проблемы кроется на уровне базы данных СУБД (чаще всего PostgreSQL) и подсистемы БПО (Библиотека подключаемого оборудования). Рассмотрим основные причины:
Перечисление.ТипыПодключаемогоОборудования) хранятся в виде числовых индексов или строковых идентификаторов внутренних таблиц метаданных. При некорректном динамическом обновлении конфигурации («демоническом обновлении») или аварийном завершении работы сервера в момент реструктуризации таблиц внутренние связи могут нарушиться. Ссылки на типы оборудования начинают указывать на первый попавшийся или дефолтный индекс, которым в списке перечисления часто оказываются «Электронные весы». Поскольку некорректные связи физически записываются в таблицы базы, ошибка дублируется даже при переносе базы через файл резервной копии .dt.ДрайверыОборудования оказались временно заблокированы сессиями кассовых узлов, штатные обработчики обновления не могут корректно перезаписать предопределенные элементы. В результате срабатывает защитный алгоритм БПО, который присваивает сбойным записям стандартный предопределенный тип.---
В Библиотеке подключаемого оборудования заложен штатный механизм инициализации и перезаписи встроенных в конфигурацию драйверов из двоичных макетов. Чтобы вернуть драйверам их первоначальные категории, нам не нужно снимать конфигурацию с поддержки. Достаточно выполнить специальный метод в привилегированном режиме.
Разберем по шагам, как запустить этот процесс:
// Вызываем процедуру принудительного обновления поставляемых драйверов
МенеджерОборудованияВызовСервераПереопределяемый.ОбновитьПоставляемыеДрайвера();
Этот метод принудительно обратится к макетам конфигурации, считает исходные бинарные файлы драйверов и полностью перезапишет записи в справочнике ДрайверыОборудования, вернув им корректные типы (сканеры, ККТ, весы и т.д.).
---
Если предопределенные элементы заблокированы для изменения стандартными средствами и интерактивно поменять реквизит ТипОборудования в режиме предприятия не получается, мы можем обойти это ограничение программно с помощью свойства ОбменДанными.Загрузка.
Для этого напишем небольшую внешнюю обработку и выполним в ней следующий код:
Выборка = Справочники.ДрайверыОборудования.Выбрать();
Пока Выборка.Следующий() Цикл
// Выполняем поиск по ключевым словам в наименовании драйвера
Если Найти(ВРег(Выборка.Наименование), "СКАНЕР") > 0 Тогда
ОбъектДрайвера = Выборка.ПолучитьОбъект();
// Включаем режим загрузки для обхода встроенных проверок БПО
ОбъектДрайвера.ОбменДанными.Загрузка = Истина;
// Назначаем верный тип перечисления
ОбъектДрайвера.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода;
Попытка
ОбъектДрайвера.Записать();
Сообщить("Успешно восстановлен тип для: " + Выборка.Наименование);
Исключение
Сообщить("Не удалось записать: " + Выборка.Наименование + " Ошибка: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
Этот способ позволяет точечно переназначить категории для всех драйверов, у которых в наименовании содержится слово «Сканер». По аналогии вы можете восстановить типы для фискальных регистраторов (ККТ) и принтеров этикеток, подставив соответствующие значения из перечисления Перечисления.ТипыПодключаемогоОборудования.
---
Если вам требуется срочно запустить рабочее место товароведа или кассира, а времени на программные манипуляции с базой данных нет, можно применить обходной «ручной» способ, который использовали участники обсуждения на форуме. Мы можем выгрузить файл компоненты, изменить метаданные идентификатора устройства и загрузить его обратно в систему как новый кастомный драйвер.
Проанализируем этот алгоритм подробно:
manifest.xml или info.xml).addin.inputdevice вместо addin.scanner), скорректируем их вручную.После этой процедуры в списке выбора оборудования на рабочем месте появится новый, корректно работающий драйвер сканера.
---
Если сбой категорий вызван реальным разрушением индексов или повреждением таблиц СУБД PostgreSQL, необходимо провести стандартные процедуры обслуживания информационной базы на физическом уровне.
Выполним следующие действия по шагам:
Дополнительно рекомендуется очистить серверный кэш метаданных. Для этого остановим службу кластера серверов 1С:Предприятия, перейдем в каталог данных кластера (по умолчанию это папка srvinfo или reg_1541) и удалим все временные папки с кэшем метаданных баз (папки с длинными буквенно-числовыми именами-идентификаторами UUID). После этого запустим службу сервера заново.
---
Мы подробно разобрали редкую ошибку некорректной группировки драйверов торгового оборудования в 1С. Наиболее быстрым и технически правильным решением является принудительный запуск обновления поставляемых драйверов через вызов метода МенеджерОборудованияВызовСервераПереопределяемый.ОбновитьПоставляемыеДрайвера(). Это экономит время администратора и полностью восстанавливает целостность подсистемы БПО без необходимости снятия конфигурации с поддержки.