Как исправить ошибку, когда все драйверы торгового оборудования в 1С определяются как «Электронные весы»?

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

При работе с торговыми решениями на базе 1С:Предприятие (например, 1С:Розница или 1С:Управление торговлей) администраторы и программисты иногда сталкиваются с крайне специфическим и неприятным поведением системы. Все установленные и поставляемые в составе конфигурации драйверы торгового оборудования (сканеры штрихкодов, фискальные регистраторы, дисплеи покупателя, терминалы сбора данных) внезапно «сваливаются» в одну единственную категорию — «Электронные весы». При этом остальные категории оборудования полностью исчезают из интерфейса, а отредактировать элементы вручную невозможно, так как они защищены платформой («поставляются в режиме конфигурации»).

В этой статье мы подробно проанализируем причины возникновения этой проблемы при работе на СУБД PostgreSQL и разберем несколько способов её решения — от простых «костылей» до системного программного восстановления данных.

---

Выясняем причины сбоя: почему это происходит?

Данный дефект практически никогда не связан с физическим изменением конфигурации разработчиком. Источник проблемы кроется на уровне базы данных СУБД (чаще всего PostgreSQL) и подсистемы БПО (Библиотека подключаемого оборудования). Рассмотрим основные причины:

  1. Сдвиг индексов перечислений в СУБД (Metadata Shift): В базе данных PostgreSQL значения перечислений 1С (таких как Перечисление.ТипыПодключаемогоОборудования) хранятся в виде числовых индексов или строковых идентификаторов внутренних таблиц метаданных. При некорректном динамическом обновлении конфигурации («демоническом обновлении») или аварийном завершении работы сервера в момент реструктуризации таблиц внутренние связи могут нарушиться. Ссылки на типы оборудования начинают указывать на первый попавшийся или дефолтный индекс, которым в списке перечисления часто оказываются «Электронные весы». Поскольку некорректные связи физически записываются в таблицы базы, ошибка дублируется даже при переносе базы через файл резервной копии .dt.
  2. Сбой фонового обновления БПО: При первом запуске обновленной конфигурации выполняются процедуры обновления информационной базы. Если в этот момент сервер баз данных был перегружен или таблицы справочника ДрайверыОборудования оказались временно заблокированы сессиями кассовых узлов, штатные обработчики обновления не могут корректно перезаписать предопределенные элементы. В результате срабатывает защитный алгоритм БПО, который присваивает сбойным записям стандартный предопределенный тип.

---

Способ 1. Программное восстановление поставляемых драйверов (Рекомендуемый способ)

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

Разберем по шагам, как запустить этот процесс:

  1. Запустим базу данных в режиме «1С:Предприятие» под пользователем с полными административными правами.
  2. Откроем любую внешнюю обработку, позволяющую выполнять произвольный код на сервере (например, «Консоль кода» или создадим пустую внешнюю обработку в конфигураторе с кнопкой выполнения кода).
  3. Напишем и выполним следующий фрагмент кода:

// Вызываем процедуру принудительного обновления поставляемых драйверов
МенеджерОборудованияВызовСервераПереопределяемый.ОбновитьПоставляемыеДрайвера();

Этот метод принудительно обратится к макетам конфигурации, считает исходные бинарные файлы драйверов и полностью перезапишет записи в справочнике ДрайверыОборудования, вернув им корректные типы (сканеры, ККТ, весы и т.д.).

---

Способ 2. Групповое изменение реквизитов через отключение проверок записи

Если предопределенные элементы заблокированы для изменения стандартными средствами и интерактивно поменять реквизит ТипОборудования в режиме предприятия не получается, мы можем обойти это ограничение программно с помощью свойства ОбменДанными.Загрузка.

Для этого напишем небольшую внешнюю обработку и выполним в ней следующий код:


Выборка = Справочники.ДрайверыОборудования.Выбрать();
Пока Выборка.Следующий() Цикл
    
    // Выполняем поиск по ключевым словам в наименовании драйвера
    Если Найти(ВРег(Выборка.Наименование), "СКАНЕР") > 0 Тогда
        
        ОбъектДрайвера = Выборка.ПолучитьОбъект();
        // Включаем режим загрузки для обхода встроенных проверок БПО
        ОбъектДрайвера.ОбменДанными.Загрузка = Истина; 
        
        // Назначаем верный тип перечисления
        ОбъектДрайвера.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода;
        
        Попытка
            ОбъектДрайвера.Записать();
            Сообщить("Успешно восстановлен тип для: " + Выборка.Наименование);
        Исключение
            Сообщить("Не удалось записать: " + Выборка.Наименование + " Ошибка: " + ОписаниеОшибки());
        КонецПопытки;
        
    КонецЕсли;
    
КонецЦикла;

Этот способ позволяет точечно переназначить категории для всех драйверов, у которых в наименовании содержится слово «Сканер». По аналогии вы можете восстановить типы для фискальных регистраторов (ККТ) и принтеров этикеток, подставив соответствующие значения из перечисления Перечисления.ТипыПодключаемогоОборудования.

---

Способ 3. Локальное решение проблемы через экспорт и импорт драйвера

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

Проанализируем этот алгоритм подробно:

  1. Перейдем в справочник драйверов оборудования (даже если они все находятся в категории «Электронные весы»).
  2. Найдем необходимый нам драйвер, например, «1С:Сканеры штрихкода (NativeApi)».
  3. Откроем карточку драйвера и нажмем кнопку «Функции» -> «Выгрузить файл драйвера». Сохраним архив на жесткий диск.
  4. Распакуем сохраненный ZIP-архив. Внутри него найдем манифест драйвера (файл manifest.xml или info.xml).
  5. Откроем этот файл любым текстовым редактором и найдем строчку инициализации компоненты. Если в типе или ProgID указаны параметры, конфликтующие с категорией (например, addin.inputdevice вместо addin.scanner), скорректируем их вручную.
  6. Запакуем файлы обратно в ZIP-архив.
  7. В справочнике драйверов нажмем кнопку «Создать». В открывшемся окне укажем тип оборудования «Сканеры штрихкода» и загрузим наш отредактированный архив.

После этой процедуры в списке выбора оборудования на рабочем месте появится новый, корректно работающий драйвер сканера.

---

Способ 4. Исправление физической структуры базы данных PostgreSQL

Если сбой категорий вызван реальным разрушением индексов или повреждением таблиц СУБД PostgreSQL, необходимо провести стандартные процедуры обслуживания информационной базы на физическом уровне.

Выполним следующие действия по шагам:

  1. Запустим Конфигуратор 1С:Предприятия под учетной записью администратора.
  2. Убедимся, что в базе нет активных сеансов пользователей (меню «Администрирование» -> «Активные пользователи»).
  3. Откроем меню «Администрирование» -> «Тестирование и исправление...».
  4. Установим следующие флажки настроек:
    • Реиндексация таблиц информационной базы;
    • Проверка логической целостности;
    • Проверка ссылочной целостности (с параметром «Создавать объекты» или «Очищать ссылки» при наличии битых связей).
  5. Нажмем кнопку «Выполнить» и дождемся завершения процесса.

Дополнительно рекомендуется очистить серверный кэш метаданных. Для этого остановим службу кластера серверов 1С:Предприятия, перейдем в каталог данных кластера (по умолчанию это папка srvinfo или reg_1541) и удалим все временные папки с кэшем метаданных баз (папки с длинными буквенно-числовыми именами-идентификаторами UUID). После этого запустим службу сервера заново.

---

Заключение

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

← На главную