Почему штрихкод отображается при предпросмотре, но не выводится на печать и не сохраняется в файл в 1С?

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

В процессе работы с печатными формами в конфигурациях 1С (например, 1С:Управление торговлей) можно столкнуться с ситуацией, когда штрихкод корректно формируется и виден на экране при отображении табличного документа, однако при отправке формы на принтер или при сохранении в файл (например, в формате PDF) штрихкод бесследно исчезает. Рассмотрим причины возникновения этой проблемы и разберем по шагам варианты ее решения.

Основные причины исчезновения штрихкода при печати

Проанализируем технические нюансы работы платформы 1С с рисунками и графическими объектами в табличном документе:

  1. Пересчет координат драйвером печати: Экранное отображение табличного документа в режиме просмотра MXL отличается от финальной растеризации. Когда документ передается драйверу печати или конвертируется в файл, размеры ячеек и объектов могут незначительно изменяться из-за разрешающей способности устройства (DPI). Если объект штрихкода был размещен вплотную к границам выделенной области или выходил за пределы ячеек, платформенный движок печати отсекает его как не поместившийся.
  2. Свойство рисунка ВыводитьНаПечать: Графический объект типа РисунокТабличногоДокумента, в котором расположен штрихкод, имеет отдельное свойство ВыводитьНаПечать. Если для этого свойства задано значение Ложь, объект отображается при экранном редактировании, но полностью исключается при формировании печатной формы для вывода на устройство или экспорта.
  3. Повреждение или некорректность пользовательского макета: Если в системе используется измененный (пользовательский) макет печатной формы, в нем могут быть сбиты параметры привязки объектов, границы печатной области или свойства смещения рисунков.
  4. Ограничения компонентов штрихкодирования (ActiveX / COM): Использование устаревших внешних компонентов (например, 1CBarCode.dll или BARCODE.OCX) в 64-разрядных клиентах или при работе на сервере может вызывать сбои формирования изображения при экспорте в векторные и растровые форматы.
  5. Сохраненные пользовательские настройки печати: Если для печатной формы задано свойство ИмяПараметровПечати, платформа применяет ранее сохраненные пользователем параметры страницы (поля, масштабирование). Из-за некорректного масштаба объект штрихкода может выпадать за пределы видимой страницы.

Пошаговое решение проблемы

Рассмотрим порядок действий для восстановления корректной печати штрихкода.

Шаг 1. Корректировка размера области штрихкода в макете

Наиболее частой причиной является превышение габаритов объекта штрихкода относительно выделенной под него области макета. Чтобы устранить данную проблему, выполним следующие операции:

  1. Откроем макет печатной формы в режиме конфигуратора или через пользовательский редактор макетов.
  2. Найдем рисунок штрихкода (объект РисунокТабличногоДокумента).
  3. Уменьшим физический размер рисунка так, чтобы вокруг него оставался явный запас свободного пространства внутри ячеек или области макета.
  4. Убедимся, что рисунок корректно позиционирован с помощью метода РасположитьВЯчейках или настроек привязки к границам ячеек.

Шаг 2. Проверка свойств объекта «Рисунок»

Выясним, включен ли вывод объекта на печать. В окне свойств рисунка штрихкода проверим параметр:

  1. Убедимся, что свойство ВыводитьНаПечать установлено в значение Истина.
  2. Проверим свойство ТипСмещения — для предотвращения сдвигов при изменении размеров ячеек рекомендуется устанавливать значение, гарантирующее сохранение пропорций и привязку к строкам.

В программном коде формирования печатной формы заполнение свойств рисунка выглядит следующим образом:


ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
РисунокШтрихкода = ОбластьМакета.Рисунки.Штрихкод;
РисунокШтрихкода.ВыводитьНаПечать = Истина;

Шаг 3. Проверка и сброс на типовой макет

Если проблема наблюдается только в конкретной печатной форме (например, в расходном ордере на товары), следует проверить, не используется ли измененный макет:

  1. Перейдем в раздел администрирования печатных форм и макетов.
  2. Проверим, есть ли для проблемного документа пользовательский макет.
  3. Переключимся на использовать типовой макет печатной формы и проверим результат печати.
  4. Если на типовом макете штрихкод печатается корректно, перенесем доработки во внешнюю печатную форму или расширение, предварительно уменьшив размер области штрихкода на макете.

Шаг 4. Использование современных механизмов генерации штрихкодов

Для предотвращения проблем с внешними компонентами ActiveX и COM в современных конфигурациях рекомендуется формировать штрихкод средствами Библиотеки Стандартных Подсистем (БСП) в виде картинки непосредственно на сервере:


ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", 200);
ПараметрыШтрихкода.Вставить("Высота", 50);
ПараметрыШтрихкода.Вставить("Штрихкод", ЗначениеШтрихкода);
ПараметрыШтрихкода.Вставить("ТипШтрихкода", 1); // Например, Code128 или EAN13

КартинкаШтрихкода = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);

Если КартинкаШтрихкода <> Неопределено Тогда
    ОбластьМакета.Рисунки.Штрихкод.Картинка = КартинкаШтрихкода;
КонецЕсли;

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

← На главную