Имя: Пароль:
1C
1С v8
Как программно узнать основной реквизит управляемой формы?
0 GANR
 
27.11.12
10:59
Имеется объект МояФорма типа "управляемая форма", есть у него реквизиты и 1 из них основной. Как программно узнать, какой именно реквизит основной?

МояФорма.ПолучитьРеквизиты() - вернет массив реквизитов, но какой из них основной - информации нет.
1 RomaH
 
naïve
27.11.12
11:00
а свойства такого нет у реквизита?
2 GANR
 
27.11.12
11:06
(1) У объекта типа "Реквизит формы", массив которых возвращает МояФорма.ПолучитьРеквизиты() есть только
- заголовок (строка)
- имя (строка)
- путь (строка)
- сохраняемые данные (булево)
- тип значения (описание типов)
У формы такого свойства ни в конфигураторе, ни в отладчике не вижу. Может есть, но я просто не знаю? Может метод формы или функция глобального контекста какие-нибудь есть?
3 fisher
 
27.11.12
11:09
Похоже нет явного способа.
Косвенно попытаться извратиться можно конечно...
Конечная цель какая? Первый раз слышу про подобную необходимость...
4 fisher
 
27.11.12
11:10
На лету поменять основной реквизит формы, ИМХО, все равно не получится.
5 GANR
 
27.11.12
11:22
(3) >конечная цель какая?

Добавить команду в контекстное меню ОСНОВНОГО динамического списка формы. Из кучи форм списка в кофе идут обращения к процедуре общего модуля
МойОбщийМодуль.МояПРоцедура(ЭтаФорма);
6 le_
 
27.11.12
12:04
(0) Основной реквизит определяет данные формы.

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

&НаКлиенте
Процедура Команда1(Команда)
   ВызовСервера();
КонецПроцедуры
7 GANR
 
27.11.12
12:18
(6) Хорошо. А если это форма списка?
8 le_
 
27.11.12
12:34
Наверное, проще было бы установить для основных реквизитов форм списка одно имя, например, "Список" и делать потом с ним то, что нужно, получая по имени.
Если через элементы формы, то как-то так:
С = Элементы.Найти("Список");
Если НЕ С = Неопределено Тогда
   //создать меню
КонецЕсли;
9 GANR
 
27.11.12
12:38
(8) Благодарю. Ну, к этому у меня сейчас всё и свелось.
10 GANR
 
27.11.12
12:40
Но если основной динамический список будет называться не "Список" способ (8)-(9) сработает.
11 GANR
 
28.11.12
11:19
AdBlock убивает бесплатный контент. 1Сергей