СвязьПоТипу.По умолчанию

Конструкторы

Создает объект и заполняет его свойства значениями из параметров.

Синтаксис

Новый СвязьПоТипу(<ПутьКДанным>, <ЭлементСвязи>)
Полное описание, параметры и ограничения

СвязьПоТипу.По умолчанию

СвязьПоТипу (TypeLink)

По умолчанию

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

Синтаксис:
Новый СвязьПоТипу(<ПутьКДанным>, <ЭлементСвязи>)
Параметры:

<ПутьКДанным> (необязательный)
Тип: Строка.
Путь к полю формы клиентского приложения, или объекту метаданных, или свойству объекта метаданных, откуда будут браться данные для отбора.
Значение по умолчанию: Пустая строка.

<ЭлементСвязи> (необязательный)
Тип: Число.
Содержит номер вида субконто для случая, если реквизит, с которым выбрана связь по типу, имеет значение типа Ссылка на план счетов.
Значение по умолчанию: 0.
Описание:

Создает объект и заполняет его свойства значениями из параметров.

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

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

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

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

Разобрать ограничение типа аналитики доходов

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

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

Полный серверный общий модуль учебной копии КА2 Progress. Только схема и собственные значения в памяти.

Подготовка

  1. Используйте отдельную учебную копию КА2 Progress, соответствующую C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS. Названия и настройки проверены по реальным Catalogs/Номенклатура.xml и Catalogs/ВидыПодарочныхСертификатов.xml.

  2. Создайте серверный общий модуль УчебныеЗадачи, вставьте полный модуль одного урока и вызовите ВыполнитьПример() из своего серверного обработчика учебной команды.

  3. Примеры читают схему и создают значения только в памяти. Они не создают и не записывают товары, не меняют метаданные, не запускают заполнение объекта или перестроение поискового индекса.

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

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

  1. Исходная АналитикаДоходов имеет набор типов характеристики СтатьиДоходов, а ведущая СтатьяДоходов — ссылку на план видов характеристик.

  2. СвязьПоТипу читается как описание пути. Оно не является самим выбранным значением статьи и не содержит автоматически прочитанной аналитики из базы.

  3. ЭлементСвязи применяется к номеру вида субконто при связи с планом счетов. В этом реальном примере связь идёт к плану видов характеристик и XML задаёт 0.

  4. Создаём отдельное описание с теми же двумя параметрами. Отдельный Новый СвязьПоТипу без аргументов показывает пустой путь и нулевой элемент.

  5. Фактический допустимый тип аналитики зависит от выбранной характеристики. Не обещаем один ссылочный тип для всех статей и не читаем/записываем сами статьи.

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

  1. Шесть контрольных Истина и строка фактического пути к ведущему реквизиту.

  2. Описание схемы не изменено, подарочный сертификат и бухгалтерские операции не созданы.

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

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

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

  1. СвязьПоТипу — не обычный отбор ссылок и не значение характеристики.

  2. Не подставляйте номер субконто 1–3 в связь плана видов характеристик только по аналогии с планом счетов.

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

Ограничить тип значения выбранным собственным видом характеристики

СвязьПоТипу указывает на реальный реквизит УчебныйВид. QTY разрешает Число, LABEL — Строка; выбранное значение используется в расчёте или подписи и проверяется на сервере.

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

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

Подготовка

  1. Создайте с нуля отдельную конфигурацию УчебныйВыборВвода85: управляемое приложение, Такси, язык Русский, платформа 8.5.1.1343, без расширений, общих реквизитов-разделителей и прикладных обработчиков. Не используйте рабочую базу.

  2. Создайте иерархический справочник УчебныеКниги85, иерархия групп и элементов, код Строка длиной 10 без автонумерации, наименование Строка 100. Добавьте реквизиты МеткаСтенда (Строка 30, для группы и элемента) и Секция (Строка 30, для элемента).

  3. В своём новом стенде вручную заведите группы BOOKGROUP/Книги и PENGROUP/Канцелярия. В первой группе заведите BOOK/Книга и ALBUM/Альбом с Секция = Книги, во второй PEN/Ручка с Секция = Канцелярия. У всех этих собственных записей МеткаСтенда = owned-input85. Других записей не создавайте.

  4. Каждый урок — отдельная новая управляемая форма внешней обработки. Назначьте ПриСозданииНаСервере, вставьте полный модуль. Реквизиты, поле и учебную команду код создаёт сам: вручную одноимённые элементы не добавляйте.

  5. После F7 обновите только собственную конфигурацию. Запускайте настольный тонкий клиент Windows. Уроки не выполнялись: runtimeVerifiedScenarios=0, фактическое отображение и стандартный выбор ещё требуют отдельного ручного теста.

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

  7. Коды BOOK, ALBUM, PEN и метка owned-input85 — конкретные значения подготовленного собственного стенда, не имена товаров вашей конфигурации. Если подготовка не совпала, исправляйте только свой стенд, не отключайте защиту для production.

  8. Дополнительно создайте в своей конфигурации план видов характеристик УчебныеВидыЗначений85 без иерархии, тип значения Число/Строка, код Строка длиной 10 без автонумерации. Только в нём вручную заведите QTY/Количество с типом Число и LABEL/Подпись с типом Строка. Другие планы или виды не используются.

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

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

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Сообщить(ПроверитьСвойТипНаСервере());
КонецПроцедуры

&НаСервере
Функция ПроверитьСвойТипНаСервере()
    Если Метаданные.ОбщиеРеквизиты.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только собственный новый неразделённый стенд УчебныйВыборВвода85";
    КонецЕсли;
    Если Не ЗначениеЗаполнено(УчебныйВид) Тогда
        Возврат "Выберите собственный вид QTY или LABEL";
    КонецЕсли;
    Если УчебныйВид.Код <> "QTY" И УчебныйВид.Код <> "LABEL" Тогда
        Возврат "Вид не относится к двум собственным образцам";
    КонецЕсли;
    ДопустимыйТип = УчебныйВид.ТипЗначения;
    Если ТипЗнч(ДопустимыйТип) <> Тип("ОписаниеТипов") Тогда
        Возврат "Описание типа своего вида недоступно";
    КонецЕсли;
    Если Не ДопустимыйТип.СодержитТип(ТипЗнч(УчебноеЗначение)) Тогда
        Возврат "Фактический тип значения не соответствует выбранному виду";
    КонецЕсли;
    Если УчебныйВид.Код = "QTY" Тогда
        Если ТипЗнч(УчебноеЗначение) <> Тип("Число") Или УчебноеЗначение < 0 Тогда
            Возврат "Для собственного количества нужен ноль или положительное число";
        КонецЕсли;
        Возврат "Своих книг: " + Строка(УчебноеЗначение) + "; сумма при цене 250: " + Строка(УчебноеЗначение * 250);
    Иначе
        Если ТипЗнч(УчебноеЗначение) <> Тип("Строка") Или ПустаяСтрока(УчебноеЗначение) Тогда
            Возврат "Для собственного LABEL нужна непустая строка";
        КонецЕсли;
        Возврат "Своя подпись: " + УчебноеЗначение;
    КонецЕсли;
КонецФункции

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

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

  2. СвязьПоТипу присваивается настоящему полю значения на сервере. Путь УчебныйВид указывает на реквизит с текущей ссылкой вида, не на выдуманное описание типа.

  3. Второй параметр конструктора не задан: это не индекс вариантов Число/Строка. Он предназначен для номера вида субконто при связи с планом счетов.

  4. После выбора QTY введите 3: учебная команда показывает количество 3 и собственную сумму 750. Никакого заказа не создаётся.

  5. Выберите LABEL, введите Учебная книга: проверка показывает подпись, а не умножает строку. Предыдущее значение после смены вида контролируется по фактическому типу.

  6. ТипЗначения ссылки читается только на сервере: этот член не доступен тонкому клиенту. СодержитТип сверяет настоящий тип вводного значения перед дальнейшим использованием.

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

  1. QTY и 3 → Своих книг: 3; сумма при цене 250: 750. LABEL и Учебная книга → Своя подпись: Учебная книга.

  2. Пустой вид, другой код, отрицательное количество или несоответствующий тип дают объяснение без записи.

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

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

Тип выбранного вида управляет настоящим полем; независимая серверная проверка защищает собственный расчёт от несоответствующего значения.

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

  1. Не присваивайте СвязьПоТипу на клиенте и не читайте там ТипЗначения ссылки.

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

  3. Наличие связи не заменяет прикладные ограничения: отрицательное количество и пустая подпись проверяются явно.

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

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

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

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

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