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

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

При переходе на 64-разрядную версию платформы 1С:Предприятие многие пользователи и администраторы сталкиваются с критической ошибкой при попытке печати регламентированной отчетности: "Печать бланка формы с двухмерным штрихкодом PDF417 поддерживается только в 32-разрядной версии платформы". Эта проблема вызвана тем, что классическая компонента печати, разработанная ГНИВЦ ФНС РФ, представляет собой 32-битный ActiveX (библиотека v7_pdf417.dll), который физически не может быть загружен в адресное пространство 64-битного процесса 1С.

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

Способ 1. Использование внешней утилиты печати (универсальное решение)

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

Для внедрения этого механизма нам потребуется модифицировать общий модуль РегламентированнаяОтчетность. Проанализируем изменения в процедурах вывода формы.

Во-первых, нам необходимо добавить файл print-nd-pdf417.exe в состав конфигурации как двоичные данные (макет). После этого в функции ВыгрузитьШаблоныПечатиВКаталог следует реализовать сохранение этой утилиты во временную папку пользователя:


// Фрагмент модификации функции выгрузки шаблонов
Попытка
    лМакет = ПолучитьОбщийМакет("Print_ND_pdf417_exe");
    лМакет.Записать(ВремКаталог + "print-nd-pdf417.exe");
Исключение
    Сообщить("Не удалось выгрузить исполняемый файл печати PDF417 во временный каталог!" 
        + Символы.ПС + ОписаниеОшибки, СтатусСообщения.Внимание);
КонецПопытки;

Во-вторых, разберем по шагам изменение логики в функции ВывестиМашиночитаемуюФорму. Вместо стандартного вызова 32-битной компоненты через Новый COMОбъект, мы будем запускать внешнее приложение:


// Пример модификации логики вывода формы
Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
    Попытка
        // Определяем параметры запуска утилиты
        ПараметрыЗапуска = "/шаблоны:""" + ВремКаталог + """ /файл:""" + ВремФайл 
                         + """ /ифнс:""" + НаименованиеИФНС + """ /действие:просмотр";
        
        // Запускаем внешнее приложение и ждем завершения
        ЗапуститьПриложение(ВремКаталог + "print-nd-pdf417.exe " + ПараметрыЗапуска, , Истина);
        Результат = Истина;
    Исключение
        Предупреждение("Ошибка запуска внешней утилиты печати PDF417!");
        Результат = Ложь;
    КонецПопытки;
Иначе
    // Стандартный вызов для 32-битной платформы
    ТаксДокПринт = СоздатьОбъектДляФормированияМашичитаемойФормы();
    // ... дальнейший типовой код
КонецЕсли;

Способ 2. Установка параллельного 32-битного клиента

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

Начиная с версии платформы 8.3.12, в окне выбора информационных баз появилась возможность указать предпочтительную разрядность. Рассмотрим этот алгоритм:

  1. Установите на рабочую станцию тонкий клиент или полную платформу 32-битной (x86) разрядности той же версии, что и основная 64-битная.
  2. Запустите список информационных баз (1cestart).
  3. Выберите нужную базу и нажмите кнопку "Изменить".
  4. Перейдите на последнюю закладку настроек.
  5. Найдите поле "Разрядность" и выберите значение "32 (x86)".

Важно помнить: если установлена только 64-битная платформа, выбор этой опции не даст результата — система просто выдаст ошибку отсутствия нужных файлов. Проверьте наличие папки C:\Program Files (x86)\1cv8\... перед изменением настроек.

Способ 3. Использование Native API компоненты (pdf417_64.dll)

Существует альтернативная разработка компоненты, выполненная по технологии Native API. В отличие от COM/ActiveX, она поддерживает работу в 64-битных процессах напрямую. Рассмотрим подробнее процесс ее подключения.

Поскольку компонента написана на Native API, её не нужно регистрировать в реестре Windows через regsvr32. Достаточно поместить файл в общий макет конфигурации и использовать встроенный язык 1С для работы с ним. Проанализируем пример кода для подключения такой компоненты:


&НаКлиенте
Процедура ПодключитьИнициализироватьКомпоненту()
    // Указываем путь к макету, где хранится dll
    ПутьККернел = "ОбщийМакет.КомпонентаПечатиPDF417_64";
    
    Результат = ПодключитьВнешнююКомпоненту(ПутьККернел, "PDF417", ТипВнешнейКомпоненты.Native);
    
    Если Результат Тогда
        ОбъектШК = Новый("AddIn.PDF417.BarcodePrinter");
        // Теперь объект доступен для формирования картинки штрихкода
    КонецЕсли;
КонецПроцедуры

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

Способ 4. Разрешение печати без штрихкода

В некоторых ситуациях штрихкод PDF417 не является обязательным (например, для внутренних нужд организации или если отчет сдается в электронном виде, а бумажная копия нужна лишь для архива). В типовых решениях (Бухгалтерия предприятия 3.0, ЗУП 3.1) предусмотрена штатная возможность отключения этой функции.

Рассмотрим, как найти эту настройку (по аналогии с тем, как настраивается печать квитанции по форме ПД-4 с Qr-кодом):

  1. Откройте форму регламентированного отчета (аналогично тому, как открывается счет на оплату с QR-кодом).
  2. Нажмите кнопку "Еще" в верхней части командной панели.
  3. Выберите пункт "Настройки".
  4. На закладке "Общие" или "Печать" установите флаг "Разрешить печать без штрихкода PDF417" (настройка доступна и через внешние печатные формы для ЗУП 3.1).

После активации этой опции при нажатии кнопки "Печать" система предложит выбор: сформировать бланк с двухмерным кодом или обычный печатный лист.

Важные нюансы: права доступа и системные библиотеки

Часто проблема не исчезает даже после установки 32-битного клиента. Выясним причину этой ситуации. Компонента ГНИВЦ при установке создает папку C:\Program Files (x86)\gnivc. Для корректной работы обычный пользователь Windows должен обладать правами на чтение и запуск из этой директории.

Рекомендуемые действия по настройке прав (инструмент проверка прав):

Проанализировав все вышеперечисленные методы, можно сделать вывод: наиболее стабильным и современным решением для крупных компаний является использование внешней утилиты print-nd-pdf417.exe, так как она полностью снимает вопрос разрядности платформы 1С и минимизирует количество административных манипуляций на рабочих местах пользователей.

← На главную