КлючИЗначение

Типы · KeyAndValue

Элемент коллекции Соответствие и Структура. Представляет собой пару из ключа и соответствующего ключу значения.

Полное описание, параметры и ограничения

КлючИЗначение (KeyAndValue)

КлючИЗначение (KeyAndValue)

Доступен, начиная с версии 8.0.

Свойства:
Значение (Value)
Ключ (Key)

Описание:

Элемент коллекции Соответствие и Структура. Представляет собой пару из ключа и соответствующего ключу значения.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Возможен обмен с сервером. Сериализуется. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: KeyAndValue.

См. также:
Соответствие, метод Получить
КоллекцияОформленийДат, метод Получить

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Оформить одну дату при выводе месяца и вызвать Обновить

Обработчик управляемой формы имеет Элемент и ОформлениеПериода, как в реальном модуле КА2. Оформляется только собственное 6 октября.

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

Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.

Подготовка

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

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

  3. Код создаёт свой календарь и реквизит Дата с начальным значением 04.10.2026. Нет документов, регистров, файлов или календарей рабочего времени базы.

  4. Для размеров в месяцах нужен режим совместимости выше Версия8_3_2. Здесь предполагается учебная база на 8.5.1.1343 без старого режима совместимости.

  5. Только этот урок запускайте настольным тонким/толстым клиентом, не веб-клиентом. Не копируйте внутрь события серверный код создания формы.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    Новые.Добавить(Новый РеквизитФормы("УчебнаяДата", Новый ОписаниеТипов("Дата")));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    ЭтаФорма.УчебнаяДата = Дата(2026, 10, 4);
    Календарь = Элементы.Добавить("УчебныйКалендарь", Тип("ПолеФормы"));
    Календарь.Вид = ВидПоляФормы.ПолеКалендаря;
    Календарь.ПутьКДанным = "УчебнаяДата";
    Календарь.Заголовок = "Собственная учебная дата";
    Календарь.НачалоПериодаОтображения = Дата(2026, 10, 1);
    Календарь.КонецПериодаОтображения = Дата(2026, 11, 30);
    Календарь.РежимВыделения = РежимВыделенияДаты.Одиночный;
    Календарь.УстановитьДействие("ПриВыводеПериода", "УчебныйКалендарьПриВыводеПериода");

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

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Элементы.УчебныйКалендарь.Обновить();
    Сообщить("Проверяйте учебное оформление 06.10.2026 в видимом месяце");
КонецПроцедуры

&НаКлиенте
Процедура УчебныйКалендарьПриВыводеПериода(Элемент, ОформлениеПериода)
    УчебныйДень = Дата(2026, 10, 6);
    Если УчебныйДень < ОформлениеПериода.НачалоПериода Или УчебныйДень > ОформлениеПериода.КонецПериода Тогда
        Возврат;
    КонецЕсли;
    Пара = ОформлениеПериода.Даты.Получить(УчебныйДень);
    Если Пара = Неопределено Тогда
        Возврат;
    КонецЕсли;
    Оформление = Пара.Значение;
    Если ТипЗнч(Оформление) <> Тип("ОформлениеДаты") Тогда
        ВызватьИсключение "Не получено оформление собственной даты";
    КонецЕсли;
    Оформление.Доступность = Истина;
    Оформление.ОтображатьКакВыходнойДень = Истина;
    Оформление.Подсказка = "Только учебное оформление, не рабочий календарь";
    Оформление.ЦветФона = Новый Цвет(235, 244, 255);
    Оформление.ЦветТекста = Новый Цвет(24, 40, 60);
    Сообщить(Пара.Ключ = УчебныйДень И Оформление.Дата = УчебныйДень);
КонецПроцедуры

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

  1. УстановитьДействие связывает реальное событие календаря с клиентской процедурой из этого же полного модуля.

  2. Сигнатура управляемого обработчика проверена по C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS\CommonForms\ВыборДат\Ext\Form\Module.bsl:30: Элемент, ОформлениеПериода.

  3. Для каждого видимого месяца проверяем его границы. Даты.Получить(Дата) возвращает КлючИЗначение; стиль берётся из Значение после проверки отсутствия.

  4. Доступность и флаг выходного у 6 октября — учебное оформление, а не изменение производственного календаря.

  5. Внутри события нет вызовов серверных методов формы и изменений, требующих серверного обращения. Обновить повторяет оформление видимых месяцев.

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

  1. В настольном клиенте, когда октябрь видим, 6 октября получает учебную подсказку и фон. Сообщение проверки даты и ключа Истина.

  2. Нажмите кнопку: оформление повторится. Количество вызовов зависит от видимых месяцев; не ожидайте ровно один вызов.

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

