Имя: Пароль:
1C
1С v8
Как получить запросом данные из табличной части документа?
,
0 new1snik
 
08.05.13
10:47
Добрый день.
Пытаюсь получить запросом данные из табличной части Товары документа ПоступлениеТоваровУСлуг. Код такой:

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

В табличной части документа точно есть записи. Но запрос их там не находит. В чем я ошибся?
1 Ненавижу 1С
 
гуру
08.05.13
10:47
я бы тоже не нашел

ГДЕ
   ПоступлениеТоваровУслуг.Номер = &Ссылка
2 Wobland
 
08.05.13
10:48
(1) мало ли что у него там в &Ссылке
3 mikecool
 
08.05.13
10:48
(1) а ты найди!!
4 Ненавижу 1С
 
гуру
08.05.13
10:48
(2) а ты глаза открой шире и посмотри в (0)
5 mikecool
 
08.05.13
10:48
(2) Запрос.УстановитьПараметр("Ссылка", ДокументСсылка.Ссылка); )
6 Wobland
 
08.05.13
10:49
(2) а, нуда
(0) выбирай из Документ.ПоступлениеТоваровУслуг.Товары, легче станет
7 cw014
 
08.05.13
10:49
"ВЫБРАТЬ
|    ПоступлениеТоваровУслугТовары.Количество,
|    ПоступлениеТоваровУслугТовары.Цена,
|    ПоступлениеТоваровУслугТовары.Сумма
|ИЗ
|    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
|    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка"
8 х86
 
08.05.13
10:51
(5)у него ДокументСсылка - это структура, и у ключа Ссылка значение строка/число(номер)   ))
9 new1snik
 
08.05.13
10:54
(2) ДокументСсылка = ФормаВыбора.ОткрытьМодально();
ЕСли поменять код на такой:
Запрос = Новый Запрос;
   
   Запрос.УстановитьПараметр("Номер", ДокументСсылка.Номер);
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ПоступлениеТоваровУслуг.Товары.(
       |        Количество,
       |        Цена,
       |        Сумма
       |    )
       |ИЗ
       |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
       |ГДЕ
       |    ПоступлениеТоваровУслуг.Номер = &Номер"  ;
    СписокТоваров = Запрос.Выполнить().Выгрузить();
   
    Для Каждого Товары из СписокТоваров Цикл
        Сообщить(Товары.Количество);
        Сообщить("!");
   КонецЦикла;

Выдает сообщение, что Поле объекта не обнаружено(Количество)
10 Ненавижу 1С
 
гуру
08.05.13
10:55
(9) тебе уже запрос написали
11 cw014
 
08.05.13
10:55
Меня видимо игнорируют
12 Ненавижу 1С
 
гуру
08.05.13
10:56
(11) хорошо хоть не посылают, а ведь он мог бы
13 НЕА123
 
08.05.13
10:56
(0)     Для Каждого Товары из СписокТоваров Цикл
           Для Каждого Товар из Товары Цикл
                 Сообщить(Товар.Количество);
                 Сообщить("!");
           КонецЦикла;
   КонецЦикла;
14 zippygrill
 
08.05.13
10:57
а что такое? нормальный запрос ребята :)
15 cw014
 
08.05.13
10:57
(12) Что то типа - "Не нравится такой запрос - сильно простой, я сделаю свой, с Преферансом и Куртизанками..."
16 НЕА123
 
08.05.13
10:58
+(13)
самое правильное (7).
17 х86
 
08.05.13
10:59
(9)по номеру искать не кашерно, ищи по ссылке

       |ГДЕ
       |    ПоступлениеТоваровУслуг.Ссылка = &Ссылка"  ;
18 new1snik
 
08.05.13
10:59
(11) Нет, я просто проверял:)
19 new1snik
 
08.05.13
11:03
(7)ПИшет, что поле объекта не обнаружено.
20 zippygrill
 
08.05.13
11:03
а что ты хочешь сделать с результатом запроса? таблица значений обязательна?
21 cw014
 
08.05.13
11:04
(19) Какое поле?
22 zippygrill
 
08.05.13
11:04
"ВЫБРАТЬ
|    ПоступлениеТоваровУслугТовары.Количество,
|    ПоступлениеТоваровУслугТовары.Цена,
|    ПоступлениеТоваровУслугТовары.Сумма
|ИЗ
|    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
|    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка"
СписокТоваров = Запрос.Выполнить().Выгрузить();
   
