|
Проверка существования реквизита | ☑ | ||
---|---|---|---|---|
0
Маленький Вопросик
03.09.14
✎
10:02
|
Народ, подскажите как проверить существование реквизита у документа. Не его заполнение, а именно существование
|
|||
1
DCKiller
03.09.14
✎
10:05
|
Если Документ.Метаданные().Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
Сообщить("Нету"); КонецЕсли; |
|||
2
дедушка Вах
03.09.14
✎
10:09
|
(1) ага, а если метаданных нету
(0) через Попытка - наверняка |
|||
3
13_Mult
03.09.14
✎
10:12
|
(2) т.е. как нету ? ))
|
|||
4
дедушка Вах
03.09.14
✎
10:16
|
(3) ну ты че с будуна внешней обработкой в нету конфу не тыкал? :)
в пустой тоже запускается |
|||
5
hhhh
03.09.14
✎
10:18
|
(4) всё равно есть метаданные у документа, хоть обработкой тыкай, хоть чем.
|
|||
6
Рэйв
03.09.14
✎
10:18
|
(4)В не той конфе пошлет лесом через ошибку и это будет правильно и соразмерно:-)
|
|||
7
13_Mult
03.09.14
✎
10:20
|
(4) ну если с фанатизмом, то версию еще конфы при открытии проверить да? ))
|
|||
8
Рэйв
03.09.14
✎
10:21
|
(5)
Наверное он имеет в виду вариант если в обработке стоит: Документ=Документы.КакойтоВид.ПустаясСылка(); в случае если нет такого вида:-) |
|||
9
Ненавижу 1С
гуру
03.09.14
✎
10:23
|
(2) Попытка - ЗЛО
|
|||
10
vde69
03.09.14
✎
10:25
|
(1) у Задачи поищи реквизит "Адресат"....
или у справочника "Код" в 8.1 было все просто, сейчас развели по разным коллекциям, по этому стало куда более проблемно... |
|||
11
hhhh
03.09.14
✎
10:28
|
можно через задницу
Структура = Новый Структура(ИмяРеквизита); ЗаполнитьЗначенияСвойств(Структура, Документ); Если Структура[ИмяРеквизита] = Неопределено Тогда Сообщить("Нету"); КонецЕсли; |
|||
12
Ненавижу 1С
гуру
03.09.14
✎
10:30
|
(10) >>у справочника "Код"
а зачем его искать? |
|||
13
дедушка Вах
03.09.14
✎
10:32
|
(9) если проверять наличие каждого объекта метаданных в процессе обращения - супер мега универсальная обработка получится. года через два тестирования
|
|||
14
vde69
03.09.14
✎
10:33
|
(12) а его может и не быть.... да у справочника может не быть кода :)
проверь на длине кода = 0 |
|||
15
Ненавижу 1С
гуру
03.09.14
✎
10:34
|
(14) ну и проверяй длину кода отдельно
да несколько не однообразно, ну что делать |
|||
16
vde69
03.09.14
✎
10:34
|
(12) или например общие реквизиты у документов, угадай где они :)
|
|||
17
Ненавижу 1С
гуру
03.09.14
✎
10:34
|
(13) ты просто не знаешь какое зло эта "попытка"
|
|||
18
1Сергей
03.09.14
✎
10:34
|
(12) его может не быть
|
|||
19
vde69
03.09.14
✎
10:36
|
(15) ты не понял, его физически в таблице нет, колонки нет! и запрос вылетет с ошибкой :)
|
|||
20
bolobol
03.09.14
✎
10:52
|
(17) И какое ж зло это - попытка? Не поясните?
|
|||
21
Маленький Вопросик
03.09.14
✎
10:57
|
Я кстати тоже подумал над попыткой. -почему мегазло???
|
|||
22
PLUT
03.09.14
✎
10:59
|
||||
23
PLUT
03.09.14
✎
11:01
|
вот еще про попытки исключение и остановка по ошибке в отладчике
http://forum.infostart.ru/forum26/topic56814/ |
|||
24
Ненавижу 1С
гуру
03.09.14
✎
11:17
|
(20)(21) вы теряете ошибку, все проходит "хорошо", но результат может быть плачевен
|
|||
25
дедушка Вах
03.09.14
✎
11:20
|
(22) (24) ну это смотря где пытаться проверять
в приначалеработысистемы или в приоткрытии, если внешняя обработка - ничего не будет |
|||
26
дедушка Вах
03.09.14
✎
11:25
|
+ флажок один раз зарядил - и работай себе не хочу
а про метаданные в 150-ти местах вставлять - это каждый тормоз может |
|||
27
Godofsin
03.09.14
✎
11:28
|
(24) Например?
|
|||
28
DCKiller
03.09.14
✎
11:46
|
(10) Речь про документ вообще-то, а не про задачу и не про справочник
|
|||
29
DCKiller
03.09.14
✎
11:48
|
(8) Вообще-то в таких случаях сначала делается проверка на существование вида документа, а уже потом его реквизитов.
|
|||
30
DCKiller
03.09.14
✎
11:50
|
+(10) адресата у задачи и код у справочника надо искать через СтандартныеРеквизиты
|
|||
31
mzelensky
03.09.14
✎
11:54
|
(30) У стандартных реквизитов НЕТ метода "НАЙТИ" - только перебором, либо через "заполнитьЗначенияСвойств", либо через попытку
|
|||
32
mzelensky
03.09.14
✎
11:57
|
(0) Вот тебе универсальная процедура. Кинь в общий модуль и пользуйся:
Функция ЕстьРеквизитДокумента(ИмяРеквизита, МетаданныеДокумента) Экспорт Если МетаданныеДокумента.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда //<--Maximus Для Каждого Реквизит Из МетаданныеДокумента.СтандартныеРеквизиты цикл Если Врег(Реквизит.Имя) = Врег(ИмяРеквизита) Тогда Возврат Истина; КонецЕсли; КонецЦикла; //Maximus--> Возврат Ложь; Иначе Возврат Истина; КонецЕсли; КонецФункции // ЕстьРеквизитДокумента() |
|||
33
bolobol
03.09.14
✎
11:57
|
(24) Конструкцией, позволяющей отработать ошибку, вы умудряетесь её потерять?? Вспоминается анекдот: а где шары металлические? - один сломал, второй про..терял.
|
|||
34
Адский плющ
03.09.14
✎
11:59
|
Конечно, это сугубое ИМХО. Я считаю при хорошей архитектуре решения не должна вставать необходимость выяснения наличия реквизитов.
|
|||
35
Ненавижу 1С
гуру
03.09.14
✎
12:03
|
(34) имело место быть на больших кусках, вложенных в Попытка
|
|||
36
bolobol
03.09.14
✎
12:03
|
(22) (23) - осилил, но так и не понял, зачем к серьёзному вопросу ссылки на ламерские топики?
|
|||
37
Адский плющ
03.09.14
✎
12:10
|
(24) +1
Попытка хороша, когда в блоке "Исключение" вызывается исключение. Ну кроме пользовательского уровня, когда в исключении просто выводится более вежливое сообщение. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |