gifts2017

Переключатели в 1С Обычный режим и режим УФ

Опубликовал Евгений Изотов (Letos) в раздел Программирование - Практика программирования

Описания работы с элементом управления 1С "Переключатель"

Прочитал множество форумов, и нигде не увидел доходчивого описания работы с «Переключателем». Вот решил написать сам.

На МОЙ взгляд наиболее часто встречающаяся ошибка - это неправильное представлении об «Переключателе». Когда вы размещаете несколько "Переключателей", например 3, на форме, то многие считают что в логике программы это 3 разных объекта, которые влияют друг на друга. Но, по сути, программа воспринимает все 3 «Переключателя» как один объект. И выбор одного из них меняет состояние этого объекта. Рассмотрим пример.

1. Создадим на форме три переключателя. Для удобства не будем менять названий.
2. Выделите «Переключатель1». В его свойстве в разделе «ОСНОВНЫЕ» поставьте галочку первый в группе. «ТИП ЗНАЧЕНИЯ» выберем число. (Далее рассмотрим почему именно число). Длину можно поставить равной единице, но особой функциональности это не несёт.
3. Выделяем «Переключатель2» в графе «ВЫБИРАЕМОЕ ЗНАЧЕНИЕ» поставим 1.
4. Выделяем «Переключатель3» в графе «ВЫБИРАЕМОЕ ЗНАЧЕНИЕ» поставим 2.
По сути 3 и 4 – м действиями вы установили флаг, который будет меняться при выборе соответствующего «Переключателя». В «Переключатель1» по дефолту «ВЫБИРАЕМОЕ ЗНАЧЕНИЕ» стоит ноль.
5. Проверьте стоят ли переключатели в «ПОРЯДКЕ ОБХОДА» по порядку. (например: 13,14,15)(Рис.1). необходим неразрывный порядок  обхода  по переключателем. включен автопорядок обхода (позиции пронумерованы 13, 15, 20)(Рис.2) в этом случае переключатели друг под другом работать не будут.Следует снять с формы использование автопорядка и если необходимо вручную указать порядок следования.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Как установить порядок обхода для реквизитов. Находясь в форме, в меню "Диалог" надо снять галку "Автоматический порядок обхода". После этого можно либо воспользоваться "Диалог"->"Настройка порядка обхода", либо "Диалог"->"Порядок обхода". Наиболее удобным, мне кажется второй способ.  При этом способе у каждого реквизита появляется картинка с номером реквизита. Вам остается только щелкать мышкой по цифрам,  выбирая реквизиты в том порядке, который нужен Вам.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


6. Выделяем «Переключатель1» и пишем у него нужную нам процедуру.
Например:

ЭФ=ЭлементыФормы;
Если Переключатель1=0 Тогда 
           ЭФ.СостояниеОплаты.Значение = "Неоплачено";
ИначеЕсли Переключатель1=1 Тогда 
           ЭФ.СостояниеОплаты.Значение = "Частично оплачено";
ИначеЕсли Переключатель1=2 Тогда
           ЭФ.СостояниеОплаты.Значение = "Оплачено";
КонецЕсли;

 7. Жмём F7. Жмём F5. Смотрим всё работает мы молодцы. И большой БОСС даёт нам премию.

ПОЯСНЕНИЕ К КОДУ

Почему везде стоит "Переключатель1"? Так как уже было сказано, программа воспринимает все три элемента как один, и так как "Переключатель1" является первым в группе, то Его программа и воспринимает как весь элемент, если вы поставите "Переключатель2" основным в группе то проверку правельности надо будет проводить по "Переключатель2".
Ну а откуда "0","1","2"? Те значения, которые принимает объект при переключениях "Переключателей" их мы задавали в пункте 3 и 4.

 

ПОСЛЕСЛОВИЕ:

Данный код приведен как пример работы с переключателями. На мой взгляд так более наглядно и понятно. Но стоит упомянуть, что в "ТипЗначения" можно выбирать сразу то, что нужно - предопределенное значение справочника, перечисления, например, или строковое значение. То есть в указанном примере можно было сразу назначить переключателям в качестве значений не 0,1,2, а сразу "Неоплачено", "Частично оплачено", "Оплачено". И тогда код сведется в одну строчку:

 

    

ЭлементыФормы.СостояниеОплаты.Значение = Переключатель1;

 

Результат работы будет таким же.

//////////////////////////////////////////////////////////////////////////////////////////

Переключатели в управляемых формах (УФ) сделали более интуитивными.

При создании Переключателя нужно помнить о двоице Реквизит, Элемент формы. 
В первую очередь вам необходима, создать Реквизит формы. Тип у реквизита устанавливаете, такой, какие значения будет принимать ваш переключатель. Я выбрал тип Строка. Тут у вас есть два вариант: если вы создали реквизит Объекта, то принимаемое вашим переключателем значение будет сохраняться в БД, если вы просто добавляете в список реквизитов формы, то результат принимаемое вашим переключателем сохраняться не будет. 

 

 Далее перетаскиваем нужный нам Реквизит в ЭлементыФормы. При создании элемента формы, элемент в свойствах "Вид" - будет иметь тип "Поле ввода".  Выбираем из списка "Поле переключатель". В результате у вас получится форма примерно следующего вида:


 

Заполняем заголовок Элемента формы, цвет, шрифт, расположение и прочие красивости на ваш вкус.
В свойствах элемента формы есть пункт. "Список Выбора" - в нем вы заводите Значения, которые будет принимать ваш переключатель при выборе того или иного пункта. В своём примере я добавил строки с значениями "Записать", "ОтменаПроведения", "Проведение". 

После этого ваш переключатель готов к работе.

В зависимости от того является ли ваш переключатель реквизитом Объекта или Реквизитом Формы для получение хранящегося в нем значения вы используете следующий код:

ПереключательЭлементФормыЭлементФормы  // обращаетесь напрямик, если это реквизит формы
Объект.ПереключательВнутриБД           // обращаетесь через элемент Объект. к вашему реквизиту.


 

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Пример:
.epf 6,33Kb
30.06.15
115
.epf 6,33Kb 115 Скачать
Переключатели на управляемых формах
.epf 5,98Kb
30.06.15
16
.epf 5,98Kb 16 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. UncleVader (UncleVader) 07.10.11 10:34
За грамматические ошибки, неинформативный скриншот и невнятное описание!
Статью не дочитал...
stas1kbob; +1 Ответить
2. hanio (hanio) 07.10.11 11:19
Ставить минус не буду но вот так без скриншотов или еще лучше видео доходит не очень хорошо. Сам перечитай - "... выберем Переключатель 2 ..." и что-то там сделаем. Короче информативность и наглядность минусовая.
3. WellMaster (WellMaster) 12.10.11 21:43
Ставлю плюс за п.5: "Проверьте стоят ли переключатели в «ПОРЯДКЕ ОБХОДА» по порядку. (например: 13,14,15)."
Когда-то давно я долго пытался понять, почему у меня один переключатель не в группе.

Но скриншоты надо бы добавить.
rayastar; fzt; +2 Ответить
4. mikhailovaew (mikhailovaew) 13.10.11 12:54
Все-таки Переключатель - это не компонент, а элемент управления, стоит поправить заголовок статьи.

Еще напутано в приведенном программном коде: если мы используем конструкцию Если... ИначеЕсли..., то КонецЕсли должен быть один. Использование вложенных конструкций Если... Иначе... КонецЕсли в данном примере неуместно.
5. Карина -- (ponaroshku) 28.12.11 05:55
Помогло найти ошибку в работе, а точнее неработающих моих переключателях

плюс за то, что заставило задуматься и проверить порядок обхода

спасибо:)
6. Карина Веселова (karinamt) 02.03.12 00:57
не ругайте так автора, по-моему все понятно. спасибо
7. Олег Шипов (buba) 18.04.12 08:28
считаю доходчиво объяснил
8. {ÐƦǑƝȊ} mx (dour-dead) 15.05.12 14:13
Все-таки Переключатель - это не компонент, а элемент управления, стоит поправить заголовок статьи.

Согласен, данные текст сбивает с толку.
9. Alex Misanets (Misanets) 15.05.12 15:16
Ну за то что Вы поняли как работает элемент управления, не то что премию дать надо, ну как минимум повысить до руководителя отдела или директора по ИТ :)
xomaq; omelcha; Vladal; +3 Ответить
10. Михаил Петров (mike581) 16.05.12 01:47
А в клюшках переключатели проще. Там не нужно заморачиваться с порядковым номером. А в принципе все изложено подробно и если в кодировании большой перерыв и "очищение мозга" то статья поможет восстановить память
11. Алексей Роза (DoctorRoza) 16.05.12 09:28
В принципе написано достаточно понятно, разобраться можно, но, соглашусь, скриншоты нужны и какая-нибудь обработка для демонстрации кто и какое значение получил тот или иной элемент!
12. Андрей Чуйков (andpal) 16.05.12 13:07
Если «ТИП ЗНАЧЕНИЯ» выбрать строку и «ВЫБИРАЕМЫМ ЗНАЧЕНИЯМ» назначить: "Неоплачено", "Частично оплачено", "Оплачено", то код станет компактнее
ЭлементыФормы.СостояниеОплаты.Значение = Переключатель1;
13. Евгений Изотов (Letos) 16.05.12 13:20
В данном примере, да это так,но он сведется в одну строчку, и кто-то может не понять принципов работы. Чащего всего ведь переключатели используют не для того, что бы текст менялся, а для чего-то более посущественнее.

P.S. Тут и так жало бы что ничего не понятно.
14. mikhailovaew (mikhailovaew) 16.05.12 16:01
вот не поленилась, достала описание встроенного языка и почитала вступительную статью о переключателях. Что принципиально нового открыл нам автор публикации? За что плюсуем?

Имхо, и то, что в "типе значения" выбирается "число", недостаток статьи - ведь самое интересное отличие от семерки как раз то, что можно выбирать сразу то, что нужно - предопределенное значение справочника, например, или строковое значение.
То есть в указанном автором примере можно было сразу назначить переключателям в качестве значений не 0,1,2, а сразу "Неоплачено", "Частично оплачено", "Оплачено". Тогда код сократился бы до одной строки:
ЭлементыФормы.СостояниеОплаты.Значение = Переключатель1;
Минусовать не буду, но на полноценную статью публикация не тянет.
15. Евгений Изотов (Letos) 16.05.12 17:10
Вот вам пример. У меня есть отчет в нем перечисления: 1. С авансами. 2. Без авансов. 3. Все вместе. В зависимости от выбранного варианта меняется текст запроса. Как прямое присвоение мне тут поможет? Записать текст запросв в принимаемое значение? Это как минимум не удобно и не наглядно, а про то что ко может быть не одну а много строчек, я вообще молчу. И я уже писал о том, что данный пример можно свести в одну строчку. Но упускаете один момент, что это "ПРИМЕР" он не направлен на решение конкретной задачи.
16. Вадим Никонов (V.Nikonov) 06.06.12 18:27
(15) Letos, А сколько случаев, когда переключателем усталавливается некий процент?
А кто мешает (кроме наглядности) указать в качесстве значений фрагмент запроса? В частности, удобно указывать имя регистра для запроса...
17. Вадим Никонов (V.Nikonov) 06.06.12 18:29
К тому же, автор хорошо реагирует на конструктивную критику. Только за это можно плюсовать.
18. Izotov_E_A 19.06.12 15:29
Да вроде бы все понятно. что не так-то?
19. Денис Вахитов (Dr.DragoN) 19.06.12 15:49
Автор молодец, не поленился и написал эту... это пояснение по работе с переключателями.
Но если быть более объективным, то эта публикация про стандартный элемент управления, принципы работы которого должен знать каждый 1Сник. Что дальше? Основы языковой конструкции Если ... КонецЕсли;?
20. Яшин Антон (Anyxwar) 19.07.12 11:09
Ставлю плюс в надежде что автор добавит следующие части
1.необходим неразрывный порядок обхода по переключателем.Вариант а)включен автопорядок обхода в этом случае переключатели друг под другом работать не будут.Следует снять с формы использование автопорядка и если необходимо вручную указать порядок следования.
2.Добавить скрины.Думаю плюсов будет гораздо больше
21. Дмитрий Трифонов (Dimkasan) 23.08.12 10:23
а по мне, так исключительной пользы публикация - поставлю плюс без лишних размышлений :) во всяком случае, ищется через яндекс намного легче, чем описание встроенного языка и вступительная статья о переключателях.
22. FlexLiam (FlexL) 12.02.13 02:22
а еще можно добавить, что если вы в свойствах не видите "выбираемое значение" то отожмите в свойствах отбор (только важные ) ....
23. Роман Ложкин (webester) 12.02.13 03:45
(19) Эка вы хватанули, это слишком сложно для начинающего, надо начинать с "Перем" и ";" в конце строки сделать статью на пару страниц со скринами и развернутым описанием как правильно и как неправильно, вдруг кому будет непонятно, очень важно заметить подводные камни, итд. Может это кого то заставит задуматься и что нить проверить как в (5) например.
24. Татьяна Теплова (teplova) 03.04.13 05:03
А мне эта статья оч.помогла! Спсибо! А то я целый день с этим переключателем долбилась, пока не переименовала :) И не надо ругать автора!!!
25. Александр Николаев (tronox) 14.05.13 16:50
Статья автора полезна, мне помогло. Спасибо!
26. Фантаев Сегрей (serg1983) 21.05.13 15:51
в управляемой форме кто то переключатели делал?
не могу понять как настроить!
27. Sergey (Mayak) 27.05.13 15:10
(26) serg1983,
1. добавляете реквизит с типом Число.
2. Размещаете на форме и вид вместо поля ввода ставите Поле переключателя
3. Задаете кол-во колонок, список выбора.
28. Фантаев Сегрей (serg1983) 28.05.13 11:47
(27) Mayak, спасибо уже разобрался
29. vladal (Vladal) 11.06.13 17:54
Ничего личного, грамматические ошибки и оформление кода.
Минус.
"правЕльного" правильно написать "правИльного".
30. vladal (Vladal) 12.06.13 22:28
(11) DoctorRoza, не нужна обработка.
31. Kostya Zhurov (It-developer) 05.07.13 17:43
wtf! При чем тут 8.2? Я искал по УФ переключатели :(((
32. V. L. (Vladal) 06.07.13 09:28
Прочитал множество форумов, и не где не увидел доходчивого описания работы с «Переключателем». Вот решил написать сам.

ЛОЖЬ.
Тема переключателей разжёвана и переварена.
Гугл: переключатели на форме
В руководстве и СП чётко и конкретно написано:
Переключатели используют в тех случаях, когда требуется выбрать только одно числовое значение из небольшого числа возможных фиксированных вариантов. Переключатели, определяющие одно значение, относятся к одной группе. Для каждой группы переключателей необходимо назначить первый в группе элемент, которому присваивается имя изменяемого значения. Относящиеся к одной группе переключатели должны следовать строго друг за другом в порядке обхода после первого в группе.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
(С) Синтакс-помощник
33. Виталий Быков (sick_russian) 12.07.13 02:50
в первую очередь бросились в глаза правельный и не верный порядки)
34. Виталий Быков (sick_russian) 12.07.13 02:53
как то давно искал как работать с переключателями сам, но не нашел.. в итоге разобрался сам, но статья полезная)
35. Дмитрий Марданов (ogion) 12.09.13 11:32
А если не ставятся в ВыбираемоеЗначение ни какие числа?
36. Евгений Изотов (Letos) 18.11.13 15:37
(35) ogion,
1. проверьте стоит ли галочка "ПервыйВГруппе"
2. Если галочка стоит, в элементе который вы указали первым проверьте тип значение.
37. Котэ Пруидзе (kote) 28.11.13 10:53
.. ббб... ну и ... реализовал в 1С этот элемент управления.. остается пожелать ему, чтоб у него все складывалось поудачнее, чем он это сделал для нас.

ОСОБЕННО порадовало, что мастер создания группы переключателей - создает неработающее .. дОбро

тут выше писали, что типа в руководстве можно прочитать, как с ним работать.. ну что сказать.. хреново сделано, значит, раз за такой фигней приходится лезть в руководство. А теперь просто прикиньте, сколько человекочасов потеряно - из-за этой недоработки 1С.. уж при переходе с 1С7 на 1С8 могли озадачиться да поправить, там вопрос обратной совместимости не стоял же - да нет.. тупо в лоб скопировали. Ну что тут скажешь - в этом вся 1С. Зато - НАШЕ.
38. Вика Козлова (natarezn) 25.02.14 09:56
да. классно написано. представтье себе за три часа работы в семерке забыла 1с 8 УПП!
39. TigeRuS 03.04.14 04:32
А я до сих пор не нашел о правильной последовательности действий при добавлении и пользовании переключателей.
Вот смотрите:

Переключатель1


Переключатель2


Делаю все по инструкции:
1. Создадим на форме три переключателя. Для удобства не будем менять названий.
(сделал 2 переключателя)
2. Выделите «Переключатель1». В его свойстве в разделе «ОСНОВНЫЕ» поставьте галочку первый в группе. «ТИП ЗНАЧЕНИЯ» выберем число. (Далее рассмотрим почему именно число). Длину можно поставить равной единице, но особой функциональности это не несёт.
(тут только флажок "первый в группе" поставил, т.к. остальное и было по умолчанию)
3. Выделяем «Переключатель2» в графе «ВЫБИРАЕМОЕ ЗНАЧЕНИЕ» поставим 1.
(не ставится!!!)


40. TigeRuS 03.04.14 04:33
Скачать исходник не получается. Валюты не хватает.
41. TigeRuS 03.04.14 04:44
Странно...
Удалил радиобаттоны и заново добавил на форму. И все работает... Что же я в прошлых натыкал?))
42. Sergey (ra9000) 30.04.14 10:34
Привет, Я разобрался.
Выше написано проверьте порядок обхода...
Как только поставил подряд все переключатели.
Все заработало и дает вставить значение!!!
Все круто - работает.
43. Георгий Кроитору (kroitoru.g.g) 23.06.14 12:34
(19) Dr.DragoN, А я с вами не согласен.
Те, кто работал с формами не только в 1С меня поймут.
Лично я нигде ни когда не читал про переключатели, там как-то все на интуитивном уровне сразу понятно и работает.
Но в 1С переключатели как-то "нетривиально" организованы, что пришлось ознакомиться.
Автору спасибо за труды.
Мах; fzt; diar01; Sherdrada; Letos; +5 Ответить 2
44. Сергей Дёмин (Vogde) 16.10.14 07:25
Спасибо автору, все доступно описано. У меня все получилось с первого раза!
45. fzt fzt (fzt) 13.12.14 17:26
(14) mikhailovaew, за то, что по запросу в гугле "1с переключатель", первой ссылкой развернутый ответ с описанием подводного камня - порядок обхода. А в книжке бумажной вы сами ищите. Зачем равнять под себя.
46. Денис Д (deni1982) 15.01.15 14:20
Делаю все как в этой статье, работает. Но кто знает как сохранить выбранное значение переключателя при повторном открытии формы справочника?
47. Евгений Изотов (Letos) 21.01.15 16:52
(46) deni1982, тут только два варианта.
1. создавать реквизит и в него записывать значение.
2. писать реагирование вашего переключателя на изменения данных
Например:
2.1 ваш переключатель открывает доступ к некоторой табличной части, в которую вы добавляете данные. В обработку формы [при открытии формы]. Вы проверяете количество записей в таблице

Если ВашаТаблица.Количество() > 0 Тогда
[Присваиваете нужное значение переключателя].
КоенцЕсли;

Аналогично с реквизитами, проверяя их на заполненность.
48. Алекс Ю (AlexO) 23.01.15 17:55
Очередная статья-пересказ своими словами СП.
И очередные "вау!" на 112 уж плюсов. Вот вау так вау за такое...
49. Алекс Ю (AlexO) 23.01.15 17:58
(43) kroitoru.g.g,
Но в 1С переключатели как-то "нетривиально" организованы
В 1с все "нетривиалоьно" организовано, а радиобаттон есть в любой типовой конфе. Посмотрел, записал, реализовал.
Даешь статью на каждый элемент управления. А потом - чем отличается ПолеВвода от ПолеВыбора. А потом - чем они все отличаются от полей в ТП. А потом...
Ооо, тут не 112 - 1112 плюсов можно заработать...
50. Евгений Изотов (Letos) 18.02.15 10:23
(49) AlexO, Есть категория людей которые ну просто обожают 1С и закрывают глаза на все её, порой даже не дыры, а ворота. Сиди как-то два программиста один программировал на С++, другой занимался разработкой баз данных на Delphi и С++. И стояла задача добавить радиобутон. В начале пробовали добавить их таким же методом как это делалось в языках на которых они программировали. Ничего не вышло. Стали читать СП. Так же безрезультатно. (тут стоит отметить, что это были два инженера с красными дипломами, это к тому что ребята не тупые). В итоге проблему победили, потратив на добавления двух кнопок порядка 5 часов. Как-то в других языках программирования подобной проблемы не возникало.
51. Евгений Изотов (Letos) 18.02.15 10:41
И не стоит забывать что уже притча во языцех о воде в справочных материалах 1С.

