Разберем распространенную задачу при разработке внешних отчетов и обработок в платформе 1С 7.7: вывод нескольких различных пиктограмм (иконок) в разных колонках элемента диалога ТаблицаЗначений.
В платформе 1С 7.7 к объекту ТаблицаЗначений на форме можно привязать только одну полосу картинок (картинку-ленту в формате BMP). Когда возникает необходимость показывать статусные значки сразу в нескольких колонках (например, в первой колонке — пометку документа, а во второй — статус контроля), разработчики часто сталкиваются с ошибками отображения или неверным расчетом индексов пиктограмм.
Сформулируем основной принцип: поскольку к таблице привязывается единый файл иконки, все требуемые значки необходимо объединить («склеить») в одну горизонтальную полосу изображений.
Рассмотрим требования к файлу пиктограмм:
16 × N пикселей, где N — количество кадров.Для включения режима отображения иконок в колонках таблицы значений используется метод ВыводитьПиктограммы().
Проанализируем синтаксис данного метода:
ТаблицаЗначений.ВыводитьПиктограммы(<Колонка>, <НачальныйНомер>)
Параметры метода:
Колонка — идентификатор (или номер) колонки таблицы значений, в которой необходимо отображать значки.НачальныйНомер — необязательный параметр (по умолчанию равен 1), задающий начальный индекс картинки из общей ленты для этой колонки.Выясним, как платформа рассчитывает выводимый номер кадра:
Итоговый номер картинки из ленты определяется по формуле: Индекс = НачальныйНомер + ЗначениеВЯчейке - 1.
Разберем ситуацию на примере. Пусть в ленте объединены 5 пиктограмм:
Проанализируем инициализацию таблицы при открытии формы:
// Включаем показ пиктограмм для первой колонки (отсчет с 1 картинки)
ТаблицаДокументов.ВыводитьПиктограммы("Пометка", 1);
// Включаем показ пиктограмм для второй колонки (отсчет с 4 картинки)
ТаблицаДокументов.ВыводитьПиктограммы("Контроль", 4);
Посмотрим, как заполняются значения ячеек при обходе данных:
// Для колонки "Пометка" передаем значение от 1 до 3
ТаблицаДокументов.Пометка = 1;
// Для колонки "Контроль":
Если ДокРеализация.ТекущийДокумент().Контроль = 1 Тогда
// Выведется картинка номер 5 (4 + 2 - 1 = 5)
ТаблицаДокументов.Контроль = 2;
Иначе
// Выведется картинка номер 4 (4 + 1 - 1 = 4)
ТаблицаДокументов.Контроль = 1;
КонецЕсли;
Обратите внимание: если для второй колонки в параметре НачальныйНомер указать значение 1 (или не указывать его вовсе), то в ячейку Контроль нужно будет напрямую присваивать абсолютные номера кадров из всей ленты (например, 4 или 5).
0 или не заполнено, пиктограмма в ячейке выводиться не будет.ВыводитьПиктограммы(), текстовые значения не отображаются — значение ячейки используется исключительно как индекс кадра.Если штатные возможности платформы 1С 7.7 оказываются недостаточными, рассмотрим альтернативные варианты:
ТаблицаЗначений, но и в табличных частях документов.