Имя: Пароль:
1C
 
Обращение к "вложенным" полям запросов
0 oduvanchikyan
 
10.08.21
13:40
Добрый день!
Хочу обращаться к полям запроса, проблема возникла в полях которые являются, так сказать, "вложенными".
Запрос.Текст = "ВЫБРАТЬ
                |    СчетНаОплатуПокупателю.Номер,
                |    СчетНаОплатуПокупателю.Дата,
                |    СчетНаОплатуПокупателю.Товары.(
                |        Номенклатура.Наименование КАК ТоварыНаименование,
                |        Цена,
                |        Сумма,
                |        Количество
                |    ),
                |    СчетНаОплатуПокупателю.Услуги.(
                |        Номенклатура.Наименование КАК УслугиНаименование,
                |        Количество,
                |        Цена,
                |        Сумма
                |    ),
                |    СчетНаОплатуПокупателю.Организация.НаименованиеПолное КАК ОрганизацияНаименование,
                |    СчетНаОплатуПокупателю.Организация.Код КАК ОрганизацияКод,
                |    СчетНаОплатуПокупателю.Контрагент.НаименованиеПолное КАК КонтрагентНаименование,
                |    СчетНаОплатуПокупателю.Контрагент.КодПоЕДРПОУ КАК КонтрагентКодПоЕДРПОУ,
                |    СчетНаОплатуПокупателю.Контрагент.ИНН КАК КонтрагентКодИНН
                |ИЗ
                |    Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
                |
                |ГДЕ
                |    СчетНаОплатуПокупателю.Ссылка = &ТекущийДокумент";
Пожалуйста подскажите как обращаться к  полям по типу СчетНаОплатуПокупателю.Товары () или СчетНаОплатуПокупателю.Услуги!?
1 1Сергей
 
10.08.21
13:42
Лучше не оперировать конструкцией со скобками. Соединяйте таблицы Документ.СчетНаОплатуПокупателю, Документ.СчетНаОплатуПокупателю.Товары и Документ.СчетНаОплатуПокупателю.Услуги
2 oduvanchikyan
 
10.08.21
13:48
(1) А как их соединять ? Я пробовал указывать через создание отдельных таблиц для таких конструкций, но информация не подтягивается в таком случае, ведь информация берется  уже с двух таблиц или я уже путаю, что-то ?
|ИЗ
|    Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
|    Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
Примерно так
При этом это единственное, что я меняю ...
3 Mankubus
 
10.08.21
13:50

ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка КАК Ссылка
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        ПО РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
4 ДенисЧ
 
10.08.21
13:51
Из Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
левое соединение Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
по СчетНаОплатуПокупателю.ссылка = СчетНаОплатуПокупателюТовары.ссылка.


Это конструктор запрос же сам сделает...
5 oduvanchikyan
 
10.08.21
14:09
(4) Спасибо, но результат пустой, то есть поля неопределенны, с чем может быть проблема? А так же жалуется на СчетНаОплатуПокупателюТовары.Номенклатура.Наименование КАК ТоварыНаименование --- "Поле объекта не обнаружено".
6 1Сергей
 
10.08.21
14:33
(5) весь запрос покажите
7 hhhh
 
10.08.21
14:55
(5) Наименование сразу выбросьте, его никогда не пишут. Пишите

Номенклатура КАК Номенклатура
8 oduvanchikyan
 
10.08.21
15:53
(6) (7) (4)  Решил проблему, все работает. Хотел уточнить по поводу вопроса обхода по результату запроса. Почему первый товар не отображается, а берется 2 и 3 товары, да и 3 дублируется :
Пока Результат.Следующий() Цикл
    ОбластьМакетТаблица.Параметры.НомерСтроки = НомерСтроки;
    ОбластьМакетТаблица.Параметры.Товар = Результат.ТоварыНаименование;
    ОбластьМакетТаблица.Параметры.Количество = Результат.Количество;
    ОбластьМакетТаблица.Параметры.Цена = Результат.Цена;
    ОбластьМакетТаблица.Параметры.Сумма = Результат.Сумма;
    НомерСтроки = НомерСтроки+1;
    Сообщить(НомерСтроки);
    ТабДокумент.Вывести(ОбластьМакетТаблица);
КонецЦикла;
9 1Сергей
 
10.08.21
17:39
(8) Что делается до цикла?
10 oduvanchikyan
 
