Работа с графикой в 1С:Предприятие часто требует тонкой настройки внешнего вида отчетов, печатных форм или интерфейсных элементов. Одна из распространенных задач — сделать фон картинки прозрачным, чтобы логотип компании, водяной знак или декоративный элемент органично вписывались в документ. Однако стандартные инструменты платформы не всегда предоставляют прямые функции для удаления фона. В этой статье разберем 5 рабочих методов, включая обработку изображений через встроенные механизмы 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С, но фон нужно убрать непосредственно в макете печатной формы, используйте свойства элемента ПолеКартинки:
- Откройте макет в конструкторе печатной формы (например, для документа "Счет на оплату").
- Выделите элемент с картинкой и в панели свойств найдите параметр
ПрозрачныйФон. - Установите значение
Истина. - Для точной настройки используйте свойство
ЦветФона— задайтеНовый Цвет(255, 255, 255, 0)(последний параметр — альфа-канал,0= полностью прозрачный).
Пример кода для программной настройки:
Макет = Документ.ПечатнаяФорма.ПолучитьМакет("Макет");
ЭлементМакет = Макет.Элементы.Найти("Логотип");
ЭлементМакет.ПрозрачныйФон = Истина;
ЭлементМакет.ЦветФона = Новый Цвет(255, 255, 255, 0);
| Формат изображения | Поддержка прозрачности | Рекомендации по использованию в 1С |
|---|---|---|
.PNG |
✅ Да (альфа-канал) | Оптимальный выбор для логотипов и водяных знаков. |
.GIF |
✅ Да (бинарная прозрачность) | Подходит для простых изображений, но ограничен 256 цветами. |
.JPEG |
❌ Нет | Не используйте, если нужна прозрачность. |
.BMP |
❌ Нет | Устаревший формат, не рекомендуется. |
⚠️ Внимание: В управляемых формах свойствоПрозрачныйФонможет конфликтовать с настройками стиля формы. Если картинка отображается с артефактами, проверьте параметрИспользоватьСтилив корневом элементе формы.
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. Использование стилей в отчетах (СКД)
В системе компоновки данных (СКД) прозрачность картинки настраивается через условное оформление. Например, чтобы убрать белый фон у логотипа в отчете:
- Откройте схему компоновки данных в конструкторе.
- Перейдите на закладку
Оформление→Условное оформление. - Добавьте новое правило для элемента с картинкой.
- В настройках стиля установите:
- 🎨
Фон: Прозрачный - 🖼️
Цвет фона: (нет)
- 🎨
Пример настройки через код:
Отчет = Отчеты.ВашОтчет.Создать();
Схема = Отчет.СхемаКомпоновкиДанных;
Элемент = Схема.Элементы.Найти("Логотип");
Стиль = Новый СтильОформления();
Стиль.ФонПрозрачный = Истина;
Стиль.ЦветФона = Неопределено;
УсловноеОформление = Новый УсловноеОформлениеКомпоновкиДанных();
УсловноеОформление.Условие = Новый Условие("Истина");
УсловноеОформление.Оформление = Стиль;
Элемент.УсловноеОформление.Добавить(УсловноеОформление);
Для динамического управления прозрачностью (например, в зависимости от данных отчета) используйте выражения в условии:
УсловноеОформление.Условие = Новый Условие("Выборка.Сумма > 10000");
5. Прозрачность в управляемых формах
В управляемых формах (например, в 1С:ERP или 1С:УТ) прозрачность элемента ПолеКартинки настраивается через:
- Свойство
ПрозрачныйФон(установитеИстина). - Свойство
ЦветФона— задайтеНовый Цвет(0, 0, 0, 0). - Если картинка в
ПолеHTMLДокумента, используйте CSS-стиль:ЭлементФормы.HTML = "<img src='путь' style='background: transparent;'>"; - 📦 Библиотека OneScript.ImageMagick — позволяет обрабатывать изображения через скрипты с поддержкой альфа-канала.
- 🔧 Компонента "1С:Предприятие + GraphViz" — для векторной графики с прозрачностью.
- 🌐 API внешних сервисов (например,
remove.bg) — автоматизируйте удаление фона через HTTP-запросы. - ✅ Высокая точность удаления фона (в том числе для сложных изображений).
- ⚡ Быстрая обработка (API обрабатывает картинку за 1–3 секунды).
Пример для динамического изменения прозрачности:
Процедура ПриИзменении(Элемент)
Если Элементы.ЧекБоксПрозрачность.Значение Тогда
Элементы.Картинка.ПрозрачныйФон = Истина;
Элементы.Картинка.ЦветФона = Новый Цвет(0, 0, 0, 0);
Иначе
Элементы.Картинка.ПрозрачныйФон = Ложь;
Элементы.Картинка.ЦветФона = Новый Цвет(255, 255, 255);
КонецЕсли;
КонецПроцедуры
⚠️ Внимание: В тонком клиенте и веб-клиенте отображение прозрачности может отличаться из-за особенностей рендеринга браузера. Всегда тестируйте в целевой среде!
Если картинка отображается с серым фоном вместо прозрачного, проверьте настройки операционной системы — в Windows включите параметр "Прозрачные эффекты" в разделе "Специальные возможности" → "Эффекты прозрачности".
6. Альтернативные решения: внешние компоненты и библиотеки
Если стандартные методы не подходят, рассмотрите интеграцию с внешними инструментами:
Пример вызова внешнего API для удаления фона:
Функция УдалитьФонЧерезAPI(ПутьКФайлу)
Запрос = Новый HTTPЗапрос("https://api.remove.bg/v1.0/removebg");
Запрос.УстановитьЗаголовок("X-Api-Key", "ВАШ_KЛЮЧ_API");
Запрос.УстановитьТекст(Новый ДвоичныеДанные(ПутьКФайлу));
Ответ = Новый HTTPСоединение().Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Результат = Новый Картинка(Ответ.ПолучитьТелоКакДвоичныеДанные());
Результат.Записать("C:\result_no_bg.png");
Возврат Результат;
Иначе
ВызватьИсключение "Ошибка API: " + Ответ.КодСостояния;
КонецЕсли;
КонецФункции
Преимущества метода:
Недостатки:
- 💰 Платное API (бесплатный тариф ограничен 50 запросами/месяц).
- 🔌 Требует интернет-соединения.
- Открыть макет печатной формы в режиме редактирования.
- Выделить элемент с картинкой.
- В свойствах установить
ПрозрачныйФон = Истина. - Убедиться, что картинка изначально в формате
.PNGс прозрачностью.
Как получить API-ключ для remove.bg?
1. Зарегистрируйтесь на сайте remove.bg.
2. Перейдите в раздел "API" в личном кабинете.
3. Сгенерируйте ключ и скопируйте его в код.
4. Убедитесь, что у вас достаточно кредитов для запросов (1 кредит = 1 изображение).
Сравнение методов: какой выбрать?
| Метод | Сложность | Точность | Когда использовать |
|---|---|---|---|
| Внешний редактор | ⭐ | ⭐⭐⭐⭐⭐ | Для разовых задач или подготовки шаблонов. |
| Макеты печатных форм | ⭐⭐ | ⭐⭐⭐ | Если фон однородный и картинка статичная. |
| Программная обработка | ⭐⭐⭐ | ⭐⭐ | Для пакетной обработки изображений с простым фоном. |
| СКД (отчеты) | ⭐⭐ | ⭐⭐⭐ | Для динамического управления прозрачностью в отчетах. |
| Внешние API | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Для сложных изображений или автоматизации. |
Для большинства задач в 1С оптимально заранее подготовить картинку во внешнем редакторе и загрузить её в формате PNG. Это гарантирует корректное отображение во всех клиентах (тонкий, веб, мобильный).
FAQ: Частые вопросы
Можно ли сделать прозрачный фон у картинки в 1С:Бухгалтерии 8.3 без программирования?
Да, в 1С:Бухгалтерии 8.3 для печатных форм (например, счетов или актов) достаточно:
Если фон остается, проверьте, что в настройках принтера не включен режим "Печать фона" (иногда называется "Печать графики").
Почему после удаления фона в Photoshop картинка в 1С отображается с черным фоном?
Это типичная проблема при сохранении .PNG с альфа-каналом. Причины и решения:
- 🖥️ Неправильный формат: Убедитесь, что сохраняете как
PNG-24(неPNG-8). - 🔧 Настройки 1С: В макете печатной формы проверьте, что свойство
ЦветФонане переопределяет прозрачность. - 🖨️ Драйвер принтера: Некоторые драйверы заменяют прозрачность на черный цвет. Попробуйте экспортировать отчет в
PDFи распечатать оттуда.
Чтобы проверить картинку, откройте её в браузере — если фон прозрачный, проблема в 1С или принтере.
Как сделать прозрачным фон у динамически подгружаемой картинки в отчете?
Если картинка подгружается из базы данных (например, логотип контрагента), используйте условное оформление в СКД:
// В модуле отчета
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, ДанныеВывода, ПараметрыВывода)
Для Каждого Элемент Из ДанныеВывода.Элементы Цикл
Если Элемент.Тип = Тип("Картинка") Тогда
Элемент.Оформление.ФонПрозрачный = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Для динамического управления прозрачностью в зависимости от данных используйте выражения вида:
Элемент.Оформление.ФонПрозрачный = (Выборка.СуммаДокумента > 100000);
Поддерживает ли 1С:Мобильное приложение прозрачность картинок?
Да, но с оговорками:
- ✅ В мобильном клиенте 1С:Предприятие прозрачность
.PNGподдерживается, но может отображаться с артефактами на старых устройствах. - ⚠️ В 1С:Мобильная платформа (для Android/iOS) прозрачность работает только если картинка загружается через
ПолеКартинкис включенным свойствомПрозрачныйФон. - 📱 Для фоновых изображений в мобильных формах используйте
ПолеHTMLДокументас CSS-стилемbackground: transparent.
Тестируйте на целевых устройствах — рендеринг может отличаться из-за особенностей ОС.
Можно ли автоматизировать удаление фона для сотен картинок в 1С?
Да, для этого подойдет пакетная обработка через:
- Внешний скрипт на Python с библиотекой Pillow:
from PIL import Imageimport 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")
- Обработка в 1С (см. раздел 3 статьи), но для большого количества изображений это будет медленно.
- API-сервисы (например, remove.bg) с пакетной загрузкой.
Для интеграции с 1С сохраните обработанные картинки в каталог и обновите ссылки в базе через запрос:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка КАК Ссылка ИЗ Справочник.Картинки";
Результат = Запрос.Выполнить();
Пока Результат.Следующий() Цикл
Объект = Результат.Ссылка.ПолучитьОбъект();
Объект.Картинка = Новый Картинка("output/" + Объект.ИмяФайла);
Объект.Записать();
КонецЦикла;