При разработке интерфейсов на платформе 1С:Предприятие 7.7 программисты часто сталкиваются с необходимостью наглядного отображения информации. Отличным решением является вывод графических иконок (пиктограмм) непосредственно в ячейках таблицы значений (ТЗ). Например, это незаменимо для отображения статуса документов: проведен, не проведен, помечен на удаление или закрыт для редактирования.
В этой статье мы подробно разберем, как подготовить графические файлы, настроить свойства элемента управления в Конфигураторе, написать правильный программный код с использованием метода ВыводитьПиктограммы, а также реализуем интерактивное изменение статусов по клику мыши.
Прежде чем приступать к конфигурированию, необходимо подготовить графический файл, который будет содержать набор иконок. Платформа 1С 7.7 предъявляет к нему жесткие технические требования:
1cv7.exe. Она позволяет выравнивать иконки по сетке и упорядочивать их структуру.Для того чтобы связать подготовленный файл картинок с конкретной таблицей значений на форме, выполним следующие действия:
СтатусЧисло.Для включения режима отображения картинок используется встроенный метод платформы. Рассмотрим подробнее его синтаксис:
ТЗ.ВыводитьПиктограммы(<Колонка>, <Пиктограмма>);
<Колонка> — идентификатор (строка) или номер колонки ТЗ, в которой хранятся индексы картинок.<Пиктограмма> — необязательный параметр, задающий начальный номер (точку отсчета) картинки из нашей ленты. По умолчанию равен 1.Важно понимать математику расчета индекса отображаемой пиктограммы. Платформа вычисляет индекс картинки в ленте по следующей формуле:
ИндексКартинки = ЗначениеВЯчейке + НачальныйНомер - 1
Разберем, как это работает на практических примерах, если в нашей ленте загружены 3 пиктограммы (1-я — серый кружок, 2-я — зеленая галочка, 3-я — красный крестик):
Вариант А. Начальный номер равен 1 (по умолчанию):
Код инициализации: ТЗ.ВыводитьПиктограммы("СтатусЧисло", 1);
0: картинка отображаться не будет вообще (пустая ячейка).1: отобразится 1-я пиктограмма (серый кружок), так как 1 + 1 - 1 = 1.2: отобразится 2-я пиктограмма (зеленая галочка).Вариант Б. Начальный номер равен 2 (сдвиг):
Код инициализации: ТЗ.ВыводитьПиктограммы("СтатусЧисло", 2);
0: отобразится 1-я пиктограмма (серый кружок), так как 0 + 2 - 1 = 1.1: отобразится 2-я пиктограмма (зеленая галочка), так как 1 + 2 - 1 = 2.2: отобразится 3-я пиктограмма (красный крестик).Использование сдвига (параметр равен 2) крайне удобно, когда по умолчанию (при значении 0) в ячейке обязательно должна отображаться первая картинка из ленты, чтобы избежать появления пустых мест в таблице.
Проанализируем пример кода, в котором мы создаем таблицу значений, настраиваем колонки, связываем пиктограммы и заполняем таблицу документами с установкой соответствующих статусов:
// Создаем таблицу значений
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Документ", "Документ");
ТЗ.НоваяКолонка("СтатусКартинка", "Число", 1, 0); // Колонка для вывода пиктограммы
ТЗ.НоваяКолонка("НомерДок", "Строка");
// Указываем колонку для вывода пиктограмм со сдвигом 1 (по умолчанию)
ТЗ.ВыводитьПиктограммы("СтатусКартинка", 1);
// Выборка документов для демонстрации наполнения ТЗ
Выборка = СоздатьОбъект("Документ.Реализация");
Выборка.ВыбратьДокументы(НачДата, КонДата);
Пока Выборка.ПолучитьДокумент() = 1 Цикл
ТЗ.НоваяСтрока();
ТЗ.Документ = Выборка.ТекущийДокумент();
ТЗ.НомерДок = Выборка.НомерДок;
// Определяем статус и записываем соответствующее число в ТЗ:
// 1 - проведен (первая пиктограмма в ленте)
// 2 - не проведен (вторая пиктограмма)
// 3 - помечен на удаление (третья пиктограмма)
Если Выборка.ПометкаУдаления() = 1 Тогда
ТЗ.СтатусКартинка = 3;
ИначеЕсли Выборка.Проведен() = 1 Тогда
ТЗ.СтатусКартинка = 1;
Иначе
ТЗ.СтатусКартинка = 2;
КонецЕсли;
КонецЦикла;
Поскольку стандартный элемент диалога «ТаблицаЗначений» на форме 1С 7.7 не предоставляет разработчику прямого предопределенного события «ПриКликеНаЯчейку», мы можем легко обойти это ограничение через механизм формулы элемента.
Разберем этот алгоритм по шагам:
ПриВыбореСтрокиТЗ().ТекущаяСтрока и ТекущаяКолонка.Посмотрим на пример реализации интерактивной "галочки", которая меняет свое состояние при клике на колонку с пиктограммой:
Процедура ПриВыбореСтрокиТЗ()
Перем ИмяКолонки;
НомСтроки = ТЗ.ТекущаяСтрока();
// Если кликнули по пустой области ТЗ
Если НомСтроки = 0 Тогда
Возврат;
КонецЕсли;
// Получаем имя колонки, на которую пришелся клик
ТЗ.ТекущаяКолонка(ИмяКолонки);
// Если пользователь кликнул по интерактивной колонке статуса
Если ИмяКолонки = "СтатусКартинка" Тогда
ТекущийСтатус = ТЗ.ПолучитьЗначение(НомСтроки, "СтатусКартинка");
// Меняем значение (например, переключаем галочку: с 1 на 2 и наоборот)
Если ТекущийСтатус = 1 Тогда
НовыйСтатус = 2;
Иначе
НовыйСтатус = 1;
КонецЕсли;
ТЗ.УстановитьЗначение(НомСтроки, "СтатусКартинка", НовыйСтатус);
// Принудительно обновляем отображение формы
Форма.Обновить(0);
КонецЕсли;
КонецПроцедуры
Часто разработчики путают механизмы вывода картинок в Таблице Значений и в Табличной Части (многострочной части) документа. Выясним принципиальную разницу:
ВыводитьПиктограммы() предназначен исключительно для элемента диалога типа «ТаблицаЗначений». Попытка вызвать его для табличной части документа вызовет ошибку времени выполнения.Стандартный механизм вывода пиктограмм в 1С 7.7 имеет ряд ограничений: нельзя гибко изменять высоту строк (из-за чего иконки размером 16x15 пикселей могут выглядеть мелко), отсутствуют встроенные механизмы раскраски строк и ячеек. Если перед вами стоит задача создать современный и функциональный интерфейс, рекомендуем обратить внимание на популярные внешние компоненты:
ТабличноеПоле (Grid). Он заменяет стандартную ТЗ на полноценный высокопроизводительный табличный элемент управления. С его помощью можно выводить иконки любого разрешения, организовывать древовидные структуры данных и работать напрямую с базой данных SQL на высокой скорости.