Здравствуйте, подскажите пожалуйста что не так сделал?

Есть в договоре контрагента категория - Предоплата - если стоит галочка, то при печати счета выводится в дополнительной информации период, если истина, то +1 месяц к текущему месяцу, если нет, то текущий месяц.

Вот код.

```1c
    функция ПолучитьПредоплату(Контрагент1)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КатегорииОбъектов.Объект КАК Объект,
    | КатегорииОбъектов.Категория
    |ИЗ
    | РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
    |ГДЕ
    | КатегорииОбъектов.Категория = &Предоплата
    | И КатегорииОбъектов.Объект = &Контрагент";

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

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

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

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

ну и потом в процедуре печати счета

```1c
    ОбластьМакета = Макет.ПолучитьОбласть("Дополнение");
    Если ПолучитьПредоплату(ПараметрыПечати.Договор) <> Неопределено Тогда
    ОбластьМакета.Параметры.СДаты = Формат(НачалоМесяца(ДобавитьМесяц(Объект.ДатаДокументов,1)), "ДЛФ=D");
    ОбластьМакета.Параметры.ПоДату = Формат(КонецМесяца(ДобавитьМесяц(Объект.ДатаДокументов,1)), "ДЛФ=D");
    Иначе
    ОбластьМакета.Параметры.СДаты = Формат(НачалоМесяца(ДобавитьМесяц(Объект.ДатаДокументов,0)), "ДЛФ=D");
    ОбластьМакета.Параметры.ПоДату = Формат(КонецМесяца(ДобавитьМесяц(Объект.ДатаДокументов,0)), "ДЛФ=D");
    КонецЕсли;
```

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

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КатегорииОбъектов.Объект КАК Объект
    |ИЗ
    | РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
    |ГДЕ
    | КатегорииОбъектов.Категория = &Предоплата
    | И КатегорииОбъектов.Объект = &Договор";

    Запрос.УстановитьПараметр("Предоплата", Справочники.КатегорииОбъектов.Предоплата);
    Запрос.УстановитьПараметр("Договор", Договор);

    Возврат НЕ Запрос.Выполнить().Пустой();

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

    ОбластьМакета = Макет.ПолучитьОбласть("Дополнение");
    Если ЕстьПредоплатаПоДоговору(ПараметрыПечати.Договор) Тогда
    ОбластьМакета.Параметры.СДаты = Формат(НачалоМесяца(ДобавитьМесяц(Объект.ДатаДокументов,1)), "ДЛФ=D");
    ОбластьМакета.Параметры.ПоДату = Формат(КонецМесяца(ДобавитьМесяц(Объект.ДатаДокументов,1)), "ДЛФ=D");
    Иначе
    ОбластьМакета.Параметры.СДаты = Формат(НачалоМесяца(ДобавитьМесяц(Объект.ДатаДокументов,0)), "ДЛФ=D");
    ОбластьМакета.Параметры.ПоДату = Формат(КонецМесяца(ДобавитьМесяц(Объект.ДатаДокументов,0)), "ДЛФ=D");
    КонецЕсли;
```
---
На всякий случай спрошу: в справочнике "КатегорииЭлементов" - "Предоплата" это предопределенный элемент?
---
Ага
---
тогда код, что я приводил выше должен работать.
Правда я сразу не обратил внимание на такой момент: если нет предоплаты по договору, то не надо вызывать лишний раз функцию "ДобавитьМесяц", достаточно сразу брать дату начала и дату конца договора. "Объект.ДатаДокументов" - тут ведь что-то не так?
---
А тьфу, я вас понял))) получается тавталогия, контрагент1 уже содержит ссылку на договор, а я еще раз ищу его. Вот из-за этого и не работало. Спасибо.
---
Вот, а если я еще один создам и назову его основной1, он уже выдаст неопределенное значение.