Работа с графическими элементами в платформе 1С:Предприятие 7.7 существенно отличается от современных версий 8.x. Одной из часто встречающихся задач является визуализация статусов или состояний строк в объекте ТаблицаЗначений. Для этого используется специальный набор пиктограмм, объединенных в один файл. В этой статье мы подробно разберем, как подготовить такой файл, соблюдая все технические требования устаревшей, но все еще используемой платформы.
Прежде чем приступать к "склеиванию" иконок, проанализируем жесткие ограничения, которые накладывает система 1С 7.7 на графические файлы. Несоблюдение этих правил приведет к тому, что картинки будут отображаться серыми, инвертированными или с "грязным" фоном.
Рассмотрим ситуацию, когда у вас есть несколько отдельных файлов иконок, и их нужно собрать в единую ленту. Проанализируем наиболее простой способ сделать это с помощью любого графического редактора (даже стандартного Paint, хотя лучше использовать более продвинутые инструменты с поддержкой сетки).
Шаг 1. Подготовка холста. Выясним количество иконок, которые нам нужны. Если их 5, то создаем новый файл размером 75 на 16 пикселей (15 пикселей ширины на каждый элемент). Важно, чтобы между иконками не было разделительных линий или пустых пикселей.
Шаг 2. Копирование элементов. Последовательно открываем каждую иконку и вставляем ее в наш общий файл. Разберем по шагам: первая иконка занимает координаты от 0 до 14 по горизонтали, вторая — от 15 до 29 и так далее. Контролируйте, чтобы края иконок не накладывались друг на друга.
Шаг 3. Установка прозрачности. Посмотрим на фон. В 1С 7.7 нет понятия прозрачного слоя в привычном смысле. Система считает прозрачным один конкретный цвет. Чаще всего это ярко-бирюзовый (Fuchsia или Cyan) или стандартный серый цвет Windows RGB (192, 192, 192). Рассмотрим секрет опытных разработчиков: система часто определяет цвет прозрачности по нижнему левому пикселю картинки. Убедитесь, что фон вокруг ваших значков залит однородным цветом, который вы хотите сделать прозрачным.
Выясним причину, по которой иконки часто выглядят "испорченными" после сохранения. Проблема в индексированных цветах. Проанализируем использование штатной утилиты 1cv7ie.exe (1C Icon Editor). Этот инструмент входил в состав дисков ИТС и специально предназначен для создания библиотек картинок 1С.
Если вы используете этот редактор, процесс упрощается: вы можете импортировать готовые картинки, и программа сама приведет их к стандартной палитре 1С. Если же вы рисуете в Photoshop или GIMP, обязательно переведите режим изображения в "Indexed Color" перед сохранением и выберите палитру Windows System.
Теперь разберем, как подключить созданный файл к вашей ТаблицеЗначений в конфигурации. Проанализируем последовательность действий в конфигураторе:
ТаблицаЗначений.Теперь посмотрим на пример программного кода, который управляет отображением конкретной картинки в зависимости от условий задачи.
// Предположим, у нас есть ТЗ с колонкой "СтатусКартинка"
// В свойствах этой колонки стоит флаг "Пиктограммы"
// 0 - иконка не выводится, 1 - первая иконка в ленте, 2 - вторая и т.д.
ТЗ.НоваяСтрока();
Если ТекущийСтатус = "Оплачено" Тогда
ТЗ.СтатусКартинка = 1; // Зеленая иконка
ИначеЕсли ТекущийСтатус = "Ошибка" Тогда
ТЗ.СтатусКартинка = 2; // Красная иконка
Иначе
ТЗ.СтатусКартинка = 3; // Желтая иконка
КонецЕсли;
Рассмотрим важный нюанс: если в ячейке будет стоять значение 0, пиктограмма отображаться не будет. Это удобно использовать для пустых строк или строк-заголовков. Если же иконка отображается не тем цветом, проанализируем еще раз настройки монитора и глубину цвета файла — 1С 7.7 крайне чувствительна к видеорежимам операционной системы.
Поскольку размер 15x16 очень мал, постараемся избегать мелких деталей и градиентов. Используйте чистые цвета. Чтобы края иконки не казались "рваными", не используйте сглаживание (anti-aliasing) при рисовании на прозрачном фоне, так как 1С 7.7 не умеет смешивать цвет маски с цветом фона таблицы. Разберем ситуацию: если вы нарисуете круг со сглаженными краями на бирюзовом фоне, при выводе в 1С вокруг круга останется бирюзовый "ореол". Рисуйте "пиксель в пиксель", чтобы результат выглядел профессионально.