Как решить проблему с печатью двухмерного штрихкода PDF417 в 64-разрядной версии 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Налоговый учет IT и автоматизация бизнеса
← На главную

При переходе на 64-разрядные версии платформы 1С:Предприятие многие пользователи и системные администраторы сталкиваются с неприятной технической проблемой: при попытке напечатать налоговую или бухгалтерскую отчетность система выдает ошибку о том, что компонента печати двухмерного штрихкода не установлена. При этом сама библиотека TaxDocPrint может быть успешно инсталлирована в операционной системе Windows Server.

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

Выясняем причину: почему 64-битная «1С» не видит компоненту ГНИВЦ?

Для начала проанализируем ситуацию с технической стороны. Библиотечный модуль печати единого образца, разработанный АО «ГНИВЦ» для Федеральной налоговой службы РФ, исторически представляет собой 32-разрядный COM-объект (ActiveX). Он поставляется в виде динамической библиотеки TaxDocPrint.dll.

Когда мы запускаем 64-разрядный клиент 1С:Предприятие (или когда код формирования печатной формы выполняется на стороне 64-разрядного сервера «1С»), операционная система пытается загрузить эту библиотеку непосредственно в адресное пространство процесса 1cv8.exe или rphost.exe. По законам архитектуры операционных систем Windows, 64-битный процесс принципиально не может напрямую загрузить 32-битную DLL-библиотеку. В результате платформа получает системный отказ и сообщает пользователю, что компонента формирования штрихкода PDF417 отсутствует.

Рассмотрим по шагам несколько вариантов решения этой проблемы — от самых простых административных действий до тонкой настройки операционной системы.

Способ 1. Использование 32-битного клиента «1С» (x86)

Самый быстрый и очевидный способ обойти ограничение — запустить сеанс пользователя в 32-битной версии клиента «1С». Поскольку процесс 32-битного клиента без проблем инициализирует любые 32-битные COM-соединения, библиотека ГНИВЦ отработает штатно.

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

  1. Установим на рабочий компьютер пользователя или на терминальный сервер Windows Server 32-разрядную версию технологической платформы 1С:Предприятие аналогичного релиза (например, x86-версию платформы 8.3.14.1779).
  2. В настройках запуска информационной базы в окне запуска «1С» принудительно укажем разрядность. Для этого выделим нужную базу, нажмем кнопку Изменить, перейдем на последнюю вкладку настроек и в поле «Разрядность» выберем значение 32 (x86) вместо «Выбирать автоматически».
  3. Если печать регламентированной отчетности выполняется в клиент-серверном варианте базы, и код формирования выполняется на сервере, администраторы часто устанавливают на сервере приложений дополнительный 32-битный рабочий процесс или даже отдельный вспомогательный 32-битный сервер «1С» исключительно для обработки регламентированных отчетов и печати.

Способ 2. Обертка COM-объекта через службу компонентов Windows (COM+)

Если мы не хотим или не имеем возможности использовать 32-разрядный клиент «1С» (например, из-за жестких требований к оперативной памяти для других тяжелых отчетов), мы можем заставить операционную систему Windows выступить посредником. Для этого настроим запуск 32-битной библиотеки внутри системного 64-битного окружения с помощью службы компонентов COM+.

Разберем по шагам этот системный метод настройки на Windows Server:

  1. Откроем консоль управления службами компонентов. Для этого нажмем сочетание клавиш Win + R, введем команду comexp.msc и нажмем Enter.
  2. В левом дереве консоли перейдем по пути: Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Нажмем правой кнопкой мыши на раздел «Приложения COM+», выберем Создать -> Приложение. Откроется мастер установки приложений COM+.
  4. Нажмем «Далее», на следующем шаге выберем Создать новое приложение. Введем имя приложения, например, TaxDocPrint_x86, и обязательно установим переключатель в положение Серверное приложение. Нажмем «Далее».
  5. На шаге выбора учетной записи укажем пользователя, от имени которого будет запускаться процесс. Рекомендуется выбрать системную учетную запись или специально созданного локального пользователя с административными правами, чтобы избежать проблем с доступом к временным папкам.
  6. Завершим создание приложения. Теперь внутри ветки «Приложения COM+» появится наше новое приложение TaxDocPrint_x86. Раскроем его, нажмем правой кнопкой мыши на папку Компоненты и выберем Создать -> Компонент.
  7. В мастере установки компонентов выберем Установка новых компонентов и укажем путь к файлу TaxDocPrint.dll (обычно он располагается в папке общего доступа или в каталоге установки модуля печати ГНИВЦ, например, в C:\Program Files (x86)\Common Files\Ghivc\).
  8. После успешного добавления компонента зайдем в его свойства. На вкладке «Безопасность» снимем флаг «Принудительная проверка доступа для приложений». На вкладке «Активация» убедимся, что тип активации установлен как «Серверное приложение».

