arefaste/1C_Forums huggingface dataset:
Доброго времени суток, коллеги. На рисунке 1 тривиальная задача. На группировке 3 выбрать максимум из детальных записей. На вышестоящих группировках суммировать то, что родилось на группировке 3.
Группировка 3: считаем Максимум(Х1)
Группировка 2: Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Х1)","Группа3"))
Группировка 1: Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Х1)","Группа1,Группа2"))

Это все понятно, и проблем не вызывает. Но, условия задачи усложнились, и тут буксую - никак не выхожу на нужный результат.
Если в группе 3 по Х1 ноль - нужно взять сумму по Х2, вышестоящие группировки - как в предыдущем примере.
Группировка 3 - проблем не вызывает:
Выбор когда Максимум(Х1)=0 Тогда Сумма(х2) иначе Максимум(Х1) Конец
А вот вышестоящие группировки никак не могу сообразить.
---
А что тут буксовать? вместо выражения

"Максимум(Х1)" пишешь в ВВГМ свое новое выражение

"Выбор когда Максимум(Х1)=0 Тогда Сумма(х2) иначе Максимум(Х1)"

типа

ВВГМ("Выбор когда Максимум(Х1)=0 Тогда Сумма(х2) иначе Максимум(Х1)", ...)
---
Все просто.
В СКД паралельно расчитываешь максимум Х1 и Х2

```1c
    .... ,
    ВЫБОР
    КОГДА ВТ.МаксХ1=0 ТОГДА ВТ.МаксХ2
    ИНАЧЕ ВТ.Х1
    КОНЕЦ КАК результат

    ИЗ ВТ КАК ВТ
```
---
На нижней группировке - проблем нет. На верхней это так не работает. Там нужны СУММЫ по нижним, а не выбор максимумов.
---
Покажи Запрос СКД
---
Набор данных формируется в модуле формы, в ПриКомпоновкеРезультата. Тем несколько этапов сбора. Весь гимор в том, что цифра Х1 формируется не в детальной записи, а на группировке 3. В принципе идея есть как это победить, но, хотелось через выражения.
---
в запросе рассчитываются ?

Максимум(Х1) как МаксХ1
Сумма(х2) как СуммаХ2
---
Нет, в набор попадает линейная таблица. Х1 дублируется по количеству детальных записей. Потому в группировке тупо беру максимум.
---
А через "Рассчитать по" в "ресурсах" не пробовал решить вопрос, т.е. Мах считать по полям одной группировки, а сумму по другим полям группировки.
---
Это и так через выражения группировок.
---
не здесь
---
А точно нужно максимум из детальных записей? Или нужны конечные остатки? :-)
---
А что тут буксовать? вместо выражения

"Максимум(Х1)" пишешь в ВВГМ свое новое выражение

"Выбор когда Максимум(Х1)=0 Тогда Сумма(х2) иначе Максимум(Х1)"

типа

ВВГМ("Выбор когда Максимум(Х1)=0 Тогда Сумма(х2) иначе Максимум(Х1)", ...)
---
Благодарю! То, что надо. Сравнение вытаскивал за ВВГМ, а то, что его в выражение прописать можно - даже не подумалось.
Всем привет. Подскажите пожалуйста, как можно добавить название поставщика из документа "заказ поставщику" в связных документах ?
Нашел функцию в общей форме " связных документов " которая добавляет сумму с валютой, по аналогии попробовал, не получается.
За ранее спасибо!!!

```1c
    &НаСервере
    Функция ПредставлениеОбъектаДляВыводаВОтчет(Выборка)

    ПредставлениеОбъекта = Выборка.Представление;
    МетаданныеОбъекта = Выборка.Ссылка.Метаданные();

    Если ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта) Тогда
    Если (Выборка.СуммаДокумента <> 0) И (Выборка.СуммаДокумента <> NULL) Тогда
    ПредставлениеОбъекта = ПредставлениеОбъекта
    + " " + НСтр("ru = 'на сумму'")
    + " " + Выборка.СуммаДокумента
    + " " + Выборка.Валюта;
    КонецЕсли;
    Иначе
    ПредставлениеОбъекта = ПредставлениеОбъекта + " (" + ОбщегоНазначения.ПредставлениеОбъекта(МетаданныеОбъекта) + ")";
    КонецЕсли;

    Возврат ПредставлениеОбъекта;

    КонецФункции
```
---
Сделал вот так:

