ПланВидовХарактеристикМенеджер.<Имя плана видов характеристик>.ВыбратьПоСсылкам

Методы · SelectByRefs

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

Синтаксис

ВыбратьПоСсылкам(<Источник>, <Колонка>)

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

Запрос = Новый Запрос();
Запрос.Текст = "
    |ВЫБРАТЬ
    |    ВидыХарактеристик.Ссылка КАК Ссылка
    |ИЗ
    |    ПланВидовХарактеристик.ВидыХарактеристик КАК ВидыХарактеристик
    |";
РезультатЗапроса = Запрос.Выполнить();
Выборка = ПланыВидовХарактеристик.ВидыХарактеристик
    .ВыбратьПоСсылкам(РезультатЗапроса);
Полное описание, параметры и ограничения

ПланВидовХарактеристикМенеджер.<Имя плана видов характеристик>.ВыбратьПоСсылкам (ChartOfCharacteristicTypesManager.<Chart of characteristic types name>.SelectByRefs)

ПланВидовХарактеристикМенеджер.<Имя плана видов характеристик> (ChartOfCharacteristicTypesManager.<Chart of characteristic types name>)

ВыбратьПоСсылкам (SelectByRefs)

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

Синтаксис:
ВыбратьПоСсылкам(<Источник>, <Колонка>)
Параметры:

<Источник> (обязательный)
Тип: ТаблицаЗначений, РезультатЗапроса, Массив, ФиксированныйМассив.
Источник ссылок на элементы плана видов характеристик.

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

Описание:

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

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

Сервер, толстый клиент, внешнее соединение.

Пример:

Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ
| ВидыХарактеристик.Ссылка КАК Ссылка
|ИЗ
| ПланВидовХарактеристик.ВидыХарактеристик КАК ВидыХарактеристик
|";
РезультатЗапроса = Запрос.Выполнить();
Выборка = ПланыВидовХарактеристик.ВидыХарактеристик
.ВыбратьПоСсылкам(РезультатЗапроса);

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

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

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

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

Найти виды характеристик и выбрать элементы внутри своей группы

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

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

Полный обычный клиентский общий модуль УчебныеМенеджеры85, только толстый клиент. Пульт отдельным полным модулем ниже. Не выполнялся.

Подготовка

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

  2. Планы счетов → УчебныеСчета85: длина кода 10, маска пустая, длина наименования 100, контроль уникальности включён. Без видов субконто, признаков учёта и предопределённых счетов. Реквизит УчебныйКлюч85: Строка(10), переменная длина, индексирование Индексировать. Формы и макет подготовьте далее, модули пустые. Второй ПустыеСчета85 — без реквизитов, форм, предопределённых счетов и записей, только для политики.

  3. Планы видов характеристик → УчебныеСвойства85: иерархия групп и элементов включена, длина кода 10, тип кода Строка, длина наименования 100, тип характеристик только Строка(30). Реквизит УчебныйКлюч85: Строка(10), переменная длина, Индексировать, использование для групп и элементов. Без предопределённых элементов и дополнительных значений. Второй ПустыеСвойства85 — без предопределённых элементов и записей, только для политики.

  4. Для ОБОИХ основных планов заранее вручную создайте только четыре обычные записи: G — код 01, наименование Учебный родитель, ключ G, родитель пустой; A — код 10, наименование Учебный верхний A, ключ A, родитель пустой; B — код 30, наименование Учебный дочерний B, ключ B, родитель G; C — код 20, наименование Учебный верхний C, ключ C, родитель пустой. У плана характеристик G именно группа, A/B/C элементы типа Строка(30). У плана счетов G обычный родительский счёт, не группа справочника. Записи пометкой удаления не отмечены. Эти собственные записи готовит человек; код уроков их не создаёт и не записывает.

  5. У УчебныеСчета85 создайте обычные формы Счет85 (форма счёта), Список85 (форма списка), Выбор85 (форма выбора), назначьте основными для соответствующих назначений. Используйте стандартный мастер своих форм, модули оставьте пустыми. У УчебныеСвойства85 обычные Элемент85, Группа85, Список85, Выбор85, ВыборГруппы85 — назначьте основными для элемента, группы, списка, выбора элемента и выбора группы. Это НЕ управляемые формы.

  6. У каждого основного плана создайте макет Шаблон85 типа Табличный документ. В R1C1 у плана счетов текст План счетов, у плана характеристик текст План характеристик. Без параметров и кода. У пустых планов макеты и формы не нужны.

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

  8. Для политики войдите собственным учебным администратором. ПустыеСчета85 и ПустыеСвойства85 должны иметь НОЛЬ любых записей, ноль предопределённых определений и никогда ранее не перенастраиваться. Режим обновления в конфигурации и информационной базе исходно Авто. Нельзя подменить это подготовкой существующей базы: вычисленный getter не доказывает исходное значение сохранённого override.

  9. F7 и обновление только собственного стенда, затем Пульт толстого клиента. Уроки поиска только читают четыре записи. Уроки форм открывают 4/6 отдельных своих окон и макет; не нажимайте Записать, завершайте окна без сохранения новых объектов, макет не печатайте и не сохраняйте.

  10. Урок политики в будущем меняет служебный признак и режим обновления только двух пустых своих планов, затем возвращает исходный признак и заранее известное Авто. Это запись системной настройки собственного стенда, не создание предопределённых объектов, не удаление следов изменения и не беззаписный опыт. Здесь никакая запись или UI-операция не выполнялась.

Процедура ВыполнитьПример() Экспорт
    ПроверитьСвойКонтекст();
    Менеджер = ПланыВидовХарактеристик.УчебныеСвойства85;
    Родитель = Менеджер.НайтиПоРеквизиту("УчебныйКлюч85", "G");
    Ребенок = Менеджер.НайтиПоРеквизиту("УчебныйКлюч85", "B", Родитель);
    Если Родитель.Пустая() Или Ребенок.Пустая() Тогда
        ВызватьИсключение "Создайте собственные записи G и B с заданной связью";
    КонецЕсли;
    Найденный = Менеджер.НайтиПоНаименованию("Учебный дочерний B", Истина, Родитель);
    Если Найденный <> Ребенок Тогда
        ВызватьИсключение "Точный поиск в своём родителе должен вернуть тот же B";
    КонецЕсли;
    Все = ПрочитатьСвоиКлючи(Менеджер.Выбрать(,,"Код Возр"));
    ПроверитьПорядок(Все, "G,A,C,B");
    Дерево = ПрочитатьСвоиКлючи(Менеджер.ВыбратьИерархически(,,"Код Возр"));
    ПроверитьПорядок(Дерево, "G,B,A,C");
    Дети = ПрочитатьСвоиКлючи(Менеджер.Выбрать(Родитель,,"Код Возр"));
    ПроверитьПорядок(Дети, "B");
    Отбор = Новый Структура("УчебныйКлюч85", "B");
    ПоКлючу = ПрочитатьСвоиКлючи(Менеджер.Выбрать(,Отбор,"Код Возр"));
    ПроверитьПорядок(ПоКлючу, "B");
    Ссылки = Новый Массив;
    Ссылки.Добавить(Ребенок);
    Ссылки.Добавить(Менеджер.НайтиПоРеквизиту("УчебныйКлюч85", "A"));
    Ссылки.Добавить("это не ссылка");
    Ссылки.Добавить(Менеджер.ПустаяСсылка());
    ПоСсылкам = ПрочитатьСвоиКлючи(Менеджер.ВыбратьПоСсылкам(Ссылки));
    Если ПоСсылкам.Количество() <> 2 Или ПоСсылкам.Найти("A") = Неопределено Или ПоСсылкам.Найти("B") = Неопределено Тогда
        ВызватьИсключение "Нужны только существующие собственные ссылки A и B, без обещания порядка источника";
    КонецЕсли;
    Параметры = Новый Структура;
    Параметры.Вставить("Отбор", Отбор);
    Параметры.Вставить("СтрокаПоиска", Неопределено);
    ДанныеВыбора = Менеджер.ПолучитьДанныеВыбора(Параметры);
    Если ТипЗнч(ДанныеВыбора) <> Тип("СписокЗначений") Или ДанныеВыбора.Количество() <> 1
        Или ДанныеВыбора.Получить(0).Значение <> Ребенок Тогда
        ВызватьИсключение "Быстрый выбор по одному ключу должен вернуть собственный B";
    КонецЕсли;
    Сообщить("Плоско G,A,C,B; иерархически G,B,A,C; дети и отбор только B; по ссылкам A и B. Записи не менялись.");
КонецПроцедуры

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

Функция ПрочитатьСвоиКлючи(Выборка)
    Ключи = Новый Массив;
    Пока Выборка.Следующий() Цикл
        Ключ = Выборка.УчебныйКлюч85;
        Если Ключ <> "A" И Ключ <> "G" И Ключ <> "B" И Ключ <> "C" Тогда
            ВызватьИсключение "Выборка содержит неподготовленную запись своего стенда";
        КонецЕсли;
        Если Ключи.Найти(Ключ) <> Неопределено Тогда
            ВызватьИсключение "В подготовке ключи должны быть уникальны";
        КонецЕсли;
        Ключи.Добавить(Ключ);
    КонецЦикла;
    Возврат Ключи;
КонецФункции

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

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

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

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

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

  1. Получаем конкретный менеджер своего плана после проверки имени стенда и платформы. Четыре записи с известными ключами уже подготовлены человеком, код не вызывает Создать или Записать.

  2. НайтиПоРеквизиту работает с собственным ограниченным строковым реквизитом УчебныйКлюч85. Получаем G, затем B в пределах G; отсутствие нужных записей даёт отказ вместо произвольной подстановки ссылки.

  3. НайтиПоНаименованию использует Истина для точного совпадения и конкретного родителя. Для пустого искомого наименования этот getter может вернуть Неопределено, а для отсутствующей непустой строки — пустую ссылку; здесь имя явно непустое.

  4. Выбрать без родителя даёт общий плоский порядок Код Возр: G,A,C,B. Отсутствующий параметр не заменяется пустой ссылкой, поскольку для иерархии пустая ссылка может означать только верхний уровень.

  5. ВыбратьИерархически с тем же порядком даёт G,B,A,C: ребёнок G проходит раньше следующих корневых A/C, несмотря на больший код 30. Родитель G имеет наименьший код 01, поэтому опыт не зависит от возможного приоритета групп. Это не обычная сортировка всех записей.

  6. Выбрать с родителем G возвращает только B. Отдельный отбор имеет ровно один ключ УчебныйКлюч85=B и требует его индексирования в подготовке; два поля в структуру отбора не добавляются.

  7. ВыбратьПоСсылкам доступен с 8.3.26, на 8.5.1.1343 он есть. Источник содержит настоящие A/B, заведомо не-ссылочный текст и пустую ссылку. Чужие по типу и несуществующие элементы игнорируются по справке; результат проверяем как множество A/B, не по порядку массива.

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

  9. Этот метод вызывает ОбработкаПолученияДанныхВыбора. В собственных менеджерских модулях обработчиков нет, поэтому ожидается штатный список с одним B; это не доказательство поведения чужой конфигурации.

  10. ПрочитатьСвоиКлючи обходит настоящую выборку через Следующий, отклоняет неизвестные ключи и повторы. Любое расхождение состава или иерархии завершает опыт ошибкой.

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

  1. Будущий тест: F7, свой Пульт, одна выбранная версия общего модуля. Вывод подтверждает G,A,C,B против G,B,A,C; runtimeVerifiedScenarios=0 до реального опыта.

  2. Дети G и отбор по ключу содержат только B. Данные быстрого выбора — один элемент со значением той же собственной ссылки B.

  3. Выборка по ссылкам содержит ровно A/B и не выдаёт текст или пустую ссылку как запись. Порядок результата источником не обещается.

  4. В своём стенде перенесите B в корень: контроль иерархии/детей должен отказать. Верните подготовку, не маскируйте расхождение новым ожидаемым списком.

  5. Добавьте лишнюю собственную запись с неизвестным ключом или дублируйте ключ: валидатор должен отказать. Урок не является универсальным просмотрщиком произвольных планов.

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

Будущий опыт работает только с подготовленными собственными планами. Код, формы и служебные настройки здесь не выполнялись: runtimeVerifiedScenarios=0.

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

  1. Один ключ структуры отбора — ограничение Выбрать/ВыбратьИерархически; нельзя путать его с произвольной структурой условий ПолучитьДанныеВыбора.

  2. У плана счетов G — родительский счёт, у плана характеристик G — группа. Код не использует ЭтоГруппа у счёта и не смешивает ссылочные типы разных планов.

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

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

  5. Статья иерархического отбора видов характеристик упоминает поле Имя, в отличие от обычной статьи Код/Наименование. Здесь иерархический отбор не передаётся; обычный отбор использует собственный индексируемый реквизит, поэтому не угадываем этот спорный вариант.

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

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

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

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

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