Глобальный контекст.СтрСоединить

Методы · StrConcat

Соединяет массив переданных строк в одну строку с указанным разделителем.

Синтаксис

СтрСоединить(<Строки>, <Разделитель>)
Полное описание, параметры и ограничения

Глобальный контекст.СтрСоединить (Global context.StrConcat)

Глобальный контекст (Global context)

СтрСоединить (StrConcat)

Доступен, начиная с версии 8.3.6 (в режиме совместимости с версией 8.3.6 и последующими).

Синтаксис:
СтрСоединить(<Строки>, <Разделитель>)
Параметры:

<Строки> (обязательный)
Тип: ФиксированныйМассив, Массив.
Массив, содержащий объединяемые строки.

<Разделитель> (необязательный)
Тип: Строка.
Строка, которая будет вставлена между объединяемыми строками.
Если параметр не задан, строки будут объединены слитно друг с другом.
Значение по умолчанию: Неопределено.
Возвращаемое значение:
Тип: Строка.
Строка, содержащая соединенные исходные строки с разделителем между ними.
Описание:

Соединяет массив переданных строк в одну строку с указанным разделителем.

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

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

См. также:
Глобальный контекст, метод СтрРазделить

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

Доступен, начиная с версии 8.3.6 (в режиме совместимости с версией 8.3.6 и последующими).

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

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

Разобрать, почему Итог и Свернуть не дают бухгалтерского результата

Контролируемый опыт на трёх строках показывает формальный итог номеров и группировку по всем реальным колонкам. Справка прямо предупреждает: эти методы у ВидыСубконто оставлены для совместимости и не имеют прикладного смысла.

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

Полный обычный клиентский общий модуль УчебныеСубконто85, только толстый клиент; все помощники включены, полный модуль Пульта отдельно. Не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу 8.5.1.1343, имя конфигурации УчебныеСубконто85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не рабочую БП/КА2 и не её копию. Здесь база и код не запускались: runtimeVerifiedScenarios=0.

  2. Планы видов характеристик → УчебныеАналитики85: тип значений только Строка(30), переменная длина. В Предопределённые создайте три собственных элемента НЕ группы: имя АналитикаА, код A, наименование Учебная аналитика A; АналитикаБ, код B, наименование Учебная аналитика B; АналитикаВ, код C, наименование Учебная аналитика C. Их тип значения — Строка(30). Дополнительные значения, свои реквизиты и табличные части не создавайте.

  3. Планы счетов → УчебныеСчета85: ДлинаКода=10, ДлинаНаименования=100, ВидыСубконто=УчебныеАналитики85, МаксКоличествоСубконто=3. Признаки учёта субконто и обычные признаки учёта отсутствуют, собственные реквизиты/табличные части и предопределённые счета отсутствуют. Все объектные и менеджерские модули пустые.

  4. Никаких регистров бухгалтерии, документов, подписок и расширений. Предопределённые аналитики — подготовленные элементы своего стенда; 1С может создать их при обновлении своей базы. Это не создание нами рабочих аналитик и не записи счёта из примера.

  5. Создайте неглобальный общий модуль УчебныеСубконто85: Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, другие клиентские флаги=Нет. Вставляйте полный основной модуль выбранного урока целиком. Все три имеют ВыполнитьПример; для другого урока заменяйте весь текст.

  6. Создайте обработку УчебныеСубконто85, обычную основную форму Пульт с кнопкой Выполнить, действие ВыполнитьНажатие. Полный отдельный модуль этой формы приведён ниже. Дайте своему учебному пользователю доступ к своим планам, предопределённым аналитикам и обработке.

  7. F7, сохранение и обновление только своего нового стенда. В будущем толстом клиенте запустите Пульт. Каждый вызов создаёт новый незаписанный счёт в памяти; Код, Наименование и остальные обязательные поля счёта для записи здесь не заполняются, поскольку Записать не вызывается.

  8. Итог и Свернуть у ВидыСубконто оставлены для совместимости и, по справке, не имеют прикладного смысла. Третий урок — контролируемая демонстрация границы API, не вычисление бухгалтерских итогов и не способ изменить виды аналитики в рабочем учёте.

Процедура ВыполнитьПример() Экспорт
    Счет = СоздатьСвойСчет();
    Аналитики = ПолучитьСвоиАналитики();
    Субконто = Счет.ВидыСубконто;
    Для Индекс = 0 По 2 Цикл
        ЗаполнитьСвоюСтроку(Субконто.Добавить(), Аналитики[Индекс], Индекс = 1);
    КонецЦикла;
    ПроверитьСвоиСтроки(Субконто, Аналитики, СвоиФлаги(Ложь, Истина, Ложь));
    СуммаНомеров = Субконто.Итог("НомерСтроки");
    Если СуммаНомеров <> 6 Тогда
        ВызватьИсключение "В контрольном черновике номера 1, 2, 3 должны давать 6, это не бухгалтерский итог";
    КонецЕсли;
    Снимок = Субконто.Выгрузить();
    Если Снимок.Колонки.Количество() <> 4 Тогда
        ВызватьИсключение "Опыт требует только четыре стандартные колонки без флагов учёта";
    КонецЕсли;
    ИменаКолонок = Новый Массив;
    Для Каждого Колонка Из Снимок.Колонки Цикл
        Если Колонка.Имя <> "НомерСтроки" И Колонка.Имя <> "ВидСубконто"
            И Колонка.Имя <> "Предопределенное" И Колонка.Имя <> "ТолькоОбороты" Тогда
            ВызватьИсключение "Неожиданная колонка собственного определения";
        КонецЕсли;
        ИменаКолонок.Добавить(Колонка.Имя);
    КонецЦикла;
    Субконто.Свернуть(СтрСоединить(ИменаКолонок, ","), "");
    Если Субконто.Количество() <> 3 Тогда
        ВызватьИсключение "Группировка по всем колонкам трёх разных строк не должна создавать дедупликацию";
    КонецЕсли;
    Для Индекс = 0 По 2 Цикл
        СтрокаСубконто = Субконто.Найти(Аналитики[Индекс], "ВидСубконто");
        Если СтрокаСубконто = Неопределено Или СтрокаСубконто.ТолькоОбороты <> (Индекс = 1)
            Или СтрокаСубконто.Предопределенное Тогда
            ВызватьИсключение "Контрольный опыт совместимости изменил содержимое своей аналитики";
        КонецЕсли;
    КонецЦикла;
    Сообщить("Итог номеров равен 6, но не имеет учётного смысла. Свернуть по всем четырём колонкам сохранила три разные строки. Для прикладного отчёта используйте отдельную таблицу значений.");
КонецПроцедуры

Процедура ПроверитьСвойКонтекст()
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Нужен собственный стенд УчебныеСубконто85 платформы 8.5.1.1343";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
    КонецЕсли;
КонецПроцедуры

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

Функция ПолучитьСвоиАналитики()
    Аналитики = Новый Массив;
    Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаА);
    Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаБ);
    Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаВ);
    Для Каждого Аналитика Из Аналитики Цикл
        Если Аналитика.Пустая() Тогда
            ВызватьИсключение "Предопределенные аналитики должны иметь непустые ссылки своего плана";
        КонецЕсли;
    КонецЦикла;
    Если Аналитики[0] = Аналитики[1] Или Аналитики[0] = Аналитики[2] Или Аналитики[1] = Аналитики[2] Тогда
        ВызватьИсключение "Три свои аналитики должны различаться";
    КонецЕсли;
    Возврат Аналитики;
КонецФункции

Процедура ЗаполнитьСвоюСтроку(СтрокаСубконто, Аналитика, ТолькоОбороты)
    СтрокаСубконто.ВидСубконто = Аналитика;
    СтрокаСубконто.ТолькоОбороты = ТолькоОбороты;
    СтрокаСубконто.Предопределенное = Ложь;
КонецПроцедуры

Функция СвоиФлаги(Первый, Второй, Третий = Неопределено)
    Флаги = Новый Массив;
    Флаги.Добавить(Первый);
    Флаги.Добавить(Второй);
    Если Третий <> Неопределено Тогда
        Флаги.Добавить(Третий);
    КонецЕсли;
    Возврат Флаги;
КонецФункции

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

УчебныеСубконто85 → Обработки → УчебныеСубконто85 → Формы → Пульт → Модуль

Полный модуль собственной обычной формы, не выполнялся.

Процедура ВыполнитьНажатие(Кнопка)
    УчебныеСубконто85.ВыполнитьПример();
КонецПроцедуры

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

  1. СоздатьСвойСчет проверяет платформу и свой стенд, связь с планом аналитик, предел три вида и отсутствие дополнительных флагов. СоздатьСчет создаёт новый объект, не получает записанный счёт по ссылке.

  2. Три ссылки берутся из своих предопределённых АналитикаА/Б/В, заданных в подготовке. Непустая ссылка не подменяется произвольным UUID или неизвестным входным объектом.

  3. Строки специальной таблицы имеют ВидСубконто как ссылку на план характеристик и два отдельных Булево. Предопределенное=Ложь относится к строке счёта, не к тому, является ли сама аналитика предопределённым элементом плана.

  4. Индекс начинается с 0, НомерСтроки — с 1 и readonly. Полный валидатор сверяет обе адресации, принадлежность строки, вид и оба флага; НомерСтроки не присваивается вручную.

  5. Мутирующие методы допустимы у таблицы объекта. У таблицы ссылки или выборки они вызовут ошибку: ни ссылку на записанный счёт, ни неизвестную таблицу урок не принимает.

  6. Итог("НомерСтроки") суммирует порядковые числа 1+2+3=6. Это нарочно техническая проверка совместимости, не сумма проводок, число аналитик или денежный показатель.

  7. Выгрузкой получаем настоящий список колонок. Стенд должен содержать только четыре стандартные колонки; наличие динамических флагов учёта отклоняет этот узкий опыт.

  8. Для Свернуть оба списка должны покрывать всю таблицу и не пересекаться. Собираем первый список из всех фактических имён, второй оставляем пустым: ничего не суммируем в readonly-номер.

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

  10. Для реальной задачи отчёта надо выгрузить данные в отдельную ТаблицуЗначений, выбрать осмысленные группировки и вычисляемые показатели. Урок не выдаёт формальную доступность метода за рекомендацию его использовать на счёте.

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

  1. Будущий тест: F7 и запуск Пульта только в своём новом стенде. Каждый вызов начинается с нового счёта и пустой таблицы; здесь BSL не выполнялся.

  2. Если не созданы свои предопределённые имена, подготовьте их и обновите только свой стенд. Не заменяйте их чужими ссылками из БП или КА2.

  3. В коде нет Записать счёта, проводок или регистров бухгалтерии. Удаление/очистка затрагивает только новые строки памяти, не записи базы.

  4. Будущий технический контроль: сумма номеров 6 и три разные строки после Свернуть; обе величины ничего не говорят об учётных остатках.

  5. Все фактические колонки входят в группировку, список суммирования пуст. НомерСтроки не присваивается и не используется как сумма бухгалтерского показателя.

  6. Добавление своего флага учёта субконто в подготовку должно остановить опыт проверкой состава колонок, а не незаметно потерять этот флаг.

  7. Справочное ограничение «для данного объекта использование не имеет смысла» должно оставаться видимым рядом с кодом обоих методов.

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