```1c
    ТипДок = ТипЗнч(Выборка.Ссылка);
    Если ТипДок = Тип("ДокументСсылка.ЗаказПоставщику") Тогда
    ПартнерСсылка = Выборка.Ссылка;
    ПартнерОбъект = ПартнерСсылка.ПолучитьОбъект();
    //Сообщить(ПартнерОбъект.Партнер);
    ПредставлениеОбъекта = ПредставлениеОбъекта + " " + ПартнерОбъект.Партнер + " " ;
    КонецЕсли;
```

может кому пригодиться.
---
а какие данные находятся в выборке?
---
то что вы нарисовали, называется ОбработкаПолученияПредставления данных
это в менеджере документа создаете процедуры и прописываете код
и у вас на выходе получается что-то вроде, к примеру

Заказ поставщику 12 от 10,10,20 (ООО Прогресс)
---
как-то так

```1c
    Если ОбщегоНазначения.ЭтоДокумент(МетеданныеОбъекта) Тогда
    Если МетеданныеОбъекта.Найти("Поставщик") <> Неопределено Тогда // где "Поставщик" - имя реквизита
    ПредставлениеОбъекта = ПредставлениеОбъекта + Выборка.Поставщик;
    КонецЕсли;
    КонецЕсли;
```
---
Пишет метод объекта не обнаружен "найти"
---
надо МеталанныеОбъекта.Реквизиты.Найти()
---
В форму заходит без ошибок, но ничего не происходит вообще
---
с именами реквизитов в документах разбирайтесь, они могут быть разными в разных документах
---
Сделал вот так:

```1c
    ТипДок = ТипЗнч(Выборка.Ссылка);
    Если ТипДок = Тип("ДокументСсылка.ЗаказПоставщику") Тогда
    ПартнерСсылка = Выборка.Ссылка;
    ПартнерОбъект = ПартнерСсылка.ПолучитьОбъект();
    //Сообщить(ПартнерОбъект.Партнер);
    ПредставлениеОбъекта = ПредставлениеОбъекта + " " + ПартнерОбъект.Партнер + " " ;
    КонецЕсли;
```

может кому пригодиться.
Здравствуйте, я новенький в 1С, у меня появилась проблема что при создании на основании реализации счета покупателю надо добавить свое поле в табличную часть, надеюсь вы поняли) если порекомендуете какие то видеокурсы или литературу буду очень благодарен
---
Для таких задач достаточно почитать синтакс-помощник:
---
В модуле объекта документа счета покупателя есть процедура ОбработкаЗаполнения. Поставь точку остановы, отлаживай и смотри как это делается.
---
Для таких задач достаточно почитать синтакс-помощник:
---
В модуле объекта документа счета покупателя есть процедура ОбработкаЗаполнения. Поставь точку остановы, отлаживай и смотри как это делается.
---
Спасибо, хотел постоянно пробежаться но думал что не пойму, решение найдено в модуле объекта в Процедура СкопироватьТовары надо было добавить в запрос свой реквизит, спасибо!
Коллеги, у заказчика есть необходимость в рамках одной базы настроить условное оформление, зависящее от некоторых параметров. Отборы (условия) оформления понятны и статичны. Само оформление необходимо задавать в пользовательском режиме.

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

