Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Работа с множеством одинаковы елементов          
Sede Подменю пользователя
сообщение 28.07.15, 13:59
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 2 раз
Рейтинг: 0

Доброго дня.

Уважаемые знатоки, специалисты, профессионалы, гуру 1с! Преподайте пожалуйста урок грамотности 47067070.gif .

Часто стыкаюсь с необходимостью выполнять одно и тоже действие с несколькими схожими элементами, постоянно спрашивать - не вариант, найти толкового урока, объяснения по этому вопросу не получается.
Любые советы, рекомендации касательно одинаковой множественной обработки (обработка одинаковая но с разными параметрами, либо одна для множества элементов).
Интересуют как бы такие варианты (например):

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


несомненно такие операции можно заключать в циклы и обрабатывать все сразу, а не делать немереным количеством одинаковых строк. Код при это становится в разы короче и выглядит грамотнее.

Всем заранее спасибо! За наглядные примеры отдельная благодарность.

Нонна Подменю пользователя
сообщение 28.07.15, 14:46
Сообщение #2

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 214
Из: Харьков
Спасибо сказали: 50 раз
Рейтинг: 0

Описать отдельную процедуру на установку одинаковых флажков
[необходимо зарегистрироваться для просмотра ссылки]

Спасибо сказали: Sede,

sava1 Подменю пользователя
сообщение 28.07.15, 14:55
Сообщение #3

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Формекс - АттрибутФормы (это коллекция)

Спасибо сказали: Sede,

TipsyKID Подменю пользователя
сообщение 28.07.15, 15:23
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 413
Из: Киев
Спасибо сказали: 161 раз
Рейтинг: 0

Перем мСписокФлаговОднойГруппы;
Функция Присвоить(Чему,Что) Экспорт
     Чему = Что;
     Возврат "";
КонецФункции
//======================================================================
Процедура ПриИзмененииФлагов(НомерФлага)
    для инд = 1 по мСписокФлаговОднойГруппы.РазмерСписка() Цикл
        Шаблон("[Присвоить("+(мСписокФлаговОднойГруппы.ПолучитьЗначение(инд))+","+(?(НомерФлага = инд,1,0))+")]");
    КонецЦикла;
КонецПроцедуры // ПриИзмененииФлагов(НомерФлага)

//Наименование флагов которые связаны между собой ! (Их порядок важен)
//Аналогичные должны быть на форме, с теми-же Идентификаторами, а на вкладке дополнительно вызывать ПриИзмененииФлагов() с соотвецтвующим значением
//Значение = порядковый номер флага

мСписокФлаговОднойГруппы = СоздатьОбъект("СписокЗначений");
мСписокФлаговОднойГруппы.ДобавитьЗначение("Фл1"); //1-й по порядку
мСписокФлаговОднойГруппы.ДобавитьЗначение("Флаг2");//2-й
мСписокФлаговОднойГруппы.ДобавитьЗначение("ОченьКлассныйФлаг");//3-й


Сообщение отредактировал TipsyKID - 28.07.15, 15:24


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

Спасибо сказали: Sede,

Naghual Подменю пользователя
сообщение 28.07.15, 15:29
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Решение чуть проще и чуть быстрее БЕЗ СпискаЗнаачений

Перем индФлаги[6];

Функция Задать(Чему,Что)
    Чему = Что; Возврат "";
КонецФункции

Процедура ИзмФлаги(ИмяЭлемента)
    Перем чЗначенияДругих;
    
    чЗначенияДругих = 1 - Число(Шаблон("["+ИмяЭлемента+"]"));
    Для чИнд = 1 По 6 Цикл
        Если индФлаги[чИнд] <> ИмяЭлемента Тогда
            Шаблон("[Задать("+индФлаги[чИнд]+","+чЗначенияДругих+")]");
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Процедура ПриОткрытии()
    индФлаги[1] = "флАльфа";
    индФлаги[2] = "флБета";
    индФлаги[3] = "флГамма";
    индФлаги[4] = "флЗета";
    индФлаги[5] = "флФита";
    индФлаги[6] = "флПета";
КонецПроцедуры


А в строку Формула в свойствах флажка пишем такой вызов процедуры: ИзмФлаги(Форма.АктивныйЭлемент())
И в данном примере абсолютно не важна последовательность флажков.


Signature
Я желаю всем Счастья!

Спасибо сказали: Sede,

TipsyKID Подменю пользователя
сообщение 28.07.15, 15:38
Сообщение #6

Оратор
Иконка группы
Группа: Местный
Сообщений: 413
Из: Киев
Спасибо сказали: 161 раз
Рейтинг: 0

Зато абсолютно важно, что Ваш код не работает, когда снимается галочка.


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

Naghual Подменю пользователя
сообщение 28.07.15, 15:42
Сообщение #7

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Цитата(TipsyKID @ 28.07.15, 15:38) *
Зато абсолютно важно, что Ваш код не работает, когда снимается галочка.

Код специально написан так, чтобы при снятии галочки, устанавливались галочки на все остальные. Это не баг - это фича! wink.gif
Проверьте если не верите.


Signature
Я желаю всем Счастья!

TipsyKID Подменю пользователя
сообщение 28.07.15, 15:45
Сообщение #8

Оратор
Иконка группы
Группа: Местный
Сообщений: 413
Из: Киев
Спасибо сказали: 161 раз
Рейтинг: 0