"В 1С есть такая-то возможность, такой-то функционал" - и ты такой радостный - "ДА-ДА! это то, что мне нужно, давай СП расскажи как это работает, ну хотя бы намекни" - но описание заканчивается на том, что функционал этот там существует, а как он работает разбирайтесь сами.

Никогда не забуду в книжке по 1С, которая, вроде бы, призвана открыть завесу тайн, как работает тот или иной механизм. И как в этой самой книге один абзац повторился трижды, на одной странице. Написали один раз, написали его же второй раз но пересказав и третий раз скопировали первый абзац поменяв слова местами. Я специально сравнивал их, просто поменяли слова местами.

А изменение типовой конфигурации, порой, не всегда но такое бывает, что это становятся прогулкой по минному полю. Из последнего - в релизе 64.08 БУХ. получение ФИО главного бухгалтера в счете и в счет-фактуре производится из разных общих модулей. И да это 2 абсолютно одинаковые функции но в разных модулях.
52. Kostya Zhurov (It-developer) 30.04.15 10:21
хочу такую же статью по УФ. А то ща не могу понять как можно доступностью переключателей, созданных программно управлять и можно ли, скажем, сделать разные шрифты в таких переключателях :(
53. Игорь Steelvan (Steelvan) 03.07.15 10:16
(43) kroitoru.g.g,

Великий и могучий русский язык. Как тупые американцы.

Dr.DragoN, А я с вами не согласен.
Dr.DragoN, А я думаю иначе.

Те, кто работал с формами не только в 1С меня поймут.
Те, кто работал с формами и в других программах меня поймут.

Лично я нигде ни когда не читал про переключатели, там как-то все на интуитивном уровне сразу понятно и работает.
Лично я других программах разбирался без документации, там как-то все на интуитивном уровне сразу понятно и работает.

Но в 1С переключатели как-то "нетривиально" организованы, что пришлось ознакомиться.
Автору спасибо за труды.
54. Евгений Изотов (Letos) 21.07.15 20:55
Сделать файлы бесплатными не получилось в связи с изменением политики сайта.
55. Вталий Назаров (nazvital) 12.09.16 15:21
А если в управляемых формах нужно сделать горизонтальное положение переключателей, то в свойстве поля "КоличествоКолонок" нужно поставить 1 вместо 0. Искать свойство "Группировка", чтобы поставить там Вертикальная не нужно.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа