Есть ТЗ на форме в ней список документов и есть кнопка создать документы
Нужно при нажатие на кнопку создать документ по выделенным строкам но проблема в том что нужно сначала проверить что выделенные строки принадлежат одному контрагенту а потом только уже создавать документ.
---
Я бы сделал через колонку пометки, но если делать через выделенные, то как-то так:

```1c
    &НаКлиенте
    Процедура Команда1(Команда)

    Команда1НаСервере();

    КонецПроцедуры

    &НаСервере
    Процедура Команда1НаСервере()

    ВыделенныеСтроки = Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки;
    МассивСтрок = Новый Массив;
    Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
    МассивСтрок.Добавить(РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока));
    КонецЦикла;

    ТЗ = РаспоряженияНаОтгрузку.Выгрузить(МассивСтрок);

    Получатели = ТЗ.Скопировать(, "Получатель");
    Получатели.Свернуть("Получатель");
    Получатели = Получатели.ВыгрузитьКолонку(0);

    ТЗ.Индексы.Добавить("Получатель");

    Для Каждого Получатель Из Получатели Цикл

    СтрокиПолучателя = ТЗ.НайтиСтроки(Новый Структура("Получатель", Получатель));

    // создаете документ по текущему получателю и строкам ТЗ

    КонецЦикла;

    КонецПроцедуры
```
---
Найти контрагента по ИНН или наименованию, проверить через ЗначениеЗаполнено() что найден, после в цикле

```1c
    Если СтрокаТЗ.Контрагент = Найденный контрагент Тогда
    ...
```
---
На клиенте проверку можно сделать через Соответствие.

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

    Если Соответствие.Количество() > 1 Тогда

    Иначе

    КонецЕсли;
```
---
Соответствие = Новый Соответствие;
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
    СтрокаТЗ = РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока);
    Соответствие.Вставить(СтрокаТЗ.Получатель);
КонецЦикла;

Если Соответствие.Количество() > 1 Тогда

Иначе

КонецЕсли;

а можете подсказать как сделать если например я выделел строки в тз и мне нужно наоборот создать

для каждого контрагента свой документ. например
ТЗ выделеных
Документ 1 иванов
Документ 2 Петрова
документ 3 иванов

по выделеным строкам должно создаться 2 документ 1 с получателем ивановым а второй с получателем петровым

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

    Для Каждого СтрИД Из Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки Цикл
    СтрТабл = РаспоряженияНаОтгрузку.НайтиПоИдентификатору(СтрИД);

    Если СтрТабл = Неопределено Тогда
    ТекстПредупреждения = НСтр("ru = 'Выберите распоряжение на отгрузку товаров.'");
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения);
    Возврат;
    КонецЕсли;
    КонецЦикла

    НовыйДокумент = Документы.АМ_ОтгрузкаТоваров.СоздатьДокумент();
    НовыйДокумент.Дата = ТекущаяДатаСеанса();
    НовыйДокумент.ДатаОтгрузки = ТекущаяДатаСеанса();
    НовыйДокумент.Получатель = ДокументОснование.Контрагент;
    НовыйДокумент = ПараметрыСеанса.ТекущийПользователь();

    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
    | АМ_ТоварыКОтгрузкеОстатки.Номенклатура КАК Номенклатура,
    | АМ_ТоварыКОтгрузкеОстатки.Характеристика КАК Характеристика,
    | АМ_ТоварыКОтгрузкеОстатки.Упаковка КАК Упаковка,
    | АМ_ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток КАК Количество,
    | АМ_ТоварыКОтгрузкеОстатки.ДокументОтгрузки КАК Распоряжение
    |ИЗ
    | РегистрНакопления.АМ_ТоварыКОтгрузке.Остатки КАК АМ_ТоварыКОтгрузкеОстатки
    |ГДЕ
    | АМ_ТоварыКОтгрузкеОстатки.ДокументОтгрузки В (&ДокументОтгрузки)";

    Запрос.УстановитьПараметр("ДокументОтгрузки", ДанныеЗаполнения.Ссылка);
    ТаблицаАМТоварыКОтгрузке = Запрос.Выполнить().Выгрузить();

    Если ТаблицаАМТоварыКОтгрузке.Количество() <> 0 Тогда
    ТоварыПоРаспоряжениям.Загрузить(ТаблицаАМТоварыКОтгрузке);
    ОтгружаемыеТовары.Загрузить(ТаблицаАМТоварыКОтгрузке);
    ОтгружаемыеТовары.Свернуть("Номенклатура,Характеристика,Упаковка","Количество");
    КонецЕсли;
```

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

```1c
    &НаКлиенте
    Процедура Команда1(Команда)

    Команда1НаСервере();

    КонецПроцедуры

    &НаСервере
    Процедура Команда1НаСервере()

    ВыделенныеСтроки = Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки;
    МассивСтрок = Новый Массив;
    Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
    МассивСтрок.Добавить(РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока));
    КонецЦикла;

    ТЗ = РаспоряженияНаОтгрузку.Выгрузить(МассивСтрок);

    Получатели = ТЗ.Скопировать(, "Получатель");
    Получатели.Свернуть("Получатель");
    Получатели = Получатели.ВыгрузитьКолонку(0);

    ТЗ.Индексы.Добавить("Получатель");

    Для Каждого Получатель Из Получатели Цикл

    СтрокиПолучателя = ТЗ.НайтиСтроки(Новый Структура("Получатель", Получатель));

    // создаете документ по текущему получателю и строкам ТЗ

    КонецЦикла;

    КонецПроцедуры
```