Имя: Пароль:
1C
1С v8
Как вернуть результат выполнения запроса из функции?
,
0 Garnet27
 
02.09.13
09:51
Здравствуйте.
Подскажите, пожалуйста, как вернуть результат выполнения запроса из функции? Возможно ли это сделать?
1 zak555
 
02.09.13
09:52
Возврат Результат;
2 Wobland
 
02.09.13
09:52
употребить Возврат, да
3 Фокусник
 
02.09.13
09:52
РезультатЗапроса = Запрос.Выполнить();
Возврат РезультатЗапроса;

;)
4 Garnet27
 
02.09.13
09:55
Так не получается почему-то. Я в основной части пытаюсь перебрать строки:
"Для каждого стр из РезультатЗапроса"
пишет, что РезультатЗапроса переменная не определена (((
5 Wobland
 
02.09.13
09:56
(4) как это связано с (0)?
6 Ёпрст
 
02.09.13
09:57
больше кода
7 ale-sarin
 
02.09.13
09:58
(4) Надо сначала выбрать или выгрузить. Типовой код-то глянь.
Хотя, если "переменная не определена", то и это не поможет.
8 Garnet27
 
02.09.13
10:04
Вот код, собственно:

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

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




Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Уровень = 0;
    Деталь = СсылкаНаОбъект.Продукция;
    Для Каждого Стр из Деталь Цикл
        Спецификация = Стр.Спецификация;
        ИсхКомпл =  Спецификация.ИсходныеКомплектующие;
        Запрос(Стр.Номенклатура);
        
        Для Каждого Стр из РезультатЗапроса Цикл
            Номенкл = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Стр.Номенклатура),истина);
        КонецЦикла;
                
        
    
    КонецЦикла;
    
КонецПроцедуры
9 Wobland
 
02.09.13
10:04
(8) теперь сам скажи, что такое РезультатЗапроса?
10 Wobland
 
02.09.13
10:05
+(9) и почему не стоит отстреливать коленку за запрос в цикле
11 ale-sarin
 
02.09.13
10:10
(9) (10) Да ладно. Все равно проблема не в этом.

(8) РезультатЗапроса  = Запрос(Стр.Номенклатура);
И функцию бы переименовать. И на (10) обратить внимание
12 Wobland
 
02.09.13
10:11
(11) даже платформа говорит, что в этом
13 ale-sarin
 
02.09.13
10:14
(12) Что Вы тут разводите? На запрос в цикле платформа не ругается.
14 ДенисЧ
 
02.09.13
10:14
А ещё.... Клиент-сервер...
15 Wobland
 
02.09.13
10:15
(13) и что?
16 ale-sarin
 
02.09.13
10:15
(12) Ладно, понял. Речь об отсутствии переменной. А я умничаю в (11). )))
17 ale-sarin
 
02.09.13
10:15
(15) И ни что. Не надо полусловами говорить.
18 Elf_80_lvl
 
02.09.13
10:15
Номенкл = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Стр.Номенклатура),истина);
Просто любопытно, зачем выбирая в запросе ссылку нужно потом искать по наименованию?
19 Garnet27
 
02.09.13
10:19
Вот ничего не понятно из комментов. Что-то не так делаю? Почему не возвращает результат?
20 ale-sarin
 
02.09.13
10:20
(19) на
   РезультатЗапроса  =  Запрос(Стр.Номенклатура);
        
        Для Каждого Стр из РезультатЗапроса Цикл
            Номенкл = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Стр.Номенклатура),истина);
        КонецЦикла;
21 ale-sarin
 
02.09.13
10:21
+21 И еще (19) намекает тебе на:
   РезультатЗапроса  =  Запрос(Стр.Номенклатура);
        
        Для Каждого Стр из РезультатЗапроса Цикл
            Номенкл = Стр.Номенклатура;
        КонецЦикла;
22 Serg_1960
 
02.09.13
10:22
Сорри, коллеги, для себя не вижу смысла в... эээ... ыыы... даже затрудняюсь определить термин к набору символов в (8)... но вы - обсуждайте. Я тут постою рядом, послушаю :)
23 Elf_80_lvl
 
02.09.13
10:22
(19) Во-первых, ты возвращаешь не рузультат за проса а табличу значений.
Во-вторых, функция возвращает результат только в переменную
Например:
мТаблица = Запрос(Стр.Номенклатура);
24 Starhan
 
02.09.13
10:23
Отправте человека читать что такое функция и не партесь, готовый код может не отлодить в памяти решение проблемы.
25 Garnet27
 
02.09.13
10:26
Получается, таблицу значений из функции я не передам, так? (((
26 Molinor
 
02.09.13
10:27
(25) Не так.
27 Wobland
 
02.09.13
10:27
(25) ложь
28 Garnet27
 
02.09.13
10:28
Все получилось. Все понятно, где тупилось)))) Спасибо всем большое)))
29 ale-sarin
 
02.09.13
10:30
(28) У тебя есть проблема с именованием переменных и функций. Или непонимание, что есть результат запроса, а что будет после Выгрузить() и т.п.
Также избегать надо по возможности использования запросов в цикле.
30 le_
 
02.09.13
10:31
(0)(8) Вредитель.
31 Garnet27
 
02.09.13
10:38
Да, видимо в голове не связалось что в переменную ТЗ надо записать (((. Опыт небольшой у меня еще... Почему Вредитель, интересно? Просто любопытно
32 Wobland
 
02.09.13
10:39
(31) потому что не получаешь нужную таблицу сразу, а гоняешь запрос ы цикле
33 le_
 
02.09.13
10:48
(31) Потому, что в (8) пример того, как не надо делать.
ВСЁ, что тебе нужно, можно получить одним запросом, а у тебя их там будет выполняться столько, сколько строк в Деталях, без учета последующего поиска номенклатуры по наименованию...
34 Garnet27
 
02.09.13
11:03
Задача состоит в том, чтобы выбрать все дерево спецификаций номенклатуры, привязанных к конкретной основной спецификации в документе. Одним запросом, честно говоря, не придумаю, как сделать, пока еще в запросах далеко не ас (((... Если подскажете, как, было бы просто здорово.
35 Wobland
 
02.09.13
11:11
(34) кури соединения
36 Garnet27
 
02.09.13
11:31
А поподробнее хоть чуток?
37 Elf_80_lvl
 
02.09.13
11:36
(36)
http://www.v8.1c.ru/metod/books/book.jsp?id=187
Купить. Прорешать.
У Вас присутствует непонимание основ программирования на языке 1С. Быстрее научиться через книгу чем на форуме.
38 le_
 
02.09.13
11:38
39 Infsams654
 
02.09.13
11:49
(37) Не..., У Вас присутствует непонимание основ SQL.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс