Имя: Пароль:
1C
 
Как проверить наличие реквизита у управляемой формы.
,
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) Не все не так. Я просто решал не известную мне проблему.
И тема этой главы не есть её решение, там сложилось все по другому.
А тема эта была как путь к решению. Мне нужно было топливо.
Я завел её так как думал, что это одна из идей.
Но это ничего не пригодилось. Там все по другому.
И как я узнаю дальше.