Разработка и Конфигурация · 11 мин
Как вставить картинку в ячейку 1С: все способы с примерами
Как вставить картинку в ячейку табличного документа 1С: вставка вручную, через макет, программно. Настройка размера, типичные ошибки и решения.
Вставка изображения в ячейку табличного документа — частая задача при оформлении печатных форм, прайс-листов, каталогов товаров и отчётов в 1С. Картинка может понадобиться для логотипа компании в шапке счёта, фотографии товара в прайсе или подписи руководителя на акте.
В 1С есть несколько способов поместить изображение в ячейку: вставка вручную в режиме предприятия, настройка картинки в макете конфигуратора и программный вывод через встроенный язык. Каждый способ решает свою задачу и имеет ограничения.
Ниже разобраны все рабочие варианты с примерами кода, настройкой размеров и типичными ошибками, из-за которых картинка не отображается или искажается при печати.
Какие способы вставки картинки существуют в 1С
Табличный документ в 1С — это не электронная таблица вроде Excel, а отдельный формат с собственной логикой. Изображение не «кладётся» внутрь ячейки как значение: оно добавляется как объект-рисунок, привязанный к области ячеек. Именно поэтому прямой аналог команды «вставить картинку в ячейку» из Excel работает иначе.
Доступны три подхода:
- Ручная вставка — подходит для разового оформления документа, который не формируется автоматически;
- Картинка в макете — используется для статичных изображений в печатных формах: логотипы, печати, подписи;
- Программная вставка — нужна, когда картинка динамическая: фото товара из справочника, QR-код, изображение из хранилища значений.
Сравнение вариантов
Быстро для разового документа, но не подходит для автоматически формируемых печатных форм
Надёжно для статичных изображений, изменение картинки требует правки макета в конфигураторе
Единственный вариант для динамических изображений из базы, требует навыков работы со встроенным языком
Вставка картинки вручную в табличный документ
Если табличный документ открыт в режиме «1С:Предприятие» (например, сформированный отчёт или печатная форма, открытая на редактирование), картинку можно добавить через интерфейс. Порядок действий:
- Откройте табличный документ и выделите ячейку, в которую нужно поместить изображение.
- В главном меню выберите «Таблица» → «Рисунки» → «Вставить рисунок» (в некоторых версиях платформы пункт называется «Картинка»).
- В диалоге укажите файл изображения на диске — поддерживаются распространённые растровые форматы (PNG, JPEG, BMP) и некоторые векторные.
- После вставки перетащите рисунок мышью в нужную ячейку и подгоните размер за углы рамки.
Рисунок ведёт себя как плавающий объект: он привязан к области, но при изменении ширины столбцов или высоты строк может сместиться. Чтобы изображение «жило» строго внутри ячейки, откройте свойства рисунка (правый клик → «Свойства») и проверьте параметры размещения и размера.
Учтите: вставленная вручную картинка сохраняется только вместе с конкретным документом. Если печатная форма формируется заново при каждом открытии, ручная правка пропадёт — в этом случае нужен макет или программный вывод.
Добавление картинки в макет печатной формы
Макет — это шаблон табличного документа, хранящийся в конфигурации. Если логотип или печать должны появляться в документе всегда, правильнее разместить их именно в макете. Действия в конфигураторе:
- Откройте конфигуратор, найдите нужный объект (документ, отчёт, обработку) и откройте его макет типа «Табличный документ».
- Выделите ячейку для картинки, затем в меню выберите «Таблица» → «Рисунки» → «Вставить рисунок».
- Укажите файл изображения. Платформа предложит сохранить картинку в составе конфигурации — согласитесь, чтобы изображение не зависело от внешнего файла.
- Откройте свойства рисунка и задайте точные размеры (ширину и высоту) в единицах табличного документа, снимите флажок пропорционального изменения, если нужна фиксированная геометрия.
После этого при программном формировании печатной формы методом ПолучитьМакет() и выводе областей картинка появится автоматически вместе с областью, в которой она размещена.
Важный нюанс: если область с рисунком выводится в цикле (например, строки товаров), картинка будет дублироваться в каждой строке. Для логотипа размещайте рисунок в области шапки, которая выводится один раз.
Программная вставка картинки в ячейку
Для динамических изображений — фото товара из справочника, штрихкода, генерируемого QR-кода — используется коллекция Рисунки табличного документа. Типовой фрагмент кода выглядит так:
ТабДок = Новый ТабличныйДокумент;
// Получаем картинку из хранилища значений справочника
ДанныеКартинки = ТоварСсылка.ФайлКартинки.Получить();
Если ДанныеКартинки <> Неопределено Тогда
Картинка = Новый Картинка(ДанныеКартинки);
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Картинка;
Рисунок.Верх = 10; // отступ сверху в мм
Рисунок.Лево = 5; // отступ слева в мм
Рисунок.Высота = 20; // высота в мм
Рисунок.Ширина = 30; // ширина в мм
КонецЕсли;
Ключевые моменты этого подхода:
- Координаты
ВерхиЛевозадаются в миллиметрах от левого верхнего угла документа, а не от ячейки — их нужно рассчитывать с учётом уже выведенных областей; - Чтобы привязать рисунок к конкретной ячейке, удобно вывести область, затем по высоте области вычислить позицию рисунка;
- Если картинка хранится в базе как двоичные данные в хранилище значений, её сначала извлекают методом
Получить(), затем создают объектКартинка.
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Новый Картинка(ДвоичныеДанные);
Рисунок.Верх = ТабДок.ВысотаТаблицы * 5; // примерный расчёт позиции
Рисунок.Лево = 2;
Рисунок.Высота = 15;
Рисунок.Ширина = 15;Альтернатива — область макета с именованным рисунком: в макете добавляется пустой рисунок-заполнитель, а в коде ему присваивается нужная картинка через обращение к коллекции рисунков области. Это удобнее, чем расчёт координат, потому что позиция уже задана макетом.
Как подобрать размер и не исказить изображение
Самая частая претензия к вставленным картинкам — искажённые пропорции или размытие на печати. Причины почти всегда одни и те же: заданы ширина и высота, не соответствующие пропорциям исходника, либо исходное изображение слишком маленькое и растягивается.
Практические рекомендации:
- Рассчитывайте второй размер пропорционально: если известна ширина, высоту вычисляйте как
Высота = Ширина * ВысотаИсходника / ШиринаИсходника. Размеры исходника доступны через свойстваКартинка.Ширина()иКартинка.Высота()(в пикселях). - Для печати используйте изображения с запасом по разрешению: логотип шириной 30 мм желательно брать не меньше 300–400 пикселей по ширине.
- Проверяйте результат именно в предварительном просмотре печати, а не только на экране — масштаб отображения в табличном документе может скрывать искажения.
Типичные ошибки и их решение
Даже при правильном коде картинка иногда не появляется. Ниже — ситуации, с которыми разработчики сталкиваются чаще всего.
Ещё одна тонкость: при выводе табличного документа в PDF или отправке на печать векторные и полупрозрачные изображения могут обрабатываться иначе, чем на экране. Если картинка содержит прозрачность и выглядит странно на печати, конвертируйте её в PNG с белым фоном заранее.
Проверка результата
После вставки изображения пройдите короткий контрольный цикл, прежде чем отдавать форму пользователям.
Как проверить результат
Картинка видна в нужной ячейке, пропорции сохранены
Рисунок смещён, растянут или отсутствует
Изображение чёткое, не обрезано границами страницы
Картинка размыта, обрезана или уехала на другую страницу
Картинка появляется при каждом формировании
Изображение пропадает — значит, оно было вставлено вручную или ссылается на внешний файл
При отсутствии картинки в базе форма выводится без ошибок
Возникает исключение при обращении к пустому хранилищу
Если все четыре проверки пройдены, решение можно считать рабочим. Для массовых печатных форм дополнительно стоит проверить формирование документа с большим числом строк — убедиться, что рисунки не замедляют вывод заметным образом.
Что важно запомнить
Статичные изображения размещайте в макете, динамические — выводите программно через коллекцию Рисунки после вывода областей. Размеры рисунка задавайте в миллиметрах с сохранением пропорций, данные из хранилища всегда проверяйте на Неопределено, а результат контролируйте в предварительном просмотре печати.
Частые вопросы
Можно ли вставить картинку прямо в ячейку, как в Excel?
Нет, в табличном документе 1С изображение всегда является отдельным объектом-рисунком, привязанным к координатам или области. Максимально близкий аналог — разместить рисунок поверх ячейки и задать ему размеры, равные размерам этой ячейки.
Как вывести фото товара из справочника в прайс-лист?
Храните фото в реквизите справочника типа «Хранилище значений». При формировании прайса в цикле по товарам извлекайте двоичные данные методом Получить(), создавайте объект Картинка и добавляйте рисунок в табличный документ с рассчитанными координатами для текущей строки.
Почему картинка видна на экране, но не печатается?
Чаще всего причина в том, что рисунок выходит за границы печатной области или ссылается на недоступный внешний файл. Проверьте предварительный просмотр: если там картинки тоже нет, встройте изображение в конфигурацию или в документ и проверьте координаты рисунка.
Какие форматы изображений поддерживает 1С?
Объект Картинка работает с распространёнными растровыми форматами: PNG, JPEG, BMP, GIF, а также с некоторыми другими в зависимости от версии платформы. Для печатных форм предпочтителен PNG — он сохраняет чёткость и поддерживает прозрачность.
Как вставить QR-код в печатную форму?
QR-код сначала генерируется внешней компонентой или сервисом как изображение, затем вставляется тем же программным способом: создаётся объект Картинка из двоичных данных и добавляется рисунок в табличный документ. Отдельного типа рисунка «QR-код» в платформе нет.
Замедляет ли большое количество картинок формирование документа?
Да, десятки изображений с высоким разрешением заметно увеличивают время формирования и размер файла. Для прайсов и каталогов заранее уменьшайте фото до размера, достаточного для печати, — обычно хватает нескольких сотен пикселей по ширине.