При переходе на 64-разрядные версии платформы 1С:Предприятие многие пользователи и системные администраторы сталкиваются с неприятной технической проблемой: при попытке напечатать налоговую или бухгалтерскую отчетность система выдает ошибку о том, что компонента печати двухмерного штрихкода не установлена. При этом сама библиотека TaxDocPrint может быть успешно инсталлирована в операционной системе Windows Server.
В этой статье мы подробно разберем, почему возникает данная коллизия, проанализируем внутреннее устройство механизмов взаимодействия платформы с внешними библиотеками и рассмотрим несколько надежных практических способов решения этой проблемы.
Для начала проанализируем ситуацию с технической стороны. Библиотечный модуль печати единого образца, разработанный АО «ГНИВЦ» для Федеральной налоговой службы РФ, исторически представляет собой 32-разрядный COM-объект (ActiveX). Он поставляется в виде динамической библиотеки TaxDocPrint.dll.
Когда мы запускаем 64-разрядный клиент 1С:Предприятие (или когда код формирования печатной формы выполняется на стороне 64-разрядного сервера «1С»), операционная система пытается загрузить эту библиотеку непосредственно в адресное пространство процесса 1cv8.exe или rphost.exe. По законам архитектуры операционных систем Windows, 64-битный процесс принципиально не может напрямую загрузить 32-битную DLL-библиотеку. В результате платформа получает системный отказ и сообщает пользователю, что компонента формирования штрихкода PDF417 отсутствует.
Рассмотрим по шагам несколько вариантов решения этой проблемы — от самых простых административных действий до тонкой настройки операционной системы.
Самый быстрый и очевидный способ обойти ограничение — запустить сеанс пользователя в 32-битной версии клиента «1С». Поскольку процесс 32-битного клиента без проблем инициализирует любые 32-битные COM-соединения, библиотека ГНИВЦ отработает штатно.
Выполним следующие действия для реализации этого подхода:
1С:Предприятие аналогичного релиза (например, x86-версию платформы 8.3.14.1779).Если мы не хотим или не имеем возможности использовать 32-разрядный клиент «1С» (например, из-за жестких требований к оперативной памяти для других тяжелых отчетов), мы можем заставить операционную систему Windows выступить посредником. Для этого настроим запуск 32-битной библиотеки внутри системного 64-битного окружения с помощью службы компонентов COM+.
Разберем по шагам этот системный метод настройки на Windows Server:
Win + R, введем команду comexp.msc и нажмем Enter.TaxDocPrint_x86, и обязательно установим переключатель в положение Серверное приложение. Нажмем «Далее».TaxDocPrint_x86. Раскроем его, нажмем правой кнопкой мыши на папку Компоненты и выберем Создать -> Компонент.TaxDocPrint.dll (обычно он располагается в папке общего доступа или в каталоге установки модуля печати ГНИВЦ, например, в C:\Program Files (x86)\Common Files\Ghivc\).После этой настройки Windows при обращении 64-битной системы к объекту штрихкода будет автоматически запускать изолированный 32-битный процесс-суррогат dllhost.exe, внутри которого развернется библиотека ГНИВЦ. Платформа «1С» сможет передавать туда данные и забирать готовый сформированный PDF417-код без вылетов и ошибок.
Выясним, как эту проблему решили сами разработчики фирмы «1С». В современных типовых конфигурациях (начиная с релизов конца 2020 года, например, в «Бухгалтерии предприятия» версии 3.0.84.35 и выше) был внедрен альтернативный механизм интеграции.
Вместо прямой инициализации COM-объекта через вызов Новый COMОбъект("TaxDocPrint"), конфигурации научились выгружать необходимые данные во временный XML-файл и запускать внешний сценарий через командную строку операционной системы. Платформа обращается к стандартному системному интерпретатору скриптов cscript.exe, передавая ему JS-скрипт:
// Пример логики вызова внешнего генератора
ЗапуститьПриложение("cscript.exe //NoLogo ""ПутьКПосреднику\render.js"" ""ПутьКФайлуДанных.xml""");
Поскольку cscript.exe в Windows существует как в 64-битной, так и в 32-битной версиях, данный обходной путь отлично функционирует «из коробки» на любых современных серверах без ручной настройки служб компонентов. Если у вас устаревшая конфигурация, рассмотрите возможность обновления правил печати и программных модулей регламентированной отчетности до актуального состояния.
Проанализируем практическую необходимость печати двухмерного штрихкода. На сегодняшний день подавляющее большинство организаций и индивидуальных предпринимателей обязаны сдавать отчетность в ФНС в электронном виде по телекоммуникационным каналам связи (ТКС). Физическая сдача бумажных деклараций со сканированием PDF417 уходит в прошлое.
Если бумажная форма отчета требуется вам исключительно для внутреннего архива, подписи руководителем или для предоставления в обслуживающий банк, закон разрешает распечатывать отчетность вообще без двухмерного штрихкода. Это регламентировано нормами Министерства финансов РФ.
Чтобы отключить проверку компоненты и напечатать отчет без PDF417 в программе 1С, выполним следующие действия:
После активации этой опции кнопка печати на форме станет активной, и вы сможете вывести отчет на принтер или сохранить в формате PDF в обычном текстовом виде без использования внешней библиотеки ГНИВЦ.
Если вы работаете в кастомизированной, нетиповой или старой конфигурации, где код печати закрыт или трудно поддается изменению, обратите внимание на сторонние разработки и расширения. На специализированных порталах для разработчиков 1С опубликованы готовые бесплатные и коммерческие расширения.
Эти решения перехватывают вызов формирования штрихкода в общем модуле печати и перенаправляют его на использование альтернативных консольных генераторов (например, поставляемой ГНИВЦ утилиты print-nd-pdf417.exe), либо задействуют нативные механизмы платформы 1С:Предприятие по генерации QR-кодов и штрихкодов, появившиеся в платформе 8.3.
Мы подробно разобрали основные причины несовместимости модуля печати PDF417 с 64-битной платформой «1С» и изучили ключевые методы решения этой технической проблемы. Выберите наиболее подходящий вариант для вашей ИТ-инфраструктуры — от настройки COM+ до банального отключения вывода штрихкода для архивных копий документов.