После этой настройки Windows при обращении 64-битной системы к объекту штрихкода будет автоматически запускать изолированный 32-битный процесс-суррогат dllhost.exe, внутри которого развернется библиотека ГНИВЦ. Платформа «1С» сможет передавать туда данные и забирать готовый сформированный PDF417-код без вылетов и ошибок.

Способ 3. Использование встроенного скриптового механизма в современных конфигурациях

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

Вместо прямой инициализации COM-объекта через вызов Новый COMОбъект("TaxDocPrint"), конфигурации научились выгружать необходимые данные во временный XML-файл и запускать внешний сценарий через командную строку операционной системы. Платформа обращается к стандартному системному интерпретатору скриптов cscript.exe, передавая ему JS-скрипт:


// Пример логики вызова внешнего генератора
ЗапуститьПриложение("cscript.exe //NoLogo ""ПутьКПосреднику\render.js"" ""ПутьКФайлуДанных.xml""");

Поскольку cscript.exe в Windows существует как в 64-битной, так и в 32-битной версиях, данный обходной путь отлично функционирует «из коробки» на любых современных серверах без ручной настройки служб компонентов. Если у вас устаревшая конфигурация, рассмотрите возможность обновления правил печати и программных модулей регламентированной отчетности до актуального состояния.

Способ 4. Юридический обход и печать без штрихкода PDF417

Проанализируем практическую необходимость печати двухмерного штрихкода. На сегодняшний день подавляющее большинство организаций и индивидуальных предпринимателей обязаны сдавать отчетность в ФНС в электронном виде по телекоммуникационным каналам связи (ТКС). Физическая сдача бумажных деклараций со сканированием PDF417 уходит в прошлое.

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

Чтобы отключить проверку компоненты и напечатать отчет без PDF417 в программе 1С, выполним следующие действия:

  1. Откроем заполненную регламентированную декларацию.
  2. В верхней панели формы нажмем кнопку Еще и перейдем в пункт меню Настройка.
  3. В открывшемся окне перейдем на вкладку Общие.
  4. Найдем опцию Разрешить печать без штрихкода PDF417 и установим напротив нее флаг.
  5. Нажмем кнопку Сохранить или ОК.

После активации этой опции кнопка печати на форме станет активной, и вы сможете вывести отчет на принтер или сохранить в формате PDF в обычном текстовом виде без использования внешней библиотеки ГНИВЦ.

Способ 5. Применение внешних расширений и утилит

Если вы работаете в кастомизированной, нетиповой или старой конфигурации, где код печати закрыт или трудно поддается изменению, обратите внимание на сторонние разработки и расширения. На специализированных порталах для разработчиков 1С опубликованы готовые бесплатные и коммерческие расширения.

Эти решения перехватывают вызов формирования штрихкода в общем модуле печати и перенаправляют его на использование альтернативных консольных генераторов (например, поставляемой ГНИВЦ утилиты print-nd-pdf417.exe), либо задействуют нативные механизмы платформы 1С:Предприятие по генерации QR-кодов и штрихкодов, появившиеся в платформе 8.3.

Мы подробно разобрали основные причины несовместимости модуля печати PDF417 с 64-битной платформой «1С» и изучили ключевые методы решения этой технической проблемы. Выберите наиболее подходящий вариант для вашей ИТ-инфраструктуры — от настройки COM+ до банального отключения вывода штрихкода для архивных копий документов.

← На главную