Часто стыкаюсь с необходимостью выполнять одно и тоже действие с несколькими схожими элементами, постоянно спрашивать - не вариант, найти толкового урока, объяснения по этому вопросу не получается. Любые советы, рекомендации касательно одинаковой множественной обработки (обработка одинаковая но с разными параметрами, либо одна для множества элементов). Интересуют как бы такие варианты (например):
1. На форме несколько элементов "Поле ввода" содержимое должно обрабатываться по одному и тому-же принципу (одна процедура) но с разными параметрами, как правильно это оформлять? 3. Аналогично п.1 проверка элементов "Поле со списком" (на предмет Текущего значения к примеру). 2. На форме несколько элементов "Флажок", необходимо: проверить их содержимое/массово снять флажок(или установить).
В общем нужны рекомендации касательно обработок нескольких схожих элементов.
Увы мой уровень пока позволяем мне решать такие задачи весьма не грамотно :
// проверка флажков на выбор Если Флаг1=1 тогда сообщить("первый флажок"); Если Флаг2=0 Тогда сообщить ("второй флажок не выбран"); // и т.д. //***** // выбор только 1го флажка из 4х (аналог переключателя но нужны именно флажки, потому как нужен вариант без выбора) Если Флаг1=1 Тогда Флаг2=0; Флаг3=0; Флаг4=0; Конец Если;
Если Флаг2=1 Тогда Флаг1=0; Флаг3=0; Флаг4=0; Конец Если; // и т.д.
// А если название флажков/элементов разные? флАльфа=1; флБета=1; ... флОмега=1; // аналогично флАльфа=0; и т.д. все в 0
несомненно такие операции можно заключать в циклы и обрабатывать все сразу, а не делать немереным количеством одинаковых строк. Код при это становится в разы короче и выглядит грамотнее.
Всем заранее спасибо! За наглядные примеры отдельная благодарность.
Перем мСписокФлаговОднойГруппы; Функция Присвоить(Чему,Что) Экспорт Чему = Что; Возврат ""; КонецФункции //====================================================================== Процедура ПриИзмененииФлагов(НомерФлага) для инд = 1 по мСписокФлаговОднойГруппы.РазмерСписка() Цикл Шаблон("[Присвоить("+(мСписокФлаговОднойГруппы.ПолучитьЗначение(инд))+","+(?(НомерФлага = инд,1,0))+")]"); КонецЦикла; КонецПроцедуры // ПриИзмененииФлагов(НомерФлага)
//Наименование флагов которые связаны между собой ! (Их порядок важен) //Аналогичные должны быть на форме, с теми-же Идентификаторами, а на вкладке дополнительно вызывать ПриИзмененииФлагов() с соотвецтвующим значением //Значение = порядковый номер флага
мСписокФлаговОднойГруппы = СоздатьОбъект("СписокЗначений"); мСписокФлаговОднойГруппы.ДобавитьЗначение("Фл1"); //1-й по порядку мСписокФлаговОднойГруппы.ДобавитьЗначение("Флаг2");//2-й мСписокФлаговОднойГруппы.ДобавитьЗначение("ОченьКлассныйФлаг");//3-й
Сообщение отредактировал TipsyKID - 28.07.15, 15:24
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины
чЗначенияДругих = 1 - Число(Шаблон("["+ИмяЭлемента+"]")); Для чИнд = 1 По 6 Цикл Если индФлаги[чИнд] <> ИмяЭлемента Тогда Шаблон("[Задать("+индФлаги[чИнд]+","+чЗначенияДругих+")]"); КонецЕсли; КонецЦикла; КонецПроцедуры
А в строку Формула в свойствах флажка пишем такой вызов процедуры: ИзмФлаги(Форма.АктивныйЭлемент()) И в данном примере абсолютно не важна последовательность флажков.
Ну а мне показалось интересным реализовать именно так. В твоем примере было бы проще не условие впихивать в шаблон и на каждой итерации его считать, а в конце, за циклом, присвоить 1 первичному флажку. Ну то такое. Мир, Дружба, Жвачка!
В твоем примере было бы проще не условие впихивать в шаблон и на каждой итерации его считать, а в конце, за циклом, присвоить 1 первичному флажку.
Вот так у Вас и получаются "фичи". Ничего, что условие зависит от ТекЗнач которое рассчитывается в цикле ? Если попытаться вынести его за цикл, то у нас получится включить галочку, но не "выключить". Если, вдруг, я не понял Вашей идеи, прошу код в студию. Разобрался : Вы наверно хотели вот так ?
ТекЗнач = Шаблон("[ПолучитьЗначение("+(мСписокФлаговОднойГруппы.ПолучитьЗначение(НомерФлага))+")]"); для инд = 1 по мСписокФлаговОднойГруппы.РазмерСписка() Цикл Шаблон("[Присвоить("+(мСписокФлаговОднойГруппы.ПолучитьЗначение(инд))+",0)]"); КонецЦикла;
рФорма=СоздатьОбъект("РасширениеФормы"); Для н=0 По рФорма.КоличествоАтрибутов()-1 Цикл Атрибут=рФорма.ПолучитьАтрибут(н); Тип=Атрибут.Тип; Если Тип=3 Тогда Сообщить("Поймали кнопку "); Сообщить(Атрибут.Идентификатор); КонецЕсли; КонецЦикла;
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!