Логотип, фото товара и штрихкод на этикетке в 1С 8.3
Содержание
Картинка в этикетку 1С вставляется как рисунок в макет — табличный документ, по которому печатается этикетка. Логотип, одинаковый на всех этикетках, кладут прямо в макет. Фото товара или штрихкод, которые меняются от строки к строке, выводят через рисунок с заполненным свойством «Параметр».
Частая ошибка — пытаться вставить картинку в ячейку, как в Excel. В табличном документе 1С ячейка хранит текст, число или параметр, а изображение живёт отдельным объектом поверх сетки ячеек. Отсюда и большинство проблем: картинка «уезжает», растягивается или печатается только на первой этикетке.
Подготовка изображения для печати этикеток
Этикетку чаще всего печатают на термопринтере, а он видит мир иначе, чем монитор. Хорошая картинка для экрана может превратиться в серое пятно на ленте 58×40 мм.
Формат файла
Платформа 8.3 принимает PNG, JPG, BMP, GIF и SVG. Для этикеток выбор такой:
| Формат | Когда брать | Что учесть |
|---|---|---|
| PNG | логотип, значки, надписи | держит прозрачный фон и чёткие края |
| SVG | логотип в векторе | масштабируется без потерь, но сложные градиенты могут отрисоваться иначе |
| JPG | фото товара | нет прозрачности, на мелкой этикетке теряет детали |
| BMP | старые макеты | файл большой, макет «тяжелеет» |
Размер в пикселях
Считайте от разрешения принтера. Термопринтер на 203 dpi печатает 8 точек на миллиметр, на 300 dpi — примерно 12.
📐 Пример: логотип в зоне 20×10 мм на принтере 203 dpi — это 160×80 пикселей. Больше не нужно: лишние пиксели принтер всё равно выбросит, а макет вырастет в объёме.
Цвет
- ⚫ Термопринтер печатает одним цветом. Серые оттенки он превращает в растр из точек, мелкий текст на логотипе пропадает.
- 🎨 Переведите логотип в чёрно-белый режим без полутонов заранее, в графическом редакторе.
- 🔲 Уберите белые поля вокруг изображения: они занимают место на этикетке и сбивают выравнивание.
Если этикетки печатаются и на лазерном принтере, и на термопринтере, держите два варианта логотипа: цветной для А4 и монохромный для ленты.
Как вставить картинку в макет этикетки
Макет этикетки — это табличный документ. Вставка картинки в нём делается одинаково, где бы вы его ни открыли: в Конфигураторе, в пользовательском редакторе макетов или в отдельно открытом файле .mxl.
Где открыть макет
- 🧩 Типовая печатная форма. В конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) пользовательские макеты правят без Конфигуратора:
Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. Найдите нужную этикетку по названию, откройте на изменение. - 🏷 Шаблоны этикеток и ценников в УТ 11 и Рознице. Это отдельный справочник «Шаблоны этикеток и ценников» со своим редактором. Быстрее всего его найти через
Главное меню → Все функции → Справочники. - 🛠 Своя обработка или расширение. Макет лежит в дереве объекта, открывается двойным щелчком в Конфигураторе.
Пошагово: статичный логотип
- Откройте макет и выделите ячейки, где будет логотип.
- В Конфигураторе выберите
Таблица → Рисунки → Картинка.... В режиме 1С:Предприятие та же команда есть в главном меню, в подменю «Таблица», пока активен табличный документ. - Выберите файл. Картинка встанет поверх выделенных ячеек.
- Откройте свойства рисунка (двойной щелчок или контекстное меню).
- В поле «Размер картинки» поставьте «Пропорционально». Иначе логотип растянется под рамку.
- Если вокруг рисунка видна рамка — уберите линию в свойствах рисунка.
- Сохраните макет и напечатайте одну этикетку на пробу.
Правка типового макета через Конфигуратор снимает конфигурацию с полной поддержки или требует включить возможность изменений. Для типовых конфигураций правьте макет через «Макеты печатных форм» или расширение, а не напрямую.
Режимы размера картинки
| Режим | Что делает | Где уместен |
|---|---|---|
| Пропорционально | вписывает в рамку, сохраняя пропорции | логотипы, фото товара |
| Растянуть | заполняет рамку целиком | фоновые полосы, рамки |
| Реальный размер | выводит в исходных пикселях | редко, если рамка подогнана под файл |
| Авторазмер | подгоняет рамку под картинку | черновая разметка |
Фото товара и меняющиеся картинки: рисунок с параметром
Логотип одинаков на всех этикетках. Фото товара — нет. Для него рисунок в макете делают пустым, а картинку подставляют при печати.
- Вставьте в область этикетки рисунок типа «Картинка», можно без файла.
- В свойствах рисунка заполните поле «Параметр», например
ФотоТовара. - Задайте «Размер картинки» = «Пропорционально».
- В коде печати заполните параметр области значением типа
Картинка.
Рисунок с параметром ведёт себя как ячейка с параметром: при каждом выводе области он получает своё значение. Это ключевой приём — без него фото пришлось бы рисовать программно с подсчётом координат.
Откуда брать фото
- 📁 Из присоединённых файлов номенклатуры. В конфигурациях на БСП двоичные данные файла получают функцией
РаботаСФайлами.ДвоичныеДанныеФайла(Файл). - 🗂 Из реквизита типа
ХранилищеЗначения:Номенклатура.Картинка.Получить(). - 🌐 Из общей картинки конфигурации:
БиблиотекаКартинок.ИмяКартинки— для значков «Хит», «Новинка», «Акция».
Картинки в отчёте на СКД
Этикетки иногда печатают не обработкой, а отчётом на системе компоновки данных. Там есть два пути.
Поле со значением-картинкой
Если поле набора данных возвращает значение типа Картинка, СКД выводит его в ячейку как изображение. Двоичные данные из хранилища в картинку превращают на этапе вывода, например в обработчике ПриКомпоновкеРезультата модуля отчёта, или подготавливают заранее во внешнем наборе данных.
Свой макет группировки
На вкладке «Макеты» схемы компоновки можно назначить группировке собственный макет — область табличного документа. Туда кладут рисунок с параметром, как в предыдущем разделе, и связывают параметр с полем. Так получается этикетка с фиксированной вёрсткой: логотип сверху, наименование, цена, штрихкод.
СКД удобна, когда этикетки фильтруют и группируют: по складу, по поступлению, по ценовой группе. Для простой печати «одна строка — одна этикетка» обработка с макетом проще и быстрее.
Вывод картинки на этикетку из кода
Программный вывод нужен в своей обработке печати или во внешней печатной форме. Схема одна: получить макет, взять область, заполнить параметры, вывести.
Пример для модуля объекта обработки. В макете «Этикетка» есть область «Этикетка», а в ней ячейка Наименование и два рисунка с параметрами Логотип и ФотоТовара.
Функция СформироватьЭтикетки(Товары, ДанныеЛоготипа) Экспорт
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Этикетка");
Область = Макет.ПолучитьОбласть("Этикетка");
// Логотип создаём один раз, а не в цикле
Логотип = Новый Картинка(ДанныеЛоготипа);
Для Каждого Товар Из Товары Цикл
Область.Параметры.Наименование = Товар.Наименование;
Область.Параметры.Логотип = Логотип;
Если Товар.ДанныеФото <> Неопределено Тогда
Область.Параметры.ФотоТовара = Новый Картинка(Товар.ДанныеФото);
Иначе
Область.Параметры.ФотоТовара = Новый Картинка; // пустая, чтобы не осталось фото прошлого товара
КонецЕсли;
ТабДок.Вывести(Область);
КонецЦикла;
Возврат ТабДок;
КонецФункции
Главное здесь — ветка Иначе. Область переиспользуется в цикле, и без сброса у товара без фото напечатается фото предыдущего.
Рисунок без макета
Если макета нет или картинку нужно поставить в произвольное место, добавьте рисунок прямо в табличный документ:
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Логотип;
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
Рисунок.Расположить(ТабДок.Область("R1C1:R3C4"));
Метод Расположить привязывает рисунок к ячейкам, и не нужно пересчитывать миллиметры. Но такой рисунок добавляется один раз. Для листа с десятком этикеток надёжнее рисунок с параметром в области макета.
Изменения без потери обновлений
Для типовой конфигурации печатную форму с картинкой оформляют расширением конфигурации или внешней печатной формой. Расширение переживает обновление релиза, а прямая правка модуля — нет: при следующем обновлении придётся сравнивать и объединять код вручную.
Штрихкоды и QR-коды на этикетке
Штрихкод на этикетке — тоже картинка. Его генерируют в момент печати и подставляют в рисунок с параметром, как фото товара.
Чем генерировать
| Способ | Где встречается | Особенность |
|---|---|---|
| Подсистема БСП «Генерация штрихкода» | современные типовые конфигурации | встроена, отдельной установки не требует |
| Внешняя компонента печати штрихкодов | старые релизы, свои разработки | компоненту подключают перед вызовом |
| Шаблон этикетки УТ 11 и Розницы | «Шаблоны этикеток и ценников» | поле штрихкода выбирают из списка, код писать не нужно |
Пример через БСП:
ПараметрыШК = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
ПараметрыШК.Штрихкод = Товар.Штрихкод;
ПараметрыШК.Ширина = 300;
ПараметрыШК.Высота = 120;
// Тип кода (EAN-13, Code128, QR и т.д.) задаётся параметром ТипКода
Результат = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШК);
Если Результат.Результат Тогда
Область.Параметры.Штрихкод = Результат.Картинка;
КонецЕсли;
Набор полей структуры параметров сверьте с описанием функции ПараметрыГенерацииШтрихкода в общем модуле вашей версии БСП: от версии к версии он дополняется.
Как не испортить читаемость
- 📏 Генерируйте картинку в пикселях с запасом и выводите в режиме «Пропорционально». Растянутый по одной оси штрихкод сканер часто не читает.
- 🔍 Не уменьшайте EAN-13 до совсем узкой полосы: тонкие штрихи сливаются на термоленте.
- ⬜ Оставляйте белые поля слева и справа от штрихкода. Без «тихой зоны» сканер не находит начало кода.
- 🔳 Для QR-кода держите квадратную рамку рисунка. На 203 dpi код размером меньше 15×15 мм с длинной строкой читается плохо.
- 🏷 Код маркировки «Честного знака» печатают в формате DataMatrix, а не QR. Перепутать их — значит получить этикетку, которую не примут.
Почему картинка не печатается или печатается криво
Проблемы с изображениями на этикетках повторяются из раза в раз. Найдите свой симптом и проверьте причину.
Если этикетки печатаются долго и макет весит мегабайты — проверьте исходный размер вставленной картинки. Фото 4000×3000 пикселей в каждой из сотни этикеток тормозит формирование и печать.