Связка переменной и атрибута формы.
Показывать по
10
20
40
сообщений
- 1
- 2
16.09.2008
15:44
#1
"Платформа 7.7.
Хочется проделать что то вроде такого:
Для i=1 По 10 Цикл
Форма.ПолучитьАтрибут("ПолеСоСписком"+i).УдалитьВсе();
КонецЦикла;
Но метод ПолучитьАтрибут() позволяет обращаться к атрибутам формы, связанным с реквизитами Справочника или Документа, остальные же атрибуты недоступны, как обойти этот момент? Есть идеи?"
Хочется проделать что то вроде такого:
Для i=1 По 10 Цикл
Форма.ПолучитьАтрибут("ПолеСоСписком"+i).УдалитьВсе();
КонецЦикла;
Но метод ПолучитьАтрибут() позволяет обращаться к атрибутам формы, связанным с реквизитами Справочника или Документа, остальные же атрибуты недоступны, как обойти этот момент? Есть идеи?"
16.09.2008
18:57
#2
А если извратиться как нибудь на подобии как в/с глВзятьКонтекст(...
Час пробовал разные варианты, но не получается...
Час пробовал разные варианты, но не получается...
17.09.2008
08:14
#3
"Вот и я тоже... достал бубен, стучал, стучал в него и никак 
Решение, которое работает:
Функция ПолучитьСписокПоНомеру(Арг)
Если Арг=1 Тогда
Возврат(ПолеСоСписком1);
ИначеЕсли Арг=2 Тогда
Возврат(ПолеСоСписком2);
ИначеЕсли Арг=3 Тогда
Возврат(ПолеСоСписком3);
КонецЕсли;
КонецФункции
Для i=1 По 3 Цикл
ПолучитьСписокПоНомеру(i).УдалитьВсе()
КонецЦикла;
Но когда я вижу такой текст, мне кажется, что это ненормально. Мало того, будучи вынесенной в глобальный модуль, функция ПолучитьСписокПоНомеру() уже не работает, причем никак, не проходят фокусы типа Возврат(Конт.Форма.ПолеСоСписком1);
"
Решение, которое работает:
Функция ПолучитьСписокПоНомеру(Арг)
Если Арг=1 Тогда
Возврат(ПолеСоСписком1);
ИначеЕсли Арг=2 Тогда
Возврат(ПолеСоСписком2);
ИначеЕсли Арг=3 Тогда
Возврат(ПолеСоСписком3);
КонецЕсли;
КонецФункции
Для i=1 По 3 Цикл
ПолучитьСписокПоНомеру(i).УдалитьВсе()
КонецЦикла;
Но когда я вижу такой текст, мне кажется, что это ненормально. Мало того, будучи вынесенной в глобальный модуль, функция ПолучитьСписокПоНомеру() уже не работает, причем никак, не проходят фокусы типа Возврат(Конт.Форма.ПолеСоСписком1);
"
17.09.2008
12:01
#4
"Предлагаю сделать так:
//думаю описание функции глВзятьКонтекст(Кон) не нужно давать?
//на всякий случай:
Функция глВзятьКонтекст(Конт)
Возврат Конт;
КонецФункции
//например, для справочника...
//В справочнике (можно вынести во внешную обработку) пишем...
СЗ_Спр = глВзятьКонтекст(Контекст); //это будет список СЗ...
//нужно убрать лишнее
//теперь получим СЗ рекизитов справочника
СЗ_Рек = СоздатьОбъект("СписокЗначений");
Для н_ = 1 по Метаданные.Спрвочник(Вид()).Реквизит() Цикл
СЗ_Рек.ДобавитьЗначение(Метаданные.Спрвочник(Вид()).Реквизит(н_));
КонецЦикла;
//уберем лишнее из СЗ_Спр
Для н_ = 1 по СЗ_Рек.РазмерСписка() Цикл
поз = СЗ_Спр.НайтиЗначение(СЗ_Рек.ПолучитьЗначение(н_));
Если поз>0 Тогда
СЗ_Спр.УдалитьЗначение();
КонецЕсли;
КонецЦикла;
//ну а дальше удаляем СтрокуДействияФормы, Закладки (если есть), Параметр
//идём по СЗ_Спр и проверяем на ТипЗначенияСтр(...)="СписокЗначений"
вроде так должно работать!"
//думаю описание функции глВзятьКонтекст(Кон) не нужно давать?
//на всякий случай:
Функция глВзятьКонтекст(Конт)
Возврат Конт;
КонецФункции
//например, для справочника...
//В справочнике (можно вынести во внешную обработку) пишем...
СЗ_Спр = глВзятьКонтекст(Контекст); //это будет список СЗ...
//нужно убрать лишнее
//теперь получим СЗ рекизитов справочника
СЗ_Рек = СоздатьОбъект("СписокЗначений");
Для н_ = 1 по Метаданные.Спрвочник(Вид()).Реквизит() Цикл
СЗ_Рек.ДобавитьЗначение(Метаданные.Спрвочник(Вид()).Реквизит(н_));
КонецЦикла;
//уберем лишнее из СЗ_Спр
Для н_ = 1 по СЗ_Рек.РазмерСписка() Цикл
поз = СЗ_Спр.НайтиЗначение(СЗ_Рек.ПолучитьЗначение(н_));
Если поз>0 Тогда
СЗ_Спр.УдалитьЗначение();
КонецЕсли;
КонецЦикла;
//ну а дальше удаляем СтрокуДействияФормы, Закладки (если есть), Параметр
//идём по СЗ_Спр и проверяем на ТипЗначенияСтр(...)="СписокЗначений"
вроде так должно работать!"
17.09.2008
13:33
#5
"Только вот так получилось:
//ПсЗ1, ПсЗ2, ПсЗ3 - Списки значений на форме
Перем СписокЭлементов;
Процедура Очистить()
//Очищаем списки по списку
Для Ном=1 По 3 Цикл
Стр="""";
ПсС=СписокЭлементов.ПолучитьЗначение(Ном,Стр);
ПсС.УдалитьВсе();
КонецЦикла;
КонецПроцедуры
Процедура ПриОткрытии()
Для Ном=1 По 5 Цикл//Заполняем списки для примера
ПсЗ1.ДобавитьЗначение(Ном);
ПсЗ2.ДобавитьЗначение(Ном*10);
ПсЗ3.ДобавитьЗначение(Ном*100);
КонецЦикла;
//Составляем список списков
СписокЭлементов.ДобавитьЗначение(ПсЗ1);
СписокЭлементов.ДобавитьЗначение(ПсЗ2);
СписокЭлементов.ДобавитьЗначение(ПсЗ3);
КонецПроцедуры
СписокЭлементов=СоздатьОбъект("СписокЗначений");
Победить ПолучитьАтрибут( конечно не получилось, но ПолучитьСписокПоНомеру(Арг) исключили"
//ПсЗ1, ПсЗ2, ПсЗ3 - Списки значений на форме
Перем СписокЭлементов;
Процедура Очистить()
//Очищаем списки по списку
Для Ном=1 По 3 Цикл
Стр="""";
ПсС=СписокЭлементов.ПолучитьЗначение(Ном,Стр);
ПсС.УдалитьВсе();
КонецЦикла;
КонецПроцедуры
Процедура ПриОткрытии()
Для Ном=1 По 5 Цикл//Заполняем списки для примера
ПсЗ1.ДобавитьЗначение(Ном);
ПсЗ2.ДобавитьЗначение(Ном*10);
ПсЗ3.ДобавитьЗначение(Ном*100);
КонецЦикла;
//Составляем список списков
СписокЭлементов.ДобавитьЗначение(ПсЗ1);
СписокЭлементов.ДобавитьЗначение(ПсЗ2);
СписокЭлементов.ДобавитьЗначение(ПсЗ3);
КонецПроцедуры
СписокЭлементов=СоздатьОбъект("СписокЗначений");
Победить ПолучитьАтрибут( конечно не получилось, но ПолучитьСписокПоНомеру(Арг) исключили"
17.09.2008
14:23
#6
"СЗ_Спр = глВзятьКонтекст(Контекст); //это будет список СЗ...
ммм, это будет не список значений. ТипЗначенияСтр(СЗ_Спр)="ГрупповойКонтекст""
ммм, это будет не список значений. ТипЗначенияСтр(СЗ_Спр)="ГрупповойКонтекст""
17.09.2008
14:25
#7
"Ага, так очевидно работать будет... Но выглядит тоже грустно:
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора1);
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора2);
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора3);
...
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора10);
В общем, как итог можно сказать... унифицировать тяжело. Учитывая то, что хочется сделать единую процедуру в глобальнике, которая могла бы быть вызвана для разных форм, в каждой из которой различное количество этих списков, то совсем как то не срастается, чего нибудь придумаю, в общем..."
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора1);
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора2);
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора3);
...
СписокЭлементов.ДобавитьЗначение(СписокСПолемВыбора10);
В общем, как итог можно сказать... унифицировать тяжело. Учитывая то, что хочется сделать единую процедуру в глобальнике, которая могла бы быть вызвана для разных форм, в каждой из которой различное количество этих списков, то совсем как то не срастается, чего нибудь придумаю, в общем..."
- 1
- 2
Читают тему
(гостей: 1)