Различить ключ 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С» и не аффилирован с ней.