Как вывести несколько пиктограмм в разных колонках таблицы на форме в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Разберем распространенную задачу при разработке внешних отчетов и обработок в платформе 1С 7.7: вывод нескольких различных пиктограмм (иконок) в разных колонках элемента диалога ТаблицаЗначений.

В чем заключается проблема

В платформе 1С 7.7 к объекту ТаблицаЗначений на форме можно привязать только одну полосу картинок (картинку-ленту в формате BMP). Когда возникает необходимость показывать статусные значки сразу в нескольких колонках (например, в первой колонке — пометку документа, а во второй — статус контроля), разработчики часто сталкиваются с ошибками отображения или неверным расчетом индексов пиктограмм.

Решение: объединенная лента пиктограмм

Сформулируем основной принцип: поскольку к таблице привязывается единый файл иконки, все требуемые значки необходимо объединить («склеить») в одну горизонтальную полосу изображений.

Рассмотрим требования к файлу пиктограмм:

  1. Формат файла должен быть строго .bmp.
  2. Кадры должны иметь стандартный размер 16×15 пикселей (ширина × высота).
  3. Общая картинка представляет собой единую горизонтальную ленту шириной 16 × N пикселей, где N — количество кадров.

Использование метода ВыводитьПиктограммы()

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

Проанализируем синтаксис данного метода:

ТаблицаЗначений.ВыводитьПиктограммы(<Колонка>, <НачальныйНомер>)

Параметры метода:

  1. Колонка — идентификатор (или номер) колонки таблицы значений, в которой необходимо отображать значки.
  2. НачальныйНомер — необязательный параметр (по умолчанию равен 1), задающий начальный индекс картинки из общей ленты для этой колонки.

Выясним, как платформа рассчитывает выводимый номер кадра:

Итоговый номер картинки из ленты определяется по формуле: Индекс = НачальныйНомер + ЗначениеВЯчейке - 1.

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

Разберем ситуацию на примере. Пусть в ленте объединены 5 пиктограмм:

  1. Картинки 1, 2, 3 — пиктограммы пометки (колонка "Пометка").
  2. Картинки 4, 5 — пиктограммы состояния контроля (колонка "Контроль").

Проанализируем инициализацию таблицы при открытии формы:


// Включаем показ пиктограмм для первой колонки (отсчет с 1 картинки)
ТаблицаДокументов.ВыводитьПиктограммы("Пометка", 1);

// Включаем показ пиктограмм для второй колонки (отсчет с 4 картинки)
ТаблицаДокументов.ВыводитьПиктограммы("Контроль", 4);

Посмотрим, как заполняются значения ячеек при обходе данных:


// Для колонки "Пометка" передаем значение от 1 до 3
ТаблицаДокументов.Пометка = 1;

// Для колонки "Контроль":
Если ДокРеализация.ТекущийДокумент().Контроль = 1 Тогда
    // Выведется картинка номер 5 (4 + 2 - 1 = 5)
    ТаблицаДокументов.Контроль = 2; 
Иначе 
    // Выведется картинка номер 4 (4 + 1 - 1 = 4)
    ТаблицаДокументов.Контроль = 1; 
КонецЕсли;

Обратите внимание: если для второй колонки в параметре НачальныйНомер указать значение 1 (или не указывать его вовсе), то в ячейку Контроль нужно будет напрямую присваивать абсолютные номера кадров из всей ленты (например, 4 или 5).

Важные нюансы работы с пиктограммами

  1. Если значение ячейки равно 0 или не заполнено, пиктограмма в ячейке выводиться не будет.
  2. Если рассчитанный индекс картинки превышает количество кадров в файле, ячейка останется пустой.
  3. В колонке, для которой включен режим ВыводитьПиктограммы(), текстовые значения не отображаются — значение ячейки используется исключительно как индекс кадра.

Альтернативные способы решения

Если штатные возможности платформы 1С 7.7 оказываются недостаточными, рассмотрим альтернативные варианты:

  1. Использование внешних компонент (FormEx): библиотечные расширения дают возможность гибко управлять ячейками таблиц, раскрашивать их и выводить значки не только в ТаблицаЗначений, но и в табличных частях документов.
  2. Символьный вывод (спецсимволы и шрифты): вместо пиктограмм в текстовые колонки можно выводить специальные символы (например, галочки или крестики) с помощью шрифтов типа Wingdings, Marlett или Unicode-символов.
← На главную