Доброго всем времени! Статья для новичков. Хотел бы выложить на мой взгляд простой и удобный способ добавления картинок в строках Дерева значений по условию. Изложенный вариант будет простым примером навскидку.
// Элементы.ДеревоОбъектовКартинка.КартинкаЗначений
// ПутьКДаннымКартинкиСтроки и КартинкаСтрок
// установку по ИндексуКартинки использовать мы не будем
Уже имеем форму, на ней ДеревоЗначений с колонками и реквизитами, а также Вашими процедурами и функциями для заполнения дерева значений. В моем случае эта форма, на которой выводится список Документов и Справочников.
Итак.
Имеем Реквизит ДеревоОбъектов с типом ДеревоЗначений.
Помимо имеющихся колонок в дереве (если таковые имеются), добавляем колонку с именем Картинка и типом Картинка
Далее если хотим, чтобы Картинка была в одной колонке, например, с Наименованием, необходимо добавить на форму группу колонок, добавляем и помещаем в группу наши колонки. (в моем примере колонки дерева, Картинка и ИдентификаторОбъекта).
Настраиваем группу колонок, чтобы наши две колонки (в данном случае ИдентификаторОбъекта и Картинка) были в одной ячейке
На форме поле Картинки будет следующим, устанавливаем положение заголовка - Нет
Сохраним все наши изменения и запустим на исполнение формирование Вашей процедуры или функции для получения результата. (в моем случае в результате это список документов и справочников). Получим результат без добавления картинок.
Как видим, картинок нет. Все верно, потому что мы настроили только внешнее оформление, теперь добавим сами картинки в строки нашего реквизита ДеревоОбъектов.
Давайте для примера реализуем следующее:
Если тип значения документ (строковый параметр, к примеру равен "Документ"), тогда картинка будет выбираться из стандартной библиотеки картинок - Документ, если Справочник, соответственно картинка справочника, иначе ничего не выводим (в смысле саму картинку не выводим).
Создадим простейшую функцию, которая будет возвращать Картинку из стандартной библиотеки по условию, как описали выше:
&НаСервере
Функция ЗаполнитьКартинкуВСтрокуДерева(УсловноеЗначение = Неопределено)
СтроковоеЗначение = Строка(УсловноеЗначение);
Если СтроковоеЗначение = "Документы" Тогда
Картинка = БиблиотекаКартинок.Документ;
ИначеЕсли СтроковоеЗначение = "Справочники" Тогда
Картинка = БиблиотекаКартинок.Справочник;
Иначе
Картинка = "";
КонецЕсли;
Возврат Картинка;
КонецФункции
Затем в Вашу Процедуру или функцию, в которой происходит заполнение значениями Дерева значений, добавляем простую строчку (при добавлении строки).
//В данном случае в обработке в значении НовыйОбъект.ИдентификаторОбъекта.Родитель - будет Документы не строкового типа
// далее это значение преобразуется в Строку в Функции ЗаполнитьКартинкуВСтрокуДерева()
НовыйОбъект = СтрокаДерева.Добавить();
НовыйОбъект.Картинка = ЗаполнитьКартинкуВСтрокуДерева(НовыйОбъект.ИдентификаторОбъекта.Родитель);
При добавлении строки в поле колонки Картинка, которое мы добавляли в ДеревоОбъектов с типом ДеревоЗначений, будет добавлена картинка.
Сохраним все наши изменения и запустим на исполнение формирование Вашей процедуры или функции для получения результата (в моем случае в результате это список документов и справочников). Теперь получим результат с добавленными картинками.
Если все описать кратко:
- Добавляем в реквизит с типом ДеревоЗначений колонку реквизита с типом Картинка.
- Размещаем реквизит колонки на форме
- В функции или процедуре при добавлении строк в ДеревоЗначений в свойство реквизита колонки присваиваем картинку.
P.S.
Вот вроде бы и все, вроде ничего сложного. Если кому помог, буду рад!