В режиме конфигуратора есть возможность вызова диалога настройки условного оформления. Частью этого диалога является диалог настройки самого оформления (пример во вложении) "Редактирование параметров" (то есть непосредственно шриф, цвет фона, видимость, доступность......). Подскажите - есть ли готовые механизмы для вызова подобного диалога?
---
Настройки хранить в реквизите типа ХранилищеЗначения. В предприятии настройка УО легко делается через реквизит формы с типом КомпоновщикНастроекКомпоновкиДанных.
---
Настройки хранить в реквизите типа ХранилищеЗначения. В предприятии настройка УО легко делается через реквизит формы с типом КомпоновщикНастроекКомпоновкиДанных.
---
Спасибо, натолкнули на мысль. Оказывается для реквизитов формы табличного типа можно добавить реквизит (колонку) с типом "ОформлениеКомпоновкиДанных", это собственно решает задачу.
Добрый день.
Как можно автоматически заполнить "Номенклатурную группу" в отчете производства на вкладке "Продукция"?
Документ создается на основании другого дока, но НГ не проставляется, при этом если перевыбрать Продукцию(встать в поле и выполнить Ctrl+C Ctrl+V), то НГ подставляется автоматом.
Сейчас висит 2000 документов, которые нужно поправить.
Как можно это сделать?
---
Простенькой обработкой, что-то типа:

```1c
    ВыборкаДоков = Документы.ОтчетПроизводстваЗаСмену.Выбрать(ДатаНачала,ДатаОкончания);
    Пока ВыборкаДоков.Следующий() Цикл
    ДокОтчетПроизводства = ВыборкаДоков.ПолучитьОбъект();
    Для Каждого СтрокаПродукции из ДокОтчетПроизводства.Пролдукция Цикл
    СтрокаПродукции.НоменклатурнаяГруппа = СтрокаПродукции.Номенклатура.НоменклатурнаяГруппа;
    КонецЦикла;
    ДокОтчетПроизводства.Записать(РежимЗаписиДокумента.проведение);
    КонецЦикла;
```

Выполнять на сервере.

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

```1c
    ВыборкаДоков = Документы.ОтчетПроизводстваЗаСмену.Выбрать(ДатаНачала,ДатаОкончания);
    Пока ВыборкаДоков.Следующий() Цикл
    ДокОтчетПроизводства = ВыборкаДоков.ПолучитьОбъект();
    Для Каждого СтрокаПродукции из ДокОтчетПроизводства.Пролдукция Цикл
    СтрокаПродукции.НоменклатурнаяГруппа = СтрокаПродукции.Номенклатура.НоменклатурнаяГруппа;
    КонецЦикла;
    ДокОтчетПроизводства.Записать(РежимЗаписиДокумента.проведение);
    КонецЦикла;
```

Выполнять на сервере.

Я может неправильно указал название документа и табличной части. Поставь как у тебя в конфигураторе, у меня конфы нету.
---
Спасибо большое)
Я, вообще, не в ту степь полез уже, а тут всё много проще.
---
не во всех номенклатурах может быть указана НГ
да и не факт, что она правильная с точки зрения бух.учета
Приветствую, подскажите у меня есть две страницы. На одной я заношу данные товаров в колонку Номенклатура. Значения у меня там берутся из СправочникСсылка.Номенклатура На второй странице мне нужно как-то чтобы всплывали возможные данные, и можно было брать только те которые уже занесены в ту заполненную таблицу.

Вторая таблица у меня была создана программно и я конечно хотела написать в ОписанииТипов для этой колонки путь к той Объект.Товары.Номенклатура. Но так конечно не работает и выдается ошибка. Как можно правильно сослаться и выбирать данные из другого объекта той 1 таблицы . Сейчас у меня в ней поумолчанию стоит тоже СправочникСсылка.Номенклатура
---
Элементы.ВтораяТаблица.ПолеНоменклатура.РежимВыбораИзСписка = Истина;
Для Каждого СтрокаПервойТаблицы Из Объект.ПерваяТаблица Цикл
     Элементы.ВтораяТаблица.ПолеНоменклатура.СписокВыбора.Добавить(СтрокаПервойТаблицы.Номенклатура);
КонецЦикла;
---
Элементы.ВтораяТаблица.ПолеНоменклатура.РежимВыбораИзСписка = Истина;
Для Каждого СтрокаПервойТаблицы Из Объект.ПерваяТаблица Цикл
     Элементы.ВтораяТаблица.ПолеНоменклатура.СписокВыбора.Добавить(СтрокаПервойТаблицы.Номенклатура);
КонецЦикла;
---
Другой вариант - переопределять событие "ПередНачаломИзменения" у поля второй таблицы. Тоже можно программно накидать,присоединить, но новичку сложно будет
---
Зачем?
1. Если первая таблица не изменяется - то и список выбора изменяться не будет, и не надо его каждый раз формировать заново при "любом движении мышкой".
2. Вероятно имелось ввиду ПриНачалеВыбораИзСписка()
---
При изменении состава строк в первой таблице - формировать программно список выбора для колонки во второй таблице. У колонки второй таблицы включить "РежимВыбораИзСписка = Истина".
Приветствую подскажите как можно поменять элемент местами на самой форме. У меня на странице создается три элемента программно. Надпись, поле ввода и таблица Последний элемент поля у меня добавляется программно в самом конце при клике по кнопке.

Но я хочу чтобы он поднялся над таблицей. И шел вторым по счету после надписи, а не последним после таблицы как это по умолчанию.

Вот как бы я поменял местами если бы это был обычный массив

```1c
    Массив1 = Новый Массив;

    Массив1.Добавить("1");
    Массив1.Добавить("2");
    Массив1.Добавить("3");
    Массив1.Добавить("4");

    ЗапомнитьПоле = Массив1[3];
    ЗапомнитьТаблицу = Массив1[1];

    Массив1.Установить(1,ЗапомнитьПоле);
    Массив1.Установить(3,ЗапомнитьТаблицу);
```

Вот как у меня в данный момент выглядят последовательность элементов на странице

И я хочу поменять 1 индекс со 2 местами, чтобы Таблица шла после поля

Я хотел сделать подобное через цикл, но так как это не массив то подобное делать нельзя возможно ли как это их поменять?

```1c
    ЗапомнитьПоле = ЭтаФорма.Элементы.ГруппаСтраницы.ПодчиненныеЭлементы[4].ПодчиненныеЭлементы[2];
    ЗапомнитьТаблицу = ЭтаФорма.Элементы.ГруппаСтраницы.ПодчиненныеЭлементы[4].ПодчиненныеЭлементы[1];

    ЭтаФорма.Элементы.ГруппаСтраницы.ПодчиненныеЭлементы[4].ПодчиненныеЭлементы.Установить(1, ЗапомнитьПоле);
    ЭтаФорма.Элементы.ГруппаСтраницы.ПодчиненныеЭлементы[4].ПодчиненныеЭлементы.Установить(3, ЗапомнитьТаблицу);
```
---
Смотрите синтаксис-помощник.
Интерфейс (управляемый) -> Форма клиентского приложения -> ВсеЭлементыФормы, метод - "Переместить".

Синтаксис:
Переместить(<Элемент>, <Родитель>, <МестоРасположения>)
---
Последний элемент поля у меня добавляется программно в самом конце при клике по кнопке.
Использовать не Добавить, а Вставить. Тогда можно указать перед каким элементом нужно вставить.
---
Смотрите синтаксис-помощник.
Интерфейс (управляемый) -> Форма клиентского приложения -> ВсеЭлементыФормы, метод - "Переместить".

Синтаксис:
Переместить(<Элемент>, <Родитель>, <МестоРасположения>)
---
ЭтаФорма.Элементы.ГруппаСтраницы.ПодчиненныеЭлементы[4].ПодчиненныеЭлементы[1] - Это что за ужас?
Можно же проще написать - Элементы.<ИмяЭлемента>. Зачем так извращаться.
---
Просто я еще новичок не умею писать пока крутые штуки для сокращения кода и удобочитаемости
---
думаю ужас - само желание
 поменять программно элементы местами на форме

а потом эта конфигурация заработает в клиент-сервер
---
к 1 апреля готовимся?
Добрый день!

В общем модуле (подписка на событие обработки проведения) пытаюсь использовать ПоказатьПредупреждение(), получаю
Процедура или функция с указанным именем не определена (ПоказатьПредупреждение), хотя само окно с предупреждением почему-то выводится

В свойствах модуля стоят галочки Сервер и Клиент (обычное приложение)
---
можно воспользоваться параметром ДополнительныеСвойства.
В модуле объекта, обработчик проведения:

```1c
    ДополнительныеСвойства.Вставить("ТекстПредупреждения","Текст предупреждения");
```

В модуле формы, обработчик ПослеЗаписи:

```1c
    Процедура ПослеЗаписи()
    Перем ТекстПредупреждения;
    Если ДополнительныеСвойства.Свойство("ТекстПредупреждения",ТекстПредупреждения) Тогда
    ПоказатьПредупреждение(,ТекстПредупреждения, 60, "Предупреждение");
    КонецЕсли;
    КонецПроцедуры
```
---
В свойствах модуля стоят галочки Сервер и Клиент (обычное приложение)
Проверка для Сервер показывает, что ПоказатьПредупреждение не допустима.
Работает из-за того, что в обычном приложении обработка проведения (как и подписка на это событие) происходит на клиенте.
---
За интерактивные методы в процедуре проведения надо кастрировать тупыми ножницами.
У меня всё.
---
Не, увольнять за проф.непригодность
---
Каким образом все же можно вывести предупреждение пользователю, если текст формируется в обработке проведения?
---
чисто технически, варианты:
1. Использовать общий модуль без контекста Сервер.
2. Окружить код директивой препроцессора #Если Клиент Тогда

Но все же стоит пересмотреть свое решение и перенести вызов предупреждения на форму.
В обработчике проведения происходят блокировки данных. Используя Предупреждения в нем, может вызывать взаимоблокировки.

Да и не всегда нужно показывать предупреждение так. Проведение может быть и программным.
---
Спасибо за ответ!
Мне и не нужно вызывать предупреждение из обработки проведения, вопрос в том, как передать текст предупреждения на форму (и вызвать предупреждение, например, в ПослеЗаписи())?
---
можно воспользоваться параметром ДополнительныеСвойства.
В модуле объекта, обработчик проведения:

```1c
    ДополнительныеСвойства.Вставить("ТекстПредупреждения","Текст предупреждения");
```

В модуле формы, обработчик ПослеЗаписи:

```1c
    Процедура ПослеЗаписи()
    Перем ТекстПредупреждения;
    Если ДополнительныеСвойства.Свойство("ТекстПредупреждения",ТекстПредупреждения) Тогда
    ПоказатьПредупреждение(,ТекстПредупреждения, 60, "Предупреждение");
    КонецЕсли;
    КонецПроцедуры
```
---
Спасибо большое!
Здравствуйте, подскажите пожалуйста, что не так я сделал
Пытаюсь изменить измерение в регистре сведения, он независимый
Делаю отбор по пользователю
Но получается как будто отбор не работает, он получает все записи регистра

```1c
    НаборНапоминания = РегистрыСведений.Напоминания.СоздатьНаборЗаписей();
    НаборНапоминания.Отбор.Завершено.Значение = Истина;
    НаборНапоминания.Отбор.Пользователь.Значение = Пользователь;
    НаборНапоминания.Прочитать();

    Для каждого стр Из НаборНапоминания Цикл
    стр.Завершено = Ложь;
    КонецЦикла;
    НаборНапоминания.ОбменДанными.Загрузка = Истина;
    НаборНапоминания.Записать();
```
---
```1c
    НаборНапоминания.Отбор.Завершено.Установить( Истина);
    НаборНапоминания.Отбор.Пользователь.Установить(Пользователь);
```
 так попробуй
---
либо использовать метод Установить() у отбора, либо отдельно прописывать

```1c
    ,,,
    НаборНапоминания.Отбор.Завершено.Значение = Истина;
    НаборНапоминания.Отбор.Завершено.ВидСравнения = ВидСравнения.Равно;
    НаборНапоминания.Отбор.Завершено.Использование = Истина;
    ,,,,
```
---
Ошибка возникает, потому что ты пытаешься изменить значение отбора. В твоем случае нужно устанавливать отбор по полю Пользователь только.
---
НаборНапоминания.Отбор.Завершено.Значение = Истина;
НаборНапоминания.Отбор.Пользователь.Значение = Пользователь;

Когда пишешь так, тогда нужно еще у свойства Использование возводить флаг в Истина. А так ты просто поставил значение отбора, но использование отбора отключено. В целом решение тебе уже дали которое будет надежнее.
---
```1c
    НаборНапоминания.Отбор.Завершено.Установить( Истина);
    НаборНапоминания.Отбор.Пользователь.Установить(Пользователь);
```
 так попробуй
---
либо использовать метод Установить() у отбора, либо отдельно прописывать

```1c
    ,,,
    НаборНапоминания.Отбор.Завершено.Значение = Истина;
    НаборНапоминания.Отбор.Завершено.ВидСравнения = ВидСравнения.Равно;
    НаборНапоминания.Отбор.Завершено.Использование = Истина;
    ,,,,
```
---
{Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (Записать)
 НаборНапоминания.Записать();
по причине:
Запись не верна! Значение поля не соответствует установленному отбору: Напоминания: Пользователь, Пользователь, Да, 02.08.2021 7:00:28, (Регистр сведений: Напоминания; Номер строки: 1; Поле: Завершено)

Такая ошибка выходит если через установить()
---
Ошибка возникает, потому что ты пытаешься изменить значение отбора. В твоем случае нужно устанавливать отбор по полю Пользователь только.
---
Хорошо, попробую только по пользователю
---
Если БСП можно метод юзать
ОбменДаннымиСервер.ОбновитьЗаписьВРегистрСведений
---
Получилось, спасибо всем большое=)
Сложновато с названием темы. Конфигурация: УТ 10.3, обычные формы. При начале работы системы есть открытие формы обработки (этакий самописный рабочий стол). Когда подключаюсь к конфигурации через вебсервис, выдает soap ошибку (ругается на открытие формы). Как можно это обойти? Сделать разграничение по роли? (пробовала, не получилось)
---
```1c
    #Если ТолстыйКлиентОбычноеПриложение Тогда
    ОткрытьФорму(...);
    #КонецЕсли
```
---
Не открывать этот рабочий стол через вебсервис - самый разумный вариант. Для этого нужно в конфигураторе в том месте где этот стол открывается прописать условия открытия.
---
да, я согласна, просто условия открытия сформулировать не могу)
---
```1c
    #Если ТолстыйКлиентОбычноеПриложение Тогда
    ОткрытьФорму(...);
    #КонецЕсли
```
---
Благодарю! Сработало!
Model это класс, у которого есть свойство "Region", которое в свою очередь тоже является классом:

public class Organization : ICatalog
{
public Region Region { get; set; }
}

В представлении, у обработчика Razor строка
@( Model.Region is null ? "Empty" : "Filled") или @( Model.Region == null ? "Empty" : "Filled") вызывает исключение

System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
Schools.Models.Catalogs.Organization.Region.get вернул null.

При этом, если проверять тут же, в быстрой проверке значения, то и строка отрабатывает без ошибки (возвращается значение "empty", и Model.Region : null
---
Причина была в том, что несколькими строками ниже я вызывал другое поле класса без проверки на null. Студия при этом устанавливала строку с ошибкой именно ту, что с проверкой на null
---
Причина была в том, что несколькими строками ниже я вызывал другое поле класса без проверки на null. Студия при этом устанавливала строку с ошибкой именно ту, что с проверкой на null
Добрый день! Подскажите, пожалуйста, модуль, где можно прописать для каких справочников и документов можно подгружать внешние печатные формы. Делал месяца два назад, но забыл где открывал. Конфигурация на БСП
---
УправлениеПечатью.Переопределяемый
---
УправлениеПечатью.ИсточникиКомандПечати()
---
Не нашлось там, посмотрел использование функции, в ней тоже нет. Помню там был прям список справочников и документов. Может где-то ещё может быть?
---
УправлениеПечатью.Переопределяемый
Как в модуле подписки на событие "при проведении" определить что документ-источник используется в определенной последовательности (ПартииТоваров)?
---
Синтакс-помощник:

Отбор = Новый Структура;
Отбор.Вставить("Товар", ТекТовар);
Принадлежит = Последовательности.ПартииТоваров.Принадлежит(Док, Отбор);
---
Синтакс-помощник:

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