БизнесПроцессМенеджер.<Имя бизнес-процесса>.ВыбратьПоСсылкам

Методы · SelectByRefs

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

Синтаксис

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

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

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

БизнесПроцессМенеджер.<Имя бизнес-процесса>.ВыбратьПоСсылкам (BusinessProcessManager.<Business process name>.SelectByRefs)

БизнесПроцессМенеджер.<Имя бизнес-процесса> (BusinessProcessManager.<Business process name>)

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

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

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

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

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

Описание:

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

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

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

Пример:

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

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

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

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

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

Найти свои процессы по реальным ключам и проверить состав выборки

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

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

Полный серверный общий модуль УчебныйЦикл85 нового стенда УчебныйПоискЗадач85; реальные собственные записи внутри одной отменяемой транзакции.

Подготовка

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

  2. Задачи → УчебнаяЗадача85: номер Строка9, автонумерация, Наименование100; Маркер85 Строка36, КодПоиска85 Строка50, без обязательного заполнения.

  3. Бизнес-процессы → УчебныйПроцесс85: номер Строка9 с автонумерацией и непериодической, сквозной нумерацией; Маркер85 Строка36, КодПоиска85 Строка50. Задача=УчебнаяЗадача85.

  4. У обоих видов реквизитов Маркер85 и КодПоиска85 установите Индексирование=Индексировать. Отбор использует ровно один Маркер85, порядок — реальный индексированный КодПоиска85.

  5. Карта процесса: Старт → одиночное действие Опыт85 → Финиш, без адресации, обработчиков и вложенных процессов. Маршрут в коде не стартует; учебные задачи здесь отдельные записи.

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

  7. Общие → Общие модули → УчебныйЦикл85: Сервер=Истина, ВызовСервера=Истина, Глобальный=Ложь, Привилегированный=Ложь; остальные флаги и повторное использование выключены. Вставьте полный основной код одного урока.

  8. Для другого вида объекта замените целиком свой общий модуль, не склеивайте два ВыполнитьПример85. Имена относятся только к этому пустому стенду.

  9. Обработки → ЗапускЦикла85 → управляемая форма Форма. ПодтверждаюПустойСтенд85 и Занято85 Булево, Итог85 Строка неограниченной длины; исходные флажки Ложь, занятость и итог только для просмотра.

  10. Команда и кнопка ВыполнитьСвойЦикл85 с одноимённым действием. Полный модуль формы отдельно; сервер получает только согласие, не произвольный номер или рабочую ссылку.

  11. Нажмите F7 и обновите только собственный стенд. runtimeVerifiedScenarios=0: 1С, запись, выборки, поиск и откат здесь не выполнялись.

  12. Один пользователь и один клиент, нет фоновых заданий, других писателей, подписок и внешних действий. Перед опытом исследуемый вид объекта должен быть пустым.

  13. Две реальные записи имеют общий собственный UUID-маркер, разные КодПоиска85 с суффиксами-1/-2 и даты10:00/11:00 внутри учебного периода09:00–12:00 9октября2026. Это данные опыта, не фильтр вашей рабочей базы.

  14. Номера берутся из записанных объектов после автонумерации. Строки999999999/888888888 используются только как подтверждённо отсутствующий отрицательный тест, а не как идентификатор существующего объекта.

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

  16. Подтвердите пустой стенд и вручную запустите команду. Все поиски выполняются в одной собственной транзакции, которая отменяется как при успехе, так и при ошибке. После отката память объектов не переиспользуется.

  17. Этот основной код исследует УчебныйПроцесс85; тип его нумерации и длины полей должны совпадать с подготовкой.

Функция ВыполнитьПример85(Согласие) Экспорт
    Если Не Согласие Тогда
        ВызватьИсключение "Только собственный новый пустой стенд УчебныйПоискЗадач85 с согласием";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Не используйте чужую транзакцию для учебного поиска";
    КонецЕсли;
    ВыборкаДо = БизнесПроцессы.УчебныйПроцесс85.Выбрать();
    Если ВыборкаДо.Следующий() Тогда
        ВызватьИсключение "Исследуемый учебный вид должен быть пустым";
    КонецЕсли;
    Маркер = Строка(Новый УникальныйИдентификатор);
    СсылкаПервой = БизнесПроцессы.УчебныйПроцесс85.ПолучитьСсылку(Новый УникальныйИдентификатор);
    СсылкаВторой = БизнесПроцессы.УчебныйПроцесс85.ПолучитьСсылку(Новый УникальныйИдентификатор);
    ОтсутствующаяСсылка = БизнесПроцессы.УчебныйПроцесс85.ПолучитьСсылку(Новый УникальныйИдентификатор);
    Если СсылкаПервой = СсылкаВторой Или СсылкаПервой = ОтсутствующаяСсылка Или СсылкаВторой = ОтсутствующаяСсылка Тогда
        ВызватьИсключение "Собственные плановые ссылки должны различаться";
    КонецЕсли;
    Если СсылкаПервой.ПолучитьОбъект() <> Неопределено Или СсылкаВторой.ПолучитьОбъект() <> Неопределено
        Или ОтсутствующаяСсылка.ПолучитьОбъект() <> Неопределено Тогда
        ВызватьИсключение "Плановая ссылка уже занята; чужие записи не используются";
    КонецЕсли;
    НачалоПериода = Дата(2026, 10, 9, 9, 0, 0);
    КонецПериода = Дата(2026, 10, 9, 12, 0, 0);
    НачатьТранзакцию();
    Попытка
        Первая = БизнесПроцессы.УчебныйПроцесс85.СоздатьБизнесПроцесс();
        Первая.УстановитьСсылкуНового(СсылкаПервой);
        Первая.Дата = Дата(2026, 10, 9, 10, 0, 0);
        Первая.Маркер85 = Маркер;
        Первая.КодПоиска85 = Маркер + "-1";
        Вторая = БизнесПроцессы.УчебныйПроцесс85.СоздатьБизнесПроцесс();
        Вторая.УстановитьСсылкуНового(СсылкаВторой);
        Вторая.Дата = Дата(2026, 10, 9, 11, 0, 0);
        Вторая.Маркер85 = Маркер;
        Вторая.КодПоиска85 = Маркер + "-2";
        Первая.Записать();
        Вторая.Записать();
        Если Первая.Номер = "" Или Вторая.Номер = "" Или Первая.Номер = Вторая.Номер Тогда
            ВызватьИсключение "Сначала нужны два реальных различных присвоенных номера";
        КонецЕсли;
        Если БизнесПроцессы.УчебныйПроцесс85.НайтиПоНомеру(Первая.Номер) <> СсылкаПервой Тогда
            ВызватьИсключение "Поиск по реальному номеру не вернул первую собственную запись";
        КонецЕсли;
        Если БизнесПроцессы.УчебныйПроцесс85.НайтиПоНомеру("") <> Неопределено Тогда
            ВызватьИсключение "Пустой номер должен дать Неопределено, не пустую ссылку";
        КонецЕсли;
        НомерОтсутствующей = "999999999";
        Если НомерОтсутствующей = Первая.Номер Или НомерОтсутствующей = Вторая.Номер Тогда
            НомерОтсутствующей = "888888888";
        КонецЕсли;
        Если НомерОтсутствующей = Первая.Номер Или НомерОтсутствующей = Вторая.Номер Тогда
            ВызватьИсключение "Нет свободного отрицательного тестового номера; не угадываем идентичность";
        КонецЕсли;
        НеНайденная = БизнесПроцессы.УчебныйПроцесс85.НайтиПоНомеру(НомерОтсутствующей);
        Если НеНайденная = Неопределено Тогда
            ВызватьИсключение "Непустой отсутствующий номер не должен дать Неопределено";
        КонецЕсли;
        Если Не НеНайденная.Пустая() Тогда
            ВызватьИсключение "Отсутствующий непустой номер должен дать пустую ссылку";
        КонецЕсли;
        Если БизнесПроцессы.УчебныйПроцесс85.НайтиПоРеквизиту("КодПоиска85", Первая.КодПоиска85) <> СсылкаПервой Тогда
            ВызватьИсключение "Поиск по своему уникальному реквизиту не совпал";
        КонецЕсли;
        НеНайденнаяПоРеквизиту = БизнесПроцессы.УчебныйПроцесс85.НайтиПоРеквизиту("КодПоиска85", Маркер + "-missing");
        Если Не НеНайденнаяПоРеквизиту.Пустая() Тогда
            ВызватьИсключение "Несуществующий собственный код должен дать пустую ссылку";
        КонецЕсли;
        Отбор = Новый Структура("Маркер85", Маркер);
        Выборка = БизнесПроцессы.УчебныйПроцесс85.Выбрать(НачалоПериода, КонецПериода, Отбор, "КодПоиска85 Возр");
        ЧислоНайденных = 0;
        Пока Выборка.Следующий() Цикл
            ЧислоНайденных = ЧислоНайденных + 1;
            Если Выборка.Маркер85 <> Маркер Или (Выборка.Ссылка <> СсылкаПервой И Выборка.Ссылка <> СсылкаВторой) Тогда
                ВызватьИсключение "Выборка вышла за границы собственной пары";
            КонецЕсли;
            Если ЧислоНайденных = 1 И Выборка.Ссылка <> СсылкаПервой Тогда
                ВызватьИсключение "Индексированный порядок собственного кода не вернул первую запись первой";
            КонецЕсли;
        КонецЦикла;
        Если ЧислоНайденных <> 2 Тогда
            ВызватьИсключение "Отбор по собственному маркеру должен вернуть два элемента";
        КонецЕсли;
        ИсточникСсылок = Новый Массив;
        ИсточникСсылок.Добавить(СсылкаВторой);
        ИсточникСсылок.Добавить("не ссылка на объект");
        ИсточникСсылок.Добавить(ОтсутствующаяСсылка);
        ИсточникСсылок.Добавить(СсылкаПервой);
        ПоСсылкам = БизнесПроцессы.УчебныйПроцесс85.ВыбратьПоСсылкам(ИсточникСсылок);
        ПроверенаПервая = Ложь;
        ПроверенаВторая = Ложь;
        Пока ПоСсылкам.Следующий() Цикл
            Если ПоСсылкам.Маркер85 <> Маркер Тогда
                ВызватьИсключение "Выборка ссылок вернула не собственный маркер";
            КонецЕсли;
            Если ПоСсылкам.Ссылка = СсылкаПервой И Не ПроверенаПервая Тогда
                ПроверенаПервая = Истина;
            ИначеЕсли ПоСсылкам.Ссылка = СсылкаВторой И Не ПроверенаВторая Тогда
                ПроверенаВторая = Истина;
            Иначе
                ВызватьИсключение "Повторная или неизвестная ссылка в результатах";
            КонецЕсли;
        КонецЦикла;
        Если Не ПроверенаПервая Или Не ПроверенаВторая Тогда
            ВызватьИсключение "Результат по ссылкам не содержит обе свои реальные записи";
        КонецЕсли;
        ПустойИсточник = Новый Массив;
        ПустаяВыборка = БизнесПроцессы.УчебныйПроцесс85.ВыбратьПоСсылкам(ПустойИсточник);
        Если ПустаяВыборка.Следующий() Тогда
            ВызватьИсключение "Пустой источник не должен выбирать существующие записи";
        КонецЕсли;
        ОтменитьТранзакцию();
    Исключение
        Если ТранзакцияАктивна() Тогда
            ОтменитьТранзакцию();
        КонецЕсли;
        ВызватьИсключение;
    КонецПопытки;
    Если ТранзакцияАктивна() Или СсылкаПервой.ПолучитьОбъект() <> Неопределено
        Или СсылкаВторой.ПолучитьОбъект() <> Неопределено Тогда
        ВызватьИсключение "Собственная пара осталась после отката";
    КонецЕсли;
    Возврат "Поиск по реальным номерам/реквизитам и собственные выборки проверены. Пустая ссылка отличается от Неопределено. Неверный тип и отсутствующая ссылка отфильтрованы. Обе собственные записи отменены.";
КонецФункции
ЗапускЦикла85

УчебныйПоискЗадач85 → Обработки → ЗапускЦикла85 → Формы → Форма → Модуль

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

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

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

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

  2. Менеджер создаёт два реальных объекта с общим маркером и разными индексированными кодами/датами. В собственной транзакции они записываются и получают реальные разные номера.

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

  4. НайтиПоРеквизиту используется по собственному уникальному КодПоиска85; отсутствие второго кода проверяется как пустая ссылка. Этот метод не выдаётся за поиск полного набора по общему маркеру.

  5. Выбрать получает период, однопольный отбор и индексированный порядок в точном порядке параметров этого менеджера. Выборка должна вернуть две свои записи и первую с кодом-1 раньше кода-2.

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

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

  8. Собственная транзакция отменяется в обоих путях. После её окончания первая и вторая запись отсутствуют по ссылкам; успешный результат не означает фиксацию бизнес-данных.

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

  1. Реальный номер и собственный КодПоиска85 возвращают первую именно созданную уроком ссылку, а не любую найденную запись.

  2. Пустой номер даёт Неопределено; непустой отсутствующий номер и реквизит — пустую ссылку. Для задачи аналогично проверено пустое точное имя.

  3. Отбор по общему индексированному маркеру возвращает ровно две свои записи в порядке кодов-1/-2.

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

  5. После отката обе записи отсутствуют. Код не запускает маршрут, не выполняет задачу, не фиксирует транзакцию и не удаляет существующие рабочие данные.

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

При будущем собственном ручном запуске подтверждены реальные ключи поиска и точный состав собственных выборок, разные пустые результаты, а обе временные учебные записи отменены.

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

  1. У задачи Выбрать принимает Отбор, Порядок, ДатаНачала, ДатаОкончания; у процесса ДатаНачала, ДатаОкончания, Отбор, Порядок. Нельзя переносить порядок параметров по похожему имени метода.

  2. Структура отбора должна содержать только один элемент. Сложные условия нескольких реквизитов требуют подходящего запроса, а не произвольного расширения этой структуры.

  3. Пользовательские поля отбора и порядка должны быть индексированы. Здесь используются фиксированные строки Маркер85/КодПоиска85, не поле ХранилищеЗначения и не строка неограниченной длины.

  4. НайтиПоРеквизиту возвращает только одну совпавшую запись, не полный набор. Для пары с общим маркером используется Выбрать; для единичного поиска — уникальный собственный КодПоиска85.

  5. НайтиПоНомеру("") возвращает Неопределено. Непустой отсутствующий номер возвращает пустую ссылку; нельзя без проверки сразу вызывать Пустая у Неопределено.

  6. Для периодической нумерации процесса нужен второй аргумент ДатаИнтервала. Здесь настройка непериодическая и применяется однопараметровый вариант по реальному номеру.

  7. Точный поиск имени задачи исключает хвостовые пробелы из сравнения; неточный ищет левую часть. Здесь Истина и уникальные непустые имена, а пустое имя проверяется отдельно.

  8. Если совпавших имён/реквизитов несколько, метод может вернуть только одну запись. Это не обоснование произвольно изменять первую найденную рабочую задачу.

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

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

  11. Плановая непустая ссылка, созданная ПолучитьСсылку, не доказывает наличие объекта. Отсутствующая ссылка специально проверена до опыта и не записывается.

  12. Это простой период, в котором обе собственные даты строго внутри границ. Урок не делает предположений о сложной бизнес-интерпретации начала/конца периода и чужих часовых поясах.

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

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

  15. Серверный модуль и собственный стенд обязательны. Прямой доступ к этим объектам из тонкого клиентского обработчика и поиск в production этим примером не разрешаются.

  16. Все учебные записи, поиск, выборки и транзакции здесь только написаны. В1С они не запускались, runtimeVerifiedScenarios=0; новые резервные копии и архивы не создавались.

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

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

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

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

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