1с установить флажки в дереве значений
Как в списке установить нестандартную картинку строки
Для решения данной задачи существует два способа. Рассмотрим их на примере.
Создание колонки
Колонку с картинкой можно связать с колонкой данных, содержащих значение типов Число или Булево . В нашем случае требуется одну и ту же картинку выводить вместо стандартной, поэтому добавленная колонка должна содержать значение Истина для всех строк. Для динамического списка её нужно добавить в запросе.
Примечание
Для колонки данных типа Булево значения инвертируются, т. е. Истина означает индекс 0, а Ложь – индекс 1 (это реализовано для удобства отображения картинок-флажков, когда у некоторых строк картинка по некоторому условию есть, а у других её нет).
В списке реквизитов для реквизита ИндексКартинки установим флажок ИспользоватьВсегда .
В списке элементов формы добавим колонку с видом Поле картинки. Значение будет указывать индекс конкретной картинки для конкретной строки в наборе картинок.
В свойстве Данные поля выберем Список.ИндексКартинки .
Набор картинок задается в свойстве поля Картинка значений .
Созданную колонку можно поместить в произвольное место таблицы как самостоятельную или объединить с одной из колонок в группу колонок с группировкой В ячейке . Объединим поле Картинка с колонкой Код :
В результате список примет вид, как показано на рисунке:
Переопределение стандартной картинки
Данный способ более удобен, поскольку не требуется создавать дополнительное поле и группировать его с другим полем, но он менее гибок, поскольку такая картинка всегда отображается в самой левой колонке, содержащей текст. В свойствах таблицы укажем нужную картинку в свойстве Картинка строк и установим свойство Данные картинки строк . Колонку для этого свойства нужно создать так же, как и в предыдущем способе.
8.2 УП
Необходимо реализовать трехпозиционный флажок в ДеревеЗначений на управляемой форме 1С предприятия 8.2, который работает по следующему алгоритму:
* Если у элемента ДереваЗначений нет подчиненных элементов, то флажок может быть либо “включен”, либо “выключен”.
* Если у элемента есть подчиненные, то флажок “включен”, если ВКЛЮЧЕНЫ флажки у ВСЕХ подчиненных элементов, “выключен” если ВЫКЛЮЧЕНЫ флажки у ВСЕХ подчиненных элементов.
Если у некоторых подчиненных элементов флажки включены, а у некоторых выключены, то флажок родительского элемента имеет значение “неопределенно”.
* При включении флажка у родительского элемента, включаются флажки ВСЕХ подчиненных, при выключении флажка у родительского элемента, выключаются флажки ВСЕХ подчиненных.
Здесь процедура УстановкаФлажков() рекурсивно устанавливает флажки в подчиненных строках:
Код 1C v 8.х
А функция УстановленноДляВсех() проверяет установлено ли одинаковое значение для всех строк на текущем уровне:
Код 1C v 8.х
Похожие FAQ
Google maps, поиск оптимального маршрута 5В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута: * Географические координаты объектов, которые хранятся в базе; * Координаты начальной и коне База 1С вылетает, виснет, не грузится, падает с ошибкой? 0
Есть ряд методов, которыми можно попытаться " поднять" упавшую базу 1С 8.х Но сперва нужно сделать резервную копию! Сделайте резервную копию простым копированием папки базы, выгрузка не всегда может быть корректна. Удалить все файлы в папке базы, Выгрузка / Загрузка данных посредством XML файлов? 1
В основе работы с XML-файлами лежит технология доступа SAX, которая осуществляет считывание по одному тегу. Для этого существует два типа данных – ЗаписьXML и ЧтениеXML . Запись данных справочника в XML-файл: Запись = Новый ЗаписьXML; Запись.О Есть ли у текущего элемента подчиненные 0
Выборка = Справочники.Номенклатура.Выбрать( , Владелец); Если Выборка.Следующий() = Истина Тогда // Есть подчиненные элементы. КонецЕсли; Запрос = Новый Запрос; Запрос.Текст https://helpf.pro/faq/view/856.html" title="Как открыть форму подчиненного Реквизиту Контрагент справочника "ДоговорыКонтрагентов"?">Как открыть форму подчиненного Реквизиту Контрагент справочника "ДоговорыКонтрагентов"? 0
Если Не Контрагент.Пустая() Тогда ФормаПодчиненныхДоговоров = Справочники.ДоговорыКонтрагентов.ПолучитьФормуСписка(); ФормаПодчиненныхДоговоров.ПараметрОтборПоВладельцу = Контрагент; ФормаПодчиненныхДоговоров.Открыть(); КонецЕсли; Посмотреть все результаты поиска похожих
Еще в этой же категории
Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора
Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Поле выбора
Как ограничить список выбора? 8
Ограничим список элементов, установив отбор в открываемой форме //Пример 1 Процедура СтатьяПДРНачалоВыбора(Элемент, СтандартнаяОбработка) ФормаВыбора = Справочники.ПрочиеДоходыИРасходы.ПолучитьФормуВыбора(, Элемент); ЭлементОтбораВидПДР = Форма Реквизит
Как активизировать, перевести фокус на необходимый элемент на форме? 6
//Текущему Элементу формы присваиваем элемент котровый необходимо активизировать ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТабличноеПоле; Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Разберем как можно для строки дерева значений, которую мы построили в предыдущем примере, установить элемент управленя "Флажок" и вывести картинку.
Для этого в свойствах колонки "Дата" для свойства "ДанныеФлажка" укажем значение "Флажок", а для свойства "ДанныеКартинки" - "Картинка".
В процедуре "ПриОткрытии()", в блоке добавление строк дерева пропишем следующий код: // +++ Добавляем эти строки СтрокаДереваГод . Флажок = ; СтрокаДереваГод . Картинка = БиблиотекаКартинок . Календарь ; // -- . // +++ Добавляем эти строки СтрокаДереваМесяц . Флажок = ; // -- . // +++ Добавляем эти строки СтрокаДереваДень . Флажок = ; СтрокаДереваДень . Картинка = БиблиотекаКартинок . Картинка ; // -- Код процедуры "ПриОткрытии" полностью: Процедура ПриОткрытии ( ) МассивГод = Новый Массив ; МассивГод . Добавить ( "" ) ; МассивГод . Добавить ( "" ) ; Для каждого СтрокаГод Из МассивГод Цикл Дата = Дата ( "" + СтрокаГод + "" ) ; СтрокаДереваГод = Дерево . Строки . Добавить ( ) ; СтрокаДереваГод . Дата = Год ( Дата ) ; // +++ Добавляем эти строки СтрокаДереваГод . Флажок = ; СтрокаДереваГод . Картинка = БиблиотекаКартинок . Календарь ; // -- Для Кол = По Цикл СтрокаДереваМесяц = СтрокаДереваГод . Строки . Добавить ( ) ; СтрокаДереваМесяц . Дата = ПолучитьПредставлениеМесяца ( Месяц ( Дата ) ) ; // +++ Добавляем эти строки СтрокаДереваМесяц . Флажок = ; // -- КоличествоДнейВМесяце = День ( КонецМесяца ( Дата ) ) ; Для КолДней = По КоличествоДнейВМесяце Цикл СтрокаДереваДень = СтрокаДереваМесяц . Строки . Добавить ( ) ; СтрокаДереваДень . Дата = Строка ( КолДней ) ; // +++ Добавляем эти строки СтрокаДереваДень . Флажок = ; СтрокаДереваДень . Картинка = БиблиотекаКартинок . Картинка ; // -- КонецЦикла ; Дата = ДобавитьМесяц ( Дата , ) ; КонецЦикла ; КонецЦикла ; КонецПроцедуры По итогу мы получаем дерево значений, в строках которого отображается нужная нам картинка, а также появляется возможность проставлять галки для каждого конкретного элемента дерева.
Универсальная коллекция значений, которая очень похожа на таблицу значений - это дерево значений. Отличие от таблицы значений заключается в том, что строки могут быть подчинены друг другу, то есть может быть образована некая иерархия.
Рассмотрим работу с деревом значений на примере решения следующей задачи:
Выведем в строки даты (год, месяц, число) за 2013, 2014 годы в три уровня. На первом уровне будет год, на втором месяц и на третьем день.
Для этого поместим на форму табличное поле.
Перейдем в его палитру свойств.
Укажем тип значения «ДеревоЗначений».
Укажем, что это дерево.
Теперь добавим в табличное поле колонку «Дата».
Далее перейдем в палитру свойств колонки «Дата».
Установим галку «ОтображатьИерархию».
Поместим алгоритм формирования строк дерева в процедуру обработки открытия формы.
Алгоритм примерно следующий:
Теперь разберем его.
Первое что необходимо сделать, это объявить переменную, содержащую строковое представление месяца.
Потом создадим массив, элементы которого хранят год; месяцы и дни, по которым необходимо вывести.
МассивГод = Новый Массив ; МассивГод . Добавить ( ) ; МассивГод . Добавить ( ) ;
Первый цикл будет обходить годы, содержащиеся в массиве и добавлять их в наше дерево на первый уровень строк.
Для каждого СтрокаГод Из МассивГод Цикл Дата = Дата ( "" + СтрокаГод + ) ; СтрокаДереваГод = Дерево . Строки . Добавить ( ) ; СтрокаДереваГод . Дата = Год ( Дата ) ; … КонецЦикла ;
Второй цикл обходит месяцы и заносит их на второй уровень строк, родителями которых являются строки, введенные нами выше (содержащие год).
Для Кол = По Цикл СтрокаДереваМесяц = СтрокаДереваГод . Строки . Добавить ( ) ; СтрокаДереваМесяц . Дата = ПолучитьПредставлениеМесяца ( Месяц ( Дата ) ) ; КоличествоДнейВМесяце = День ( КонецМесяца ( Дата ) ) ; … Дата = ДобавитьМесяц ( Дата , ) ; КонецЦикла ;
В этом цикле мы используем функцию « ПолучитьПредставлениеМесяца ( Месяц ) », которая возвращает строковое представление месяца по переданному номеру.
Функция ПолучитьПредставлениеМесяца ( НомерМесяца ) ПредставлениеМесяца = СоответствиеМесяцы . Получить ( НомерМесяца ) ; Возврат ? ( ПредставлениеМесяца = Неопределено , НомерМесяца , ПредставлениеМесяца ) ; КонецФункции // ПолучитьПредставлениеМесяца()
Для перехода к следующему месяцу используем встроенную функцию « ДобавитьМесяц ( Дата , ) ».
И, наконец, третий цикл обеспечивает заполнение дней месяца, строки которого является их родителями.
Для КолДней = По КоличествоДнейВМесяце Цикл СтрокаДереваДень = СтрокаДереваМесяц . Строки . Добавить ( ) ; СтрокаДереваДень . Дата = Строка ( КолДней ) ; КонецЦикла;
Чтобы узнать сколько дней в каждом конкретном месяце мы будем использовать встроенную функцию КонецМесяца ( ) , передавая ей, обрабатываемую в текущий момент, дату.
КоличествоДнейВМесяце = День ( КонецМесяца ( Дата ) ) ;
В модуль формы вставим блок, обеспечивающий заполнение универсальной коллекции значений «Соответствие», хранящей строковое представление месяца.
СоответствиеМесяцы = Новый Соответствие ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ;
Готово. Теперь при открытии формы происходит формирование строк дерева в три уровня.
Читайте также: