Элемент коллекции Соответствие и Структура. Представляет собой пару из ключа и соответствующего ключу значения.
Полное описание, параметры и ограничения
КлючИЗначение (KeyAndValue)
КлючИЗначение (KeyAndValue)
Доступен, начиная с версии 8.0.
Свойства:
Значение (Value)
Ключ (Key)
Описание:
Элемент коллекции Соответствие и Структура. Представляет собой пару из ключа и соответствующего ключу значения.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Возможен обмен с сервером. Сериализуется. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: KeyAndValue.
См. также:
Соответствие, метод Получить
КоллекцияОформленийДат, метод Получить
Использование в версии:
Доступен, начиная с версии 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 октября получает учебную подсказку и фон. Сообщение проверки даты и ключа Истина.
Нажмите кнопку: оформление повторится. Количество вызовов зависит от видимых месяцев; не ожидайте ровно один вызов.
Ожидаемый результат
Метод обновления соединён с настоящим обработчиком и конкретной учебной датой.
На что обратить внимание
Событие ПриВыводеПериода доступно тонкому и толстому клиенту, не веб-клиенту.
В обработчике нельзя вызывать серверные методы формы или менять свойства с серверным обращением.
Учебный выходной не записывает календарь или табель.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Различить ключ 1, строку «1» и отсутствующее значение
Соответствие допускает ключи разных типов. Получить возвращает Неопределено и для отсутствующего ключа, и для сохранённого такого значения; факт наличия проверяем отдельным перебором.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Выполняйте в серверном общем модуле учебной базы. Все коллекции и вложенные значения создаются кодом; метаданные, файлы и интернет не нужны.
Индексы массивов начинаются с 0. Ключ соответствия — отдельное значение и не обязательно совпадает с индексом/порядком обхода.
КоличествоПоКлючу = Новый Соответствие;
Сообщить(КоличествоПоКлючу.Количество() = 0);
КоличествоПоКлючу.Вставить(1, 3);
КоличествоПоКлючу.Вставить("1", 7);
КоличествоПоКлючу.Вставить("ОжидаетУточнения", Неопределено);
Сообщить(КоличествоПоКлючу.Количество() = 3);
Сообщить(КоличествоПоКлючу.Получить(1) = 3);
Сообщить(КоличествоПоКлючу.Получить("1") = 7);
Сообщить(КоличествоПоКлючу.Получить("НетКлюча") = Неопределено);
Сообщить(КоличествоПоКлючу.Получить("ОжидаетУточнения") = Неопределено);
ЕстьОжидающий = Ложь;
ЕстьНесуществующий = Ложь;
Для Каждого Пара Из КоличествоПоКлючу Цикл
Если Пара.Ключ = "ОжидаетУточнения" Тогда ЕстьОжидающий = Истина; КонецЕсли;
Если Пара.Ключ = "НетКлюча" Тогда ЕстьНесуществующий = Истина; КонецЕсли;
КонецЦикла;
Сообщить(ЕстьОжидающий);
Сообщить(Не ЕстьНесуществующий);
КоличествоПоКлючу.Вставить(1, 5);
Сообщить(КоличествоПоКлючу.Количество() = 3);
Сообщить(КоличествоПоКлючу.Получить(1) = 5);Разбор по шагам
Создаём пустое соответствие конструктором по умолчанию и добавляем числовой/строковый ключи с одинаковым внешним написанием.
Число 1 и строка 1 — разные ключи. Каждый возвращает своё количество, 3 и 7.
Ключ ОжидаетУточнения существует со значением Неопределено. Возвращаемое Неопределено само по себе не доказывает отсутствие ключа.
Перебор КлючИЗначение проверяет наличие двух строковых ключей без предположений о порядке.
Повторная Вставить с ключом 1 заменяет значение 3 на 5, а не создаёт четвёртую пару.
Как проверить результат
Все десять логических сообщений дают Истина.
В конце числовой ключ 1 содержит 5, строковый 1 — 7; всего три пары.
ОжидаетУточнения существует, НетКлюча отсутствует, хотя Получить для обоих возвращает Неопределено.
Ожидаемый результат
Показаны типизированные ключи, замена значения и неоднозначность отсутствующего/неопределённого значения.
На что обратить внимание
Не подменяйте числовые идентификаторы строками в одной части кода без согласованной нормализации ключей.
У Соответствие нет метода Свойство как у Структура. Проверку наличия выбирайте по контракту вашей коллекции.
Для устойчивой логики с nullable-значениями можно хранить собственную структуру статуса/значения, не смешивая отсутствие и ожидание уточнения.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.