|
Не найдено поле в условном оформлении формы (программно). Как правильно обратиться? | ☑ | ||
---|---|---|---|---|
0
synapce
04.06.21
✎
13:20
|
Доброго дня!
У меня есть поле на форме списка = Список.Ссылка.Мой_Реквизит. Значение булево и необходимо его закрасить красным, если оно в значении нет. Условие проще некуда. Пробовал в настройке условного имя задавать и "список.МойРеквизит", и "ссылка..МойРеквизит" - нифига. Со стандартными, типа "Дата", "Номер" - все отлично, условное оформление работает. Но факт в том, что в форме списка, если смотреть не кодом, а через конфигуратор - условное оформление у формы - видно, что он видит только ссылку, а вот реквизиты ссылки в отборе - не видит( Как исправить такую ситуацию? Заранее всем спасибо за ответы! |
|||
1
DrZombi
гуру
04.06.21
✎
13:28
|
(0) Используете Условное оформление.
Пример: &НаСервере Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); ИмяПоля = "Объект.Акты.СверкаСогласована"; ЗначениеДляОтбора = Ложь; Цвет = WebЦвета.Красный; ПолеДляОформления = "АктыДокументАкт"; ЭлементУО = УсловноеОформление.Элементы.Добавить(); КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУО.Поля, ПолеДляОформления); ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементУО.Отбор, ИмяПоля, ВидСравненияКомпоновкиДанных.Равно, ЗначениеДляОтбора); ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Цвет); ЗначениеДляОтбора = Истина; Цвет = WebЦвета.Зеленый; ЭлементУО = УсловноеОформление.Элементы.Добавить(); КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУО.Поля, ПолеДляОформления); ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементУО.Отбор, ИмяПоля, ВидСравненияКомпоновкиДанных.Равно, ЗначениеДляОтбора); ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Цвет); КонецПроцедуры // Добавляет в коллекцию оформляемых полей компоновки данных новое поле // // Параметры: // КоллекцияОформляемыхПолей - коллекция оформляемых полей КД // ИмяПоля - Строка - имя поля // // Возвращаемое значение: // ОформляемоеПолеКомпоновкиДанных - созданное поле // // Пример: // Форма.УсловноеОформление.Элементы[0].Поля // Функция ДобавитьОформляемоеПоле(КоллекцияОформляемыхПолей, ИмяПоля) Экспорт ПолеЭлемента = КоллекцияОформляемыхПолей.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля); Возврат ПолеЭлемента; КонецФункции // Добавить элемент компоновки в контейнер элементов компоновки. // // Параметры: // ОбластьДобавления - КоллекцияЭлементовОтбораКомпоновкиДанных - контейнер с элементами и группами отбора, // например, Список.Отбор или группа в отборе. // ИмяПоля - Строка - имя поля компоновки данных (заполняется всегда). // ВидСравнения - ВидСравненияКомпоновкиДанных - вид сравнения. // ПравоеЗначение - Произвольный - сравниваемое значение. // Представление - Строка - представление элемента компоновки данных. // Использование - Булево - использование элемента. // РежимОтображения - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - режим отображения. // ИдентификаторПользовательскойНастройки - Строка - см. ОтборКомпоновкиДанных.ИдентификаторПользовательскойНастройки // в синтакс-помощнике. // Возвращаемое значение: // ЭлементОтбораКомпоновкиДанных - элемент компоновки. // Функция ДобавитьЭлементКомпоновки(ОбластьДобавления, Знач ИмяПоля, Знач ВидСравнения, Знач ПравоеЗначение = Неопределено, Знач Представление = Неопределено, Знач Использование = Неопределено, знач РежимОтображения = Неопределено, знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт Элемент = ОбластьДобавления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля); Элемент.ВидСравнения = ВидСравнения; Если РежимОтображения = Неопределено Тогда Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; Иначе Элемент.РежимОтображения = РежимОтображения; КонецЕсли; Если ПравоеЗначение <> Неопределено Тогда Элемент.ПравоеЗначение = ПравоеЗначение; КонецЕсли; Если Представление <> Неопределено Тогда Элемент.Представление = Представление; КонецЕсли; Если Использование <> Неопределено Тогда Элемент.Использование = Использование; КонецЕсли; // Важно: установка идентификатора должна выполняться // в конце настройки элемента, иначе он будет скопирован // в пользовательские настройки частично заполненным. Если ИдентификаторПользовательскойНастройки <> Неопределено Тогда Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки; ИначеЕсли Элемент.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда Элемент.ИдентификаторПользовательскойНастройки = ИмяПоля; КонецЕсли; Возврат Элемент; КонецФункции |
|||
2
DrZombi
гуру
04.06.21
✎
13:30
|
+(0) На поле списка "Мой_Реквизит" должна быть галочка "Использовать всегда"
|
|||
3
synapce
04.06.21
✎
13:35
|
(1) делаю также, с помощью программного кода. Пишет "Поле не найдено".
(2) Галочка стоит только на Ссылке. У "Мой_реквизит", который её дочерний элемент- нет галки и нет возможности поставить галку ( |
|||
4
acht
04.06.21
✎
13:42
|
(0) Произвольный запрос
|
|||
5
synapce
04.06.21
✎
13:43
|
(4) например?
|
|||
6
synapce
04.06.21
✎
13:43
|
(4) запросом выцедить поле и присвоить его реквизиту?
|
|||
7
acht
04.06.21
✎
13:59
|
(6) Точно. Вытащить его в отдельную колонку, убрать ее из пользовательских настроек и т.п.
|
|||
8
synapce
04.06.21
✎
14:04
|
(7) форма списка же. Каждый раз при открытии - будет выполнять запрос? оч замедлит работу программы
|
|||
9
acht
04.06.21
✎
14:10
|
(8) Ты понимаешь, как работают динамические списки?
|
|||
10
synapce
04.06.21
✎
14:13
|
(9) мог бы этот момент прояснить? возможно, что-то путаю, не отрицаю)
|
|||
11
DrZombi
гуру
04.06.21
✎
14:19
|
(3) Код покажи.
Картинку с реквизитами списка тоже, снап-шоть. И тут выложи. |
|||
12
acht
04.06.21
✎
14:22
|
(10) Там внутри куски СКД. Если ты указываешь произвольный запрос, то он являеся текстом запроса набора-запроса. Если не указываешь - он генерируется автоматически по основной таблице. Потом этот запрос, как и в СКД, модифицируется с разными отборами и группировками и уходит в SQL.
Поэтому запрос к базе выполняется всегда, при каждом обновлении списка. Произвольный он или нет - роли не играет никакой. Так что да - при открытии будет выполнен запрос. Тебе и предлагают повлиять на неявную схему компоновки, изменив набор данных. |
|||
13
synapce
04.06.21
✎
14:24
|
(11) делаю в процедуре журнала документов отпуска
&НаСервере Процедура ш_ПриОткрытииПередНаСервере() УО = Список.КомпоновщикНастроек.Настройки.УсловноеОформление.Элементы; Если УО.Количество() > 0 Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Условное оформление уже задано. Команда не выполнена."; Сообщение.Сообщить(); Возврат; КонецЕсли; ЭлементУО = УО.Добавить(); // Оформление: цвет фона – светлый лосось ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Красный); //ЭлементУО.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); // Условие: поле НаКонтроле равно Истина ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Статус"); ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементУсловия.ПравоеЗначение = Ложь; Список.КомпоновщикНастроек.ЗагрузитьНастройки(Список.КомпоновщикНастроек.Настройки); КонецПроцедуры Скриншот не прилагается) |
|||
14
acht
04.06.21
✎
14:31
|
(13) Оформляемые поля не указаны.
И если поле "Статус" у тебя в шапке документа, то оно по умолчанию должно быть доступно непосредственно. Не надо ничего через ссылку получать, надо на него "использовать всегда" поставить. |
|||
15
synapce
04.06.21
✎
14:40
|
(14) на нем "использовать всегда" недоступно, даже нет квадрата, куда галку ставить. Оно есть только у ссылки, уже упоминал об этом.
По поводу оформляемых полей - я говорю ,с другими полями работает, которые вставлены в форму списка по умолчанию - с ними все работает - фильтрует, раскрашивает. А здесь - непонятно, как к нему обратиться. |
|||
16
acht
04.06.21
✎
14:47
|
(15) Скриншот с полями
|
|||
17
synapce
04.06.21
✎
14:49
|
(16) здесь не получается отправить скрин, почему-то. Могу с вами отдельно списаться где-то временно?
|
|||
18
acht
04.06.21
✎
14:53
|
(17) Нет уж, давай перед всеми раскрывайся.
Выбери хостинг картинок по вкусу, туда скриншот, сюда - ссылку. |
|||
19
synapce
04.06.21
✎
14:58
|
(18) https://ibb.co/bQb9YGv
пожалуйста) |
|||
20
acht
04.06.21
✎
15:05
|
(19) Так он у тебя принадлежит только одну виду документа что-ли? Ну все, вытаскивай его в графу журнала или пиши произвольный запрос с "ВЫБОР КОГДА" или на крайний случай вешай обработчик ПриПолученииДанныхНаСервере
|
|||
21
synapce
04.06.21
✎
15:10
|
(20) Работает, я просто не сразу понял, что ты имел ввиду)
думал, где-то отдельно надо запрос замутить, а нужн было в самом динамическом списке вынести поле, как отдельный реквизит и уже обращаться к нему) спасиб) Тему можно считать закрытой. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |