Соответствие.Вставить

Методы · Insert

Устанавливает значение элемента соответствия по ключу. Если элемент с переданным значением ключа существует, то его значение заменяется, в противном случае добавляется новый элемент.

Синтаксис

Вставить(<Ключ>, <Значение>)

Примеры платформы

ПараметрыОбработки = Новый Соответствие;
ПараметрыОбработки.Вставить("Дата начала", ДатаНач);
ПараметрыОбработки.Вставить("Дата конца", ДатаКон);
Полное описание, параметры и ограничения

Соответствие.Вставить (Map.Insert)

Соответствие (Map)

Вставить (Insert)

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

Синтаксис:
Вставить(<Ключ>, <Значение>)
Параметры:

<Ключ> (обязательный)
Тип: Произвольный.
Ключ устанавливаемого элемента.

<Значение> (необязательный)
Тип: Произвольный.
Значение устанавливаемого элемента. Если не указан, будет установлено Неопределено.
Описание:

Устанавливает значение элемента соответствия по ключу. Если элемент с переданным значением ключа существует, то его значение заменяется, в противном случае добавляется новый элемент.

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

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Пример:

ПараметрыОбработки = Новый Соответствие;
ПараметрыОбработки.Вставить("Дата начала", ДатаНач);
ПараметрыОбработки.Вставить("Дата конца", ДатаКон);

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

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

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

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

Взвесить X/Y, разобрать настоящую нормализацию и спрогнозировать кластеры двух новых точек

Полный самостоятельный серверный модуль обучается на шести собственных точках, задает веса 2/1 реальным дополнительным параметрам, читает карту нормализации и выполняет прогноз отдельной таблицы. Координаты и ключи результата сопоставляются с собственным источником, номера групп не выдумываются.

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

Полный серверный общий модуль УчебныйНовыйКластер85 собственной пустой конфигурации; все помощники включены. Не запускался в 1С.

Подготовка

  1. НОВАЯ отдельная пустая файловая база точно 8.5.1.1343: конфигурация УчебныйНовыйКластер85, совместимость Не использовать, Русский. Нет прикладных объектов, расширений, подписок и заданий; модули конфигурации вручную пустые. Не использовать БП/КА2/УТ/УНФ.

  2. Общие → Общие модули → УчебныйНовыйКластер85. Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставить весь основной модуль, включая собственную подготовку, все помощники и защиту. Будущая ручная подготовка: сохранить и обновить только свою базу F7.

  3. Создать свою внешнюю обработку и управляемую Форма: команда/кнопка Выполнить, действие Выполнить. Полный модуль формы ниже вызывает только собственный общий модуль и получает текст отчета; модель и таблицы на клиент не передаются.

  4. Собственная обучающая таблица содержит шесть координат: (0,0), (0,1), (1,0), (10,10), (10,11), (11,10), с отдельными own-training-point-кодами. Код — дискретный ключ, X/Y — непрерывные входы. Таблицы и модель создаются только в памяти. Данные вымышленные, не клиенты и не географические координаты.

  5. Код отдельно создает две новые точки (0.5,0.5) и (10.5,10.5) с другими own-new-point-кодами. В них нет готового номера кластера. Обучение не повторяется на новых строках.

  6. Вес X=2 и Y=1 — выбранный учебный профиль влияния входных координат. КоличествоКластеров=2, МетодКластеризации=ДальняяСвязь, ТипЗаполненияТаблицы=ВсеПоля. Имена параметров и readonly/RW сверены с installed-справкой; значение стандартизации не выдумывается и формула нормализации не обещается.

Функция ВыполнитьПример() Экспорт
    ПроверитьСвойПустойСтенд();
    Обучение = СоздатьСвоиТочки(Ложь);
    Анализатор = Новый АнализДанных;
    Анализатор.ТипАнализа = Тип("АнализДанныхКластеризация");
    Анализатор.ИсточникДанных = Обучение;
    Настройки = Анализатор.НастройкаКолонок;
    Ключ = Настройки.Найти("Код");
    X = Настройки.Найти("X");
    Y = Настройки.Найти("Y");
    Если Ключ = Неопределено Или X = Неопределено Или Y = Неопределено Или Настройки.Количество() <> 3 Тогда
        ВызватьИсключение "Нужны три настройки собственных исходных колонок";
    КонецЕсли;
    Ключ.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Ключ;
    Ключ.ВидДанных = ВидДанныхАнализа.Дискретные;
    X.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Входная;
    X.ВидДанных = ВидДанныхАнализа.Непрерывные;
    Y.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Входная;
    Y.ВидДанных = ВидДанныхАнализа.Непрерывные;
    УстановитьСвойВес(X.ДополнительныеПараметры, 2);
    УстановитьСвойВес(Y.ДополнительныеПараметры, 1);
    НастроитьСвойПараметр(Анализатор.Параметры, "КоличествоКластеров", 2);
    НастроитьСвойПараметр(Анализатор.Параметры, "МетодКластеризации", МетодКластеризации.ДальняяСвязь);
    НастроитьСвойПараметр(Анализатор.Параметры, "ТипЗаполненияТаблицы", ТипЗаполненияТаблицыРезультатаАнализаДанных.ВсеПоля);
    Результат = Анализатор.Выполнить();
    Если ТипЗнч(Результат) <> Тип("РезультатАнализаДанныхКластеризация") Или Результат.КоличествоОбъектов <> 6 Тогда
        ВызватьИсключение "Нужен настоящий расчет собственных шести точек";
    КонецЕсли;
    Модель = Результат.СоздатьМодельПрогноза();
    Если ТипЗнч(Модель) <> Тип("МодельПрогнозаКластеризация") Или Модель.Кластеры.Количество() <> 2 Тогда
        ВызватьИсключение "Не создана собственная модель с двумя кластерами";
    КонецЕсли;
    НовыеТочки = СоздатьСвоиТочки(Истина);
    Модель.ИсточникДанных = НовыеТочки;
    Если ТипЗнч(Модель.ИсточникДанных) <> Тип("ТаблицаЗначений") Или Модель.ИсточникДанных.Количество() <> 2 Тогда
        ВызватьИсключение "Нужна отдельная собственная таблица двух новых точек";
    КонецЕсли;
    Колонки = Модель.Колонки;
    Входы = Модель.НастройкаВходныхКолонок;
    Если ТипЗнч(Колонки) <> Тип("КолонкиМоделиПрогноза") Или ТипЗнч(Входы) <> Тип("НастройкаВходныхКолонокМоделиПрогноза") Или Входы.Количество() <> 2 Тогда
        ВызватьИсключение "Нужны настоящие два соответствия X и Y";
    КонецЕсли;
    СвязатьСвоюВходнуюКолонку(Входы, Колонки, "X");
    СвязатьСвоюВходнуюКолонку(Входы, Колонки, "Y");
    ИсточникКода = НайтиСвоюКолонку(Колонки, "Код", ТипКолонкиМоделиПрогноза.КолонкаИсточникаДанных);
    ИсточникX = НайтиСвоюКолонку(Колонки, "X", ТипКолонкиМоделиПрогноза.КолонкаИсточникаДанных);
    ИсточникY = НайтиСвоюКолонку(Колонки, "Y", ТипКолонкиМоделиПрогноза.КолонкаИсточникаДанных);
    Кластер = НайтиСвоюКолонку(Колонки, "Кластер", ТипКолонкиМоделиПрогноза.Прогнозируемая);
    Выход = Модель.КолонкиРезультата;
    Выход.Очистить();
    НастройкаКода = Выход.Добавить(ИсточникКода);
    НастройкаКода.Имя = "УчебныйКод";
    НастройкаX = Выход.Добавить(ИсточникX);
    НастройкаX.Имя = "УчебныйX";
    НастройкаY = Выход.Добавить(ИсточникY);
    НастройкаY.Имя = "УчебныйY";
    НастройкаКластера = Выход.Добавить(Кластер);
    НастройкаКластера.Имя = "УчебныйКластер";
    Отчет = "СВОИ КЛАСТЕРЫ, НЕ СЕГМЕНТАЦИЯ РЕАЛЬНЫХ КЛИЕНТОВ" + Символы.ПС;
    Отчет = Отчет + ОписатьСвоиДополнительныеПараметры(Результат.НастройкаКолонок.Найти("X"), 2)
        + ОписатьСвоиДополнительныеПараметры(Результат.НастройкаКолонок.Найти("Y"), 1);
    Отчет = Отчет + ОписатьСвоиКолонки(Колонки);
    Прогноз = Модель.Выполнить();
    Если ТипЗнч(Прогноз) <> Тип("ТаблицаЗначений") Или Прогноз.Количество() <> 2 Или Прогноз.Колонки.Количество() <> 4 Тогда
        ВызватьИсключение "Нужна действительная таблица по двум новым точкам и четырем своим колонкам";
    КонецЕсли;
    Для Каждого Имя Из СтрРазделить("УчебныйКод,УчебныйX,УчебныйY,УчебныйКластер", ",") Цикл
        Если Прогноз.Колонки.Найти(Имя) = Неопределено Тогда
            ВызватьИсключение "Нет собственной выходной колонки " + Имя;
        КонецЕсли;
    КонецЦикла;
    ВиденныеКоды = Новый Соответствие;
    Для Каждого СтрокаПрогноза Из Прогноз Цикл
        Код = СтрокаПрогноза.УчебныйКод;
        Источник = НовыеТочки.Найти(Код, "Код");
        Если Источник = Неопределено Или ВиденныеКоды.Получить(Код) <> Неопределено Тогда
            ВызватьИсключение "Чужой или повторный собственный ключ прогноза";
        КонецЕсли;
        Если СтрокаПрогноза.УчебныйX <> Источник.X Или СтрокаПрогноза.УчебныйY <> Источник.Y Или ТипЗнч(СтрокаПрогноза.УчебныйКластер) <> Тип("Число") Тогда
            ВызватьИсключение "Не сохранены входные координаты или не получен числовой номер кластера";
        КонецЕсли;
        ВиденныеКоды.Вставить(Код, Истина);
        Отчет = Отчет + Код + "; X=" + Строка(Источник.X) + "; Y=" + Строка(Источник.Y)
            + "; ближайший кластер как вернула платформа=" + Строка(СтрокаПрогноза.УчебныйКластер) + Символы.ПС;
    КонецЦикла;
    Если ВиденныеКоды.Количество() <> 2 Или Обучение.Количество() <> 6 Или НовыеТочки.Количество() <> 2 Тогда
        ВызватьИсключение "Не совпали собственные размеры и ключи независимых таблиц";
    КонецЕсли;
    Возврат Отчет + "Номера кластеров не являются постоянными бизнес-кодами; качество на двух точках не доказано";
КонецФункции

Функция СоздатьСвоиТочки(ДляПрогноза)
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
    Таблица.Колонки.Добавить("X", Новый ОписаниеТипов("Число"));
    Таблица.Колонки.Добавить("Y", Новый ОписаниеТипов("Число"));
    Координаты = Новый Массив;
    Если ДляПрогноза Тогда
        Координаты.Добавить(Новый Структура("X,Y", 0.5, 0.5));
        Координаты.Добавить(Новый Структура("X,Y", 10.5, 10.5));
        Префикс = "own-new-point-";
        Ожидается = 2;
    Иначе
        Координаты.Добавить(Новый Структура("X,Y", 0, 0));
        Координаты.Добавить(Новый Структура("X,Y", 0, 1));
        Координаты.Добавить(Новый Структура("X,Y", 1, 0));
        Координаты.Добавить(Новый Структура("X,Y", 10, 10));
        Координаты.Добавить(Новый Структура("X,Y", 10, 11));
        Координаты.Добавить(Новый Структура("X,Y", 11, 10));
        Префикс = "own-training-point-";
        Ожидается = 6;
    КонецЕсли;
    Номер = 0;
    Для Каждого Координата Из Координаты Цикл
        Номер = Номер + 1;
        Точка = Таблица.Добавить();
        Точка.Код = Префикс + Строка(Номер);
        Точка.X = Координата.X;
        Точка.Y = Координата.Y;
    КонецЦикла;
    Если Таблица.Количество() <> Ожидается Тогда
        ВызватьИсключение "Нарушен размер собственной таблицы точек";
    КонецЕсли;
    Возврат Таблица;
КонецФункции

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

Функция ОписатьСвоиДополнительныеПараметры(Колонка, ОжидаемыйВес)
    Если Колонка = Неопределено Тогда
        ВызватьИсключение "Исчезла собственная колонка результата";
    КонецЕсли;
    Параметры = Колонка.ДополнительныеПараметры;
    Если ТипЗнч(Параметры) <> Тип("ПараметрыКолонкиКластерногоАнализа") Или Параметры.Вес <> ОжидаемыйВес Тогда
        ВызватьИсключение "Результат не сохранил настоящие свои дополнительные параметры";
    КонецЕсли;
    Нормализация = Параметры.ЗначенияНормализации;
    Если ТипЗнч(Нормализация) <> Тип("Соответствие") Или Нормализация.Количество() > 64 Тогда
        ВызватьИсключение "Нужна небольшая настоящая карта нормализации собственной колонки";
    КонецЕсли;
    Отчет = Колонка.Имя + "; вес=" + Строка(Параметры.Вес) + "; записей нормализации=" + Строка(Нормализация.Количество()) + Символы.ПС;
    Для Каждого Пара Из Нормализация Цикл
        Отчет = Отчет + "ключ=" + Строка(Пара.Ключ) + "; тип ключа=" + Строка(ТипЗнч(Пара.Ключ))
            + "; значение=" + Строка(Пара.Значение) + "; тип значения=" + Строка(ТипЗнч(Пара.Значение)) + Символы.ПС;
    КонецЦикла;
    Возврат Отчет;
КонецФункции

Функция НайтиСвойПараметр(Параметры, Имя)
    Параметр = Параметры.Найти(Имя);
    Если Параметр = Неопределено Или ТипЗнч(Параметр) <> Тип("ПараметрАнализаДанных") Тогда
        ВызватьИсключение "Не найден собственный параметр алгоритма " + Имя;
    КонецЕсли;
    Индекс = Параметры.Индекс(Параметр);
    Если Индекс < 0 Или Индекс >= Параметры.Количество() Тогда
        ВызватьИсключение "Индекс настоящего параметра выходит за границы";
    КонецЕсли;
    ПоИндексу = Параметры.Получить(Индекс);
    Если ПоИндексу.Имя <> Параметр.Имя Или ПоИндексу.Имя <> Имя Тогда
        ВызватьИсключение "Найти и Получить не вернули один собственный параметр";
    КонецЕсли;
    Возврат Параметр;
КонецФункции

Процедура НастроитьСвойПараметр(Параметры, Имя, Значение)
    Параметр = НайтиСвойПараметр(Параметры, Имя);
    Если Не Параметр.ТипЗначения.СодержитТип(ТипЗнч(Значение)) Тогда
        ВызватьИсключение "Тип значения не разрешен реальным параметром " + Имя;
    КонецЕсли;
    Параметр.Значение = Значение;
    ПроверитьСвойПараметр(Параметры, Имя, Значение);
КонецПроцедуры

Процедура ПроверитьСвойПараметр(Параметры, Имя, Эталон)
    Параметр = НайтиСвойПараметр(Параметры, Имя);
    Если ТипЗнч(Параметр.Значение) <> ТипЗнч(Эталон) Или Параметр.Значение <> Эталон Тогда
        ВызватьИсключение "Не совпал собственный параметр результата " + Имя;
    КонецЕсли;
КонецПроцедуры

Функция НайтиСвоюКолонку(Колонки, Имя, Вид)
    Колонка = Колонки.Найти(Имя, Вид);
    Если Колонка = Неопределено Или ТипЗнч(Колонка) <> Тип("КолонкаМоделиПрогноза") Тогда
        ВызватьИсключение "Нет настоящей колонки модели: " + Имя + "; вид=" + Строка(Вид);
    КонецЕсли;
    Если Колонка.Имя <> Имя Или Колонка.ТипКолонки <> Вид Тогда
        ВызватьИсключение "Найдена колонка с другим именем или ролью";
    КонецЕсли;
    Индекс = Колонки.Индекс(Колонка);
    Если Индекс < 0 Или Индекс >= Колонки.Количество() Тогда
        ВызватьИсключение "Индекс найденной колонки вне реальной коллекции";
    КонецЕсли;
    ПоИндексу = Колонки.Получить(Индекс);
    Если ПоИндексу.Имя <> Имя Тогда
        ВызватьИсключение "По индексу получено другое имя колонки";
    КонецЕсли;
    Возврат Колонка;
КонецФункции

Функция ОписатьСвоиКолонки(Колонки)
    Стек = Новый Массив;
    Для Каждого Колонка Из Колонки Цикл
        Стек.Добавить(Новый Структура("Колонка,Уровень", Колонка, 0));
    КонецЦикла;
    Обработано = 0;
    Отчет = "ДЕЙСТВИТЕЛЬНАЯ ИЕРАРХИЯ КОЛОНОК" + Символы.ПС;
    Пока Стек.Количество() > 0 Цикл
        Индекс = Стек.Количество() - 1;
        Кадр = Стек[Индекс];
        Стек.Удалить(Индекс);
        Если Кадр.Уровень > 16 Или Обработано >= 128 Тогда
            ВызватьИсключение "Своя диагностика превысила учебный предел 128 колонок или 16 уровней";
        КонецЕсли;
        Колонка = Кадр.Колонка;
        Если ТипЗнч(Колонка) <> Тип("КолонкаМоделиПрогноза") Тогда
            ВызватьИсключение "В иерархии нет настоящего описания колонки";
        КонецЕсли;
        Обработано = Обработано + 1;
        Отчет = Отчет + "Уровень=" + Строка(Кадр.Уровень) + "; имя=" + Колонка.Имя
            + "; путь=" + Колонка.ПутьКДанным + "; роль=" + Строка(Колонка.ТипКолонки)
            + "; тип дополнительных параметров=" + Строка(ТипЗнч(Колонка.ДополнительныеПараметры)) + Символы.ПС;
        Дети = Колонка.Колонки;
        Если ТипЗнч(Дети) <> Тип("ФиксированныйМассив") Тогда
            ВызватьИсключение "Вложенные описания должны быть настоящим фиксированным массивом";
        КонецЕсли;
        Для Каждого Дочерняя Из Дети Цикл
            Стек.Добавить(Новый Структура("Колонка,Уровень", Дочерняя, Кадр.Уровень + 1));
        КонецЦикла;
    КонецЦикла;
    Возврат Отчет;
КонецФункции

Процедура СвязатьСвоюВходнуюКолонку(Настройки, Колонки, Имя)
    Настройка = Настройки.Найти(Имя);
    Если Настройка = Неопределено Или ТипЗнч(Настройка) <> Тип("НастройкаВходнойКолонкиМоделиПрогноза") Тогда
        ВызватьИсключение "Не найдена настоящая настройка собственного входа " + Имя;
    КонецЕсли;
    Вход = НайтиСвоюКолонку(Колонки, Имя, ТипКолонкиМоделиПрогноза.Входная);
    Источник = НайтиСвоюКолонку(Колонки, Имя, ТипКолонкиМоделиПрогноза.КолонкаИсточникаДанных);
    Настройка.КолонкаМоделиПрогноза = Вход;
    Настройка.КолонкаИсточникаДанных = Источник;
    Если Настройка.КолонкаМоделиПрогноза.Имя <> Имя Или Настройка.КолонкаИсточникаДанных.Имя <> Имя Тогда
        ВызватьИсключение "Свое соответствие не сохранилось " + Имя;
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры
УчебныйНовыйКластер85.Обработка.Форма

