Связка переменной и атрибута формы.

Новая тема
Показывать по 10 20 40 сообщений
"Платформа 7.7.
Хочется проделать что то вроде такого:

Для i=1 По 10 Цикл
Форма.ПолучитьАтрибут("ПолеСоСписком"+i).УдалитьВсе();
КонецЦикла;

Но метод ПолучитьАтрибут() позволяет обращаться к атрибутам формы, связанным с реквизитами Справочника или Документа, остальные же атрибуты недоступны, как обойти этот момент? Есть идеи?"
А если извратиться как нибудь на подобии как в/с глВзятьКонтекст(...
Час пробовал разные варианты, но не получается...
"Вот и я тоже... достал бубен, стучал, стучал в него и никак :)
Решение, которое работает:
Функция ПолучитьСписокПоНомеру(Арг)
  Если Арг=1 Тогда
     Возврат(ПолеСоСписком1);
  ИначеЕсли Арг=2 Тогда
     Возврат(ПолеСоСписком2);
  ИначеЕсли Арг=3 Тогда
     Возврат(ПолеСоСписком3);
  КонецЕсли;
КонецФункции

Для i=1 По 3 Цикл
ПолучитьСписокПоНомеру(i).УдалитьВсе()
КонецЦикла;

Но когда я вижу такой текст, мне кажется, что это ненормально. Мало того, будучи вынесенной в глобальный модуль, функция ПолучитьСписокПоНомеру() уже не работает, причем никак, не проходят фокусы типа Возврат(Конт.Форма.ПолеСоСписком1);

"
"Предлагаю сделать так:
//думаю описание функции глВзятьКонтекст(Кон) не нужно давать?
//на всякий случай:
Функция глВзятьКонтекст(Конт)
  Возврат Конт;
КонецФункции

//например, для справочника...
//В справочнике (можно вынести во внешную обработку) пишем...
СЗ_Спр = глВзятьКонтекст(Контекст); //это будет список СЗ...

//нужно убрать лишнее

//теперь получим СЗ рекизитов справочника
СЗ_Рек = СоздатьОбъект("СписокЗначений");
Для н_ = 1 по Метаданные.Спрвочник(Вид()).Реквизит() Цикл
  СЗ_Рек.ДобавитьЗначение(Метаданные.Спрвочник(Вид()).Реквизит(н_));
КонецЦикла;

//уберем лишнее из СЗ_Спр
Для н_ = 1 по СЗ_Рек.РазмерСписка() Цикл
  поз = СЗ_Спр.НайтиЗначение(СЗ_Рек.ПолучитьЗначение(н_));
  Если поз>0 Тогда
     СЗ_Спр.УдалитьЗначение();
  КонецЕсли;
КонецЦикла;

//ну а дальше удаляем СтрокуДействияФормы, Закладки (если есть), Параметр
//идём по СЗ_Спр и проверяем на ТипЗначенияСтр(...)="СписокЗначений"

вроде так должно работать!"
"Только вот так получилось:

//ПсЗ1, ПсЗ2, ПсЗ3 - Списки значений на форме
Перем СписокЭлементов;
Процедура Очистить()
//Очищаем списки по списку
Для Ном=1 По 3 Цикл
Стр="""";
ПсС=СписокЭлементов.ПолучитьЗначение(Ном,Стр);
ПсС.УдалитьВсе();
КонецЦикла;
КонецПроцедуры
Процедура ПриОткрытии()
Для Ном=1 По 5 Цикл//Заполняем списки для примера
ПсЗ1.ДобавитьЗначение(Ном);
ПсЗ2.ДобавитьЗначение(Ном*10);
ПсЗ3.ДобавитьЗначение(Ном*100);
КонецЦикла;
//Составляем список списков
СписокЭлементов.ДобавитьЗначение(ПсЗ1);
СписокЭлементов.ДобавитьЗначение(ПсЗ2);
СписокЭлементов.ДобавитьЗначение(ПсЗ3);
КонецПроцедуры
СписокЭлементов=СоздатьОбъект("СписокЗначений");

Победить ПолучитьАтрибут( конечно не получилось, но ПолучитьСписокПоНомеру(Арг) исключили"
"СЗ_Спр = глВзятьКонтекст(Контекст); //это будет список СЗ...

ммм, это будет не список значений. ТипЗначенияСтр(СЗ_Спр)="ГрупповойКонтекст""
"Ага, так очевидно работать будет... Но выглядит тоже грустно:
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора1);
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора2);
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора3);
...
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора10);

В общем, как итог можно сказать... унифицировать тяжело. Учитывая то, что хочется сделать единую процедуру в глобальнике, которая могла бы быть вызвана для разных форм, в каждой из которой различное количество этих списков, то совсем как то не срастается, чего нибудь придумаю, в общем..."
Жду решения, очень интересно.
"да, я ошибся...
хотя такое красивое решение! ;-)))
у меня такое ощущение, что нельзя получить атрибут не зная его!"
"А через FormEx не пробовали?
ФормаРасш = СоздатьОбъект("РасширениеФормы");
ФормаРасш.УстановитьФорму(Форма);
ФормаРасш.ПолучитьАтрибут(...

"
Читают тему
(гостей: 1)

Быстрый переход