Я так понял нас просили проимитировать переключатель, только галочками.
У Вас странный, слишком фичевый, переключатель.
Цитата
// выбор только 1го флажка из 4х (аналог переключателя но нужны именно флажки, потому как нужен вариант без выбора)

Хотя мой вариант тоже не работает так, как просил автор.

Сообщение отредактировал TipsyKID - 28.07.15, 15:47


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

Naghual Подменю пользователя
сообщение 28.07.15, 15:53
Сообщение #9

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Цитата(Sede @ 28.07.15, 13:59) *
массово снять флажок(или установить)

smile.gif На том и стоим! icon_beer17.gif

Наше дело научить (научится?) возможностям реализации.
А конкретную реализацию уже пусть сам топикстартер делает.


Signature
Я желаю всем Счастья!

Спасибо сказали: Sede,

TipsyKID Подменю пользователя
сообщение 28.07.15, 15:55
Сообщение #10

Оратор
Иконка группы
Группа: Местный
Сообщений: 413
Из: Киев
Спасибо сказали: 161 раз
Рейтинг: 0

Моё дело научиться!
Задача показалась мне интерестной, вот я и решил сделать, в первую очередь для себя.
Вот рабочий вариант :
Перем мСписокФлаговОднойГруппы;
//*******************************************
Функция Присвоить(Чему,Что) Экспорт
     Чему = Что;
     Возврат "";
КонецФункции

Функция ПолучитьЗначение(Значение) Экспорт
     Возврат Значение;
КонецФункции

//======================================================================
Процедура ПриИзмененииФлагов(НомерФлага)
    для инд = 1 по мСписокФлаговОднойГруппы.РазмерСписка() Цикл
        ТекЗнач = Шаблон("[ПолучитьЗначение("+(мСписокФлаговОднойГруппы.ПолучитьЗначение(инд))+")]");
        Шаблон("[Присвоить("+(мСписокФлаговОднойГруппы.ПолучитьЗначение(инд))+","+(?(((НомерФлага = инд) И (ТекЗнач = "1")),1,0))+")]");
    КонецЦикла;
КонецПроцедуры // ПриИзмененииФлагов(НомерФлага)

мСписокФлаговОднойГруппы = СоздатьОбъект("СписокЗначений");
мСписокФлаговОднойГруппы.ДобавитьЗначение("Фл1");
мСписокФлаговОднойГруппы.ДобавитьЗначение("Флаг2");
мСписокФлаговОднойГруппы.ДобавитьЗначение("ОченьКлассныйФлаг");


Сообщение отредактировал TipsyKID - 28.07.15, 15:55


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

Спасибо сказали: Sede,

Naghual Подменю пользователя
сообщение 28.07.15, 15:58
Сообщение #11

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Ну а мне показалось интересным реализовать именно так.
В твоем примере было бы проще не условие впихивать в шаблон и на каждой итерации его считать, а в конце, за циклом, присвоить 1 первичному флажку.
Ну то такое.
Мир, Дружба, Жвачка!


Signature
Я желаю всем Счастья!

TipsyKID Подменю пользователя
сообщение 28.07.15, 16:09
Сообщение #12

Оратор
Иконка группы
Группа: Местный
Сообщений: 413
Из: Киев
Спасибо сказали: 161 раз
Рейтинг: 0

Цитата(Naghual @ 28.07.15, 15:58) *
В твоем примере было бы проще не условие впихивать в шаблон и на каждой итерации его считать, а в конце, за циклом, присвоить 1 первичному флажку.

Вот так у Вас и получаются "фичи".
Ничего, что условие зависит от ТекЗнач которое рассчитывается в цикле ?
Если попытаться вынести его за цикл, то у нас получится включить галочку, но не "выключить".
Если, вдруг, я не понял Вашей идеи, прошу код в студию.


Разобрался :

Вы наверно хотели вот так ?
    ТекЗнач = Шаблон("[ПолучитьЗначение("+(мСписокФлаговОднойГруппы.ПолучитьЗначение(НомерФлага))+")]");
    для инд = 1 по мСписокФлаговОднойГруппы.РазмерСписка() Цикл
        Шаблон("[Присвоить("+(мСписокФлаговОднойГруппы.ПолучитьЗначение(инд))+",0)]");
    КонецЦикла;
    
    Шаблон("[Присвоить("+(мСписокФлаговОднойГруппы.ПолучитьЗначение(НомерФлага))+","+ТекЗнач +")]");


Согласен, чисто академически правильнее выходит.

Сообщение отредактировал TipsyKID - 28.07.15, 16:31


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

Naghual Подменю пользователя
сообщение 28.07.15, 16:37
Сообщение #13

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

smile.gif Именно так.


Signature
Я желаю всем Счастья!

sava1 Подменю пользователя
сообщение 28.07.15, 18:06
Сообщение #14

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Формекс - перебор кнопок формы
рФорма=СоздатьОбъект("РасширениеФормы");
    Для н=0 По рФорма.КоличествоАтрибутов()-1 Цикл
        Атрибут=рФорма.ПолучитьАтрибут(н);
        Тип=Атрибут.Тип;
        Если Тип=3 Тогда
            Сообщить("Поймали кнопку ");
            Сообщить(Атрибут.Идентификатор);
        КонецЕсли;
    КонецЦикла;

Спасибо сказали: Sede,

Sede Подменю пользователя
сообщение 29.07.15, 7:41
Сообщение #15

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 2 раз
Рейтинг: 0

Всем спасибо за науку! Наглядные примеры очень информативны и познавательны.
12201689.gif

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 12:35
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!