Метод обновления соединён с настоящим обработчиком и конкретной учебной датой.

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

  1. Событие ПриВыводеПериода доступно тонкому и толстому клиенту, не веб-клиенту.

  2. В обработчике нельзя вызывать серверные методы формы или менять свойства с серверным обращением.

  3. Учебный выходной не записывает календарь или табель.

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

Различить ключ 1, строку «1» и отсутствующее значение

Соответствие допускает ключи разных типов. Получить возвращает Неопределено и для отсутствующего ключа, и для сохранённого такого значения; факт наличия проверяем отдельным перебором.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Выполняйте в серверном общем модуле учебной базы. Все коллекции и вложенные значения создаются кодом; метаданные, файлы и интернет не нужны.

  2. Индексы массивов начинаются с 0. Ключ соответствия — отдельное значение и не обязательно совпадает с индексом/порядком обхода.

КоличествоПоКлючу = Новый Соответствие;
Сообщить(КоличествоПоКлючу.Количество() = 0);
КоличествоПоКлючу.Вставить(1, 3);
КоличествоПоКлючу.Вставить("1", 7);
КоличествоПоКлючу.Вставить("ОжидаетУточнения", Неопределено);
Сообщить(КоличествоПоКлючу.Количество() = 3);
Сообщить(КоличествоПоКлючу.Получить(1) = 3);
Сообщить(КоличествоПоКлючу.Получить("1") = 7);
Сообщить(КоличествоПоКлючу.Получить("НетКлюча") = Неопределено);
Сообщить(КоличествоПоКлючу.Получить("ОжидаетУточнения") = Неопределено);
ЕстьОжидающий = Ложь;
ЕстьНесуществующий = Ложь;
Для Каждого Пара Из КоличествоПоКлючу Цикл
    Если Пара.Ключ = "ОжидаетУточнения" Тогда ЕстьОжидающий = Истина; КонецЕсли;
    Если Пара.Ключ = "НетКлюча" Тогда ЕстьНесуществующий = Истина; КонецЕсли;
КонецЦикла;
Сообщить(ЕстьОжидающий);
Сообщить(Не ЕстьНесуществующий);
КоличествоПоКлючу.Вставить(1, 5);
Сообщить(КоличествоПоКлючу.Количество() = 3);
Сообщить(КоличествоПоКлючу.Получить(1) = 5);

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

  1. Создаём пустое соответствие конструктором по умолчанию и добавляем числовой/строковый ключи с одинаковым внешним написанием.

  2. Число 1 и строка 1 — разные ключи. Каждый возвращает своё количество, 3 и 7.

  3. Ключ ОжидаетУточнения существует со значением Неопределено. Возвращаемое Неопределено само по себе не доказывает отсутствие ключа.

  4. Перебор КлючИЗначение проверяет наличие двух строковых ключей без предположений о порядке.

  5. Повторная Вставить с ключом 1 заменяет значение 3 на 5, а не создаёт четвёртую пару.

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

  1. Все десять логических сообщений дают Истина.

  2. В конце числовой ключ 1 содержит 5, строковый 1 — 7; всего три пары.

  3. ОжидаетУточнения существует, НетКлюча отсутствует, хотя Получить для обоих возвращает Неопределено.

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

Показаны типизированные ключи, замена значения и неоднозначность отсутствующего/неопределённого значения.

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

  1. Не подменяйте числовые идентификаторы строками в одной части кода без согласованной нормализации ключей.

  2. У Соответствие нет метода Свойство как у Структура. Проверку наличия выбирайте по контракту вашей коллекции.

  3. Для устойчивой логики с nullable-значениями можно хранить собственную структуру статуса/значения, не смешивая отсутствие и ожидание уточнения.

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

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

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

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

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