Здравствуйте!
Подскажите как мне сделать проверку в форме на наличие реквизита.
При открытии формы программно создается реквизит и нужно поставить проверку,
если есть такой реквизит пропустить, если нет тогда создает.
Я делаю вот так:
Если ЭтаФорма[НаименованиеРеквизита] = Неопределено Тогда
Сообщить(1);
Иначе
Сообщить(2);
КонецЦикла;
Тут получаю ошибка Поле объекта не обнаружено
Подскажите как мне сделать проверку в форме на наличие реквизита.
При открытии формы программно создается реквизит и нужно поставить проверку,
если есть такой реквизит пропустить, если нет тогда создает.
Я делаю вот так:
Если ЭтаФорма[НаименованиеРеквизита] = Неопределено Тогда
Сообщить(1);
Иначе
Сообщить(2);
КонецЦикла;
Тут получаю ошибка Поле объекта не обнаружено
По теме из базы знаний
- Проверка обновления измененных конфигураций
- Полезный код для программистов 1С (часть 1). Управление свойствами элементов формы. Хранение копии данных реквизитов
- Сравнение произвольных данных баз (и РИБ, по правилам конвертаций) по контрольным суммам выбранных реквизитов, работающих на платформе 8.3
- Динамические реквизиты на управляемой форме и передача файла Excel на сервер
- Опять "Поле объекта не обнаружено". Способы проверки
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) при использовании ЗначениеЗаполнено Для Неопределено и Null всегда возвращается Ложь.
Честно не сталкивался ни разу с проверкой реквизита на форме, думал что если реквизита нет как раз и возвращает Неопределено или Null , могу быть не прав, сам только недавно программист
Честно не сталкивался ни разу с проверкой реквизита на форме, думал что если реквизита нет как раз и возвращает Неопределено или Null , могу быть не прав, сам только недавно программист
ПолучитьРеквизиты (GetAttributes)
Синтаксис:
ПолучитьРеквизиты(<Путь>)
Параметры:
<Путь> (необязательный)
Тип: Строка.
Указывает путь к родительскому реквизиту. Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.
Возвращаемое значение:
Тип: Массив.
Массив объектов РеквизитФормы.
Описание:
Получает описание реквизитов формы.
Показать
используйте Попытку
&НаКлиенте
Функция ПроверитьРеквизит(ИмяРеквизита)
Попытка
тест = ЭтаФорма[ИмяРеквизита];
ЕстьРеквизит = Истина;
Исключение
ЕстьРеквизит = Ложь;
КонецПопытки;
Возврат ЕстьРеквизит;
КонецФункции
Показать
Или универсально для любого объекта:
Не люблю умышленно создавать исключения.
Функция ЕстьСвойствоОбъекта(Объект, ИмяСвойства) Экспорт
ЕстьСвоство = Ложь;
Структура = Новый Структура(ИмяСвойства, Неопределено);
ЗаполнитьЗначенияСвойств(Структура, Объект);
Если Структура[ИмяСвойства] = Неопределено Тогда
Структура[ИмяСвойства] = Ложь;
ЗаполнитьЗначенияСвойств(Структура, Объект);
Если Структура[ИмяСвойства] <> Ложь Тогда
ЕстьСвоство = Истина;
КонецЕсли;
Иначе
ЕстьСвоство = Истина;
КонецЕсли;
Возврат ЕстьСвоство;
КонецФункции
ПоказатьНе люблю умышленно создавать исключения.
Alex; TreeDogNight; user934971; user1715233; al-e-ks; BrainWashed; Garik8866; Dolp4in; mc2; kabantus; Anatolia; Rataev; Valerianich; Vary; igor_karma; Yury1001; Sanario; fokses; frkbvfnjh; xdt_savon; gofforsk; Aili; romanpolyashov@yandex.ru; independ; wau8824ru; user797130; collider; NeLenin; Kutuzov; 33lab;
+30
–
Ответить
(10)
Так получше будет
Функция ЕстьСвойствоОбъекта(Знач Объект, ИмяСвойства) Экспорт
ЕстьСвоство = Ложь;
Структура = Новый Структура(ИмяСвойства, Неопределено);
ЗаполнитьЗначенияСвойств(Структура, Объект);
Если Структура[ИмяСвойства] = Неопределено Тогда
Структура[ИмяСвойства] = Ложь;
ЗаполнитьЗначенияСвойств(Структура, Объект);
Если Структура[ИмяСвойства] <> Ложь Тогда
ЕстьСвоство = Истина;
КонецЕсли;
Иначе
ЕстьСвоство = Истина;
КонецЕсли;
Возврат ЕстьСвоство;
КонецФункции
ПоказатьЕстьСвоство = Ложь;
Структура = Новый Структура(ИмяСвойства, Неопределено);
ЗаполнитьЗначенияСвойств(Структура, Объект);
Если Структура[ИмяСвойства] = Неопределено Тогда
Структура[ИмяСвойства] = Ложь;
ЗаполнитьЗначенияСвойств(Структура, Объект);
Если Структура[ИмяСвойства] <> Ложь Тогда
ЕстьСвоство = Истина;
КонецЕсли;
Иначе
ЕстьСвоство = Истина;
КонецЕсли;
Возврат ЕстьСвоство;
КонецФункции
Так получше будет
// Проверяет наличие реквизита или свойства у произвольного объекта без обращения к метаданным.
//
// Параметры:
// Объект - Произвольный - объект, у которого нужно проверить наличие реквизита или свойства;
// ИмяРеквизита - Строка - имя реквизита или свойства.
//
// Возвращаемое значение:
// Булево - Истина, если есть.
//
Функция ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита) Экспорт
КлючУникальности = Новый УникальныйИдентификатор;
СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект);
Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
КонецФункции
Показать
kaliuzhnyi; denissa; VKuser367237669; nick_krsk; myoker; AndreySchel; chubajs12; user1715233; as7bs; user1671936; chemezov; WindFinder; magv; prosto_username; user1890910; walp; andrew_alen; raul19996; Altez50; Renesans; mc2; hcooh; kabantus; avmironov; igmis; user1840125; Valerianich; BlinOFF; silkwey; Pavel_Vladivostok; Demlan; wauri; eufes; zoikins; rusmil; Alex17; redsun; fieryfist; iosys_yuri; frkbvfnjh; pavlov_a; katrineKA; eaa; mip128; rpgshnik; Mallok; z.snega; NeLenin; arshanskiyav; tdml; Kutuzov; Sergey_Borisovi4; GRAFin.by; volkov-mv;
+54
–
Ответить
(12)
Вероятно позабыли указать что это функция БСП
ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта
Вероятно позабыли указать что это функция БСП
ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта
kaliuzhnyi; Basil_Kudinov; user659168_xec8787; Stas84; malenushka1; Nad_kin; myoker; ZDmitry83; hesseL; kometa1308; AndreySchel; user934971; God_loki; so-lf; Wersia; toliman; kimskiysanya; denisros; user1114234; as7bs; creatermc; Fatenm; WindFinder; Teplotrassamen; vita8383; prosto_username; Valerianich; user1890910; HIVvich; raul19996; ipzotov; user717534; hcooh; kabantus; Antonio; avmironov;
+36
–
Ответить
Для обычных форм:
Или
Если прямо в форме ищем...
Для управляемых "ЭтаФорма" не сработает вроде)) (Если не ошибаюсь, то там просто "Форма", и не "ЭлементыФормы" а "Элементы")
Но реквизиты формы есть только у управляемых форм.
Там их так же можно поискать, добавить, добавить элемент и привязать к реквизиту...
ЭтаФорма.ЭлементыФормы.Найти("Реквизит") = Неопределено
Или
ЭлементыФормы.Найти("Реквизит") = Неопределено
Если прямо в форме ищем...
Для управляемых "ЭтаФорма" не сработает вроде)) (Если не ошибаюсь, то там просто "Форма", и не "ЭлементыФормы" а "Элементы")
Но реквизиты формы есть только у управляемых форм.
Там их так же можно поискать, добавить, добавить элемент и привязать к реквизиту...
Функция ЗначениеСвойстваОбъекта(Объект, ИмяСвойства, ЗначениеСвойства) Экспорт
Структура = Новый Структура(ИмяСвойства);
ЗаполнитьЗначенияСвойств(Структура, Объект);
Возврат Структура.Свойство(ИмяСвойства,ЗначениеСвойства)
И ЗначениеЗаполнено(ЗначениеСвойства)
КонецФункции
Я так к слову, если нужно к примеру обойти элементы формы и установить признак Доступность, то для декорации формы
Структура = Новый Структура("Доступность");
ЗаполнитьЗначенияСвойств(Структура, Элемент);
выдаст ошибку для декорации формы.
Структура = Новый Структура("Доступность");
ЗаполнитьЗначенияСвойств(Структура, Элемент);
выдаст ошибку для декорации формы.
(29) Лучше просто Элементы.Найти("Реквизит") = Неопределено или ЭтотОбъект.Элементы.Найти("Реквизит") = Неопределено, проверял наличие колонки динамического списка на форме при смене страниц чтобы не удалять и заново не добавлять, ркв. добавлен в произвольный запрос ДС.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот