Добрый день, прошу помощи...

1С:Предприятие 8.3 (8.3.16.1148)
BAS Бухгалтерия, редакция 2.1

Делаю внешнюю обработку, которая создает документ и в табличной части запросто заполняет данные, в том числе договора контрагентов.
Договора контрагентов есть 2 видов, полностью одинаковые, за исключением поля "ВидДоговора". Есть "СПокупателем" и "СПоставщиком".
Как мне получить тот или иной договор, если например для одной строки мне нужен договор с покупателем, а для второй строки с поставщиком?
Вручну. проклацывать не вариант, 800+ записей.

Нстр.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(НужныйКонтрагент, , ,) - выдает везде первый попавщийся договр, как сюда вписать отбор по виду договора?

Заранее спасибо...
---
Не видя контекста Вашей обработки, трудно предложить какой-то оптимальный вариант кода. Из контекста видно, что Вы пытаетесь искать договор по наименованию, ну так напишите такую функцию в Вашу обработку:

```1c
    Функция НайтиДоговор(Организация,Контрагент,ТипДоговора,Наименование)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ДоговорыКонтрагентов.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |ГДЕ
    | НЕ ДоговорыКонтрагентов.ПометкаУдаления
    | И ДоговорыКонтрагентов.Наименование = &Наименование
    | И ДоговорыКонтрагентов.Организация = &Организация
    | И ДоговорыКонтрагентов.Контрагент = &Контрагент
    | И ДоговорыКонтрагентов.ТипДоговора = &ТипДоговора";

    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Запрос.УстановитьПараметр("Наименование", Наименование);
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("ТипДоговора", ТипДоговора);

    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
    Возврат Неопределено;
    Иначе
    ВыборкаДетальныеЗаписи=РезультатЗапроса.Выбрать();
    ВыборкаДетальныеЗаписи.Следующий();
    Возврат ВыборкаДетальныеЗаписи.Ссылка;
    КонецЕсли;

    КонецФункции
```

И замените Вашу строку поиска
Нстр.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(НужныйКонтрагент, , ,)
на вызов этой функции:

```1c
    Нстр.ДоговорКонтрагента=НайтиДоговор(НужнаяОрганизация,НужныйКонтрагент,НужныйТипДоговора,НужноеНаименование)
```
---
учитесь писать запросы.
---
РаботаСДоговорамиКонтрагентовБП.УстановитьДоговорКонтрагента в УНФ выглядит так:
РаботаСКонтрагентамиУНФ.ПолучитьДоговорПоУмолчанию
вдруг кому понадобится
---
Можно использовать запрос, а затем выгрузить запрос в таблицу значений и уже таблицу значений загрузить в табличную часть.
Насколько это медленнее чем перебор полученного запроса зависит от количества данных.
---
не вариант, это уже в запросе происходит
---
Что значит не вариант, это не программиста ответ.
В одном случае надо использовать договор с покупателем, в другом с поставщиком - вот и вложите это условие в запрос.
---
Не видя контекста Вашей обработки, трудно предложить какой-то оптимальный вариант кода. Из контекста видно, что Вы пытаетесь искать договор по наименованию, ну так напишите такую функцию в Вашу обработку:

```1c
    Функция НайтиДоговор(Организация,Контрагент,ТипДоговора,Наименование)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ДоговорыКонтрагентов.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |ГДЕ
    | НЕ ДоговорыКонтрагентов.ПометкаУдаления
    | И ДоговорыКонтрагентов.Наименование = &Наименование
    | И ДоговорыКонтрагентов.Организация = &Организация
    | И ДоговорыКонтрагентов.Контрагент = &Контрагент
    | И ДоговорыКонтрагентов.ТипДоговора = &ТипДоговора";

    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Запрос.УстановитьПараметр("Наименование", Наименование);
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("ТипДоговора", ТипДоговора);

    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
    Возврат Неопределено;
    Иначе
    ВыборкаДетальныеЗаписи=РезультатЗапроса.Выбрать();
    ВыборкаДетальныеЗаписи.Следующий();
    Возврат ВыборкаДетальныеЗаписи.Ссылка;
    КонецЕсли;

    КонецФункции
```

И замените Вашу строку поиска
Нстр.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(НужныйКонтрагент, , ,)
на вызов этой функции:

```1c
    Нстр.ДоговорКонтрагента=НайтиДоговор(НужнаяОрганизация,НужныйКонтрагент,НужныйТипДоговора,НужноеНаименование)
```
---
Огромное спасибо за ответ, сработало:)
---
Воспользуйся конструктором запросов