Будущий опыт сверяет полный состав собственного незаписанного счёта в памяти и границы специальной таблицы. Рабочая база, проводки и счета не меняются. runtimeVerifiedScenarios=0.

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

  1. ВидыСубконто — специальная таблица счёта, не таблица сумм бухгалтерского регистра. Изменение её порядка влияет на позиции аналитик, не на остатки.

  2. ТолькоОбороты и Предопределенное — разные флаги. Ссылка на предопределённый вид не делает автоматически предопределённой добавленную нами строку счёта.

  3. Методы объекта памяти не сохраняют счёт. Этот черновик намеренно не подготовлен к записи; не добавляйте Записать ради проверки примера.

  4. Статические Python/HTML-проверки и сверка установленной справки не являются компиляцией и запуском в 1С. runtimeVerifiedScenarios остаётся 0.

  5. Не копируйте пример native Состав.Итог("Всего") или Свернуть("Номенклатура",...) в ВидыСубконто: таких полей у этой специальной таблицы нет.

  6. Наличие метода в списке API не означает его полезность для этого типа. Этот урок — честная демонстрация совместимости, а не схема автоматического изменения бухгалтерской аналитики.

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

Разобрать ассоциации шести собственных корзин и получить настоящий прогноз для двух новых входов

Самодостаточный серверный модуль отделяет десять событий от шести транзакций, обучает поиск ассоциаций, показывает реальные частые группы и правила ЕСЛИ/ТО, выгружает их в дерево и применяет созданную модель к отдельному источнику. Ни состав рекомендаций, ни количество строк выхода заранее не подставляются.

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

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

Подготовка

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

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

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

  4. Таблица событий имеет Корзина/Товар. Четыре own-basket-1…4 содержат A+B, пятая только A, шестая только C: десять строк событий, шесть объектов, три различных вымышленных товара. Это не продажи, документы или рабочий справочник.

  5. Корзина — Объект, Товар — Элемент; обе колонки дискретные. ТипИсточникаДанных=Событийный. МинимальныйПроцентСлучаев=25 исключает одиночный C из частых сочетаний. МинимальнаяДостоверность/МинимальнаяЗначимость=0 специально не вводят дополнительный порог этих показателей в маленьком учебном опыте.

  6. ПоискПоИерархии=Ложь, ИгнорироватьНезаполненныеЗначения=Истина, ТипОтсеченияПравил=Избыточные. Числовые значения как товары не используются; настройки числовой интерпретации не придумываются. Достоверность вывода не переводится в проценты без подтвержденной единицы.

  7. Отдельный прогнозный источник создается заново: own-future-A содержит только A, own-future-C только C. Готовых следствий и вероятностей в источнике нет; для C отсутствие рекомендации допустимо.

