Как найти реквизит управляемой формы

(3) + Уже сам порылся :

ВсеЭлементыФормы.Найти (FormAllItems.Find)

ВсеЭлементыФормы (FormAllItems)

Найти (Find)

Синтаксис:

Найти(<Имя>)

Параметры:

<Имя> (обязательный)

Тип: Строка.

Имя элемента формы.

Возвращаемое значение:

Тип: Элемент управления; Неопределено.

Элемент управления в форме. Если элемент не найден, то возвращается значение Неопределено.

Описание:

Осуществляет поиск элемента управления с заданным именем.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.

Пример:

Процедура АктивизироватьРеквизитВФорме(ФормаДокумента) Экспорт

   // Структура — порядок активизации реквизитов.

   // Активизируется первый не заполненный.

   СтруктураРеквизитов = Новый Структура;

   СтруктураРеквизитов.Вставить(«Дата»);

   СтруктураРеквизитов.Вставить(«Номер»);

   СтруктураРеквизитов.Вставить(«Организация»);

   СтруктураРеквизитов.Вставить(«Касса»);

   СтруктураРеквизитов.Вставить(«БанковскийСчет»);

   СтруктураРеквизитов.Вставить(«Склад»);

   СтруктураРеквизитов.Вставить(«Контрагент»);

   СтруктураРеквизитов.Вставить(«Получатель»);

   СтруктураРеквизитов.Вставить(«Плательщик»);

   СтруктураРеквизитов.Вставить(«ФизЛицо»);

   Для каждого Элемент Из СтруктураРеквизитов Цикл

       // Определим, есть ли ЭУ с таким именем.

       ЭУ = ВсеЭлементыФормы.Найти(Элемент.Ключ);

       Если ЭУ  <> Неопределено Тогда

           // есть такой элемент

           Если Не ЗначениеЗаполнено(ЭУ.Значение) Тогда

               // Нашли не заполненный ЭУ.

               // Делаем его текущим и прекращаем цикл.

               ФормаДокумента.ТекущийЭлемент = ЭУ;

               Прервать;

           КонецЕсли;

       КонецЕсли;

   КонецЦикла;

КонецПроцедуры

Перейти в раздел примеры кода 1С 8.3:

При наличии в конфигурации БСП, желательно использовать метод ЕстьРеквизитИлиСвойствоОбъекта (ссылка выше). Но что делать если конфигурация нетиповая? Вариантов (в зависимости от поставленной задачи) несколько: скопировать метод из БСП, проверить на свойство объекта, проверить через поиск, использовать попытку (не рекомендуется, только как временная заплатка).

Проверка реквизита через свойство объекта в 1С 8.3:

Функция ПроверкаНаСвойствоОбъекта(Объект, ИмяСвойстваОбъекта) Экспорт

   ЕстьСвойство = Ложь;
   СтруктураОбъекта = Новый Структура(ИмяСвойстваОбъекта, Неопределено);
   ЗаполнитьЗначенияСвойств(СтруктураОбъекта, Объект);

   Если СтруктураОбъекта[ИмяСвойстваОбъекта] = Неопределено Тогда
       СтруктураОбъекта[ИмяСвойстваОбъекта] = Ложь;
       ЗаполнитьЗначенияСвойств(СтруктураОбъекта, Объект);
       Если СтруктураОбъекта[ИмяСвойстваОбъекта] <> Ложь Тогда
           ЕстьСвойство = Истина;
       КонецЕсли;
   Иначе
       ЕстьСвойство = Истина;
   КонецЕсли;

   Возврат ЕстьСвойство;// Булево

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

Проверка реквизита через Найти в 1С 8.3:

Функция ПроверитьНаРеквизит(ИмяРеквизита, МетаданныеДок) // универсальная функция

   // Например ИмяРеквизита=»ДрагМеталлы»;
   Если МетаданныеДок.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
       Возврат Ложь;
   Иначе
       Возврат Истина;
   КонецЕсли;

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

Функция НайтиДрагМеталлы(Номенклатура, Материал, ОсновноеСредство) // пример использования в универсальной обработке

   // если реквизит шапки
   ИмяРеквизита=«ДрагМеталлы»;
   Если Метаданные.Справочники.Товары.Реквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда
       Возврат Номенклатура.ДрагМеталлы;
   ИначеЕсли Метаданные.Справочники.Материалы.Реквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда
       Возврат Материал.ДрагМеталлы;
   ИначеЕсли Метаданные.Справочники.ОсновныеСредства.Реквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда
       Возврат ОсновноеСредство.ДрагМеталлы;
   Иначе
       Возврат Ложь;
   КонецЕсли;

   // если реквизит таб.части
   //Если НЕ ТекущаяСтрока.Свойство(ИмяРеквизита) ИЛИ НЕ ТекущаяСтрока.ДрагМеталлы Тогда
   //    ЗаполнитьЗначенияСвойств(ТаблицаДок.Добавить(), ТекущаяСтрока); // приёмник, источник
   //КонецЕсли;

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

