Тип: Произвольный. Содержит значение элемента соответствия.
Полное описание, параметры и ограничения
КлючИЗначение.Значение (KeyAndValue.Value)
КлючИЗначение (KeyAndValue)
Значение (Value)
Доступен, начиная с версии 8.0.
Использование:
Только чтение.
Описание:
Тип: Произвольный.
Содержит значение элемента соответствия.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Оформить одну дату при выводе месяца и вызвать Обновить
Обработчик управляемой формы имеет Элемент и ОформлениеПериода, как в реальном модуле КА2. Оформляется только собственное 6 октября.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
Создайте отдельную внешнюю обработку с пустой управляемой основной формой. Каждый урок — полный модуль отдельной копии.
В событиях формы свяжите ПриСозданииНаСервере с процедурой из кода. Не создавайте УчебнаяДата, УчебныйКалендарь и проверочную кнопку вручную.
Код создаёт свой календарь и реквизит Дата с начальным значением 04.10.2026. Нет документов, регистров, файлов или календарей рабочего времени базы.
Для размеров в месяцах нужен режим совместимости выше Версия8_3_2. Здесь предполагается учебная база на 8.5.1.1343 без старого режима совместимости.
Только этот урок запускайте настольным тонким/толстым клиентом, не веб-клиентом. Не копируйте внутрь события серверный код создания формы.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Новые = Новый Массив;
Новые.Добавить(Новый РеквизитФормы("УчебнаяДата", Новый ОписаниеТипов("Дата")));
ЭтаФорма.ИзменитьРеквизиты(Новые);
ЭтаФорма.УчебнаяДата = Дата(2026, 10, 4);
Календарь = Элементы.Добавить("УчебныйКалендарь", Тип("ПолеФормы"));
Календарь.Вид = ВидПоляФормы.ПолеКалендаря;
Календарь.ПутьКДанным = "УчебнаяДата";
Календарь.Заголовок = "Собственная учебная дата";
Календарь.НачалоПериодаОтображения = Дата(2026, 10, 1);
Календарь.КонецПериодаОтображения = Дата(2026, 11, 30);
Календарь.РежимВыделения = РежимВыделенияДаты.Одиночный;
Календарь.УстановитьДействие("ПриВыводеПериода", "УчебныйКалендарьПриВыводеПериода");
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Проверить учебный календарь";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Элементы.УчебныйКалендарь.Обновить();
Сообщить("Проверяйте учебное оформление 06.10.2026 в видимом месяце");
КонецПроцедуры
&НаКлиенте
Процедура УчебныйКалендарьПриВыводеПериода(Элемент, ОформлениеПериода)
УчебныйДень = Дата(2026, 10, 6);
Если УчебныйДень < ОформлениеПериода.НачалоПериода Или УчебныйДень > ОформлениеПериода.КонецПериода Тогда
Возврат;
КонецЕсли;
Пара = ОформлениеПериода.Даты.Получить(УчебныйДень);
Если Пара = Неопределено Тогда
Возврат;
КонецЕсли;
Оформление = Пара.Значение;
Если ТипЗнч(Оформление) <> Тип("ОформлениеДаты") Тогда
ВызватьИсключение "Не получено оформление собственной даты";
КонецЕсли;
Оформление.Доступность = Истина;
Оформление.ОтображатьКакВыходнойДень = Истина;
Оформление.Подсказка = "Только учебное оформление, не рабочий календарь";
Оформление.ЦветФона = Новый Цвет(235, 244, 255);
Оформление.ЦветТекста = Новый Цвет(24, 40, 60);
Сообщить(Пара.Ключ = УчебныйДень И Оформление.Дата = УчебныйДень);
КонецПроцедурыРазбор по шагам
УстановитьДействие связывает реальное событие календаря с клиентской процедурой из этого же полного модуля.
Сигнатура управляемого обработчика проверена по C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS\CommonForms\ВыборДат\Ext\Form\Module.bsl:30: Элемент, ОформлениеПериода.
Для каждого видимого месяца проверяем его границы. Даты.Получить(Дата) возвращает КлючИЗначение; стиль берётся из Значение после проверки отсутствия.
Доступность и флаг выходного у 6 октября — учебное оформление, а не изменение производственного календаря.
Внутри события нет вызовов серверных методов формы и изменений, требующих серверного обращения. Обновить повторяет оформление видимых месяцев.
Как проверить результат
В настольном клиенте, когда октябрь видим, 6 октября получает учебную подсказку и фон. Сообщение проверки даты и ключа Истина.
Нажмите кнопку: оформление повторится. Количество вызовов зависит от видимых месяцев; не ожидайте ровно один вызов.
Ожидаемый результат
Метод обновления соединён с настоящим обработчиком и конкретной учебной датой.
На что обратить внимание
Событие ПриВыводеПериода доступно тонкому и толстому клиенту, не веб-клиенту.
В обработчике нельзя вызывать серверные методы формы или менять свойства с серверным обращением.
Учебный выходной не записывает календарь или табель.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Обновить оформление собственного учебного дня
Обновить повторно вызывает ПриВыводеПериода для видимых месяцев. В обработчике оформляем только 6 октября, правильно раскрывая КлючИЗначение.
Где и как запускать
Полный модуль собственной обычной формы внешней обработки. Только толстый клиент с обычными формами.
Подготовка
Создайте отдельную внешнюю обработку с обычной формой в учебной базе. Только толстый клиент с обычными формами: не управляемая форма и не веб-клиент.
Создайте реквизит УчебныйСтатус (Строка 20) и элемент ПолеСтатуса именно вида ПолеВыбора, свяжите его Данные с этим реквизитом. Добавьте самостоятельное ПолеКалендаря с именем УчебныйКалендарь и обычную кнопку УчебнаяКоманда.
Свяжите ПриОткрытии формы и действие кнопки с одноимёнными процедурами из полного модуля. Каждый урок заменяет модуль только своей копии формы.
Поля относятся только к этой учебной форме. Нет чтения рабочих справочников, записи документов, изменения производственного календаря или передачи данных.
Только для этого урока свяжите событие ПриВыводеПериода элемента УчебныйКалендарь с процедурой УчебныйКалендарьПриВыводеПериода из модуля. Без этой связи метод Обновить не вызовет ваш обработчик.
Процедура ПриОткрытии()
УчебныйСтатус = "draft";
Поле = ЭтаФорма.ЭлементыФормы.ПолеСтатуса;
Варианты = Новый СписокЗначений;
Варианты.Добавить("draft", "Черновик");
Варианты.Добавить("published", "Опубликован");
Поле.СписокВыбора = Варианты;
Календарь = ЭтаФорма.ЭлементыФормы.УчебныйКалендарь;
Календарь.НачалоПериодаОтображения = Дата(2026, 10, 1);
Календарь.КонецПериодаОтображения = Дата(2026, 10, 31);
Календарь.ТекущаяДата = Дата(2026, 10, 4);
КонецПроцедуры
Процедура УчебнаяКоманда(Кнопка)
Календарь = ЭтаФорма.ЭлементыФормы.УчебныйКалендарь;
Календарь.Обновить();
Сообщить("Запрошено оформление всех видимых месяцев собственного календаря");
КонецПроцедуры
Процедура УчебныйКалендарьПриВыводеПериода(ОформлениеПериода)
УчебныйДень = Дата(2026, 10, 6);
Если УчебныйДень < ОформлениеПериода.НачалоПериода Или УчебныйДень > ОформлениеПериода.КонецПериода Тогда
Возврат;
КонецЕсли;
ОформлениеПериода.Доступность = Истина;
ОформлениеПериода.ЦветТекста = Новый Цвет(24, 40, 60);
ОформлениеПериода.ЦветФона = Новый Цвет(250, 252, 255);
ОформлениеПериода.Шрифт = Новый Шрифт(ОформлениеПериода.Шрифт, , 11, Ложь);
Пара = ОформлениеПериода.Даты.Получить(УчебныйДень);
Если Пара = Неопределено Тогда
ВызватьИсключение "В собственном периоде нет оформления 6 октября";
КонецЕсли;
Оформление = Пара.Значение;
Если ТипЗнч(Оформление) <> Тип("ОформлениеДаты") Тогда
ВызватьИсключение "Ожидалось оформление собственной даты";
КонецЕсли;
Оформление.Доступность = Истина;
Оформление.ОтображатьКакВыходнойДень = Истина;
Оформление.Подсказка = "Учебный день, не запись производственного календаря";
Оформление.ЦветТекста = Новый Цвет(24, 40, 60);
Оформление.ЦветФона = Новый Цвет(255, 240, 200);
Оформление.Шрифт = Новый Шрифт(Оформление.Шрифт, , 11, Истина);
Сообщить(Пара.Ключ = УчебныйДень И Оформление.Дата = УчебныйДень);
Сообщить(Оформление.ЦветФона = Новый Цвет(255, 240, 200));
Сообщить("Дат в периоде оформления: " + Строка(ОформлениеПериода.Даты.Количество()));
КонецПроцедуры
Разбор по шагам
У календаря событие ПриВыводеПериода имеет один параметр ОформлениеПериода. Это не три аргумента начала/конца/массива.
Обновить инициирует это событие для всех видимых месяцев; число вызовов зависит от размера календаря.
НачалоПериода и КонецПериода readonly. Условие отбирает только период, содержащий собственный 6 октября.
Даты.Получить(Дата) возвращает КлючИЗначение: ключ — дата, значение — ОформлениеДаты, а не сразу оформление.
Результат проверяется до чтения Значение и затем по типу. Цвет, подсказка и признак выходного относятся только к изображению учебного дня.
Никаких документов, регистров календаря и реальных выходных дней этот обработчик не изменяет.
Как проверить результат
При отображении собственного октября: проверки оформления Истина и сообщение количества дат периода.
После кнопки обработчик вызывается снова; число сообщений не зашито.
6 октября получает учебную подсказку и выделенный фон, не запись в производственном календаре.
Ожидаемый результат
Метод обновления связан с реальным событием и безопасным раскрытием результата КлючИЗначение.
На что обратить внимание
Не обращайтесь к ЦветФона прямо у результата Получить: сначала нужно получить его Значение.
В данном примере ОтображатьКакВыходнойДень — только учебный стиль, не решение об учёте рабочего времени.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.