Имя: Пароль:
1C
1С v8
Запрос не возвращает результат
,
0 socradt
 
23.03.13
19:03
Хочу получить ссылку на первый документ, почему-то не работает.

Заемщик = Объект.ДокументСсылка.Заемщик;
Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
       |мко_РеестрКредитныхСоглашенийСрезПоследних.КредитноеСоглашение
       |ИЗ
       |    РегистрСведений.мко_РеестрКредитныхСоглашений.СрезПоследних КАК мко_РеестрКредитныхСоглашенийСрезПоследних
       |ГДЕ
       |    мко_РеестрКредитныхСоглашенийСрезПоследних.КредитноеСоглашение.Заемщик = &Заемщик";
           Запрос.УстановитьПараметр("Заемщик", Заемщик);

   Возврат Запрос.Выполнить().Выгрузить()[0].КредитноеСоглашение;

Помогите разобраться, пжлст, что я делаю не так?
1 rphosts
 
23.03.13
19:08
ну так выбирай прям в запросе первую запись... а не выбираем много, выгружаем в таблицу их все, берём из них только первую...

и ещё, скорее всего запрос не отбирает ни 1 записи
2 socradt
 
23.03.13
19:09
(1) В консоли запросов - отбирает, там и получается одна запись.
3 pumbaEO
 
23.03.13
19:09
Результат = Документ.Бла.ПустаяСсылка()
РезультатЗапроса = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Результат = Выборка.КредитноеСоглашение;
КонецЕсли
КонецЕсли;

Возврат Результат;
4 Pashkaa
 
23.03.13
19:09
Сообщить(?(Запрос.Выполнить().Пустой(), "Запрос пустой", "Запрос не пустой"))
5 Pashkaa
 
23.03.13
19:10
Проверь что в Заемщике передаешь ссылку
6 rphosts
 
23.03.13
19:11
(2) чудес не бывает: знаит или текст азщпроса или параметры отличаются или база над которой запросы выполнял
7 socradt
 
23.03.13
19:21
Нда, приведённые примеры попробовал, результат почему-то не выходит. Странно, проверю ещё раз, може действительно, чудес не бывает :)
8 rs_trade
 
23.03.13
19:24
(7) и код перепиши. а то не кошерный он. вот так не надо - Запрос.Выполнить().Выгрузить()[0].КредитноеСоглашение;
9 socradt
 
23.03.13
19:24
(4) Сообщение должно выйти при любом раскладе? Независимо от тонкоты-толстоты клиента и неважно где(на клиенте или на сервере оно прописано?)
10 socradt
 
23.03.13
19:27
(8) А как порекоммендуете? Как в (3) ? Или как-то выбрать первый док в запросе? Не знаю, как это... Башка пухнет)
11 rs_trade
 
23.03.13
19:30
(10)
можно как то так:

Результат = Справочники.КредитныеСоглашения.ПустаяСсылка();

...

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

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

Возврат Результат;
12 rs_trade
 
23.03.13
19:31
Выгрузить()[0] валиться же будет на пустом результате
13 socradt
 
23.03.13
19:32
(11) (12) усёк, спасибо
14 socradt
 
23.03.13
20:03
Всё собрал в кучу, работает :)


Попытка
   Результат = Документы.мко_КредитноеСоглашение.ПустаяСсылка();
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    мко_РеестрКредитныхСоглашенийСрезПоследних.КредитноеСоглашение
   |ИЗ
   |    РегистрСведений.мко_РеестрКредитныхСоглашений.СрезПоследних КАК мко_РеестрКредитныхСоглашенийСрезПоследних
   |ГДЕ
   |    мко_РеестрКредитныхСоглашенийСрезПоследних.КредитноеСоглашение.Заемщик = &Клиент";

   Запрос.УстановитьПараметр("Клиент", Источник);
   Сообщить(?(Запрос.Выполнить().Пустой(),"ЗапросПустой","ЗапросНеПустой"));
   Выборка = Запрос.Выполнить().Выбрать();
   Если Выборка.Следующий() Тогда
      Результат = Выборка.Получить(0);
   Иначе
      Сообщить("ВыборкиНиХренаНет!");
   КонецЕсли;
   
   Возврат Результат;
Исключение
   Сообщить(ОписаниеОшибки());

КонецПопытки;
15 pumbaEO
 
23.03.13
20:24
(14) ужас.
16 EugeniaK
 
23.03.13
20:42
(14)
М-да...
Зачем 2 раза запрос выполнять?
И "попытка" явно лишняя
17 socradt
 
23.03.13
22:36
(15) (16)
Ага, ужас. Но это уже от безысходности, разумеется так не пойдёт...
18 rs_trade
 
23.03.13
22:40
Результат = Документы.мко_КредитноеСоглашение.ПустаяСсылка();
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    мко_РеестрКредитныхСоглашенийСрезПоследних.КредитноеСоглашение
   |ИЗ
   |    РегистрСведений.мко_РеестрКредитныхСоглашений.СрезПоследних КАК мко_РеестрКредитныхСоглашенийСрезПоследних
   |ГДЕ
   |    мко_РеестрКредитныхСоглашенийСрезПоследних.КредитноеСоглашение.Заемщик = &Клиент";

   Запрос.УстановитьПараметр("Клиент", Источник);
 
   Выборка = Запрос.Выполнить().Выбрать();
   Если Выборка.Следующий() Тогда
      Результат = Выборка.Получить(0);
   Иначе
      Сообщить("ВыборкиНиХренаНет!");
   КонецЕсли;
   
   Возврат Результат;
19 rs_trade
 
23.03.13
22:42
(18) Иначе Сообщить("ВыборкиНиХренаНет!");

это тоже выкинуть. НиХренаНет надо говорить там где функцию вызываешь, а она тебе пустую ссылку возвращает.