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

Важно понимать, что подход зависит от контекста использования картинки:

  • 📄 В макетах печатных форм (например, для счетов или договоров) — потребуется предварительная обработка изображения.
  • 📊 В отчетах (СКД, компоновщик данных) — можно использовать настройки стилей или программное вмешательство.
  • 🎨 В управляемых формах — прозрачность настраивается через свойства элементов.

Рассмотрим каждый случай подробно, с примерами кода и визуальными инструкциями.

📊 Где вам чаще всего нужно убирать фон у картинок в 1С?
В печатных формах
В отчетах (СКД)
В управляемых формах
При экспорте данных
Другой вариант

1. Подготовка изображения во внешнем редакторе (рекомендуемый способ)

Самый надежный метод — заранее удалить фон в графическом редакторе и загрузить в 1С уже обработанную картинку. Это гарантирует корректное отображение на всех устройствах и при печати.

Для этого подойдут:

  • 🖥️ Adobe Photoshop — инструмент Magic Eraser или Background Eraser (точная обводка контура).
  • 💻 GIMP (бесплатный аналог) — функция Fuzzy Select Tool + удаление слоя.
  • 🌐 Онлайн-сервисы: Remove.bg, Canva (автоматическое удаление фона за 5 секунд).

После обработки сохраните изображение в формате .PNG (поддерживает прозрачность) и загрузите в 1С через:

// Пример загрузки картинки в справочник "Логотипы"

Логотип = Справочники.Логотипы.СоздатьЭлемент();

Логотип.Наименование = "Логотип с прозрачным фоном";

Логотип.Картинка = Новый Картинка(ПутьКФайлу); // Например, "C:\logo_transparent.png"

Логотип.Записать();

⚠️ Внимание: Если картинка используется в печатной форме, проверьте настройки принтера — некоторые драйверы игнорируют прозрачность при растрировании. Тестируйте на целевом оборудовании!

2. Настройка прозрачности в макетах печатных форм

Если изображение уже загружено в 1С, но фон нужно убрать непосредственно в макете печатной формы, используйте свойства элемента ПолеКартинки:

  1. Откройте макет в конструкторе печатной формы (например, для документа "Счет на оплату").
  2. Выделите элемент с картинкой и в панели свойств найдите параметр ПрозрачныйФон.
  3. Установите значение Истина.
  4. Для точной настройки используйте свойство ЦветФона — задайте Новый Цвет(255, 255, 255, 0) (последний параметр — альфа-канал, 0 = полностью прозрачный).

Пример кода для программной настройки:

Макет = Документ.ПечатнаяФорма.ПолучитьМакет("Макет");

ЭлементМакет = Макет.Элементы.Найти("Логотип");

ЭлементМакет.ПрозрачныйФон = Истина;

ЭлементМакет.ЦветФона = Новый Цвет(255, 255, 255, 0);

Формат изображения Поддержка прозрачности Рекомендации по использованию в 1С
.PNG ✅ Да (альфа-канал) Оптимальный выбор для логотипов и водяных знаков.
.GIF ✅ Да (бинарная прозрачность) Подходит для простых изображений, но ограничен 256 цветами.
.JPEG ❌ Нет Не используйте, если нужна прозрачность.
.BMP ❌ Нет Устаревший формат, не рекомендуется.
⚠️ Внимание: В управляемых формах свойство ПрозрачныйФон может конфликтовать с настройками стиля формы. Если картинка отображается с артефактами, проверьте параметр ИспользоватьСтили в корневом элементе формы.

3. Программное удаление фона через обработку картинки

Для автоматизации можно написать обработку на встроенном языке, которая будет удалять фон у загруженных изображений. Этот метод подходит, если у вас много картинок с одинаковым фоном (например, белым).

Алгоритм:

  1. Получите пиксели картинки через ПолучитьРастр().
  2. Пройдитесь по пикселям и замените цвет фона на прозрачный.
  3. Сохраните результат в новом файле .PNG.

Пример кода:

Функция УдалитьФон(Картинка, ЦветФона)

Растр = Картинка.ПолучитьРастр();

Ширина = Растр.Ширина();

Высота = Растр.Высота();

Для Y = 0 По Высота - 1 Цикл

Для X = 0 По Ширина - 1 Цикл

Пиксель = Растр.ПолучитьПиксель(X, Y);

Если Пиксель = ЦветФона Тогда

Растр.УстановитьПиксель(X, Y, Новый Цвет(0, 0, 0, 0)); // Прозрачный пиксель

КонецЕсли;

КонецЦикла;

КонецЦикла;

Результат = Новый Картинка(Растр);

Возврат Результат;

КонецФункции

// Пример использования:

ИсходнаяКартинка = Новый Картинка(ПутьКФайлу);

ЦветФона = Новый Цвет(255, 255, 255); // Белый фон

КартинкаБезФона = УдалитьФон(ИсходнаяКартинка, ЦветФона);

КартинкаБезФона.Записать("C:\logo_transparent.png");

Ограничения метода:

  • 🔍 Работает только для однородного фона (например, чисто белого или черного).
  • ⏳ Медленная обработка больших изображений (оптимизируйте код для растров > 2000px).
  • 🎨 Не подходит для сложных фонов (градиенты, узоры).

Определите точный цвет фона в RGB|Создайте резервную копию исходных картинок|Проверьте права на запись в папку вывода|Тестируйте на небольшом изображении

-->

4. Использование стилей в отчетах (СКД)

В системе компоновки данных (СКД) прозрачность картинки настраивается через условное оформление. Например, чтобы убрать белый фон у логотипа в отчете:

  1. Откройте схему компоновки данных в конструкторе.
  2. Перейдите на закладку ОформлениеУсловное оформление.
  3. Добавьте новое правило для элемента с картинкой.
  4. В настройках стиля установите:
    • 🎨 Фон: Прозрачный
    • 🖼️ Цвет фона: (нет)

Пример настройки через код:

Отчет = Отчеты.ВашОтчет.Создать();

Схема = Отчет.СхемаКомпоновкиДанных;

Элемент = Схема.Элементы.Найти("Логотип");

Стиль = Новый СтильОформления();

Стиль.ФонПрозрачный = Истина;

Стиль.ЦветФона = Неопределено;

УсловноеОформление = Новый УсловноеОформлениеКомпоновкиДанных();

УсловноеОформление.Условие = Новый Условие("Истина");

УсловноеОформление.Оформление = Стиль;

Элемент.УсловноеОформление.Добавить(УсловноеОформление);

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

УсловноеОформление.Условие = Новый Условие("Выборка.Сумма > 10000");

5. Прозрачность в управляемых формах

В управляемых формах (например, в 1С:ERP или 1С:УТ) прозрачность элемента ПолеКартинки настраивается через:

  1. Свойство ПрозрачныйФон (установите Истина).
  2. Свойство ЦветФона — задайте Новый Цвет(0, 0, 0, 0).
  3. Если картинка в ПолеHTMLДокумента, используйте CSS-стиль:
    ЭлементФормы.HTML = "<img src='путь' style='background: transparent;'>";
  4. Пример для динамического изменения прозрачности:

    Процедура ПриИзменении(Элемент)
    

    Если Элементы.ЧекБоксПрозрачность.Значение Тогда

    Элементы.Картинка.ПрозрачныйФон = Истина;

    Элементы.Картинка.ЦветФона = Новый Цвет(0, 0, 0, 0);

    Иначе

    Элементы.Картинка.ПрозрачныйФон = Ложь;

    Элементы.Картинка.ЦветФона = Новый Цвет(255, 255, 255);

    КонецЕсли;

    КонецПроцедуры

    ⚠️ Внимание: В тонком клиенте и веб-клиенте отображение прозрачности может отличаться из-за особенностей рендеринга браузера. Всегда тестируйте в целевой среде!
    💡

    Если картинка отображается с серым фоном вместо прозрачного, проверьте настройки операционной системы — в Windows включите параметр "Прозрачные эффекты" в разделе "Специальные возможности" → "Эффекты прозрачности".

    6. Альтернативные решения: внешние компоненты и библиотеки

    Если стандартные методы не подходят, рассмотрите интеграцию с внешними инструментами:

    • 📦 Библиотека OneScript.ImageMagick — позволяет обрабатывать изображения через скрипты с поддержкой альфа-канала.
    • 🔧 Компонента "1С:Предприятие + GraphViz" — для векторной графики с прозрачностью.
    • 🌐 API внешних сервисов (например, remove.bg) — автоматизируйте удаление фона через HTTP-запросы.

    Пример вызова внешнего API для удаления фона:

    Функция УдалитьФонЧерезAPI(ПутьКФайлу)
    

    Запрос = Новый HTTPЗапрос("https://api.remove.bg/v1.0/removebg");

    Запрос.УстановитьЗаголовок("X-Api-Key", "ВАШ_KЛЮЧ_API");

    Запрос.УстановитьТекст(Новый ДвоичныеДанные(ПутьКФайлу));

    Ответ = Новый HTTPСоединение().Получить(Запрос);

    Если Ответ.КодСостояния = 200 Тогда

    Результат = Новый Картинка(Ответ.ПолучитьТелоКакДвоичныеДанные());

    Результат.Записать("C:\result_no_bg.png");

    Возврат Результат;

    Иначе

    ВызватьИсключение "Ошибка API: " + Ответ.КодСостояния;

    КонецЕсли;

    КонецФункции

    Преимущества метода:

    • ✅ Высокая точность удаления фона (в том числе для сложных изображений).
    • ⚡ Быстрая обработка (API обрабатывает картинку за 1–3 секунды).

Недостатки:

  • 💰 Платное API (бесплатный тариф ограничен 50 запросами/месяц).
  • 🔌 Требует интернет-соединения.
  • Как получить API-ключ для remove.bg?

    1. Зарегистрируйтесь на сайте remove.bg.

    2. Перейдите в раздел "API" в личном кабинете.

    3. Сгенерируйте ключ и скопируйте его в код.

    4. Убедитесь, что у вас достаточно кредитов для запросов (1 кредит = 1 изображение).

    Сравнение методов: какой выбрать?

    Метод Сложность Точность Когда использовать
    Внешний редактор ⭐⭐⭐⭐⭐ Для разовых задач или подготовки шаблонов.
    Макеты печатных форм ⭐⭐ ⭐⭐⭐ Если фон однородный и картинка статичная.
    Программная обработка ⭐⭐⭐ ⭐⭐ Для пакетной обработки изображений с простым фоном.
    СКД (отчеты) ⭐⭐ ⭐⭐⭐ Для динамического управления прозрачностью в отчетах.
    Внешние API ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ Для сложных изображений или автоматизации.
    💡

    Для большинства задач в 1С оптимально заранее подготовить картинку во внешнем редакторе и загрузить её в формате PNG. Это гарантирует корректное отображение во всех клиентах (тонкий, веб, мобильный).

    FAQ: Частые вопросы

    Можно ли сделать прозрачный фон у картинки в 1С:Бухгалтерии 8.3 без программирования?

    Да, в 1С:Бухгалтерии 8.3 для печатных форм (например, счетов или актов) достаточно:

    1. Открыть макет печатной формы в режиме редактирования.
    2. Выделить элемент с картинкой.
    3. В свойствах установить ПрозрачныйФон = Истина.
    4. Убедиться, что картинка изначально в формате .PNG с прозрачностью.

Если фон остается, проверьте, что в настройках принтера не включен режим "Печать фона" (иногда называется "Печать графики").

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

Это типичная проблема при сохранении .PNG с альфа-каналом. Причины и решения:

  • 🖥️ Неправильный формат: Убедитесь, что сохраняете как PNG-24 (не PNG-8).
  • 🔧 Настройки 1С: В макете печатной формы проверьте, что свойство ЦветФона не переопределяет прозрачность.
  • 🖨️ Драйвер принтера: Некоторые драйверы заменяют прозрачность на черный цвет. Попробуйте экспортировать отчет в PDF и распечатать оттуда.

Чтобы проверить картинку, откройте её в браузере — если фон прозрачный, проблема в 1С или принтере.

Как сделать прозрачным фон у динамически подгружаемой картинки в отчете?

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

// В модуле отчета

Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, ДанныеВывода, ПараметрыВывода)

Для Каждого Элемент Из ДанныеВывода.Элементы Цикл

Если Элемент.Тип = Тип("Картинка") Тогда

Элемент.Оформление.ФонПрозрачный = Истина;

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Для динамического управления прозрачностью в зависимости от данных используйте выражения вида:

Элемент.Оформление.ФонПрозрачный = (Выборка.СуммаДокумента > 100000);
Поддерживает ли 1С:Мобильное приложение прозрачность картинок?

Да, но с оговорками:

  • ✅ В мобильном клиенте 1С:Предприятие прозрачность .PNG поддерживается, но может отображаться с артефактами на старых устройствах.
  • ⚠️ В 1С:Мобильная платформа (для Android/iOS) прозрачность работает только если картинка загружается через ПолеКартинки с включенным свойством ПрозрачныйФон.
  • 📱 Для фоновых изображений в мобильных формах используйте ПолеHTMLДокумента с CSS-стилем background: transparent.
  • Тестируйте на целевых устройствах — рендеринг может отличаться из-за особенностей ОС.

Можно ли автоматизировать удаление фона для сотен картинок в 1С?

Да, для этого подойдет пакетная обработка через:

  1. Внешний скрипт на Python с библиотекой Pillow:
    from PIL import Image
    

    import os

    for filename in os.listdir("input"):

    img = Image.open(f"input/{filename}")

    img = img.convert("RGBA")

    data = img.getdata()

    new_data = []

    for item in data:

    if item[0] > 200 and item[1] > 200 and item[2] > 200: # Белый фон

    new_data.append((255, 255, 255, 0))

    else:

    new_data.append(item)

    img.putdata(new_data)

    img.save(f"output/{filename}", "PNG")

  2. Обработка в 1С (см. раздел 3 статьи), но для большого количества изображений это будет медленно.
  3. API-сервисы (например, remove.bg) с пакетной загрузкой.

Для интеграции с 1С сохраните обработанные картинки в каталог и обновите ссылки в базе через запрос:

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Ссылка КАК Ссылка ИЗ Справочник.Картинки";

Результат = Запрос.Выполнить();

Пока Результат.Следующий() Цикл

Объект = Результат.Ссылка.ПолучитьОбъект();

Объект.Картинка = Новый Картинка("output/" + Объект.ИмяФайла);

Объект.Записать();

КонецЦикла;