Консультация № 60637
30.10.2006, 08:32
0.00 руб.
0 5 5
Есть форма на ней нисподающие списки
имя у них не затейливое ВыбГруппаN где N=1..13

вопрос как их обработать в цикле??? а не каждое имя вдабливать в модуль

ну что бы получилось что то вроде

см. приложение
оно работает если ИмяОбъекта это явно указанно ВыбГруппа1...ВыбГруппа13
а как сделать что бы оно работало по имени объекта,
а то ломает меня 13 раз копировать один и тот же блок.................

Приложение:
Для сч=1 По 13 ЦиклСправочникТовара.НайтиПоКоду(КодГруппы[сч],0); //Это масив кодов нужных мне групп товаровСсылкаНаТовар=СправочникТовара.ТекущийЭлемент();ТабКальк.ВыбратьСтроки();ИмяОбъекта="ВыбГруппа"+Строка(Сч);ИмяОбъекта.УдалитьВсе();Пока ТабКальк.ПолучитьСтроку()=1 ЦиклЕсли (ТабКальк.Товар.ПринадлежитГруппе(СсылкаНаТовар)=1) и (ТабКальк.ОстТовара>0) тогдаИмяОбъекта.ДобавитьЗначение(ТабКальк.Товар.Код,ТабКальк.Товар.Наименование);КонецЕсли; КонецЦикла;КонецЦикла;

Обсуждение

Неизвестный
30.10.2006, 11:11
общий
это ответ
Здравствуйте, Владислав!

Процедура Сформировать()
спрПоставщики = СоздатьОбъект("Справочник.Поставщик");
Для к = 1 По 4 Цикл
ТекПоставщик = "ВыбПоставщик"+Строка(к);
Шаблон("[спрПоставщики.НайтиЭлемент("+ТекПоставщик+")]");
//в перем. спрПоставщики будет то самое значение
//которое было на форме в перемнных ВыбПоставщик1,
//ВыбПоставщик2,ВыбПоставщик3,ВыбПоставщик4....
КонецЦикла;
КонецПроцедуры

Удачи.
Неизвестный
30.10.2006, 14:14
общий
это ответ
Здравствуйте, Владислав!

К предыдущему ответу:
Ну да, функция Шаблон возвращает строку заменяя вычисляя то что находится в квадратных скобках - а там у тебя как раз процедура, не возвращающая никакого значения...

Как я помню, тебе надо создать функцию типа

Функция УдалитьЗначенияСписка(Спис)
Спис.УдалитьВсе();
Возврат 1;
КонецФункции;

И использовать:
Шаблон("[УдалитьЗначенияСписка("+ИмяОбъекта+")]");

попробуй.... давно было, но я кажется так делал ;)
Неизвестный
30.10.2006, 19:59
общий
это ответ
Здравствуйте, Владислав!

Попробуйте:
ИмяОбъекта=Форма.ПолучитьАтрибут("ВыбГруппа"+Строка(Сч));
Неизвестный
31.10.2006, 00:35
общий
это ответ
Здравствуйте, Владислав!

К предыдущему ответу от Ahab.
Какой смысл писать функцию для удаления значений списка? Логичнее написать функцию, выполняющую сразу все действия... А то ведь если на каждое отдельное действие со списком новую функцию писать...

Функция ДействияСоСписком(Список, СсылкаНаТовар, ТабКальк)
ТабКальк.ВыбратьСтроки();
Список.УдалитьВсе();
Пока ТабКальк.ПолучитьСтроку()=1 Цикл
Если (ТабКальк.Товар.ПринадлежитГруппе(СсылкаНаТовар)=1) и (ТабКальк.ОстТовара>0) тогда
Список.ДобавитьЗначение(ТабКальк.Товар.Код,ТабКальк.Товар.Наименование);
КонецЕсли;
КонецЦикла;
Возврат 1;
КонецФункции;
И потом вызов функции в цикле
Для сч=1 По 13 Цикл
СправочникТовара.НайтиПоКоду(КодГруппы[сч],0);
//Это масив кодов нужных мне групп товаров
СсылкаНаТовар=СправочникТовара.ТекущийЭлемент();
Шаблон("[ДействияСоСписком(ВыбГруппа"+Сч+",СсылкаНаТовар,ТабКальк)]");
КонецЦикла;
Неизвестный
31.10.2006, 16:37
общий
это ответ
Здравствуйте, Владислав!
Если я Вас правильно понял, то попробуйте воспользоваться методом ПолучитьАтрибут("ВыбГруппа"+к);, где к - это число с 1..13.
Успехов...
Форма ответа