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