Функция ВыполнитьПример() Экспорт
    ПроверитьСвойПустойСтенд();
    События = СоздатьСвоиКорзины(Ложь);
    Анализатор = Новый АнализДанных;
    Анализатор.ТипАнализа = Тип("АнализДанныхПоискАссоциаций");
    Анализатор.ИсточникДанных = События;
    НастроитьСвоиРолиКорзины(Анализатор.НастройкаКолонок);
    НастроитьСвойПараметр(Анализатор.Параметры, "ТипИсточникаДанных", ТипИсточникаДанныхПоискаАссоциаций.Событийный);
    НастроитьСвойПараметр(Анализатор.Параметры, "МинимальныйПроцентСлучаев", 25);
    НастроитьСвойПараметр(Анализатор.Параметры, "МинимальнаяДостоверность", 0);
    НастроитьСвойПараметр(Анализатор.Параметры, "МинимальнаяЗначимость", 0);
    НастроитьСвойПараметр(Анализатор.Параметры, "ПоискПоИерархии", Ложь);
    НастроитьСвойПараметр(Анализатор.Параметры, "ИгнорироватьНезаполненныеЗначения", Истина);
    НастроитьСвойПараметр(Анализатор.Параметры, "ТипОтсеченияПравил", ТипОтсеченияПравилАссоциации.Избыточные);
    Результат = Анализатор.Выполнить();
    Если ТипЗнч(Результат) <> Тип("РезультатАнализаДанныхПоискАссоциаций") Или Результат.КоличествоОбъектов <> 6 Тогда
        ВызватьИсключение "Нужен настоящий результат по шести собственным корзинам, не по десяти строкам событий";
    КонецЕсли;
    НастроитьСвоиРолиКорзины(Результат.НастройкаКолонок, Истина);
    ПроверитьСвойПараметр(Результат.Параметры, "ТипИсточникаДанных", ТипИсточникаДанныхПоискаАссоциаций.Событийный);
    ПроверитьСвойПараметр(Результат.Параметры, "МинимальныйПроцентСлучаев", 25);
    ПроверитьСвойПараметр(Результат.Параметры, "МинимальнаяДостоверность", 0);
    Отчет = "СВОИ ВЫМЫШЛЕННЫЕ КОРЗИНЫ, НЕ РЕАЛЬНЫЕ РЕКОМЕНДАЦИИ" + Символы.ПС;
    Отчет = Отчет + "Строк событий=" + Строка(События.Количество()) + "; объектов-корзин=" + Строка(Результат.КоличествоОбъектов)
        + "; элементов по платформе=" + Строка(Результат.КоличествоЭлементов)
        + "; средний размер по платформе=" + Строка(Результат.СреднийРазмерОбъекта) + Символы.ПС;
    Группы = Результат.Группы;
    Если ТипЗнч(Группы) <> Тип("ФиксированныйМассив") Или Группы.Количество() > 128 Тогда
        ВызватьИсключение "Нужны настоящие небольшие группы собственного расчета";
    КонецЕсли;
    Отчет = Отчет + "Найдено групп=" + Строка(Группы.Количество()) + Символы.ПС;
    Для Каждого Группа Из Группы Цикл
        Если ТипЗнч(Группа) <> Тип("АссоциированнаяГруппа") Или Группа.КоличествоСлучаев < 0
            Или Группа.КоличествоСлучаев > 6 Или Группа.ПроцентСлучаев < 0 Или Группа.ПроцентСлучаев > 100 Тогда
            ВызватьИсключение "Некорректные случаи или процент настоящей своей группы";
        КонецЕсли;
        Отчет = Отчет + "Группа " + ОписатьСвойНаборТоваров(Группа.Элементы)
            + "; случаев=" + Строка(Группа.КоличествоСлучаев) + "; процент=" + Строка(Группа.ПроцентСлучаев) + Символы.ПС;
    КонецЦикла;
    Отчет = Отчет + ОписатьСвоиПравила(Результат.Правила);
    Дерево = Результат.ВыгрузитьПравила();
    Отчет = Отчет + ОписатьСвоеДеревоПравил(Дерево);
    Модель = Результат.СоздатьМодельПрогноза();
    Если ТипЗнч(Модель) <> Тип("МодельПрогнозаПоискАссоциаций") Тогда
        ВызватьИсключение "Не создана собственная настоящая модель ассоциаций";
    КонецЕсли;
    Отчет = Отчет + "ПРАВИЛА СОЗДАННОЙ МОДЕЛИ" + Символы.ПС + ОписатьСвоиПравила(Модель.Правила);
    НовыеКорзины = СоздатьСвоиКорзины(Истина);
    Модель.ИсточникДанных = НовыеКорзины;
    Если ТипЗнч(Модель.ИсточникДанных) <> Тип("ТаблицаЗначений") Или Модель.ИсточникДанных.Количество() <> 2 Тогда
        ВызватьИсключение "Нужен отдельный собственный источник двух новых одиночных корзин";
    КонецЕсли;
    Колонки = Модель.Колонки;
    Входы = Модель.НастройкаВходныхКолонок;
    Если ТипЗнч(Колонки) <> Тип("КолонкиМоделиПрогноза") Или ТипЗнч(Входы) <> Тип("НастройкаВходныхКолонокМоделиПрогноза")
        Или Входы.Количество() = 0 Или Входы.Количество() > 2 Тогда
        ВызватьИсключение "Нужны настоящие входные соответствия своей двухколоночной модели";
    КонецЕсли;
    Для Каждого Настройка Из Входы Цикл
        Имя = Настройка.КолонкаМоделиПрогноза.Имя;
        Если Имя <> "Корзина" И Имя <> "Товар" Тогда
            ВызватьИсключение "Модель требует непредусмотренное собственным источником поле " + Имя;
        КонецЕсли;
        СвязатьСвоюВходнуюКолонку(Входы, Колонки, Имя);
    КонецЦикла;
    Отчет = Отчет + ОписатьСвоиКолонки(Колонки);
    ИсточникКорзины = НайтиСвоюКолонку(Колонки, "Корзина", ТипКолонкиМоделиПрогноза.КолонкаИсточникаДанных);
    Следствие = НайтиСвоюКолонку(Колонки, "Следствие", ТипКолонкиМоделиПрогноза.Прогнозируемая);
    Достоверность = НайтиСвоюКолонку(Колонки, "Достоверность", ТипКолонкиМоделиПрогноза.Прогнозируемая);
    Выход = Модель.КолонкиРезультата;
    Если ТипЗнч(Выход) <> Тип("КолонкиРезультатаМоделиПрогноза") Тогда
        ВызватьИсключение "Нужна собственная реальная коллекция выхода ассоциаций";
    КонецЕсли;
    Выход.Очистить();
    КолонкаКорзины = Выход.Добавить(ИсточникКорзины);
    КолонкаКорзины.Имя = "УчебнаяКорзина";
    КолонкаСледствия = Выход.Добавить(Следствие);
    КолонкаСледствия.Имя = "УчебноеСледствие";
    КолонкаДостоверности = Выход.Добавить(Достоверность);
    КолонкаДостоверности.Имя = "УчебнаяДостоверность";
    Прогноз = Модель.Выполнить();
    Если ТипЗнч(Прогноз) <> Тип("ТаблицаЗначений") Или Прогноз.Количество() > 32 Или Прогноз.Колонки.Количество() <> 3 Тогда
        ВызватьИсключение "Нужна настоящая небольшая выходная таблица со своей схемой";
    КонецЕсли;
    Для Каждого Имя Из СтрРазделить("УчебнаяКорзина,УчебноеСледствие,УчебнаяДостоверность", ",") Цикл
        Если Прогноз.Колонки.Найти(Имя) = Неопределено Тогда
            ВызватьИсключение "Нет собственной выходной колонки " + Имя;
        КонецЕсли;
    КонецЦикла;
    Отчет = Отчет + "РЕКОМЕНДАЦИИ ПО ДВУМ НОВЫМ КОРЗИНАМ; строк=" + Строка(Прогноз.Количество()) + Символы.ПС;
    Для Каждого СтрокаПрогноза Из Прогноз Цикл
        Код = СтрокаПрогноза.УчебнаяКорзина;
        Если ТипЗнч(Код) <> Тип("Строка") Или НовыеКорзины.Найти(Код, "Корзина") = Неопределено Тогда
            ВызватьИсключение "Результат содержит чужую корзину";
        КонецЕсли;
        ЗначениеСледствия = СтрокаПрогноза.УчебноеСледствие;
        Если ТипЗнч(ЗначениеСледствия) = Тип("ОбъектАнализаДанных") Тогда
            ОписаниеСледствия = ОписатьСвойТовар(ЗначениеСледствия);
        Иначе
            ОписаниеСледствия = Строка(ЗначениеСледствия);
        КонецЕсли;
        Отчет = Отчет + Код + "; следствие=" + ОписаниеСледствия + "; тип следствия=" + Строка(ТипЗнч(ЗначениеСледствия))
            + "; достоверность как вернула платформа=" + Строка(СтрокаПрогноза.УчебнаяДостоверность)
            + "; тип достоверности=" + Строка(ТипЗнч(СтрокаПрогноза.УчебнаяДостоверность)) + Символы.ПС;
    КонецЦикла;
    Если События.Количество() <> 10 Или НовыеКорзины.Количество() <> 2 Тогда
        ВызватьИсключение "Изменились свои независимые таблицы памяти";
    КонецЕсли;
    Возврат Отчет + "Для C связь с другим товаром не заложена; отсутствие рекомендации допустимо. Не ожидается ровно две строки выхода";
КонецФункции

Функция СоздатьСвоиКорзины(ДляПрогноза)
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Корзина", Новый ОписаниеТипов("Строка"));
    Таблица.Колонки.Добавить("Товар", Новый ОписаниеТипов("Строка"));
    Если ДляПрогноза Тогда
        ДобавитьСвойТовар(Таблица, "own-future-A", "A");
        ДобавитьСвойТовар(Таблица, "own-future-C", "C");
        Ожидается = 2;
    Иначе
        Для Номер = 1 По 4 Цикл
            Код = "own-basket-" + Строка(Номер);
            ДобавитьСвойТовар(Таблица, Код, "A");
            ДобавитьСвойТовар(Таблица, Код, "B");
        КонецЦикла;
        ДобавитьСвойТовар(Таблица, "own-basket-5", "A");
        ДобавитьСвойТовар(Таблица, "own-basket-6", "C");
        Ожидается = 10;
    КонецЕсли;
    Если Таблица.Количество() <> Ожидается Или Таблица.Колонки.Количество() <> 2 Тогда
        ВызватьИсключение "Нарушен размер собственного списка событий";
    КонецЕсли;
    Возврат Таблица;
КонецФункции

Процедура ДобавитьСвойТовар(Таблица, Код, Товар)
    СтрокаКорзины = Таблица.Добавить();
    СтрокаКорзины.Корзина = Код;
    СтрокаКорзины.Товар = Товар;
КонецПроцедуры

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

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

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

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

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

Функция НайтиСвойПараметр(Параметры, Имя)
    Параметр = Параметры.Найти(Имя);
    Если Параметр = Неопределено Или ТипЗнч(Параметр) <> Тип("ПараметрАнализаДанных") Тогда
        ВызватьИсключение "Не найден собственный параметр алгоритма " + Имя;
    КонецЕсли;
    Индекс = Параметры.Индекс(Параметр);
    Если Индекс < 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. Собственный guard проверяет пустую конфигурацию до алгоритма. СоздатьСвоиКорзины строит типизированные таблицы только в памяти. Один объект-корзина состоит из нескольких событий: десять строк не означают десять транзакций.

  2. АнализДанных.ТипАнализа получает настоящий Тип("АнализДанныхПоискАссоциаций"). Роли Объект/Элемент и виды данных задаются реальным настройкам колонок. Параметры ищутся по установленным native-именам, тип значения проверяется до присваивания; ключевые настройки результата перечитываются.

  3. КоличествоОбъектов сопоставляется с шестью своими корзинами, КоличествоЭлементов и СреднийРазмерОбъекта выводятся фактически. В исходной таблице различны количество событий 10 и число товаров 3; неоднозначное слово «элементы» в короткой справке не заменяет проверку реального результата.

  4. Группы содержат настоящие АссоциированнаяГруппа. КоличествоСлучаев — число корзин, где группа встречается, а ПроцентСлучаев — процент. Элементы — фиксированный массив ОбъектАнализаДанных, не список готовых строк товара.

  5. ОписатьСвойТовар копирует пересечение имен в свою структуру и разбирает настоящее динамическое свойство Товар как СвойствоОбъектаАнализаДанных. Проверяются имя, сравнение Равно, строка и один из A/B/C. Объект источника readonly и не меняется.

  6. ПравилоАссоциации разделяет Предпосылка (ЕСЛИ) и Следствие (ТО); обе части — массивы объектов анализа. КоличествоСлучаев/ПроцентСлучаев показывают поддержку, Достоверность — условную вероятность, Значимость — отдельную native-характеристику. Последние два числа выводятся как вернула платформа, не объявляются автоматически процентами.

  7. ВыгрузитьПравила возвращает реальное ДеревоЗначений. Урок показывает действительные имена его колонок, значения корневых строк и количество детей, не угадывает схему выгрузки. Это текстовая диагностика дерева, не показ GUI и не запись файла.

  8. СоздатьМодельПрогноза вызывается у настоящего своего результата. Модель.Правила также разбирается тем же полным помощником; источник прогноза — отдельные новые корзины, не обучающая таблица.

  9. Существующие входные соответствия модели обходятся фактически. Допустимы только собственные Корзина/Товар; каждое реальное имя связывается с настоящими колонками Входная/КолонкаИсточникаДанных. Не создаем произвольную настройку или ожидаем безусловно два входа.

  10. Native-модель описывает прогнозируемые колонки Следствие и Достоверность. Их реальные дескрипторы и колонка источника Корзина добавляются в собственный выход: УчебнаяКорзина, УчебноеСледствие, УчебнаяДостоверность. Иерархия и пути выводятся фактически.

  11. Модель.Выполнить вызывается после настройки. Таблица выхода может иметь ноль, одну или несколько строк на собственную корзину: по правилам рекомендации отсутствуют или множественны. Не требуем одну строку на событие и не запрещаем повторный код корзины. Проверяем принадлежность каждого кода своему входу и свою схему колонок.

  12. Следствие разбирается как ОбъектАнализаДанных только при фактическом таком типе; иначе выводится значение и его реальный тип. Короткая модельная справка не объявляет точный тип ячейки. Достоверность также выводится с типом и без выдуманного коэффициента 100. Никаких заранее назначенных B или чисел вероятности нет.

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

  1. Будущий положительный опыт: отчет должен подтвердить шесть объектов и десять событий, реальные роли/параметры, найденные группы/правила, actual-дерево и actual-прогноз по двум новым кодам. Количество правил, порядок и строки рекомендаций не фиксируются статическими тестами.

  2. Ручной эталон собственной таблицы, не результат 1С: A встречается в 5 из 6 корзин, B в 4 из 6, C в 1 из 6, пара A+B в 4 из 6. Для направления A→B условная доля 4/5, для B→A 4/4. Это разные знаменатели; отсечение может убрать часть правил из конечного вывода.

  3. Будущий отрицательный контроль ролей: только присваивание Корзина.ТипКолонки заменить с Объект на Элемент. Независимая проверка ролей должна остановиться до анализа. Вернуть Объект.

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

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

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

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

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

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

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

  2. Поддержка пары и достоверность направленного правила имеют разные знаменатели. Число событий/число корзин/число уникальных товаров различны; не использовать один счетчик вместо всех трех.

  3. Нет обещания конкретного числа правил: пороги, отсечение и алгоритм влияют на результат. Пустой прогноз для корзины C допустим; результат не обязан повторять количество строк источника.

  4. У НастройкаВходныхКолонок проверяются реальные полученные имена. Если installed-модель потребует иное имя или роль, урок остановится с диагностикой до прогноза; это место требует будущей ручной проверки, а не заполнения неизвестных параметров.

  5. В native-описании модели не указан точный тип ячейки Следствие. Поэтому он не придумывается: факт типа проверяется, object-ветка разбирает descriptor, остальная ветка показывает значение/тип. Достоверность не масштабируется автоматически.

  6. Readonly свойства результатов, групп, правил и модели не присваиваются. Меняются только разрешенные настройки созданных объектов; источник, дерево и нормализованные карты не выдаются за рабочие данные.

  7. У КолонкиМоделиПрогноза.Получить противоречивый declared-тип; помощник использует только общее Имя возврата. Остальные свойства читаются у настоящего объекта Найти. Нет исправления native-справки на основании догадки.

  8. Нет запросов к конфигурациям пользователя, записей базы, файлов, сети, почты, печати и GUI расчетов. Собственная внешняя форма лишь получает текст своего сервера.

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

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

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

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

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