Почему не печатается штрихкод в 1С на Windows Server 2012 x64 и как это исправить

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

При работе в среде Windows Server 2012 x64 пользователи 1С часто сталкиваются с неприятной ситуацией: вместо привычного штрихкода на печатной форме отображается пустая область или «красная сетка». Эта проблема особенно актуальна при использовании классической компоненты 1C: Печать штрихкодов. В этой статье мы разберем причины возникновения данной ошибки и рассмотрим пошаговые методы её решения, основываясь на системном подходе к настройке серверной среды.

Разберем причину возникновения «красной сетки»

Прежде всего, выясним причину появления красной сетки. Этот графический артефакт в 1С сигнализирует о том, что визуальный объект (в данном случае ActiveX-компонента штрихкода) не смог инициализироваться. Программа зарезервировала место под объект на форме, но сам программный модуль компоненты либо не зарегистрирован в системе, либо заблокирован механизмами безопасности Windows, либо не может найти необходимые для работы библиотеки и шрифты.

Метод 1. Правильная регистрация компоненты на 64-битных системах

Одной из главных ошибок является попытка стандартной регистрации 32-битных компонентов в 64-битной среде. Рассмотрим, как сделать это правильно. В Windows x64 существует разделение системных папок: System32 предназначена для 64-битных библиотек, а SysWOW64 — для 32-битных. Поскольку большинство старых версий компоненты barcode.ocx являются 32-битными, регистрировать их нужно специальным образом.

Проанализируем последовательность действий:

  1. Запустим командную строку от имени администратора.
  2. Перейдем в папку, где физически расположена компонента (обычно это C:\Program Files (x86)\1C\1CBarCode\).
  3. Выполним регистрацию, используя интерпретатор из папки SysWOW64. Команда будет выглядеть следующим образом:
    
    C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1C\1CBarCode\barcode.ocx"
    

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

Метод 2. Настройка системы предотвращения выполнения данных (DEP)

Проанализируем влияние настроек безопасности Windows Server 2012. Функция DEP (Data Execution Prevention) часто блокирует работу сторонних ActiveX-компонентов в целях защиты памяти. Если штрихкод не появляется именно на сервере, попробуем добавить платформу 1С в исключения.

Разберем процесс настройки по шагам:

  1. Откроем «Свойства системы» — «Дополнительно» — «Быстродействие» — «Параметры».
  2. Перейдем на вкладку «Предотвращение выполнения данных».
  3. Установим переключатель в режим «Включить DEP для всех программ и служб, кроме выбранных ниже».
  4. Нажмем кнопку «Добавить» и укажем путь к исполняемому файлу 1С (например, 1cv8.exe или 1cv8s.exe).
  5. После внесения изменений обязательно перезагрузим сервер.

Метод 3. Проверка и переустановка шрифтов

Иногда проблема кроется не в программном коде, а в графическом отображении. Штрихкод в 1С часто зависит от наличия в системе специализированных шрифтов (например, EAN13.ttf или стандартных семейств Arial, Courier New). Выясним, как это влияет на печать.

Посмотрим на ситуацию: если в табличной части штрихкод печатается, а в шапке документа — нет, это верный признак того, что один из объектов использует шрифт, который поврежден или отсутствует в системной папке C:\Windows\Fonts. Рекомендуется выполнить полную переустановку стандартного набора шрифтов Windows и специализированных шрифтов от 1С, предварительно удалив старые версии.

Метод 4. Установка библиотек Microsoft Visual C++ Redistributable

Компонента 1CBarCode версии 8.0.15.2 и старше написана с использованием библиотек C++. На «чистых» серверах Windows 2012 часто отсутствуют пакеты Visual C++ 2005 и 2008 годов выпуска. Без них barcode.ocx просто не сможет запуститься, даже если регистрация прошла успешно.

Проанализируем необходимость установки:

  1. Убедимся, что установлены как x86, так и x64 версии распространяемых пакетов 2005, 2008 и 2010 годов.
  2. Проверим наличие файла msvcp80.dll в системных путях. Если его нет, компонента будет выдавать ошибку инициализации.

Метод 5. Использование современных технологий Native API

Если вышеописанные методы не помогают, рассмотрим более радикальный, но надежный способ — переход на версию компоненты 9.0 и выше. Современные версии печати штрихкодов от 1С работают по технологии Native API.

В чем преимущество этого подхода?

Для перехода на Native API в конфигурации необходимо использовать метод ПодключитьВнешнююКомпоненту. Пример кода для подключения:


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

Метод 6. Масштабирование экрана (DPI)

Выясним еще один неочевидный нюанс. Серверы Windows 2012 чувствительны к настройкам масштабирования при RDP-подключении. Если у пользователя установлено масштабирование 125% или 150%, компонента ActiveX может отрисовывать пустую область. Убедимся, что в настройках экрана на сервере и у клиента установлено значение 100% (96 DPI). Это гарантирует корректный расчет координат при формировании картинки штрихкода.

Метод 7. Работа с шаблонами печатных форм

Как показывает практика, иногда проблема решается простой заменой макета. В типовых конфигурациях (например, Управление торговлей) шаблоны этикеток периодически обновляются. Рассмотрим возможность подстановки макета из более свежего релиза конфигурации. Попробуем зайти в Обработка.ПечатьЭтикетокИЦенников через конфигуратор и проверить свойства объекта "Рисунок" (штрихкода). В поле "Текст" или в параметрах объекта должен быть указан верный тип штрихкода (EAN13, Code128 и т.д.). Если свойства объекта не открываются, значит, компонента не опознана системой на данном этапе разработки.

Подведем итог

Мы проанализировали комплекс мер по восстановлению работы печати штрихкодов. Начните с правильной регистрации barcode.ocx через SysWOW64 и проверки прав доступа. Если это не помогло, обратите внимание на настройки DEP и наличие библиотек Visual C++. В долгосрочной перспективе лучшим решением будет отказ от устаревшей OCX-компоненты в пользу технологии Native API, которая лишена проблем с совместимостью на современных 64-битных ОС.

← На главную