Изучить числовые состояния трёхсостоянийного флажка

Учебные задачи

Отдельная числовая форма проходит значения 0→1→2→0. Связанный реквизит — Число, а не Булево.

Где и как запускать

Полный модуль собственной обычной формы внешней обработки. Только толстый клиент с обычными формами; действие кнопки — экспортная процедура с первым параметром Элемент, инициировавшим Нажатие.

Подготовка

  1. Создайте отдельную внешнюю обработку с обычной формой. Нужен толстый клиент в режиме обычных форм; рабочая база не используется.

  2. Добавьте обычную кнопку УчебнаяКоманда. ПриОткрытии формы свяжите с одноимённой процедурой из полного модуля; Нажатие кнопки вручную не назначайте.

  3. Кнопка получает собственное Действие в коде. Каждый урок заменяет полный модуль отдельной копии формы; никаких записей документов или настроек нет.

  4. В другой копии добавьте УчебноеСостояние (Число 1.0) и Флажок УчебныйФлажок с Данные = УчебноеСостояние. Не используйте булевый реквизит первого урока.

Процедура ПриОткрытии()
    УчебноеСостояние = 0;
    Флажок = ЭтаФорма.ЭлементыФормы.УчебныйФлажок;
    Флажок.ТриСостояния = Истина;
    Флажок.Заголовок = "Учебные числовые состояния";
    Кнопка = ЭтаФорма.ЭлементыФормы.УчебнаяКоманда;
    Кнопка.Заголовок = "Выполнить учебный шаг";
    Кнопка.УстановитьДействие("Нажатие", Новый Действие("ВыполнитьУчебныйШаг"));
КонецПроцедуры

Процедура ВыполнитьУчебныйШаг(Элемент) Экспорт
    Если ТипЗнч(УчебноеСостояние) <> Тип("Число") Тогда
        ВызватьИсключение "Для трёх состояний нужен числовой реквизит";
    КонецЕсли;
    Если УчебноеСостояние = 0 Тогда
        УчебноеСостояние = 1;
    ИначеЕсли УчебноеСостояние = 1 Тогда
        УчебноеСостояние = 2;
    Иначе
        УчебноеСостояние = 0;
    КонецЕсли;
    Сообщить(УчебноеСостояние);
    Сообщить(ТипЗнч(УчебноеСостояние) = Тип("Число"));
КонецПроцедуры

Разбор по шагам

  1. ТриСостояния = Истина требует числового редактируемого значения; это прямо указано в локальной справке.

  2. Перед изменением проверяем тип. Не применяем логическое Не к числу.

  3. Кнопка задаёт контролируемый цикл 0, 1, 2; показанное число относится к реальному связанному реквизиту.

  4. После каждого шага сравните вид флажка и число. Смысл числового состояния в прикладных данных необходимо описывать отдельно, а не считать его разрешением доставки.

Как проверить результат

  1. Три последовательных нажатия выводят 1, 2, 0; после каждого Истина проверки типа.

  2. Закройте и откройте форму: исходное значение снова 0. Проверьте изменение мышью отдельно.

Ожидаемый результат

Числовой цикл трёхсостоянийного поля не выдается за булевый бизнес-признак.

На что обратить внимание

  1. Не подключайте ТриСостояния к Булево.

  2. Не переносите числа состояния в рабочие перечисления без явного преобразования и бизнес-правила.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.