Прочитал множество форумов, и нигде не увидел доходчивого описания работы с «Переключателем». Вот решил написать сам.
На МОЙ взгляд наиболее часто встречающаяся ошибка — это неправильное представлении об «Переключателе». Когда вы размещаете несколько «Переключателей», например 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;
Результат работы будет таким же.
//////////////////////////////////////////////////////////////////////////////////////////
Переключатели в управляемых формах (УФ) сделали более интуитивными.
При создании Переключателя нужно помнить о двоице Реквизит, Элемент формы.
В первую очередь вам необходима, создать Реквизит формы. Тип у реквизита устанавливаете, такой, какие значения будет принимать ваш переключатель. Я выбрал тип Строка. Тут у вас есть два вариант: если вы создали реквизит Объекта, то принимаемое вашим переключателем значение будет сохраняться в БД, если вы просто добавляете в список реквизитов формы, то результат принимаемое вашим переключателем сохраняться не будет.
Далее перетаскиваем нужный нам Реквизит в ЭлементыФормы. При создании элемента формы, элемент в свойствах «Вид» — будет иметь тип «Поле ввода». Выбираем из списка «Поле переключатель». В результате у вас получится форма примерно следующего вида:
Заполняем заголовок Элемента формы, цвет, шрифт, расположение и прочие красивости на ваш вкус.
В свойствах элемента формы есть пункт. «Список Выбора» — в нем вы заводите Значения, которые будет принимать ваш переключатель при выборе того или иного пункта. В своём примере я добавил строки с значениями «Записать», «ОтменаПроведения», «Проведение».
После этого ваш переключатель готов к работе.
В зависимости от того является ли ваш переключатель реквизитом Объекта или Реквизитом Формы для получение хранящегося в нем значения вы используете следующий код:
ПереключательЭлементФормыЭлементФормы // обращаетесь напрямик, если это реквизит формы
Объект.ПереключательВнутриБД // обращаетесь через элемент Объект. к вашему реквизиту.
За грамматические ошибки, неинформативный скриншот и невнятное описание!
Статью не дочитал…
Ставить минус не буду но вот так без скриншотов или еще лучше видео доходит не очень хорошо. Сам перечитай — «… выберем Переключатель 2 …» и что-то там сделаем. Короче информативность и наглядность минусовая.
Ставлю плюс за п.5: «Проверьте стоят ли переключатели в «ПОРЯДКЕ ОБХОДА» по порядку. (например: 13,14,15).»
Когда-то давно я долго пытался понять, почему у меня один переключатель не в группе.
Но скриншоты надо бы добавить.
Все-таки Переключатель — это не компонент, а элемент управления, стоит поправить заголовок статьи.
Еще напутано в приведенном программном коде: если мы используем конструкцию Если… ИначеЕсли…, то КонецЕсли должен быть один. Использование вложенных конструкций Если… Иначе… КонецЕсли в данном примере неуместно.
Помогло найти ошибку в работе, а точнее неработающих моих переключателях
плюс за то, что заставило задуматься и проверить порядок обхода
спасибо:)
не ругайте так автора, по-моему все понятно. спасибо
считаю доходчиво объяснил
Согласен, данные текст сбивает с толку.
Ну за то что Вы поняли как работает элемент управления, не то что премию дать надо, ну как минимум повысить до руководителя отдела или директора по ИТ 🙂
А в клюшках переключатели проще. Там не нужно заморачиваться с порядковым номером. А в принципе все изложено подробно и если в кодировании большой перерыв и «очищение мозга» то статья поможет восстановить память
В принципе написано достаточно понятно, разобраться можно, но, соглашусь, скриншоты нужны и какая-нибудь обработка для демонстрации кто и какое значение получил тот или иной элемент!
Если «ТИП ЗНАЧЕНИЯ» выбрать строку и «ВЫБИРАЕМЫМ ЗНАЧЕНИЯМ» назначить: «Неоплачено», «Частично оплачено», «Оплачено», то код станет компактнее
В данном примере, да это так,но он сведется в одну строчку, и кто-то может не понять принципов работы. Чащего всего ведь переключатели используют не для того, что бы текст менялся, а для чего-то более посущественнее.
P.S. Тут и так жало бы что ничего не понятно.
вот не поленилась, достала описание встроенного языка и почитала вступительную статью о переключателях. Что принципиально нового открыл нам автор публикации? За что плюсуем?
Имхо, и то, что в «типе значения» выбирается «число», недостаток статьи — ведь самое интересное отличие от семерки как раз то, что можно выбирать сразу то, что нужно — предопределенное значение справочника, например, или строковое значение.
То есть в указанном автором примере можно было сразу назначить переключателям в качестве значений не 0,1,2, а сразу «Неоплачено», «Частично оплачено», «Оплачено». Тогда код сократился бы до одной строки:
ЭлементыФормы.СостояниеОплаты.Значение = Переключатель1;
Минусовать не буду, но на полноценную статью публикация не тянет.
Вот вам пример. У меня есть отчет в нем перечисления: 1. С авансами. 2. Без авансов. 3. Все вместе. В зависимости от выбранного варианта меняется текст запроса. Как прямое присвоение мне тут поможет? Записать текст запросв в принимаемое значение? Это как минимум не удобно и не наглядно, а про то что ко может быть не одну а много строчек, я вообще молчу. И я уже писал о том, что данный пример можно свести в одну строчку. Но упускаете один момент, что это «ПРИМЕР» он не направлен на решение конкретной задачи.
(15) А сколько случаев, когда переключателем усталавливается некий процент?
А кто мешает (кроме наглядности) указать в качесстве значений фрагмент запроса? В частности, удобно указывать имя регистра для запроса…
К тому же, автор хорошо реагирует на конструктивную критику. Только за это можно плюсовать.
Да вроде бы все понятно. что не так-то?
Автор молодец, не поленился и написал эту… это пояснение по работе с переключателями.
Но если быть более объективным, то эта публикация про стандартный элемент управления, принципы работы которого должен знать каждый 1Сник. Что дальше? Основы языковой конструкции Если … КонецЕсли;?
Ставлю плюс в надежде что автор добавит следующие части
1.необходим неразрывный порядок обхода по переключателем.Вариант а)включен автопорядок обхода в этом случае переключатели друг под другом работать не будут.Следует снять с формы использование автопорядка и если необходимо вручную указать порядок следования.
2.Добавить скрины.Думаю плюсов будет гораздо больше
а по мне, так исключительной пользы публикация — поставлю плюс без лишних размышлений 🙂 во всяком случае, ищется через яндекс намного легче, чем описание встроенного языка и вступительная статья о переключателях.
а еще можно добавить, что если вы в свойствах не видите «выбираемое значение» то отожмите в свойствах отбор (только важные ) ….
(19) Эка вы хватанули, это слишком сложно для начинающего, надо начинать с «Перем» и «;» в конце строки сделать статью на пару страниц со скринами и развернутым описанием как правильно и как неправильно, вдруг кому будет непонятно, очень важно заметить подводные камни, итд. Может это кого то заставит задуматься и что нить проверить как в (5) например.
А мне эта статья оч.помогла! Спсибо! А то я целый день с этим переключателем долбилась, пока не переименовала 🙂 И не надо ругать автора!!!
Статья автора полезна, мне помогло. Спасибо!
в управляемой форме кто то переключатели делал?
не могу понять как настроить!
(26) serg1983,
1. добавляете реквизит с типом Число.
2. Размещаете на форме и вид вместо поля ввода ставите Поле переключателя
3. Задаете кол-во колонок, список выбора.
(27) Mayak, спасибо уже разобрался
Ничего личного, грамматические ошибки и оформление кода.
Минус.
«правЕльного» правильно написать «правИльного».
(11) DoctorRoza, не нужна обработка.
wtf! При чем тут 8.2? Я искал по УФ переключатели :(((
ЛОЖЬ.
Гугл: переключатели на форме
Тема переключателей разжёвана и переварена.
В руководстве и СП чётко и конкретно написано:
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
(С) Синтакс-помощник
в первую очередь бросились в глаза правельный и не верный порядки)
как то давно искал как работать с переключателями сам, но не нашел.. в итоге разобрался сам, но статья полезная)
А если не ставятся в ВыбираемоеЗначение ни какие числа?
(35) ogion,
1. проверьте стоит ли галочка «ПервыйВГруппе»
2. Если галочка стоит, в элементе который вы указали первым проверьте тип значение.
.. ббб… ну и … реализовал в 1С этот элемент управления.. остается пожелать ему, чтоб у него все складывалось поудачнее, чем он это сделал для нас.
ОСОБЕННО порадовало, что мастер создания группы переключателей — создает неработающее .. дОбро
тут выше писали, что типа в руководстве можно прочитать, как с ним работать.. ну что сказать.. хреново сделано, значит, раз за такой фигней приходится лезть в руководство. А теперь просто прикиньте, сколько человекочасов потеряно — из-за этой недоработки 1С.. уж при переходе с 1С7 на 1С8 могли озадачиться да поправить, там вопрос обратной совместимости не стоял же — да нет.. тупо в лоб скопировали. Ну что тут скажешь — в этом вся 1С. Зато — НАШЕ.
да. классно написано. представтье себе за три часа работы в семерке забыла 1с 8 УПП!
А я до сих пор не нашел о правильной последовательности действий при добавлении и пользовании переключателей.
Вот смотрите:
Переключатель1
Переключатель2
Делаю все по инструкции:
1. Создадим на форме три переключателя. Для удобства не будем менять названий.
(сделал 2 переключателя)
2. Выделите «Переключатель1». В его свойстве в разделе «ОСНОВНЫЕ» поставьте галочку первый в группе. «ТИП ЗНАЧЕНИЯ» выберем число. (Далее рассмотрим почему именно число). Длину можно поставить равной единице, но особой функциональности это не несёт.
(тут только флажок «первый в группе» поставил, т.к. остальное и было по умолчанию)
3. Выделяем «Переключатель2» в графе «ВЫБИРАЕМОЕ ЗНАЧЕНИЕ» поставим 1.
(не ставится!!!)
Скачать исходник не получается. Валюты не хватает.
Странно…
Удалил радиобаттоны и заново добавил на форму. И все работает… Что же я в прошлых натыкал?))
Привет, Я разобрался.
Выше написано проверьте порядок обхода…
Как только поставил подряд все переключатели.
Все заработало и дает вставить значение!!!
Все круто — работает.
(19) Dr.DragoN, А я с вами не согласен.
Те, кто работал с формами не только в 1С меня поймут.
Лично я нигде ни когда не читал про переключатели, там как-то все на интуитивном уровне сразу понятно и работает.
Но в 1С переключатели как-то «нетривиально» организованы, что пришлось ознакомиться.
Автору спасибо за труды.
Спасибо автору, все доступно описано. У меня все получилось с первого раза!
(14) mikhailovaew, за то, что по запросу в гугле «1с переключатель», первой ссылкой развернутый ответ с описанием подводного камня — порядок обхода. А в книжке бумажной вы сами ищите. Зачем равнять под себя.
Делаю все как в этой статье, работает. Но кто знает как сохранить выбранное значение переключателя при повторном открытии формы справочника?
(46) deni1982, тут только два варианта.
1. создавать реквизит и в него записывать значение.
2. писать реагирование вашего переключателя на изменения данных
Например:
2.1 ваш переключатель открывает доступ к некоторой табличной части, в которую вы добавляете данные. В обработку формы [при открытии формы]. Вы проверяете количество записей в таблице
Если ВашаТаблица.Количество() > 0 Тогда
[Присваиваете нужное значение переключателя].
КоенцЕсли;
Аналогично с реквизитами, проверяя их на заполненность.
(49) AlexO, Есть категория людей которые ну просто обожают 1С и закрывают глаза на все её, порой даже не дыры, а ворота. Сиди как-то два программиста один программировал на С++, другой занимался разработкой баз данных на Delphi и С++. И стояла задача добавить радиобутон. В начале пробовали добавить их таким же методом как это делалось в языках на которых они программировали. Ничего не вышло. Стали читать СП. Так же безрезультатно. (тут стоит отметить, что это были два инженера с красными дипломами, это к тому что ребята не тупые). В итоге проблему победили, потратив на добавления двух кнопок порядка 5 часов. Как-то в других языках программирования подобной проблемы не возникало.
И не стоит забывать что уже притча во языцех о воде в справочных материалах 1С.
«В 1С есть такая-то возможность, такой-то функционал» — и ты такой радостный — «ДА-ДА! это то, что мне нужно, давай СП расскажи как это работает, ну хотя бы намекни» — но описание заканчивается на том, что функционал этот там существует, а как он работает разбирайтесь сами.
Никогда не забуду в книжке по 1С, которая, вроде бы, призвана открыть завесу тайн, как работает тот или иной механизм. И как в этой самой книге один абзац повторился трижды, на одной странице. Написали один раз, написали его же второй раз но пересказав и третий раз скопировали первый абзац поменяв слова местами. Я специально сравнивал их, просто поменяли слова местами.
А изменение типовой конфигурации, порой, не всегда но такое бывает, что это становятся прогулкой по минному полю. Из последнего — в релизе 64.08 БУХ. получение ФИО главного бухгалтера в счете и в счет-фактуре производится из разных общих модулей. И да это 2 абсолютно одинаковые функции но в разных модулях.
хочу такую же статью по УФ. А то ща не могу понять как можно доступностью переключателей, созданных программно управлять и можно ли, скажем, сделать разные шрифты в таких переключателях 🙁
(43) kroitoru.g.g,
Великий и могучий русский язык. Как тупые американцы.
Dr.DragoN, А я с вами не согласен.
Dr.DragoN, А я думаю иначе.
Те, кто работал с формами не только в 1С меня поймут.
Те, кто работал с формами и в других программах меня поймут.
Лично я нигде ни когда не читал про переключатели, там как-то все на интуитивном уровне сразу понятно и работает.
Лично я других программах разбирался без документации, там как-то все на интуитивном уровне сразу понятно и работает.
Но в 1С переключатели как-то «нетривиально» организованы, что пришлось ознакомиться.
Автору спасибо за труды.
Сделать файлы бесплатными не получилось в связи с изменением политики сайта.
А если в управляемых формах нужно сделать горизонтальное положение переключателей, то в свойстве поля «КоличествоКолонок» нужно поставить 1 вместо 0. Искать свойство «Группировка», чтобы поставить там Вертикальная не нужно.
Было ли здесь или нет, но есть один нюанс: в режиме тумблера автовывод заголовка поля переключателя влияет на ширину кнопок из списка выбора в сторону её уменьшения. Поэтому в режиме тумблера для отображения кнопок из списка выбора поля переключателя в полную ширину заголовок проще всего не выводить.
А переключатель с картинками сделать на УФ реально ?
Собственно вопрос в том, чтобы картинка и позиция переключателя были на одном уровне.
а как сделать чтобы он пустой был ? вот открывается документ и у переключателя не стоит кнопка в первом поле, а нигде не стоит ??? у меня 4 значения …соотв-но переключатель зовут СоСклада… пробовал и сосклада=-1 и сосклада =5… если выходит за диапазон то ставится точка в первое поле , если не выходит то в то которое поставил ..а вотчтобы без точки совсем не знаю как…подскажите плиз
(58) не понял вопроса и задачи.
(59) Вот вы открываете форму, а там переключатель на 4 значения. Так вот, надо чтобы он был пустой… То есть точка выбора нигде не стояла. И только потом, пользователь куда-то ткнет мышкой. По умолчанию выбор ставится в первое поле. сосклада = -1 или сосклада = 5 ничего не меняют, точка выбора стоит в 1 поле.
пс. сосклада имя переключателя.
(60) он на то и переключатель, чтобы иметь значение. Вы себе представляете переключатель на свет, но не включенный и не выключенный ? Вот и тут так же.
Сделайте себе отдельное значение «по-умолчанию», которое нельзя выбирать.
(57) Отвечу сам же себе — Список значений ).
Там картинка отлично в строку вписывается, а отметка регулируется выделенной строкой.
(61) да там жесткое требование заказчика было. Я тоже пытался объяснить что переключатель не может «не быть». В результате пришлось делать переключатель из галочек.
Полезная информация! Спасибо!