Проверка реквизита через Попытка (&НаКлиенте) в 1С 8.3:

&НаКлиенте
Функция ПроверитьНаНаличиеРеквизитаЧерезПопытку(ИмяРеквизита)

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

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

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

В определенных задачах можно использовать метод в 1С 8.3:

ПолучитьРеквизиты(GetAttributes)

Синтаксис:

ПолучитьРеквизиты(<Путь>)

Параметры:

<Путь> (необязательный)

Тип: Строка.

Указывает путь к родительскому реквизиту. Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.

Возвращаемое значение:

Тип: Массив.

Массив объектов РеквизитФормы.

Описание:

Получает описание реквизитов формы.

Copyright©, «Программист 1С в г.Минске», 06.11.2021

Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник

[Практика программирования] Управляемые формы 1С 8: как программно определить основной реквизит формы

Среди зарезервированных методов и функций 1С 8 на момент написания данной публикации (последний релиз платформы 8.3.20) до сих пор отсутствует код, который бы позволял получить или определить, какой из реквизитов управляемой формы является основным.

Основной реквизит формы в списке реквизитов выделяется жирным шрифтом. Не будем в этом тексте описывать всю суть относительно основного реквизита управляемой формы в 1С, достаточно обратиться к статье на эту тему: «Основной реквизит формы 1С 8».

1с 8 как программно узнать, найти, получить основной реквизит управляемой формы

Необходимость определять основной реквизит управляемой формы возникла в рамках прикладной задачи, которая выразилась в доработке по реализации механизма «печать по умолчанию» в формах документов и справочников, как это было в типовых конфигурациях, работающих в режиме обычного приложения. И, как показала практика, поиск основного реквизита формы возможен и в других прикладных задачах. Поэтому можно найти обсуждения по этому вопросу начиная с 2012 года, например в обсуждении на форуме программирования 1С «Можно ли программно узнать основной реквизит управляемой формы?». Из близких по сути вопроса функций подходит только «Форма.ПолучитьРеквизиты()», но она не является решением, т.к. она только возвращает список всех реквизитов формы, представленный в виде коллекции значений типа «Массив». Проблема отсутствия в коде предопределенной процедуры или функции языка программирования 1С сохраняется. Поэтому не остается ничего, как только с помощью дополнительного кода описать поиск основного реквизита. Исходник кода был найден на странице форума mista. Благодаря тому, что с помощью «ПолучитьРеквизиты()» можно получить список реквизитов формы, а каждый реквизит имеет свойства «Заголовок» типа «Строка», «Имя» типа «Строка», «Путь» типа «Строка», «Сохраняемые данные» типа «Булево», «Тип значения» типа «ОписаниеТипов», становится возможным с помощью кода, пример которого приведен ниже определить основной реквизит управляемой формы в 1С 8:

Реквизиты = Форма.ПолучитьРеквизиты();
Для Каждого Реквизит Из Реквизиты Цикл
      Если ТипЗнч(Форма[Реквизит.Имя]) = Тип(«ДанныеФормыСтруктура») ИЛИ 
               ТипЗнч(Форма[Реквизит.Имя]) = Тип(«ДинамическийСписок») Тогда
                     Возврат Реквизит.Имя;
      КонецЕсли;
КонецЦикла;

Решение базируется на том основании, что в зачастую в типовых решениях 1С 8 основным реквизитом формы является либо реквизит типа «ДанныеФормыСтруктура», либо «ДинамическийСписок». Конечно, в нетиповых решениях или даже в вручную сконфигурированных формах ситуация может быть другой и тогда нужно придумывать еще другой вариант поиска с помощью кода. Но это будет встречаться крайне редко. 
 

Оцените, оказалась ли эта публикация полезна для Вас?




© www.azhur-c.ru 2013-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

10-05-2022

Журавлев А.С.
(Сайт azhur-c.ru)

Назад

При попытке разобраться с другим вопросом, изобрел велосипед:

&НаСервере
Функция  НайтиВозможныйРеквизитформыНаСервере(ИскомыйЭлементНаСервере)
Если Не ИскомыйЭлементНаСервере="" Тогда
Для Каждого Рек из ЭтаФорма.Элементы  Цикл
Если рек.Имя=ИскомыйЭлементНаСервере
Или Рек.Заголовок=ИскомыйЭлементНаСервере
Тогда
Возврат рек.ПутьКДанным;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Истина;
КонецФункции  //НайтиЭлементыНаСервере

&НаКлиенте
Процедура НайтиРеквизит(Команда)
ИмяОбъекта = НайтиВозможныйРеквизитформыНаСервере(ЭлементДляПоиска);
Если ИмяОбъекта=Истина Тогда
Предупреждение("Не найдено");
Иначе
ЭтотОбъект[ИмяОбъекта]=НовоеЗначение;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЭлементДляПоиска="Реквизит1"; НовоеЗначение="Текст нового значения";
КонецПроцедуры

Позволяет найти нужный реквизит, используя обработчик события, например:

Регулирование(Элемент, Направление, СтандартнаяОбработка)А точнее:

Элемент.Имя

Котовчанин

942 / 482 / 200

Регистрация: 16.02.2010

Сообщений: 3,338

Записей в блоге: 37

1

Найти реквизит на форме

29.06.2016, 13:32. Показов 15627. Ответов 10


Студворк — интернет-сервис помощи студентам

Всем доброго времени уток!

Вопрос странный и глупый, но … Как найти реквизит на форме? Пытаюсь провести документ, выдаёт ошибку, мол не заполнен реквизит… А его нет на форме! Нигде. Просмотрела модуль формы — там выполняются операции с этим реквизитом, но я его не вижу…

Как найти?
з.ы. если нужно — сброшу конфу, но она большая.



0



Эксперт 1С

3052 / 1999 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

29.06.2016, 13:37

2

Тамика, какая форма? Обычная или управляемая?



1



Котовчанин

942 / 482 / 200

Регистрация: 16.02.2010

Сообщений: 3,338

Записей в блоге: 37

29.06.2016, 13:39

 [ТС]

3

GreenkA, управляемая.



0



Эксперт 1С

3052 / 1999 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

29.06.2016, 13:44

4

Тамика, см скрин

Найти реквизит на форме

Посмотрите в модуле возможно где-то отключается видимость этого реквизита. Либо возможен вариант автоматического заполнения его при заполнении/выборе другого, в таком случае он на форме может и отсутствовать.
Какая у вас конфигурация? Типовая?



1



Котовчанин

942 / 482 / 200

Регистрация: 16.02.2010

Сообщений: 3,338

Записей в блоге: 37

29.06.2016, 13:49

 [ТС]

5

GreenkA, у меня почему-то другой вид формы… Я не могу открыть её в таком виде.

Найти реквизит на форме



0



Эксперт 1С

3052 / 1999 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

29.06.2016, 13:57

6

Тамика, у вас обычная форма. Тогда сверху в меню Форма-элементы управления



1



Котовчанин

942 / 482 / 200

Регистрация: 16.02.2010

Сообщений: 3,338

Записей в блоге: 37

29.06.2016, 14:00

 [ТС]

7

GreenkA, поискала… Не нашла этот реквизит.



0



Злой самаритянин

182 / 182 / 94

Регистрация: 24.04.2014

Сообщений: 686

29.06.2016, 14:02

8

Лучший ответ Сообщение было отмечено GreenkA как решение

Решение

Тамика, это обычная форма. Чтобы посмотреть, какие реквизиты выведены на форме открой Форма — Размещение данных…

Миниатюры

Найти реквизит на форме
 



1



Котовчанин

942 / 482 / 200

Регистрация: 16.02.2010

Сообщений: 3,338

Записей в блоге: 37

29.06.2016, 14:04

 [ТС]

9

SHIFT_969, да, нашла! Спасибо! И правда рекзвизит без галочки… Но я не понимаю — почему он используется в коде, если он невидим по умолчанию?..



0



58 / 63 / 11

Регистрация: 13.11.2014

Сообщений: 939

30.06.2016, 06:31

10

Цитата
Сообщение от Тамика
Посмотреть сообщение

если он невидим по умолчанию?..

Вроде если он даже не видим, то его все равно можно использовать



0



Эксперт 1С

3052 / 1999 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

30.06.2016, 09:50

11

Тамика, укажите название конфигурации, документа и реквизита.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

30.06.2016, 09:50

Помогаю со студенческими работами здесь

реквизит 7.7
есть реквизит &quot;р1&quot; тип Справочники…. у этого справочника есть реквизиты &quot;р2&quot; и &quot;р3&quot; …
как мне…

реквизит
Здравствуйте, помоги пожалуйста разобраться, как сделать реквизит в документе не доступным для…

Реквизит-объект
Прошу объясните мне. Одно не могу понять. Вот в Delphi7 есть объект..скажем Edit.. если мне надо…

1с 7.7 реквизит с шаблоном
Необходимо сделать так чтобы значение реквизита на форме справочника вводилось определенным видом -…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

11

Понравилась статья? Поделить с друзьями:
  • Как найти среднее расстояние физика
  • Ошибка bad system config info windows 10 как исправить ошибку
  • Как нашли девушку в гараже
  • Как найти флешку сталкера на агропроме
  • Как найти нового мужа с ребенком