Имя: Пароль:
1C
1С v8
Запрос к табличной части документа
0 ТАК12
 
27.04.12
18:54
Новичок просит помощь зала:
Пытаюсь вывести на экран табличную часть Товары документа Поступление товаров и услуг. Документ ПиУ выбирает пользователь в Форме обработки.  Одним из реквизитов Обработки является Табличная часть "ТЧТоварыИзПоступления". Есть Поле ввода на Форме "ДокументПоступленияНоменклатуры".
Код такой:

Функция ПолучитьНоменклатуруИзПоступления(Ссылка)

   Запрос = Новый Запрос;
   Запрос.Текст =    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
           "ВЫБРАТЬ
       |    ПоступлениеТоваровУслугТовары.Номенклатура,
       |    ПоступлениеТоваровУслугТовары.Количество
       |ИЗ
       |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
       |ГДЕ
       |    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка";

   Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

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

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       ТЧТоварыИзПоступления.Добавить ();
       ТЧТоварыИзПоступления.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
       ТЧТоварыИзПоступления.Количество = ВыборкаДетальныеЗаписи.Количество();
   КонецЦикла;

   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


КонецФункции // ПолучитьНоменклатуруИзПоступления()

Процедура ДокументПоступленияНоменклатурыПриИзменении(Элемент)
   
   ПолучитьНоменклатуруИзПоступления(ДокументПоступленияНоменклатуры);
   
КонецПроцедуры

При пошаговой отработке значение ВыборкаДетальныеЗаписи и у Номенклатуры, и у Количество = Ошибка чтения значения. При этом Ссылка правильно считывается. Запрос, вроде, должен отработать...

А когда дохожу до строчки:

       ТЧТоварыИзПоступления.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;

так и вообще: "Поле объекта не обнаружено (Номенклатура)".

Подскажите, пожалуйста, опытные коллеги, что я не так делаю?
1 Лоботряс
 
27.04.12
18:59
НС =ТЧТоварыИзПоступления.Добавить ();
НС.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
НС.Количество = ВыборкаДетальныеЗаписи.Количество;
2 Лоботряс
 
27.04.12
19:02
А лучше
ТЧТоварыИзПоступления = Запрос.Выполнить().Выгрузить();
3 Лоботряс
 
27.04.12
19:05
Вернее
ТЧТоварыИзПоступления.Загрузить(Запрос.Выполнить().Выгрузить());
4 ТАК12
 
27.04.12
20:04
Теперь код такой:

Функция ПолучитьНоменклатуруИзПоступления(Ссылка)

   Запрос = Новый Запрос;
   Запрос.Текст =    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
           "ВЫБРАТЬ
       |    ПоступлениеТоваровУслугТовары.Номенклатура,
       |    ПоступлениеТоваровУслугТовары.Количество
       |ИЗ
       |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
       |ГДЕ
       |    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка";

   Запрос.УстановитьПараметр("Ссылка", Ссылка);

   ТЧТоварыИзПоступления.Загрузить(Запрос.Выполнить().Выгрузить());
   Возврат (ТЧТоварыИзПоступления);
   

   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


КонецФункции // ПолучитьНоменклатуруИзПоступления()

Процедура ДокументПоступленияНоменклатурыПриИзменении(Элемент)
   
   ПолучитьНоменклатуруИзПоступления(ДокументПоступленияНоменклатуры);
   
КонецПроцедуры


Но на форме табличная часть пуста, даже и таблицей не выглядит.
В Табличной части Формы обработки есть две колонки: Номенклатура (СправочникСсылка.Номенклатура) и Количество (Число).
Как все-таки ее заполнить значениями из табличной части выбранного документа?
5 глазковыколупыватель
 
27.04.12
20:54
(0) Свои названия подставь:
Процедура ДокПриИзменении(Элемент)
   ЗаполнитьТЧ()
КонецПроцедуры

Процедура ЗаполнитьТЧ()
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ПоступлениеТоваровТовары.Номенклатура,
    |    ПоступлениеТоваровТовары.Количество
    |ИЗ
    |    Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
    |ГДЕ
    |    ПоступлениеТоваровТовары.Ссылка = &Ссылка";
   
    Запрос.УстановитьПараметр("Ссылка", Док);
   
    Результат = Запрос.Выполнить();
   ТЧ = Результат.Выгрузить();
   ЭлементыФормы.ТЧ.СоздатьКолонки();
   
   
КонецПроцедуры
6 ТАК12
 
27.04.12
22:48
Результат такой:
{Обработка.Склад.Форма.Форма.Форма(64)}: Поле объекта недоступно для записи (ТЧТоварыИзПоступления)
   ТЧТоварыИзПоступления = Результат.Выгрузить();

Код:

Процедура ДокументПоступленияНоменклатурыПриИзменении(Элемент)
   
   ПолучитьНоменклатуруИзПоступления(ДокументПоступленияНоменклатуры);
   
КонецПроцедуры

Процедура ПолучитьНоменклатуруИзПоступления(Ссылка)

   Запрос = Новый Запрос;
   Запрос.Текст =    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
           "ВЫБРАТЬ
       |    ПоступлениеТоваровУслугТовары.Номенклатура,
       |    ПоступлениеТоваровУслугТовары.Количество
       |ИЗ
       |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
       |ГДЕ
       |    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка";

   Запрос.УстановитьПараметр("Ссылка", Ссылка);
   
   Результат = Запрос.Выполнить();
   
   ТЧТоварыИзПоступления = Результат.Выгрузить();
   ЭлементыФормы.ТЧТоварыИзПоступления.СоздатьКолонки();
   
КонецПроцедуры // ПолучитьНоменклатуруИзПоступления()
7 ic-kat
 
27.04.12
23:00
(6)

Результат = Запрос.Выполнить();
ТЧ = Результат.Выгрузить();
ЭлементыФормы.ИмяТвоегоПоляВвода.Значение=ТЧ;
ЭлементыФормы.ИмяТвоегоПоляВвода.СоздатьКолонки();
8 ic-kat
 
27.04.12
23:02
тьфу, не поле ввода, а табличное поле
9 ТАК12
 
27.04.12
23:19
Та же фигня:


{Обработка.ARM_Склад.Форма.Форма.Форма(64)}: Поле объекта недоступно для записи (ТЧТоварыИзПоступления)
   ТЧТоварыИзПоступления = Результат.Выгрузить();
10 ТАК12
 
27.04.12
23:25
Что должно быть указано в Свойствах ТЧ, в которую нужно Результат.Выгрузить()? Видимо, у меня с ней что-то не то... У меня есть ТЧ как Табличная часть Обработки. И Табличное поле на Форме обработки, в ее Свойствах: Данные = ТЧ (которая в Модуле)...
11 hhhh
 
28.04.12
00:52
тч какой тип имеет?
12 ic-kat
 
28.04.12
06:16
(10) ТЧ никак перед этим описывать не надо, это новая таблица значений.
так и напишите ТЧ
а потом уже вашему табличному полю на форме присваивайте значение тч
с вашими названиями вот так будет


ТЧ = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.ТЧТоварыИзПоступления.Значение=ТЧ;
ЭлементыФормы.ТЧТоварыИзПоступления.СоздатьКолонки();
13 m-serg74
 
28.04.12
06:18
ТЧТоварыИзПоступления = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.ТЧТоварыИзПоступления.СоздатьКолонки();
14 m-serg74
 
28.04.12
06:30
ТАК... получилось или...?
15 ТАК12
 
28.04.12
07:28
Теперь ТЧ в Табличных формах Обработки нет, и нет Табличного поля ТЧ на Формы. Есть:

Процедура ДокументПоступленияНоменклатурыПриИзменении(Элемент)
   
   ПолучитьНоменклатуруИзПоступления(ДокументПоступленияНоменклатуры);
   
КонецПроцедуры

Процедура ПолучитьНоменклатуруИзПоступления(Ссылка)

   Запрос = Новый Запрос;
   Запрос.Текст =    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
           "ВЫБРАТЬ
       |    ПоступлениеТоваровУслугТовары.Номенклатура,
       |    ПоступлениеТоваровУслугТовары.Количество
       |ИЗ
       |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
       |ГДЕ
       |    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка";

   Запрос.УстановитьПараметр("Ссылка", Ссылка);
   
   
   ТЧТоварыИзПоступления = Запрос.Выполнить().Выгрузить();
   ЭлементыФормы.ТЧТоварыИзПоступления.СоздатьКолонки();
   
КонецПроцедуры // ПолучитьНоменклатуруИзПоступления()


Результат:

{Обработка.Склад.Форма.Форма.Форма(69)}: Поле объекта не обнаружено (ТЧТоварыИзПоступления)
   ЭлементыФормы.ТЧТоварыИзПоступления.СоздатьКолонки();
16 ic-kat
 
28.04.12
07:38
блин, добавьте табличное поле на форму, обзовите Товары и сделайте вот так:
ТЧ = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.Товары.Значение=ТЧ;
ЭлементыФормы.Товары.СоздатьКолонки();
17 ТАК12
 
28.04.12
08:18
УРРРА!!! ЗАРАБОТАЛО!!! СПАСИБО!!!