1С. Вывод картинок в строках таблицы

Часто для читабельности списков выводим картинки в строках таблицы соответствующие статусам. В управляемом приложении такое пожелание реализуется достаточно просто.

В качестве решаемой задачи определим динамический список, в котором необходимо выводить иконки. Иконки, а точнее набор иконок создадим сами, в виде цветных квадратов 32*32 пикселей.

Решение

Набор иконок

Для вывода очень удобно использовать набор иконок, по сути это картинка с определенной высотой и кратной количеству иконок шириной. Для наглядности создадим свой набор, в котором будет 6 иконок с разными цветами. В любом графическом редакторе создаем слой 32*192 и заливаем квадратики разными цветами и сохраняем. Я использовал GIMP, у меня получилось так(самая левая иконка белая)

1С. Вывод картинок в строках таблицы

Получившуюся картинку загружаем в конфигурацию.

Подготовка конфигурации

1С. Вывод картинок в строках таблицыВ нашей конфигурации есть периодический регистр сведений «Состояние задач» с измерениями Проект, Задача и ресурсом Выполнена. Будем выводить цветной квадратик в зависимости от даты последней записи по задаче.

Создадим обработку, в которой определим форму с динамическим списком.  Для динамического списка установим признак Произвольный запрос и напишем  текст запроса в котором выберем срез последних регистра сведений «Состояние задач»:

ВЫБРАТЬ
    СостояниеЗадачСрезПоследних.Период КАК Период,
    СостояниеЗадачСрезПоследних.Проект КАК Проект,
    СостояниеЗадачСрезПоследних.Задача КАК Задача,
    СостояниеЗадачСрезПоследних.Выполнена КАК Выполнена,
    ВЫБОР
	КОГДА РАЗНОСТЬДАТ(СостояниеЗадачСрезПоследних.Период, &Период, ДЕНЬ) = 0
	    ТОГДА 0
	КОГДА РАЗНОСТЬДАТ(СостояниеЗадачСрезПоследних.Период, &Период, ДЕНЬ) > 0
		И РАЗНОСТЬДАТ(СостояниеЗадачСрезПоследних.Период, &Период, ДЕНЬ) <= 3
            ТОГДА 1 
        КОГДА РАЗНОСТЬДАТ(СостояниеЗадачСрезПоследних.Период, &Период, ДЕНЬ) > 3
		И РАЗНОСТЬДАТ(СостояниеЗадачСрезПоследних.Период, &Период, ДЕНЬ) <= 7
            ТОГДА 2 
        КОГДА РАЗНОСТЬДАТ(СостояниеЗадачСрезПоследних.Период, &Период, ДЕНЬ) > 7
		И РАЗНОСТЬДАТ(СостояниеЗадачСрезПоследних.Период, &Период, ДЕНЬ) <= 10
            ТОГДА 3 
        КОГДА РАЗНОСТЬДАТ(СостояниеЗадачСрезПоследних.Период, &Период, ДЕНЬ) > 10
		И РАЗНОСТЬДАТ(СостояниеЗадачСрезПоследних.Период, &Период, ДЕНЬ) <= 15
	    ТОГДА 4
	ИНАЧЕ 5
    КОНЕЦ КАК БезИзменений
ИЗ
    РегистрСведений.СостояниеЗадач.СрезПоследних КАК СостояниеЗадачСрезПоследних

В запросе определили колонку Без изменений, в которой рассчитывается количество дней без изменения статуса задачи.

В выражении присутствует параметр, значение параметра будем задавать в обработчике ПриСозданииНаСервере()


#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	СписокЗадач.Параметры.УстановитьЗначениеПараметра("Период", ТекущаяДата());
	
КонецПроцедуры

#КонецОбласти

1С. Вывод картинок в строках таблицыНа форму добавим таблицу из получившегося динамического списка. Для колонки Без изменений установим следующие параметры:

  • Вид: Поле картинки;
  • Путь к данным: СписокЗадач.БезИзменений;
  • Картинка значений: ЦветаБезИзменений;
  • Положение заголовка: Нет

Таким образом система в качестве изображения в поле картинки будет брать иконку из набора по индексу, который определен реквизите БезИзменений динамического списка.

Заполним данными регистр сведений «Состояние задач»(считаем, что текущая дата равна дате публикации статьи 17.05.2017)

Данные регистра

1С. Вывод картинок в строках таблицы

Вывод получившейся обработки

Дополнительно сгруппируем динамический список по проекту для большей читабельности и посмотрим результат:

1С. Вывод картинок в строках таблицы

Понравилась статья? Поделиться с друзьями:
Комментарии: 6
  1. Сергей

    Извините, а как вы присваиваете конкретному цвету конкретное число? например Зеленому цвету число 1

    1. Guesto (автор)

      Сергей, здесь работает общепринятый алгоритм работы с наборами картинок(Далее условно):

      Левый край  = Высота картинки * N;
      Правый край = Высота картинки * N + Высота картинки.

      Полученное между ними и есть картинка по индексу N.

      Остается, только правильно оформить картинку

  2. Олег

    А как изменить этот механизм
    «Левый край = Высота картинки * N;
    Правый край = Высота картинки * N + Высота картинки.»

    Дело в том что у меня картинки не квадратные, а растянутые (статусы делаю)

    1. Guesto (автор)

      Олег, механизмов изменения данного алгоритма не видел. Пользуюсь как есть.
      Можно попробовать квадратные с прозрачным фоном, а в них размещать растянутые картинки. При этом возможны проблемы с высотой строк, но стоит попробовать.

  3. Всеволод

    О_о
    Работает!!!!
    Спасибо!!!!

    1. Guesto (автор)

      А куда оно денется))

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: