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

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

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

Решение

Набор иконок

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

Комментарии 2

  • Сергей 29.11.2018 в 13:27 Cсылка

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

    • Guesto 30.11.2018 в 16:29 Cсылка

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

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

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

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

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

    Ваш e-mail не будет опубликован. Обязательные поля помечены *