10.08.21
17:49
(9)  Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
                |    СчетНаОплатуПокупателю.Номер,
                |    СчетНаОплатуПокупателю.Дата,
                |    СчетНаОплатуПокупателю.Ссылка,
                |    СчетНаОплатуПокупателюТовары.Цена,
                |    СчетНаОплатуПокупателюТовары.Сумма,
                |    СчетНаОплатуПокупателюТовары.Количество,
                |    СчетНаОплатуПокупателюТовары.Номенклатура.Наименование КАК ТоварыНаименование,
                |    СчетНаОплатуПокупателю.Услуги.(
                |        Номенклатура.Наименование КАК УслугиНаименование,
                |        Количество,
                |        Цена,
                |        Сумма
                |    ),
                |    СчетНаОплатуПокупателю.Организация.НаименованиеПолное КАК ОрганизацияНаименование,
                |    СчетНаОплатуПокупателю.Организация.Код КАК ОрганизацияКод,
                |    СчетНаОплатуПокупателю.Контрагент.НаименованиеПолное КАК КонтрагентНаименование,
                |    СчетНаОплатуПокупателю.Контрагент.КодПоЕДРПОУ КАК КонтрагентКодПоЕДРПОУ,
                |    СчетНаОплатуПокупателю.Контрагент.ИНН КАК КонтрагентКодИНН
                |ИЗ
                |    Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю,
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
        |        ПО СчетНаОплатуПокупателю.Ссылка = СчетНаОплатуПокупателюТовары.Ссылка
                |ГДЕ
                |    СчетНаОплатуПокупателю.Ссылка = &ТекущийДокумент";
                
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект); //используем в качестве параметра реквизит обработки СсылкаНаОбъект

Результат = Запрос.Выполнить().Выбрать();
//Результат.Следующий();
  
//Созданим и заполним табличный документ
ТабДокумент = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");

//Область Заголовок
ОбластьМакетаЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакетаЗаголовок.Параметры.ТекстЗаголовка = "Счет на оплату №" + Результат.Номер + " от " + Результат.Дата;
ТабДокумент.Вывести(ОбластьМакетаЗаголовок);


//Область Реквизит
//Наименование Поставщика
ОбластьМакетаРеквизит = Макет.ПолучитьОбласть("Реквизит");
ОбластьМакетаРеквизит.Параметры.ПредставлениеПоставщика = Результат.ОрганизацияНаименование;

//Код Поставщика
ОбластьМакетаРеквизит.Параметры.РеквизитПоставщика = Результат.ОрганизацияКод;


//Наименование Покупателя
ОбластьМакетаРеквизит.Параметры.ПредставлениеПокупатель = Результат.КонтрагентНаименование;

Если Результат.КонтрагентКодПоЕДРПОУ = Неопределено Тогда
    //Код покупателя ИНН
    ОбластьМакетаРеквизит.Параметры.РеквизитПокупателя = Результат.КонтрагентКодИНН;
Иначе
    //Код Покупателя ЕГРПОУ
    ОбластьМакетаРеквизит.Параметры.РеквизитПокупателя = Результат.КонтрагентКодПоЕДРПОУ;
КонецЕсли;

ТабДокумент.Вывести(ОбластьМакетаРеквизит);

//Область Шапка таблицы
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ТабДокумент.Вывести(ОбластьШапкаТаблицы);

//Область Тело таблицы
ОбластьМакетТаблица = Макет.ПолучитьОбласть("ТелоТаблицы");
НомерСтроки = 0;
Сообщить("Номер результата = "+Результат.Номер);
Сообщить("Номер результата = "+Результат.Дата);
Сообщить(Результат.Количество());
Для Номерстроки = 2 По Результат.Количество() Цикл
    Результат.Следующий();
    ОбластьМакетТаблица.Параметры.НомерСтроки = НомерСтроки;
    ОбластьМакетТаблица.Параметры.Товар = Результат.ТоварыНаименование;
    ОбластьМакетТаблица.Параметры.Количество = Результат.Количество;
    ОбластьМакетТаблица.Параметры.Цена = Результат.Цена;
    ОбластьМакетТаблица.Параметры.Сумма = Результат.Сумма;
    Сообщить("Номер = "+НомерСтроки);
    ТабДокумент.Вывести(ОбластьМакетТаблица);
КонецЦикла;
11 1Сергей
 
10.08.21
17:54
(10)

Результат.Сбросить();
Пока Результат.Следующий() Цикл
    ...
12 oduvanchikyan
 
10.08.21
17:59
(11) Большое человеческое спасибо!!
2 + 2 = 3.9999999999999999999999999999999...