|
Как проверить наличие реквизита у управляемой формы. | ☑ | ||
---|---|---|---|---|
0
falselight
18.09.19
✎
12:00
|
Разбираюсь с поведением управляемой формы.
Выявляется что нужно проверять наличие реквизита у Форма - тип которой УправляемаяФорма. Так как реквизит появляется при использовании Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты). Как то по передаваемому массиву эти реквизиты видимо создаются. Подскажите пожалуйста, как проверять есть ли у Форма, тот или иной реквизит ? |
|||
1
ДенисЧ
18.09.19
✎
12:04
|
Купи у меня наконец синтакс-помощник и уроки по его чтению. Столько вопросов сразу снимется - ты даже не представляешь...
|
|||
2
palsergeich
18.09.19
✎
12:04
|
ПолучитьРеквизиты
|
|||
3
falselight
18.09.19
✎
12:09
|
Форма.ИспользоватьДопСведения = Ложь - то есть реквизит есть
почему он не находится? Форма.ПолучитьРеквизиты().Найти("ИспользоватьДопСведения") - неопределено |
|||
4
falselight
18.09.19
✎
12:11
|
Или как правильно искать в этом случае? (3)
Массив реквизитов получил, как определять наличие реквизита? Перебором массива? |
|||
5
Вафель
18.09.19
✎
12:15
|
проще через по попытку
|
|||
6
falselight
18.09.19
✎
12:28
|
(5) Так метода никакого нет, проверить есть реквизит или нет.
Можно перебором массива как вариант. Или попытка, и все? |
|||
7
falselight
18.09.19
✎
12:31
|
(5) Как через попытку?
Вот реквизит Форма.ИспользоватьДопСведения, то есть то нет. То значение, то поле не обнаружено. И как на него проверять? |
|||
8
Вафель
18.09.19
✎
12:33
|
|
|||
9
falselight
18.09.19
✎
12:50
|
(8) И это будет считаться нормально?
|
|||
10
MuxaH
18.09.19
✎
12:55
|
(9) Да фик знает, но перебором массива с проверкой имени реквизита тоже как-то не то...
|
|||
11
falselight
18.09.19
✎
12:56
|
(10) Ну не знаю, а что не так? Перебирается массив, и выявляется реквизит.
То есть это лучше (8) ? И правильнее? |
|||
12
palsergeich
18.09.19
✎
12:57
|
(10) перебор коллекции, тем более априори небольшой, да ещё в памяти - совершенно нормальный и очень быстрый вариант.
(8) А вот с этим отлаживать потом тяжко. |
|||
13
falselight
18.09.19
✎
12:58
|
(12) То есть функция проверки массива на наличие значения будет лучше?
|
|||
14
dezss
18.09.19
✎
12:59
|
Ну массив можно в ТЗ запихать. А в ней уже поиском)))
|
|||
15
palsergeich
18.09.19
✎
13:00
|
(13) конечно.
Я имел удовольствие отлаживать код который был весь в попытках - то ещё испытание для нервов |
|||
16
palsergeich
18.09.19
✎
13:01
|
(15) пару десятков элементов коллекции переберется за ничтожное время.
А если на форме будут тысячи реквизитов, поверьте, Вам будет не до быстродействия береборщика, хотя время все равно будет ничтожным. |
|||
17
falselight
18.09.19
✎
13:04
|
Подскажите пожалуйста, как удалить элемент "ИспользоватьДопСведения" если он есть у формы ?
МассРеквизитов = Форма.ПолучитьРеквизиты(); Для каждого ЭлМасс Из МассРеквизитов Цикл Если ЭлМасс.Имя = "ИспользоватьДопСведения" Тогда КонецЕсли; КонецЦикла; |
|||
18
palsergeich
18.09.19
✎
13:06
|
(17) удалить можно только программно добавленные реквизиты.
Методом ИзменитьРеквизиты |
|||
19
falselight
18.09.19
✎
13:08
|
(18) Мне нужно удалить этот реквизит, если он есть, перед методом Форма.ИзменитьРеквизиты(Реквизиты);
так как на нем выходит ошибка, что он не уникален, уже есть у формы. Там не ясное её поведение. как его удалить подскажите, он вроде как и создается программно |
|||
20
falselight
18.09.19
✎
13:09
|
(18) Как удалить именно этот реквизит?
|
|||
21
palsergeich
18.09.19
✎
13:09
|
(19) ну дык удали перед проблемной строчкой.
Удаляемые реквизиты это 2 параметр |
|||
22
falselight
18.09.19
✎
13:12
|
(21) Эта строчка и есть проблемная
Форма.ИзменитьРеквизиты(Реквизиты); То есть будет так? МассРеквизитов = Форма.ПолучитьРеквизиты(); Для каждого ЭлМасс Из МассРеквизитов Цикл Если ЭлМасс.Имя = "ИспользоватьДопСведения" Тогда Форма.ИзменитьРеквизиты(Реквизиты, "ИспользоватьДопСведения"); КонецЕсли; КонецЦикла; Форма.ИзменитьРеквизиты(Реквизиты); Или я не пойму (((( Там одна ситуация, точнее не одна. На строке Форма.ИзменитьРеквизиты(Реквизиты); Выходит ошибка что реквизит "ИзменитьДопСведения" не уникальный и я смотрю по коду, он в Форма, то есть то нет, вот ошибка когда есть. Как тут правильнеесделать тогда? |
|||
23
falselight
18.09.19
✎
13:20
|
Или вот так? Проверяю сейчас это.
Попытка ЕстьРеквизитИспользоватьДопСведения = Форма.ИспользоватьДопСведения; Форма.ИзменитьРеквизиты(Реквизиты, "ИспользоватьДопСведения"); Исключение Форма.ИзменитьРеквизиты(Реквизиты); КонецПопытки; |
|||
24
dezss
18.09.19
✎
13:37
|
Так ты удали его из массива Реквизиты перед тем, как делается
Форма.ИзменитьРеквизиты(Реквизиты); |
|||
25
falselight
18.09.19
✎
13:37
|
ПОПРОБОВАЛ ТАК, НИЧЕГО НЕ РАБОТАЕТ. ПОДСКАЖИТЕ КАК избавиться от реквизита "ИспользоватьДопСведения"
перед строчкой Форма.ИзменитьРеквизиты(Реквизиты); ///////////////////////////////////////////////// Попытка ЕстьРеквизитИспользоватьДопСведения = Форма.ИспользоватьДопСведения; ЕстьРеквизитИспДопСведения = Истина; Исключение ЕстьРеквизитИспДопСведения = Ложь; КонецПопытки; Если ЕстьРеквизитИспДопСведения Тогда УдаляемыйРеквДопСведения = Новый Массив; УдаляемыйРеквДопСведения.Добавить(Реквизиты[0]); Форма.ИзменитьРеквизиты(Реквизиты, УдаляемыйРеквДопСведения); Иначе Форма.ИзменитьРеквизиты(Реквизиты); КонецЕсли; |
|||
26
falselight
18.09.19
✎
13:38
|
(24) Понял, то есть я не с того конца, пробую решить вопрос.
Сейчас попробую. |
|||
27
Кодер
18.09.19
✎
14:06
|
(23) Коллега, вы изобрели третий вид ЯП. Ещё вчера они были трансляторы и компиляторы. Теперь, благодаря Вам, мир узнал, что код можно выполнять на форуме.
Там Столману замену ищут. У вас с английским тоже хорошо? |
|||
28
falselight
18.09.19
✎
16:42
|
(27) Не все не так. Я просто решал не известную мне проблему.
И тема этой главы не есть её решение, там сложилось все по другому. А тема эта была как путь к решению. Мне нужно было топливо. Я завел её так как думал, что это одна из идей. Но это ничего не пригодилось. Там все по другому. И как я узнаю дальше. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |