Логотип, печать и картинки из базы в печатной форме 1С 8.3
Содержание
Чтобы вставить рисунок в макет 1С, откройте макет табличного документа в конфигураторе, выделите ячейки и выберите в главном меню Таблица → Рисунки → Картинка. Затем укажите файл, задайте рисунку имя в свойствах — и сможете подменять картинку из кода через Область.Рисунки.ИмяРисунка.Картинка.
Типичная ситуация: директор просит поставить логотип на счёт и коммерческое предложение , а в соседней организации холдинга логотип другой. Статичная картинка в макете тут не спасёт — нужна вставка изображения программно, из данных базы. Ниже разобраны оба пути, плюс размеры для печати и ошибки, на которых спотыкаются чаще всего.
1. Подготовка картинки: формат, размер, разрешение
Платформа 1С 8.3 понимает обычные растровые форматы: PNG, JPEG, BMP, GIF. Для логотипов и печатей лучше всего подходит PNG — он хранит прозрачность, и под оттиском печати не появится белый прямоугольник.
| Что вставляете | Формат | Почему |
|---|---|---|
| 🏷️ Логотип, печать, подпись | PNG с прозрачным фоном | Не перекрывает текст и линии таблицы |
| 📷 Фото товара | JPEG | Меньше весит при той же картинке |
| 📊 Схема, чертёж с тонкими линиями | PNG | JPEG «мылит» линии и даёт артефакты |
| 🖼️ Старые картинки из архивов | BMP | Лучше пересохранить в PNG: BMP весит в разы больше |
Сколько пикселей нужно
Макет меряется в миллиметрах, принтер — в точках на дюйм. Для чёткой печати ориентируйтесь на 300 точек на дюйм. Формула простая: ширина в мм / 25,4 × 300.
- Логотип шириной 40 мм → 40 / 25,4 × 300 ≈ 472 пикселя.
- Оттиск печати 40 × 40 мм → около 472 × 472 пикселя.
- Факсимиле подписи 30 × 15 мм → примерно 354 × 177 пикселей.
Больше 300 точек на дюйм брать не нужно. Картинка на 2000 пикселей в шапке счёта не станет чётче, зато раздует конфигурацию и каждый PDF, который уходит клиенту по почте.
Подготовка файла
- Обрежьте поля вокруг изображения — пустые края тоже занимают место в ячейках.
- Уберите фон у печати и подписи, сохраните в PNG.
- Проверьте вес: для логотипа разумно уложиться в 50–150 КБ.
- Назовите файл латиницей без пробелов — так проще, если потом добавите его в общие картинки.
2. Как вставить картинку в макет через конструктор
Это ручной путь: картинка «зашита» в макет и одинакова для всех. Подходит для своих форм, где логотип не меняется.
- Откройте конфигуратор и найдите нужный объект в дереве: документ, справочник, обработку или общие макеты.
- Раскройте ветку
Макетыи откройте макет типа «Табличный документ» двойным щелчком. - Выделите мышью диапазон ячеек, где должен стоять рисунок. Размер выделения станет исходным размером картинки.
- В главном меню выберите
Таблица → Рисунки → Картинка. - В открывшемся окне выбора картинки нажмите кнопку загрузки из файла и укажите подготовленный файл.
- Откройте свойства рисунка (
Alt+Enterили двойной щелчок) и задайте Имя — например,Логотип. - В свойствах настройте Размер картинки и при необходимости уберите рамку (о ней — в разделе про ошибки).
- Сохраните конфигурацию и обновите конфигурацию базы данных (
F7).
Если вы правите макет типовой конфигурации, находящейся на поддержке, объект придётся снять с замка. Правка типового объекта усложняет каждое следующее обновление. Безопаснее изменить макет в расширении конфигурации: заимствуйте объект, затем заимствуйте его макет и правьте уже копию в расширении.
Как выбрать «Размер картинки»
| Значение | Что происходит | Когда брать |
|---|---|---|
| Пропорционально | Вписывается в рамку без искажений | Логотипы, печати — почти всегда |
| Растянуть | Заполняет рамку, может сплющить | Фоновые плашки, полосы |
| Реальный размер | Выводится в исходных пикселях, лишнее обрезается | Иконки точного размера |
| Авторазмер | Рамка подстраивается под картинку | Когда размер заранее неизвестен |
| Черепица | Картинка повторяется по рамке | Фоновые узоры, водяные знаки |
Привязка рисунка к именованной области
Печатная форма собирается из областей: Шапка, Строка, Подвал. Рисунок должен лежать целиком внутри строк нужной области. Тогда ПолучитьОбласть("Шапка") заберёт его вместе с ячейками, и при выводе он встанет на своё место.
Если верхний край картинки залезает на строку выше границы области, рисунок может «потеряться» или уехать в другую часть формы. Подровняйте его по сетке ячеек.
3. Программная вставка изображения в макет 1С
Рабочих сценариев два: подменить картинку у рисунка, заранее размещённого в макете, или создать рисунок кодом с нуля.
Подмена картинки у готового рисунка
Самый удобный способ. В макете стоит рисунок-заглушка с именем Логотип, а код при печати кладёт в него нужное изображение:
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
Если ДанныеЛоготипа <> Неопределено Тогда
ОбластьШапка.Рисунки.Логотип.Картинка = Новый Картинка(ДанныеЛоготипа);
Иначе
// логотипа нет — убираем пустую рамку, чтобы не печаталась
ОбластьШапка.Рисунки.Удалить(ОбластьШапка.Рисунки.Логотип);
КонецЕсли;
ТабДок.Вывести(ОбластьШапка);
Здесь ДанныеЛоготипа — значение типа ДвоичныеДанные. Откуда их взять, показано в следующем разделе.
Положение, размер и режим масштабирования вы настраиваете один раз в конструкторе. Код меняет только содержимое — дизайнер формы и программист не мешают друг другу.
Создание рисунка кодом
Если заглушки нет, рисунок добавляют прямо в итоговый табличный документ:
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Новый Картинка(ДанныеЛоготипа);
Рисунок.Расположение = ТабДок.Область("R1C1:R4C3");
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
Расположение задаёт прямоугольник ячеек: здесь строки 1–4 и колонки 1–3. Вызывайте этот код после вывода областей, когда ячейки уже существуют.
Подмену заглушки проще сопровождать: через полгода никто не вспомнит, почему логотип стоит в R1C1:R4C3. Создание кодом оставьте для случаев, когда число картинок заранее неизвестно, например фото к каждой строке прайса.
Картинка в каждой строке таблицы
Для каталога с фото товаров кладите рисунок-заглушку в область Строка и подменяйте картинку в цикле:
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаТовара Из Товары Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);
ДанныеФото = СтрокаТовара.Номенклатура.Фото.Получить();
Если ТипЗнч(ДанныеФото) = Тип("ДвоичныеДанные") Тогда
ОбластьСтрока.Рисунки.Фото.Картинка = Новый Картинка(ДанныеФото);
Иначе
ОбластьСтрока.Рисунки.Фото.Картинка = Новый Картинка;
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Ветка Иначе обязательна. Без неё товар без фото получит картинку предыдущей строки: область одна, и рисунок в ней сохраняет последнее присвоенное значение.
4. Изображения из базы данных: где их хранить и как достать
Статичная картинка в макете годится для одной организации. Как только логотипов несколько или нужны фото товаров, изображение надо хранить в данных.
Реквизит типа «Хранилище значения»
Классический вариант для своих конфигураций. Добавьте справочнику реквизит Логотип типа ХранилищеЗначения и запишите в него двоичные данные файла:
&НаСервере
Процедура ЗаписатьЛоготип(АдресВоВременномХранилище)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище);
ОбъектОрг = Объект.Ссылка.ПолучитьОбъект();
ОбъектОрг.Логотип = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
ОбъектОрг.Записать();
КонецПроцедуры
Адрес во временном хранилище на клиенте даёт НачатьПомещениеФайла или ПоместитьФайл. При печати данные читаются так: ДанныеЛоготипа = Организация.Логотип.Получить();.
Не читайте картинку через «точку» в цикле по сотням документов. Каждое обращение тянет весь объект справочника. Получите хранилища одним запросом заранее и разложите их в соответствие «ссылка → данные».
Присоединённые файлы в типовых конфигурациях
В конфигурациях на БСП картинки обычно лежат как присоединённые файлы. Двоичные данные выдаёт функция РаботаСФайлами.ДвоичныеДанныеФайла(СсылкаНаФайл). Дальше всё так же: Новый Картинка(...) и подмена у рисунка.
Библиотека картинок
Если картинка одна на всю базу и меняется только с обновлением конфигурации, добавьте её в Общие → Общие картинки. В коде она доступна как БиблиотекаКартинок.ИмяКартинки — без чтения файлов и хранилищ.
| Где хранить | Плюсы | Минусы |
|---|---|---|
| Прямо в макете | Ноль кода | Одна картинка на всех, правка только в конфигураторе |
| Общие картинки | Просто использовать в любой форме | Замена — только через обновление конфигурации |
| Хранилище значения | Своя картинка у каждого элемента | Растёт размер базы, нужен код загрузки |
| Присоединённые файлы | Версии, загрузка пользователем, типовой механизм | Нужна БСП |
5. Логотип и печать в типовых формах без программирования
Прежде чем открывать конфигуратор, проверьте, не умеет ли конфигурация это сама. В 1С:Бухгалтерии 3.0 в карточке организации есть раздел «Логотип и печать». Туда загружают логотип, оттиск печати и факсимиле подписей руководителя и главного бухгалтера.
После загрузки картинки появляются в счёте на оплату и ряде других форм — правка макета не нужна. Разработчик понадобится, только если нужно вывести логотип в форме, которая его не поддерживает.
Для правки самих типовых макетов в пользовательском режиме есть список Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. Он подходит для смены текста, шрифтов и рамок. Для вставки рисунков с логикой «своя картинка у каждой организации» надёжнее расширение конфигурации
.
6. Как картинка выглядит на экране, в PDF и на бумаге
Один и тот же рисунок по-разному ведёт себя на мониторе, в PDF и на принтере. Проверяйте все три варианта до того, как отдавать форму бухгалтерии.
- 🖥️ Экран. Масштаб табличного документа меняется — мелкий логотип при 75 % станет пятном. Это нормально, на печать не влияет.
- 📄 PDF. Картинка уходит в файл без сжатия до нужного размера. Фото 4000 × 3000 пикселей в каждой из 50 строк каталога даст PDF на десятки мегабайт.
- 🖨️ Бумага. Решают миллиметры рамки и пиксели картинки. Мало пикселей на рамку — будет «лесенка».
Чек-лист перед сдачей формы
Как уменьшить вес
- Ужмите исходник до нужного количества пикселей ещё до загрузки в базу.
- Для фото товаров храните отдельную уменьшенную копию для печати, а оригинал — для сайта.
- Используйте
Новый СжатиеДанных(9)при записи в хранилище — это экономит место в базе, хотя сам PDF не уменьшит.
7. Диаграммы, штрихкоды и картинки, созданные на лету
Рисунок табличного документа — это не только файл с диска. В макет можно поместить объект, который строится при каждой печати.
Диаграмма в печатной форме
В конструкторе её вставляют через Таблица → Рисунки → Диаграмма. Из кода — так же, как картинку, но с другим типом:
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Диаграмма);
Рисунок.Расположение = ТабДок.Область("R10C1:R25C8");
Диаграмма = Рисунок.Объект;
Диаграмма.ТипДиаграммы = ТипДиаграммы.Гистограмма;
Дальше диаграмму заполняют сериями и точками, как обычную диаграмму на форме. Удобно для отчётов руководителю: таблица и график в одном документе.
Штрихкоды и QR-коды
Штрихкод в печатной форме — это тоже картинка, только сгенерированная. В типовых конфигурациях на БСП есть общий модуль для генерации изображений штрихкодов. Найдите его поиском по слову «Штрихкод» в ветке Общие модули и посмотрите, какие параметры принимает функция в вашей версии БСП. Результат — двоичные данные или картинка, которую кладут в рисунок-заглушку, как логотип.
Картинка из внешнего источника
Изображение можно получить по HTTP, из файла на сервере или из другой базы. Помните, где выполняется код: Новый Картинка("C:\Logo\logo.png") на сервере ищет файл на диске сервера 1С, а не на компьютере пользователя.
8. Ошибки при вставке рисунка в макет и как их исправить
Если правка макета не помогла
Проверьте, что форма вообще печатается из вашего макета. В типовых конфигурациях пользователь мог когда-то сохранить свой вариант через Макеты печатных форм — тогда платформа берёт его, а не макет из конфигуратора. В этом списке изменённые макеты отмечены; верните стандартный вариант или внесите правку в пользовательскую копию.
Ещё одна причина — подключённая внешняя печатная форма с тем же названием. Её макет живёт в файле .epf, и правки в конфигурации на неё не влияют.