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


Описания работы с элементом управления 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;

 

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

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

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

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

 

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

 

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

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

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

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

 

 

62 Comments

  1. UncleVader

    За грамматические ошибки, неинформативный скриншот и невнятное описание!

    Статью не дочитал…

    Reply
  2. hanio

    Ставить минус не буду но вот так без скриншотов или еще лучше видео доходит не очень хорошо. Сам перечитай — «… выберем Переключатель 2 …» и что-то там сделаем. Короче информативность и наглядность минусовая.

    Reply
  3. WellMaster

    Ставлю плюс за п.5: «Проверьте стоят ли переключатели в «ПОРЯДКЕ ОБХОДА» по порядку. (например: 13,14,15).»

    Когда-то давно я долго пытался понять, почему у меня один переключатель не в группе.

    Но скриншоты надо бы добавить.

    Reply
  4. mikhailovaew

    Все-таки Переключатель — это не компонент, а элемент управления, стоит поправить заголовок статьи.

    Еще напутано в приведенном программном коде: если мы используем конструкцию Если… ИначеЕсли…, то КонецЕсли должен быть один. Использование вложенных конструкций Если… Иначе… КонецЕсли в данном примере неуместно.

    Reply
  5. ponaroshku

    Помогло найти ошибку в работе, а точнее неработающих моих переключателях

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

    спасибо:)

    Reply
  6. karinamt

    не ругайте так автора, по-моему все понятно. спасибо

    Reply
  7. buba

    считаю доходчиво объяснил

    Reply
  8. dour-dead
    Все-таки Переключатель — это не компонент, а элемент управления, стоит поправить заголовок статьи.

    Согласен, данные текст сбивает с толку.

    Reply
  9. Misanets

    Ну за то что Вы поняли как работает элемент управления, не то что премию дать надо, ну как минимум повысить до руководителя отдела или директора по ИТ 🙂

    Reply
  10. mike581

    А в клюшках переключатели проще. Там не нужно заморачиваться с порядковым номером. А в принципе все изложено подробно и если в кодировании большой перерыв и «очищение мозга» то статья поможет восстановить память

    Reply
  11. DoctorRoza

    В принципе написано достаточно понятно, разобраться можно, но, соглашусь, скриншоты нужны и какая-нибудь обработка для демонстрации кто и какое значение получил тот или иной элемент!

    Reply
  12. andpal

    Если «ТИП ЗНАЧЕНИЯ» выбрать строку и «ВЫБИРАЕМЫМ ЗНАЧЕНИЯМ» назначить: «Неоплачено», «Частично оплачено», «Оплачено», то код станет компактнее

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

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

    P.S. Тут и так жало бы что ничего не понятно.

    Reply
  14. mikhailovaew

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

    Имхо, и то, что в «типе значения» выбирается «число», недостаток статьи — ведь самое интересное отличие от семерки как раз то, что можно выбирать сразу то, что нужно — предопределенное значение справочника, например, или строковое значение.

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

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

    Минусовать не буду, но на полноценную статью публикация не тянет.

    Reply
  15. Letos

    Вот вам пример. У меня есть отчет в нем перечисления: 1. С авансами. 2. Без авансов. 3. Все вместе. В зависимости от выбранного варианта меняется текст запроса. Как прямое присвоение мне тут поможет? Записать текст запросв в принимаемое значение? Это как минимум не удобно и не наглядно, а про то что ко может быть не одну а много строчек, я вообще молчу. И я уже писал о том, что данный пример можно свести в одну строчку. Но упускаете один момент, что это «ПРИМЕР» он не направлен на решение конкретной задачи.

    Reply
  16. V.Nikonov

    (15) А сколько случаев, когда переключателем усталавливается некий процент?

    А кто мешает (кроме наглядности) указать в качесстве значений фрагмент запроса? В частности, удобно указывать имя регистра для запроса…

    Reply
  17. V.Nikonov

    К тому же, автор хорошо реагирует на конструктивную критику. Только за это можно плюсовать.

    Reply
  18. Izotov_E_A

    Да вроде бы все понятно. что не так-то?

    Reply
  19. Dr.DragoN

    Автор молодец, не поленился и написал эту… это пояснение по работе с переключателями.

    Но если быть более объективным, то эта публикация про стандартный элемент управления, принципы работы которого должен знать каждый 1Сник. Что дальше? Основы языковой конструкции Если … КонецЕсли;?

    Reply
  20. Anyxwar

    Ставлю плюс в надежде что автор добавит следующие части

    1.необходим неразрывный порядок обхода по переключателем.Вариант а)включен автопорядок обхода в этом случае переключатели друг под другом работать не будут.Следует снять с формы использование автопорядка и если необходимо вручную указать порядок следования.

    2.Добавить скрины.Думаю плюсов будет гораздо больше

    Reply
  21. Dimkasan

    а по мне, так исключительной пользы публикация — поставлю плюс без лишних размышлений 🙂 во всяком случае, ищется через яндекс намного легче, чем описание встроенного языка и вступительная статья о переключателях.

    Reply
  22. FlexL

    а еще можно добавить, что если вы в свойствах не видите «выбираемое значение» то отожмите в свойствах отбор (только важные ) ….

    Reply
  23. webester

    (19) Эка вы хватанули, это слишком сложно для начинающего, надо начинать с «Перем» и «;» в конце строки сделать статью на пару страниц со скринами и развернутым описанием как правильно и как неправильно, вдруг кому будет непонятно, очень важно заметить подводные камни, итд. Может это кого то заставит задуматься и что нить проверить как в (5) например.

    Reply
  24. teplova

    А мне эта статья оч.помогла! Спсибо! А то я целый день с этим переключателем долбилась, пока не переименовала 🙂 И не надо ругать автора!!!

    Reply
  25. tronox

    Статья автора полезна, мне помогло. Спасибо!

    Reply
  26. serg1983

    в управляемой форме кто то переключатели делал?

    не могу понять как настроить!

    Reply
  27. Mayak

    (26) serg1983,

    1. добавляете реквизит с типом Число.

    2. Размещаете на форме и вид вместо поля ввода ставите Поле переключателя

    3. Задаете кол-во колонок, список выбора.

    Reply
  28. serg1983

    (27) Mayak, спасибо уже разобрался

    Reply
  29. v.l.

    Ничего личного, грамматические ошибки и оформление кода.

    Минус.

    «правЕльного» правильно написать «правИльного».

    Reply
  30. v.l.

    (11) DoctorRoza, не нужна обработка.

    Reply
  31. It-developer

    wtf! При чем тут 8.2? Я искал по УФ переключатели :(((

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

    ЛОЖЬ.

    Тема переключателей разжёвана и переварена.

    Гугл: переключатели на форме

    В руководстве и СП чётко и конкретно написано:

    Переключатели используют в тех случаях, когда требуется выбрать только одно числовое значение из небольшого числа возможных фиксированных вариантов. Переключатели, определяющие одно значение, относятся к одной группе. Для каждой группы переключателей необходимо назначить первый в группе элемент, которому присваивается имя изменяемого значения. Относящиеся к одной группе переключатели должны следовать строго друг за другом в порядке обхода после первого в группе.

    Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.

    (С) Синтакс-помощник

    Reply
  33. sick_russian

    в первую очередь бросились в глаза правельный и не верный порядки)

    Reply
  34. sick_russian

    как то давно искал как работать с переключателями сам, но не нашел.. в итоге разобрался сам, но статья полезная)

    Reply
  35. ogion

    А если не ставятся в ВыбираемоеЗначение ни какие числа?

    Reply
  36. Letos

    (35) ogion,

    1. проверьте стоит ли галочка «ПервыйВГруппе»

    2. Если галочка стоит, в элементе который вы указали первым проверьте тип значение.

    Reply
  37. kote

    .. ббб… ну и … реализовал в 1С этот элемент управления.. остается пожелать ему, чтоб у него все складывалось поудачнее, чем он это сделал для нас.

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

    тут выше писали, что типа в руководстве можно прочитать, как с ним работать.. ну что сказать.. хреново сделано, значит, раз за такой фигней приходится лезть в руководство. А теперь просто прикиньте, сколько человекочасов потеряно — из-за этой недоработки 1С.. уж при переходе с 1С7 на 1С8 могли озадачиться да поправить, там вопрос обратной совместимости не стоял же — да нет.. тупо в лоб скопировали. Ну что тут скажешь — в этом вся 1С. Зато — НАШЕ.

    Reply
  38. natarezn

    да. классно написано. представтье себе за три часа работы в семерке забыла 1с 8 УПП!

    Reply
  39. TigeRuS

    А я до сих пор не нашел о правильной последовательности действий при добавлении и пользовании переключателей.

    Вот смотрите:

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

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

    Делаю все по инструкции:

    1. Создадим на форме три переключателя. Для удобства не будем менять названий.

    (сделал 2 переключателя)

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

    (тут только флажок «первый в группе» поставил, т.к. остальное и было по умолчанию)

    3. Выделяем «Переключатель2» в графе «ВЫБИРАЕМОЕ ЗНАЧЕНИЕ» поставим 1.

    (не ставится!!!)

    Reply
  40. TigeRuS

    Скачать исходник не получается. Валюты не хватает.

    Reply
  41. TigeRuS

    Странно…

    Удалил радиобаттоны и заново добавил на форму. И все работает… Что же я в прошлых натыкал?))

    Reply
  42. ra9000

    Привет, Я разобрался.

    Выше написано проверьте порядок обхода…

    Как только поставил подряд все переключатели.

    Все заработало и дает вставить значение!!!

    Все круто — работает.

    Reply
  43. kroitoru.g.g

    (19) Dr.DragoN, А я с вами не согласен.

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

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

    Но в 1С переключатели как-то «нетривиально» организованы, что пришлось ознакомиться.

    Автору спасибо за труды.

    Reply
  44. Vogde

    Спасибо автору, все доступно описано. У меня все получилось с первого раза!

    Reply
  45. fzt

    (14) mikhailovaew, за то, что по запросу в гугле «1с переключатель», первой ссылкой развернутый ответ с описанием подводного камня — порядок обхода. А в книжке бумажной вы сами ищите. Зачем равнять под себя.

    Reply
  46. deni1982

    Делаю все как в этой статье, работает. Но кто знает как сохранить выбранное значение переключателя при повторном открытии формы справочника?

    Reply
  47. Letos

    (46) deni1982, тут только два варианта.

    1. создавать реквизит и в него записывать значение.

    2. писать реагирование вашего переключателя на изменения данных

    Например:

    2.1 ваш переключатель открывает доступ к некоторой табличной части, в которую вы добавляете данные. В обработку формы [при открытии формы]. Вы проверяете количество записей в таблице

    Если ВашаТаблица.Количество() > 0 Тогда

    [Присваиваете нужное значение переключателя].

    КоенцЕсли;

    Аналогично с реквизитами, проверяя их на заполненность.

    Reply
  48. Letos

    (49) AlexO, Есть категория людей которые ну просто обожают 1С и закрывают глаза на все её, порой даже не дыры, а ворота. Сиди как-то два программиста один программировал на С++, другой занимался разработкой баз данных на Delphi и С++. И стояла задача добавить радиобутон. В начале пробовали добавить их таким же методом как это делалось в языках на которых они программировали. Ничего не вышло. Стали читать СП. Так же безрезультатно. (тут стоит отметить, что это были два инженера с красными дипломами, это к тому что ребята не тупые). В итоге проблему победили, потратив на добавления двух кнопок порядка 5 часов. Как-то в других языках программирования подобной проблемы не возникало.

    Reply
  49. Letos

    И не стоит забывать что уже притча во языцех о воде в справочных материалах 1С.

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

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

    А изменение типовой конфигурации, порой, не всегда но такое бывает, что это становятся прогулкой по минному полю. Из последнего — в релизе 64.08 БУХ. получение ФИО главного бухгалтера в счете и в счет-фактуре производится из разных общих модулей. И да это 2 абсолютно одинаковые функции но в разных модулях.

    Reply
  50. It-developer

    хочу такую же статью по УФ. А то ща не могу понять как можно доступностью переключателей, созданных программно управлять и можно ли, скажем, сделать разные шрифты в таких переключателях 🙁

    Reply
  51. Steelvan

    (43) kroitoru.g.g,

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

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

    Dr.DragoN, А я думаю иначе.

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

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

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

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

    Но в 1С переключатели как-то «нетривиально» организованы, что пришлось ознакомиться.

    Автору спасибо за труды.

    Reply
  52. Letos

    Сделать файлы бесплатными не получилось в связи с изменением политики сайта.

    Reply
  53. nazvital

    А если в управляемых формах нужно сделать горизонтальное положение переключателей, то в свойстве поля «КоличествоКолонок» нужно поставить 1 вместо 0. Искать свойство «Группировка», чтобы поставить там Вертикальная не нужно.

    Reply
  54. Overtone

    Было ли здесь или нет, но есть один нюанс: в режиме тумблера автовывод заголовка поля переключателя влияет на ширину кнопок из списка выбора в сторону её уменьшения. Поэтому в режиме тумблера для отображения кнопок из списка выбора поля переключателя в полную ширину заголовок проще всего не выводить.

    Reply
  55. 7OH

    А переключатель с картинками сделать на УФ реально ?

    Собственно вопрос в том, чтобы картинка и позиция переключателя были на одном уровне.

    Reply
  56. stas1976

    а как сделать чтобы он пустой был ? вот открывается документ и у переключателя не стоит кнопка в первом поле, а нигде не стоит ??? у меня 4 значения …соотв-но переключатель зовут СоСклада… пробовал и сосклада=-1 и сосклада =5… если выходит за диапазон то ставится точка в первое поле , если не выходит то в то которое поставил ..а вотчтобы без точки совсем не знаю как…подскажите плиз

    Reply
  57. Letos

    (58) не понял вопроса и задачи.

    Reply
  58. stas1976

    (59) Вот вы открываете форму, а там переключатель на 4 значения. Так вот, надо чтобы он был пустой… То есть точка выбора нигде не стояла. И только потом, пользователь куда-то ткнет мышкой. По умолчанию выбор ставится в первое поле. сосклада = -1 или сосклада = 5 ничего не меняют, точка выбора стоит в 1 поле.

    пс. сосклада имя переключателя.

    Reply
  59. 7OH

    (60) он на то и переключатель, чтобы иметь значение. Вы себе представляете переключатель на свет, но не включенный и не выключенный ? Вот и тут так же.

    Сделайте себе отдельное значение «по-умолчанию», которое нельзя выбирать.

    Reply
  60. 7OH

    (57) Отвечу сам же себе — Список значений ).

    Там картинка отлично в строку вписывается, а отметка регулируется выделенной строкой.

    Reply
  61. stas1976

    (61) да там жесткое требование заказчика было. Я тоже пытался объяснить что переключатель не может «не быть». В результате пришлось делать переключатель из галочек.

    Reply
  62. tovpeko

    Полезная информация! Спасибо!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *