Логотип, печать и картинки из базы в печатной форме 1С 8.3

· 10 мин

Содержание

Чтобы вставить рисунок в макет 1С, откройте макет табличного документа в конфигураторе, выделите ячейки и выберите в главном меню Таблица → Рисунки → Картинка. Затем укажите файл, задайте рисунку имя в свойствах — и сможете подменять картинку из кода через Область.Рисунки.ИмяРисунка.Картинка.

Типичная ситуация: директор просит поставить логотип на счёт и коммерческое предложение , а в соседней организации холдинга логотип другой. Статичная картинка в макете тут не спасёт — нужна вставка изображения программно, из данных базы. Ниже разобраны оба пути, плюс размеры для печати и ошибки, на которых спотыкаются чаще всего.

1. Подготовка картинки: формат, размер, разрешение

Платформа 1С 8.3 понимает обычные растровые форматы: PNG, JPEG, BMP, GIF. Для логотипов и печатей лучше всего подходит PNG — он хранит прозрачность, и под оттиском печати не появится белый прямоугольник.

Что вставляетеФорматПочему
🏷️ Логотип, печать, подписьPNG с прозрачным фономНе перекрывает текст и линии таблицы
📷 Фото товараJPEGМеньше весит при той же картинке
📊 Схема, чертёж с тонкими линиямиPNGJPEG «мылит» линии и даёт артефакты
🖼️ Старые картинки из архивовBMPЛучше пересохранить в PNG: BMP весит в разы больше

Сколько пикселей нужно

Макет меряется в миллиметрах, принтер — в точках на дюйм. Для чёткой печати ориентируйтесь на 300 точек на дюйм. Формула простая: ширина в мм / 25,4 × 300.

  • Логотип шириной 40 мм → 40 / 25,4 × 300 ≈ 472 пикселя.
  • Оттиск печати 40 × 40 мм → около 472 × 472 пикселя.
  • Факсимиле подписи 30 × 15 мм → примерно 354 × 177 пикселей.

Больше 300 точек на дюйм брать не нужно. Картинка на 2000 пикселей в шапке счёта не станет чётче, зато раздует конфигурацию и каждый PDF, который уходит клиенту по почте.

Подготовка файла

  1. Обрежьте поля вокруг изображения — пустые края тоже занимают место в ячейках.
  2. Уберите фон у печати и подписи, сохраните в PNG.
  3. Проверьте вес: для логотипа разумно уложиться в 50–150 КБ.
  4. Назовите файл латиницей без пробелов — так проще, если потом добавите его в общие картинки.

2. Как вставить картинку в макет через конструктор

Это ручной путь: картинка «зашита» в макет и одинакова для всех. Подходит для своих форм, где логотип не меняется.

  1. Откройте конфигуратор и найдите нужный объект в дереве: документ, справочник, обработку или общие макеты.
  2. Раскройте ветку Макеты и откройте макет типа «Табличный документ» двойным щелчком.
  3. Выделите мышью диапазон ячеек, где должен стоять рисунок. Размер выделения станет исходным размером картинки.
  4. В главном меню выберите Таблица → Рисунки → Картинка.
  5. В открывшемся окне выбора картинки нажмите кнопку загрузки из файла и укажите подготовленный файл.
  6. Откройте свойства рисунка (Alt+Enter или двойной щелчок) и задайте Имя — например, Логотип.
  7. В свойствах настройте Размер картинки и при необходимости уберите рамку (о ней — в разделе про ошибки).
  8. Сохраните конфигурацию и обновите конфигурацию базы данных (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 на десятки мегабайт.
  • 🖨️ Бумага. Решают миллиметры рамки и пиксели картинки. Мало пикселей на рамку — будет «лесенка».

Чек-лист перед сдачей формы

Проверка рисунка в печатной форме
Выполнено: 0 / 6

Как уменьшить вес

  1. Ужмите исходник до нужного количества пикселей ещё до загрузки в базу.
  2. Для фото товаров храните отдельную уменьшенную копию для печати, а оригинал — для сайта.
  3. Используйте Новый СжатиеДанных(9) при записи в хранилище — это экономит место в базе, хотя сам PDF не уменьшит.

7. Диаграммы, штрихкоды и картинки, созданные на лету

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

Диаграмма в печатной форме

В конструкторе её вставляют через Таблица → Рисунки → Диаграмма. Из кода — так же, как картинку, но с другим типом:

Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Диаграмма);
Рисунок.Расположение = ТабДок.Область("R10C1:R25C8");
Диаграмма = Рисунок.Объект;
Диаграмма.ТипДиаграммы = ТипДиаграммы.Гистограмма;

Дальше диаграмму заполняют сериями и точками, как обычную диаграмму на форме. Удобно для отчётов руководителю: таблица и график в одном документе.

Штрихкоды и QR-коды

Штрихкод в печатной форме — это тоже картинка, только сгенерированная. В типовых конфигурациях на БСП есть общий модуль для генерации изображений штрихкодов. Найдите его поиском по слову «Штрихкод» в ветке Общие модули и посмотрите, какие параметры принимает функция в вашей версии БСП. Результат — двоичные данные или картинка, которую кладут в рисунок-заглушку, как логотип.

Картинка из внешнего источника

Изображение можно получить по HTTP, из файла на сервере или из другой базы. Помните, где выполняется код: Новый Картинка("C:\Logo\logo.png") на сервере ищет файл на диске сервера 1С, а не на компьютере пользователя.

8. Ошибки при вставке рисунка в макет и как их исправить

Диагностика: выберите симптом

Если правка макета не помогла

Проверьте, что форма вообще печатается из вашего макета. В типовых конфигурациях пользователь мог когда-то сохранить свой вариант через Макеты печатных форм — тогда платформа берёт его, а не макет из конфигуратора. В этом списке изменённые макеты отмечены; верните стандартный вариант или внесите правку в пользовательскую копию.

Ещё одна причина — подключённая внешняя печатная форма с тем же названием. Её макет живёт в файле .epf, и правки в конфигурации на неё не влияют.

9. Частые вопросы

Можно ли вставить картинку в макет без конфигуратора?
В типовых формах логотип и печать загружают в карточке организации. Для своих форм или новых рисунков нужен конфигуратор либо расширение конфигурации.
Почему в PDF логотип размыт, а на экране чёткий?
Пикселей не хватает на размер рамки. Пересчитайте: ширина в мм / 25,4 × 300 — столько пикселей нужно для печати без «лесенки».
Можно ли поставить печать поверх текста?
Да. Рисунок лежит над ячейками и может перекрывать текст. Используйте PNG с прозрачным фоном, иначе белый фон закроет подпись и сумму прописью.
Сильно ли растёт база от картинок в хранилище значения?
Ровно на объём файлов. Логотипы на 100 КБ незаметны, а фото товаров по 3 МБ на тысячи позиций — это гигабайты. Ужимайте фото перед загрузкой.
Как вывести разные логотипы для разных организаций?
Храните логотип у организации и подменяйте картинку у рисунка-заглушки при печати. Макет остаётся один.