Собственная внешняя обработка → управляемая Форма → Модуль

Полный клиент-серверный модуль своей формы; клиент получает только текст серверного расчета.

&НаКлиенте
Процедура Выполнить(Команда)
    Отчет = ВыполнитьНаСервере();
    Сообщить(Отчет);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ВыполнитьНаСервере()
    Возврат УчебныйНовыйКластер85.ВыполнитьПример();
КонецФункции

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

  1. Защита стенда выполняется до расчетов. Настройки трех исходных колонок получают у реального АнализДанных, назначают ключ/входы и реальные виды данных. ДополнительныеПараметры X/Y проверяются как ПараметрыКолонкиКластерногоАнализа до записи Вес.

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

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

  4. У параметров колонок результата читаются фактические Вес и ЗначенияНормализации. Последнее — readonly-свойство типа Соответствие: ничего в нем не записываем. Для каждого реального ключа/значения выводятся значение и тип; пустая карта допустима и не заменяется вымышленной формулой.

  5. Модель.ИсточникДанных получает отдельную таблицу двух новых точек. НастройкаВходныхКолонок должна содержать два реальных соответствия. X/Y связываются через объекты КолонкаМоделиПрогноза правильных ролей Входная/КолонкаИсточникаДанных, не через колонки таблицы.

  6. Кластер ищется как настоящая Прогнозируемая колонка, описанная в native-модели. Выходная схема явно содержит собственные имена УчебныйКод, УчебныйX, УчебныйY, УчебныйКластер. Код показывает фактическую иерархию колонок, пути и типы дополнительных параметров без придуманного вложенного пути.

  7. Модель.Выполнить находится после настройки и возвращает реальную ТаблицаЗначений. Проверяются две строки, четыре имени, уникальные свои коды, сохранение X/Y и числовой тип кластера. Исходная строка ищется по коду, не по предполагаемому порядку результата.

  8. Номер кластера выводится как вернула платформа. Не предполагаем нумерацию с нуля/единицы, конкретные 0/1 или устойчивость между другими расчетами. Обе таблицы памяти остаются независимыми, размеры 6/2 проверяются.

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

  1. Будущий положительный опыт: отчет показывает свои веса 2/1, фактическую карту нормализации X/Y, реальную иерархию и по одному кластерному результату для двух новых кодов. Входные координаты в выводе должны совпасть с 0.5/0.5 и 10.5/10.5.

  2. Будущий отрицательный контроль веса: только значение первого вызова УстановитьСвойВес заменить с 2 на 0. Проверка положительного веса должна остановиться до анализа. Затем вернуть 2.

  3. Будущий отрицательный контроль входа: только вызов СвязатьСвоюВходнуюКолонку для Y заменить именем ЧужаяКоордината. Проверка наличия настоящей настройки должна остановиться до прогноза. Вернуть Y.

  4. Будущий отрицательный контроль результата: сразу после Прогноз = Модель.Выполнить() временно присвоить Прогноз = Неопределено. Проверка типа должна остановиться до чтения строк; затем вернуть исходный код.

  5. runtimeVerifiedScenarios=0: 1С, BSL, алгоритм, модель, форма и база здесь не запускались. Статические проверки не доказывают фактическое распределение новых точек или формулу нормализации. Все ручные опыты — только будущие, на собственном отдельном стенде.

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

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

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

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

  2. Номера кластеров не служат постоянными кодами бизнес-сегментов. Две вымышленные новые точки не доказывают качество сегментации реальных клиентов.

  3. Колонки/КолонкиРезультата/НастройкаВходныхКолонок модели — readonly-свойства; редактируются только разрешенные реальные элементы возвращенных настроек.

  4. У КолонкиМоделиПрогноза.Получить в installed-справке противоречивый возвращаемый тип. Общий помощник проверяет только доступное Имя его результата и использует настоящий объект Найти для остальных свойств, не утверждая runtime-исправление документации.

  5. Нет записи базовых данных, файлов, запросов к рабочей конфигурации, сети или GUI расчета. На клиент приходит только текст.

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

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