Как настроить работу Ocvita Barcode ActiveX без прав администратора в 1С

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

При переходе на современные операционные системы, такие как Windows Server 2019, системные администраторы и разработчики 1С часто сталкиваются с проблемой: старые ActiveX-компоненты (например, Ocvita Barcode) отказываются работать под учетными записями обычных пользователей. В то же время под правами администратора все печатается корректно. Давать права администратора каждому пользователю терминального сервера категорически неприемлемо из соображений безопасности. В данной статье мы подробно разберем, почему это происходит и как настроить систему так, чтобы компонента работала стабильно при ограниченных правах.

Анализ причины проблемы

Разберем ситуацию: компонента Ocvita Barcode была разработана во времена Windows XP и Server 2003, когда механизмы безопасности были менее строгими. Основные причины отказа в работе на современных ОС под обычным пользователем следующие:

  1. Некорректная регистрация в реестре: Компонента регистрируется в ветке HKEY_LOCAL_MACHINE, но при работе может пытаться обращаться к разделам, закрытым для записи пользователям.
  2. Права на файловую систему: Если файл .ocx расположен в папке, куда у пользователя нет прав на чтение или выполнение, 1С не сможет инициализировать объект.
  3. Временные файлы: Некоторые версии Ocvita пытаются создавать временные графические файлы в своей рабочей папке или в корне диска C:\.
  4. Механизм DEP (Data Execution Prevention): Система предотвращения выполнения данных может блокировать старый код компоненты.

Шаг 1: Правильное размещение и регистрация компоненты

Выясним причину, по которой обычная регистрация часто не помогает. Многие совершают ошибку, регистрируя компоненту из папки профиля администратора (например, с рабочего стола) или из папок с ограниченным доступом. Рассмотрим правильный алгоритм действий:

Во-первых, выберем общедоступную папку. Рекомендуется создать каталог C:\ProgramData\Ocvita\ или использовать системную директорию C:\Windows\SysWOW64\ (так как компонента 32-битная). Поместим туда файл BARCODE.OCX.

Во-вторых, выполним регистрацию через командную строку от имени администратора, используя правильный путь к regsvr32. Для 64-битных систем важно использовать версию утилиты из SysWOW64:


%systemroot%\SysWoW64\regsvr32.exe "C:\ProgramData\Ocvita\BARCODE.OCX"

Если ваша задача включает печать на мобильных принтерах по bluetooth, регистрация OCX может не потребоваться, так как там используются другие протоколы.

Важно: Перед этим убедимся, что у группы "Пользователи" есть права на "Чтение и выполнение" для этой папки и самого файла.

Шаг 2: Настройка прав доступа в реестре Windows

Проанализируем ситуацию с реестром. Компоненты ActiveX хранят информацию о своих программных идентификаторах (ProgID) и интерфейсах в ветке HKEY_CLASSES_ROOT. На самом деле эта ветка является виртуальным представлением, объединяющим HKEY_LOCAL_MACHINE\Software\Classes и HKEY_CURRENT_USER\Software\Classes.

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

  1. Откроем regedit и найдем разделы, связанные с Ocvita (обычно поиск по слову "Ocvita" или "Barcode").
  2. Проверим ветку HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{GUID_компоненты}.
  3. Нажмем правой кнопкой мыши на раздел, выберем "Разрешения" и добавим группе "Пользователи" права на "Чтение". В некоторых случаях требуется дать права на "Запись" в конкретные подразделы.

Шаг 3: Проверка разрядности клиента 1С

Рассмотрим важный технический нюанс. Компонента Ocvita Barcode является 32-битной (x86). Это означает, что она принципиально не будет работать в 64-битном клиенте 1С. Если на сервере установлен 64-битный клиент 1cv8.exe, попытка создать объект Новый COMОбъект("Ocvita.Barcode") (или аналогичный) выдаст ошибку инициализации, которую часто путают с нехваткой прав.

Убедимся, что пользователи запускают 32-битный клиент 1С. Путь к нему обычно выглядит так: C:\Program Files (x86)\1cv8\...\bin\1cv8.exe.

Шаг 4: Диагностика через Process Monitor

Если вышеуказанные шаги не помогли, разберем ситуацию с помощью инструмента Process Monitor (ProcMon). Это единственный надежный способ увидеть, на каком именно этапе система выдает ACCESS DENIED.

Посмотрим на алгоритм диагностики:

  1. Запустим ProcMon под правами администратора на сервере.
  2. Установим фильтр: Process Name is 1cv8.exe и Result is ACCESS DENIED.
  3. Попросим пользователя нажать кнопку печати штрихкода в 1С.
  4. Проанализируем записи. Если мы видим отказ в доступе к файлу в папке C:\Windows\ или к ключу в HKLM, значит, нужно точечно расширить права именно на этот объект.

Шаг 5: Настройка DEP (Data Execution Prevention)

Иногда современные серверные процессоры и ОС блокируют выполнение кода ActiveX из-за политики безопасности памяти. Проанализируем настройки DEP:

  1. Зайдем в "Свойства системы" -> "Дополнительно" -> "Производительность" -> "Параметры" -> "Предотвращение выполнения данных".
  2. Если выбран режим "Включить DEP для всех программ и служб, кроме выбранных ниже", добавим в список исключений исполняемый файл 1С (1cv8.exe).
  3. Перезагрузим сервер для применения настроек.

Альтернативное решение: Переход на нативные компоненты

Несмотря на "историческую привычку" пользователей, стоит рассмотреть возможность перехода на штатную компоненту печати штрихкодов от 1С, которая входит в состав БСП (Библиотеки стандартных подсистем). Она работает как Native API, не требует регистрации в реестре через regsvr32 и корректно функционирует под любыми правами доступа в любых версиях Windows.

Пример программного создания штрихкода штатными средствами (если компонента уже подключена):


Попытка
    ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "Barcode", ТипВнешнейКомпоненты.Native);
    ОбъектШК = Новый("AddIn.Barcode.Barcode");
Исключение
    Сообщить("Не удалось загрузить компоненту печати ШК");
КонецПопытки;

Этот метод навсегда избавит системного администратора от необходимости бороться с правами доступа и "древними" технологиями ActiveX.

← На главную