На своей общей форме выбираем Самовывоз/Доставка, меняем оформление без изменения данных и наблюдаем отдельный числовой флажок.
Где и как запускать
Полный модуль своей управляемой общей формы УчебныеЭлементы85 → Общие формы → Уч85Флажки. Серверные и клиентские процедуры вместе; не выполнялся.
Подготовка
Общая подготовка семейства: новая отдельная файловая база 8.5.1.1343, конфигурация УчебныеЭлементы85, русский встроенный язык, совместимость Не использовать, управляемое приложение и интерфейс Такси. Windows, тонкий или толстый управляемый клиент. Нет расширений, подписок и фоновых обработчиков. Здесь база не создавалась и код не запускался.
Общие → Общие формы → управляемая форма Уч85Флажки. Реквизиты: НужнаДоставка Булево; СостояниеСогласования Число(1,0), знак Любой; ОписаниеРезультата Строка(300). Не создавайте справочники, документы и регистры. АвтоматическоеСохранениеДанныхВНастройках=НеИспользовать.
Поле Доставка: Вид=ПолеФлажка, ПутьКДанным=НужнаДоставка. Отдельное поле Согласование: Вид=ПолеФлажка, ПутьКДанным=СостояниеСогласования. Оба поля вне таблиц. Поле Результат связано с ОписаниеРезультата и ТолькоПросмотр=Да.
Создайте команды формы Картинки, Текст, Сбросить и кнопки с этими командами; назначьте одноимённые действия. ПриИзменении поля Доставка → ДоставкаПриИзменении; поля Согласование → СогласованиеПриИзменении. ПриСозданииНаСервере формы → одноимённая процедура.
Основной блок вставляется как полный модуль общей формы, не внутрь обработчика. Дополнительный короткий блок — полный модуль общей команды ОткрытьУч85Флажки без параметра. Добавьте её в интерфейс собственной учебной подсистемы и разрешите форму/команду в своей роли.
F7, обновление только нового стенда, запуск своей общей команды. Не изменяйте рабочую конфигурацию. Серверные настройки здесь меняют данные/элементы текущей общей формы, не пишут базу и не меняют глобальный стиль пользователя.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПроверитьСвойСтенд();
НастроитьСвоиФлажки();
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвойСтенд()
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Откройте собственную новую учебную базу нужной версии";
КонецЕсли;
Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() <> ВариантИнтерфейсаКлиентскогоПриложения.Такси Тогда
ВызватьИсключение "Этот опыт подготовлен для управляемого desktop-интерфейса Такси";
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НастроитьСвоиФлажки()
ПроверитьСвойСтенд();
НужнаДоставка = Ложь;
СостояниеСогласования = 0;
ПолеДоставки = Элементы.Доставка;
ПолеДоставки.ВидФлажка = ВидФлажка.Тумблер;
ПолеДоставки.ТриСостояния = Ложь;
ПолеДоставки.ОтображениеТумблера = ОтображениеТумблера.Текст;
ПолеДоставки.ФорматРедактирования = "БЛ=Самовывоз;БИ=Доставка";
ПолеДоставки.ОдинаковаяШиринаЭлементов = Истина;
ПолеДоставки.ШиринаЭлемента = 14;
ПолеДоставки.ВысотаЭлемента = 1;
ПолеДоставки.ВысотаЗаголовкаЭлемента = 1;
ПолеДоставки.РастягиватьПоГоризонтали = Ложь;
ПолеДоставки.ЦветРамки = Новый Цвет(60, 90, 120);
ПолеДоставки.ЦветТекста = Новый Цвет(20, 40, 60);
ПолеДоставки.ЦветФона = Новый Цвет(235, 243, 250);
ПолеДоставки.Шрифт = Новый Шрифт("Arial", 11, Истина);
Элементы.Согласование.ВидФлажка = ВидФлажка.Флажок;
Элементы.Согласование.ТриСостояния = Истина;
Если ПолеДоставки.ВидФлажка <> ВидФлажка.Тумблер Или ПолеДоставки.ТриСостояния
Или ПолеДоставки.ОтображениеТумблера <> ОтображениеТумблера.Текст
Или ПолеДоставки.ФорматРедактирования <> "БЛ=Самовывоз;БИ=Доставка"
Или Не ПолеДоставки.ОдинаковаяШиринаЭлементов Или ПолеДоставки.РастягиватьПоГоризонтали
Или Не Элементы.Согласование.ТриСостояния Тогда
ВызватьИсключение "Не подтвердились свои два режима флажков";
КонецЕсли;
ОписаниеРезультата = ПредставлениеСвоегоСостояния(НужнаДоставка, СостояниеСогласования);
КонецПроцедуры
&НаКлиенте
Процедура ДоставкаПриИзменении(Элемент)
ПоказатьСвоеСостояние();
КонецПроцедуры
&НаКлиенте
Процедура СогласованиеПриИзменении(Элемент)
ПоказатьСвоеСостояние();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеСвоегоСостояния(Знач Доставка, Знач Согласование)
Если ТипЗнч(Доставка) <> Тип("Булево") Или ТипЗнч(Согласование) <> Тип("Число") Тогда
ВызватьИсключение "Доставка должна быть Булево, трёхпозиционный флажок — Число";
КонецЕсли;
Возврат СтрШаблон("%1; согласование: числовое значение %2",
Формат(Доставка, "БЛ=Самовывоз;БИ=Доставка"), Строка(Согласование));
КонецФункции
&НаКлиенте
Процедура ПоказатьСвоеСостояние()
ОписаниеРезультата = ПредставлениеСвоегоСостояния(НужнаДоставка, СостояниеСогласования);
КонецПроцедуры
&НаКлиенте
Процедура Картинки(Команда)
УстановитьСвоеОтображениеНаСервере(Истина);
КонецПроцедуры
&НаКлиенте
Процедура Текст(Команда)
УстановитьСвоеОтображениеНаСервере(Ложь);
КонецПроцедуры
&НаСервере
Процедура УстановитьСвоеОтображениеНаСервере(ПоказыватьКартинки)
ПроверитьСвойСтенд();
СтараяДоставка = НужнаДоставка;
СтароеСогласование = СостояниеСогласования;
Поле = Элементы.Доставка;
Если ПоказыватьКартинки Тогда
Поле.ОтображениеТумблера = ОтображениеТумблера.Картинка;
Поле.ОдинаковаяШиринаЭлементов = Ложь;
Поле.РастягиватьПоГоризонтали = Истина;
Поле.ВысотаЭлемента = 0;
Поле.ВысотаЗаголовкаЭлемента = 0;
Иначе
Поле.ОтображениеТумблера = ОтображениеТумблера.Текст;
Поле.ОдинаковаяШиринаЭлементов = Истина;
Поле.РастягиватьПоГоризонтали = Ложь;
Поле.ВысотаЭлемента = 1;
Поле.ВысотаЗаголовкаЭлемента = 1;
КонецЕсли;
Если НужнаДоставка <> СтараяДоставка Или СостояниеСогласования <> СтароеСогласование Тогда
ВызватьИсключение "Переключение оформления не должно менять свои значения";
КонецЕсли;
ОписаниеРезультата = ПредставлениеСвоегоСостояния(НужнаДоставка, СостояниеСогласования);
КонецПроцедуры
&НаКлиенте
Процедура Сбросить(Команда)
НастроитьСвоиФлажки();
КонецПроцедурыОткрытьУч85Флажки
УчебныеЭлементы85 → Общие → Общие команды → ОткрытьУч85Флажки → Модуль
Полный модуль собственной общей команды; не выполнялся.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("ОбщаяФорма.Уч85Флажки");
КонецПроцедурыРазбор по шагам
Расширение флажка не создаётся через Новый: оно доступно у реального ПолеФормы вида ПолеФлажка. Доставка связана с Булево и находится вне таблицы — оба условия обязательны для Тумблер.
ТриСостояния=False у доставки. У отдельного Согласование=True и числовой реквизит. Булево имеет два значения; трёхпозиционное состояние не подменяем Неопределено и не объявляем Булево.
БЛ=Самовывоз и БИ=Доставка задают отображаемые подписи ложного/истинного значения в текстовом тумблере. ОписаниеРезультата независимо показывает Формат того же реального реквизита; это не сохранение заказа.
ОтображениеТумблера=Текст показывает подписи. Картинки переключает его в Картинка: пользователь видит галочку/крестик. При этом сохранены оба локальных значения; код проверяет их до/после оформления.
ОдинаковаяШиринаЭлементов=True делает применимой ШиринаЭлемента=14. В режиме Картинка это свойство False: прежняя ШиринаЭлемента остаётся, но по native-контракту не используется. РастягиватьПоГоризонтали переключается отдельно.
ВысотаЭлемента и ВысотаЗаголовкаЭлемента относятся к тумблеру. Картинки ставит 0 для автоматического определения; Текст возвращает явные 1. Значения размеров не объявляются пикселями, точный внешний вид зависит от клиента/шрифта.
ЦветРамки/ЦветТекста/ЦветФона и Шрифт заданы непосредственно одному собственному полю. У обычного флажка вне таблицы фон имеет иные условия; этот урок применяет его к Тумблер.
Изменения свойств с обращением к серверу собраны в серверной процедуре. ПриИзменении только обновляет локальную подпись. Сбросить намеренно сбрасывает оба значения; Текст/Картинки сбросом не являются.
Как проверить результат
Будущий ручной тест: F7, открыть собственную форму командой. Проверить Самовывоз и начальное числовое согласование 0 в readonly результате.
Выбрать Доставка: реквизит Булево должен стать Истина, результат — Доставка. Выбрать Самовывоз: Ложь. Проверить реальные подписи сегментов, не только сообщения.
Не сбрасывая выбранное значение, нажать Картинки, затем Текст. Булево и числовое согласование должны остаться прежними; меняется только оформление.
У отдельного Согласование вручную пройти три визуальных состояния и наблюдать числовые значения в результате. Не выводить смысл конкретного кода состояния из названия бизнес-задачи: модель согласования этому полю ещё не назначена.
Сбросить возвращает Самовывоз, числовое согласование 0 и текстовое оформление. Закрыть/открыть: значения заново инициализируются; нет сохранённого документа или пользовательского предпочтения.
Ожидаемый результат
В будущем собственная форма позволяет переключать Самовывоз/Доставка, сравнить текстовое и графическое оформление и отличить числовой трёхпозиционный флажок от Булево. Все данные только в форме; запуск не выполнялся.
На что обратить внимание
Тумблер допустим для связанного Булево вне таблицы. Не включайте его у числового Согласование; там обычный вид Флажок и ТриСостояния=True.
ШиринаЭлемента не используется при ОдинаковаяШиринаЭлементов=False. ЦветФона вне таблицы имеет смысл для тумблера, а не любого обычного флажка.
Обращение к серверу ради оформления не означает запись базы. Здесь нет Записать, печати, файлов, сети или сохранения настроек пользователя.
Не обещаем одинаковый вид в мобильном клиенте, web-клиенте и интерфейсе Версия 8.5: они не являются средой этого опыта. UI и обработчики требуют будущей ручной проверки; runtimeVerifiedScenarios=0.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.