Для Каждого Товары из СписокТоваров Цикл
   Сообщить(Товары.Количество);
   Сообщить("!");
КонецЦикла;
23 new1snik
 
08.05.13
11:04
(20) Пока я просто хочу вывести значение поля цена для номенклатуры в документе.
24 new1snik
 
08.05.13
11:07
(22) Да, такой запрос сейчас. Все равно не работает. Документ ПоступлениеТоваровУслуг стандартный в УТ, поле "количество" в табличной части точно есть.
25 cw014
 
08.05.13
11:07
(24) А может быть ответишь на (21)???
26 new1snik
 
08.05.13
11:08
(25) Поле "Количество"
27 zippygrill
 
08.05.13
11:08
вот как настойщие мужики пишут.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    ПоступлениеТоваровУслугТовары.Количество,
|    ПоступлениеТоваровУслугТовары.Цена,
|    ПоступлениеТоваровУслугТовары.Сумма
|ИЗ
|    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
|    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка"
Результат = Запрос.Выполнить;
ВыборкаДетальныхЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныхЗаписи.Следующий() Цикл
    Сообщить(Строка(ВыборкаДетальныхЗаписи.Количество));
КонецЦикла
28 cw014
 
08.05.13
11:10
(27) Синтаксическая ошибка в строке 10
29 cw014
 
08.05.13
11:10
(26) Значит где то что то неправильно написал
30 new1snik
 
08.05.13
11:11
(27) Это работает.
31 zippygrill
 
08.05.13
11:11
Результат = Запрос.Выполнить();
32 new1snik
 
08.05.13
11:13
zippygrill, спасибо за работающий код.

Кто скажет, где здесь ошибка?

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    ПоступлениеТоваровУслугТовары.Количество,
|    ПоступлениеТоваровУслугТовары.Цена,
|    ПоступлениеТоваровУслугТовары.Сумма
|ИЗ
|    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
|    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка"
Результат = Запрос.Выполнить;
ВыборкаДетальныхЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныхЗаписи.Следующий() Цикл
    Сообщить(Строка(ВыборкаДетальныхЗаписи.Количество));
КонецЦикла
33 НЕА123
 
08.05.13
11:15
(32) их две. нет ";" после закрывающей кавычки + (31)
34 zippygrill
 
08.05.13
11:18
после запроса |    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка" всегда должно стоять |    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка";
и синтаксис Выполнить() это метод объекта Запрос.
35 Шапокляк
 
08.05.13
11:20
(32) А параметр запроса где устанавливаете?
36 cw014
 
08.05.13
11:20
(32) Вот "то ли я дурак, толи лыжи не едут" (С) К/Ф Каникулы строгого режима...

Сравни свой запрос с запросом в (7) и найди хотя бы 1 отличие
37 new1snik
 
08.05.13
11:20
(34) Тьфу, не тот запрос. Сорри.
Я про этот хотел спросить:

"ВЫБРАТЬ
|    ПоступлениеТоваровУслугТовары.Количество,
|    ПоступлениеТоваровУслугТовары.Цена,
|    ПоступлениеТоваровУслугТовары.Сумма
|ИЗ
|    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
|    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка"
СписокТоваров = Запрос.Выполнить().Выгрузить();
   
Для Каждого Товары из СписокТоваров Цикл
   Сообщить(Товары.Количество);
   Сообщить("!");
КонецЦикла;
38 ssh2012
 
08.05.13
11:22
(37) не задан параметр
39 new1snik
 
08.05.13
11:22
(36) Не знаю. Видима ошибка появлялась не в запросе, а где то в коде.
40 cw014
 
08.05.13
11:23
(39) Рукалицо... Отойди от компьютера и позови программиста
41 new1snik
 
08.05.13
11:26
(40) Ну вот зачем ты так. Может я недавно занимаюсь 1С, и поэтому задаю глупые вопросы. Но ведь пытаюсь понять. Пытаюсь учиться.
Грубый ты.
42 cw014
 
08.05.13
11:35
(41) Просто непонятно, как два абсолютно одинаковых запроса у тебя то работают то не работают. Значит где то врешь
43 anddro
 
08.05.13
11:36
И это, после ДокументСсылка.Ссылка или ДокументСсылка.Номер запросом уже ничего выбирать не надо.
На первом же обращении через точку документ целиком считывается в кэш.
Т.е. использование разыменовния просто перечеркивает все выгоду от использования запроса.
Основная теорема систематики: Новые системы плодят новые проблемы.