Имя: Пароль:
1C
1С v8
Выборка из запроса
0 Sigh
 
28.03.13
14:11
УТ 10.3 8.2. Проблема такая, сначала я вытаскиваю из табличной части документа реализации товара и услуг необходимые данные, запросом. Потом из этой выборки по циклу (следующий) делаю еще один запрос, и хочу получить свойство номенклатурной группы (Номенклаутра.Родитель) "МестоХранения", однако в результат, через отладчик, смотрю- таблицы значений выгружается ноль записей. Однако у этой группы, точно задано свойство. Вот мой код:
Функция Печать() Экспорт

   ТабДокумент = Новый ТабличныйДокумент;
   ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Казанова_Картинки";
   Макет = ПолучитьМакет("Картинки");
   ОбластьПечати = Макет.ПолучитьОбласть("ОбластьПечати");
   
   Запрос = Новый Запрос;
   
       Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
       
       Запрос.Текст =
       "ВЫБРАТЬ
       |    РеализацияТоваровУслуг.Номенклатура.Родитель.Наименование КАК Группа,
       |    РеализацияТоваровУслуг.Номенклатура КАК Номенклатура,
       |    РеализацияТоваровУслуг.Номенклатура.Наименование КАК Наименование,
       |    РеализацияТоваровУслуг.Номенклатура.Артикул КАК Артикул,
       |    РеализацияТоваровУслуг.Номенклатура.ОсновноеИзображение КАК ОсновноеИзображение,
       |    СУММА(РеализацияТоваровУслуг.Количество) КАК Количество,
       |    РеализацияТоваровУслуг.НомерСтроки КАК НомерСтроки
       |ИЗ
       |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
       |ГДЕ
       |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент
       |
       |СГРУППИРОВАТЬ ПО
       |    РеализацияТоваровУслуг.Номенклатура.Родитель, //+++ добавлена группировка по товару
       |    РеализацияТоваровУслуг.Номенклатура,
       |    РеализацияТоваровУслуг.Номенклатура.Наименование,
       |    РеализацияТоваровУслуг.Номенклатура.Артикул,
       |    РеализацияТоваровУслуг.Номенклатура.ОсновноеИзображение,
       |    РеализацияТоваровУслуг.НомерСтроки
       |
Выборка = Запрос.Выполнить().Выбрать();
   
   Заглушка = ОбластьПечати.Рисунки.Картинка.Картинка;
   
   КоличествоСтолбцов = 0;
   Пока Выборка.Следующий() Цикл
       n=0;
           СвойствоМестоХранения="";
           ТекГруппа=Выборка.Группа;
           ТекНом=Выборка.Наименование;
               Рез = ПолучитьДанныеПоСвойствам(ТекНом, "МестоХранения");  
       
       Если Не (Рез.Количество() = 0 ) Тогда
           СвойствоМестоХранения = Рез[0].Значение.Наименование;
       Иначе
           Рез = ПолучитьДанныеПоСвойствам(ТекГруппа, "МестоХранения");            
           Если Не (Рез.Количество() = 0 ) Тогда
               СвойствоМестоХранения = Рез[0].Значение.Наименование;
           КонецЕсли;            
       КонецЕсли;
...
Функция ПолучитьДанныеПоСвойствам(Объект,ИмяСвойства) Экспорт    
   Запрос=Новый Запрос;
           Запрос.УстановитьПараметр("Объект",Объект);    
   
   Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ИмяСвойства);
   Запрос.УстановитьПараметр("Свойство",Свойство);

           Запрос.Текст =
   "ВЫБРАТЬ ПЕРВЫЕ 1
   |    ЗначенияСвойств.Значение КАК Значение
   |ИЗ
   |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств
   |ГДЕ
   |    ЗначенияСвойств.Свойство = &Свойство
   |    И ЗначенияСвойств.Объект = &Объект";    
    РезультатЗапроса = Запрос.Выполнить();
    Возврат РезультатЗапроса.Выгрузить();
КонецФункции;
1 Sigh
 
28.03.13
14:11
Код урезал, могу выложить полный если неоходимо... очень нужна помощь...
2 Ёпрст
 
28.03.13
14:12
(0) получай свойство в первом запросе сразу.
3 Maxus43
 
28.03.13
14:13
&Свойство Значит не то, не находит... отладчик поможет
4 Ёпрст
 
28.03.13
14:18
И особенно зачетно в объект пихать Наименование, заместо ссылки
5 Maxus43
 
28.03.13
14:19
(4) да кстати, не углядел сразу... ТекНом = наименование, Где Объект = &ТекНом
6 Sigh
 
28.03.13
14:49
Спасибо господа, сейчас попробую.
7 Sigh
 
28.03.13
14:51
(3) Свойство точно то, отладчиком проверял.
8 Sigh
 
28.03.13
14:56
(5) Не совсем понял. "ТекНом = наименование, Где Объект = &ТекНом" - вот это.
9 kosts
 
28.03.13
15:01
(8) ТекНом=Выборка.Наименование; => ТекНом=Выборка.Номенклатура;
10 kosts
 
28.03.13
15:03
Почему бы сразу в запросе не получить значение свойства?
11 Sigh
 
28.03.13
15:06
(9) Угу, это понял, быстро писал не заметил.Но все-равн оне помогает. (10) Это остается единсвтенное и попробовать. У них свойство задается только номенклатурной группе, вот не знаю, мне как то так проще показалось, даже не проще, а нагляднее. Сейчас попробую.
12 DaZol1991
 
28.03.13
15:13
(0) в одном запросе получай свойство. и не РеализацияТоваровУслуг.Номенклатура.Наименование КАК Наименование(эта не нужна строка), а РеализацияТоваровУслуг.Номенклатура КАК Наименование, ссылку а не строку получай.Тоже самое с родителем.Выбирай в одном запросе две таблицы и просто соединяй их.
13 Sigh
 
28.03.13
15:22
(12) Спасибо. А что тогда устанавливать параметром в ЗначенияСвойствОбъектов.Объект = &? Мне нужен родитель.
14 DaZol1991
 
28.03.13
15:25
(13) ну в запросе пиши что ЗначенияСвойствОбъектов.Объект = РеализацияТоваровУслуг.Номенклатура.Родитель
15 kosts
 
28.03.13
15:26
(13) Для получения значения свойства по родителю еще раз нужно соединиться с ЗначенияСвойствОбъектов, а в выборке поставить
ЕстьNull(ЗначениеСвойстваМестоХранения.Значение,ЗначениеСвойстваРодителяМестоХранения.Значение)

как то так
16 Sigh
 
28.03.13
15:26
Я потому и сделал, второй запрос в цикле чтобы каждый раз туда устанавливать в параметр  следующую номен-клатуру(тоесть ее родителя).
17 kosts
 
28.03.13
15:27
(16) За запросы в цикле тут руки отрывают.
18 Sigh
 
28.03.13
15:28
(17) Наверное, я еще новичок...
19 kosts
 
28.03.13
15:29
(18) Да и в данном случае с запросом просто намного проще получится.