Проверка на наличие реквизита в форме

1. user1563139 14.10.21 09:32 Сейчас в теме
Здравствуйте!
Подскажите как мне сделать проверку в форме на наличие реквизита.
При открытии формы программно создается реквизит и нужно поставить проверку,
если есть такой реквизит пропустить, если нет тогда создает.
Я делаю вот так:

Если ЭтаФорма[НаименованиеРеквизита] = Неопределено Тогда
Сообщить(1);
Иначе
Сообщить(2);
КонецЦикла;


Тут получаю ошибка Поле объекта не обнаружено
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. noprogrammer 218 14.10.21 09:39 Сейчас в теме
(1) На текущий момент времени (на сколько я понимаю) нет возможности проверить существование добавленного реквизита кроме как через "попытка\исключение"
2. BullTi 14.10.21 09:37 Сейчас в теме
Посмотрите как работает функция ЗначениеЗаполнено(), скорее всего вам подойдет
3. noprogrammer 218 14.10.21 09:38 Сейчас в теме
(2) Нет, не подойдет, ему нужно не значение реквизита проверить а существует ли сам реквизит (создан или нет)
8. BullTi 14.10.21 09:50 Сейчас в теме
(3) при использовании ЗначениеЗаполнено Для Неопределено и Null всегда возвращается Ложь.
Честно не сталкивался ни разу с проверкой реквизита на форме, думал что если реквизита нет как раз и возвращает Неопределено или Null , могу быть не прав, сам только недавно программист
11. Release 14.10.21 09:55 Сейчас в теме
(8)Насколько я помню, будет вызвано исключение: "поле объекта не существует".
noprogrammer; +1 Ответить
13. noprogrammer 218 14.10.21 12:19 Сейчас в теме
5. Release 14.10.21 09:39 Сейчас в теме
ПолучитьРеквизиты (GetAttributes)
Синтаксис:
ПолучитьРеквизиты(<Путь>)
Параметры:
<Путь> (необязательный)
Тип: Строка. 
Указывает путь к родительскому реквизиту. Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.
Возвращаемое значение:
Тип: Массив. 
Массив объектов РеквизитФормы.
Описание:
Получает описание реквизитов формы.
Показать
noprogrammer; +1 Ответить
6. noprogrammer 218 14.10.21 09:40 Сейчас в теме
(5) точно, совсем забыл про это.
7. soft_wind 14.10.21 09:41 Сейчас в теме
используйте Попытку

&НаКлиенте
Функция  ПроверитьРеквизит(ИмяРеквизита)
	
	Попытка
		тест = ЭтаФорма[ИмяРеквизита];
		ЕстьРеквизит = Истина;
	Исключение
		ЕстьРеквизит = Ложь;
	КонецПопытки;

	Возврат ЕстьРеквизит;

КонецФункции 

Показать
9. user1563139 14.10.21 09:53 Сейчас в теме
Спасибо всем! Попытка помогла
10. Release 14.10.21 09:53 Сейчас в теме
Или универсально для любого объекта:
Функция ЕстьСвойствоОбъекта(Объект, ИмяСвойства) Экспорт
	ЕстьСвоство = Ложь;
	
	Структура = Новый Структура(ИмяСвойства, Неопределено);
	
	ЗаполнитьЗначенияСвойств(Структура, Объект);
	
	Если Структура[ИмяСвойства] = Неопределено Тогда
		Структура[ИмяСвойства] = Ложь;
		
		ЗаполнитьЗначенияСвойств(Структура, Объект);
		
		Если Структура[ИмяСвойства] <> Ложь Тогда
			ЕстьСвоство = Истина;
		КонецЕсли;
	Иначе
		ЕстьСвоство = Истина;
	КонецЕсли;
	
	Возврат ЕстьСвоство;
КонецФункции
Показать

Не люблю умышленно создавать исключения.
12. d.batovskiy 14.10.21 11:55 Сейчас в теме
// Проверяет наличие реквизита или свойства у произвольного объекта без обращения к метаданным.
//
// Параметры:
//  Объект       - Произвольный - объект, у которого нужно проверить наличие реквизита или свойства;
//  ИмяРеквизита - Строка       - имя реквизита или свойства.
//
// Возвращаемое значение:
//  Булево - Истина, если есть.
//
Функция ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита) Экспорт
	
	КлючУникальности   = Новый УникальныйИдентификатор;
	СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
	ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект);
	
	Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
	
КонецФункции
Показать
14. dvk09 20.10.21 12:01 Сейчас в теме
Для обычных форм:
ЭтаФорма.ЭлементыФормы.Найти("Реквизит") = Неопределено

Или
ЭлементыФормы.Найти("Реквизит") = Неопределено

Если прямо в форме ищем...


Для управляемых "ЭтаФорма" не сработает вроде)) (Если не ошибаюсь, то там просто "Форма", и не "ЭлементыФормы" а "Элементы")
Но реквизиты формы есть только у управляемых форм.
Там их так же можно поискать, добавить, добавить элемент и привязать к реквизиту...
15. FatPanzer 15 20.10.21 12:06 Сейчас в теме
(14) Зачем вы ищете элементы, если автор хочет найти реквизиты?
16. dvk09 21.10.21 04:59 Сейчас в теме
17. dvk09 21.10.21 05:59 Сейчас в теме
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист 1С
Москва
зарплата от 150 000 руб. до 200 000 руб.
Полный день

Ведущий разработчик 1С
Москва
зарплата от 250 000 руб.
Полный день

Руководитель проектов 1С
Москва
зарплата от 200 000 руб.
Полный день

Консультант-аналитик 1С
Нижний Новгород
зарплата от 55 000 руб. до 100 000 руб.
Полный день

Аналитик 1С ERP
Санкт-Петербург
зарплата до 200 000 руб.
Полный день