Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
09 мая 2024, 10:20

Как правильно делается запрос по докам и их ТЧ

Автор Prestion, 20 дек 2016, 18:49

0 Пользователей и 1 гость просматривают эту тему.

Prestion

Есть список документов за период. Мне нужно выгрузить в файл данные по документу и по его ТЧ
Формат типа:

<Документы>
<Документ>
  <Реквизиты документа>
  <Реквизиты документа>
   <Товары>
    <Товар>
     <Реквизиты товара>
     <Реквизиты товара>
     ...
   </Товар>
  </Товары>
</Документ>
</Документы>

Сейчас делаю так:
Первый запрос выбирает документы и в процессе обхода выборки получаю ссылку на док и передаю ее параметром во второй запрос, который уже выбирает данные по ТЧ. Т.е. у меня выходит на каждую ссылку выборки выполняется запрос по ТЧ. Подозреваю, что это не верное решение, в связи с чем вопрос - как грамотно это делается?
Благодарю!

Prestion

Сейчас примерно вот так (выбросил данные, оставил суть)


ЗаписьXML.ЗаписатьНачалоЭлемента("Docs");

Запрос = Новый Запрос();
Запрос.Текст =

"ВЫБРАТЬ
|   Реализация.Ссылка КАК Ссылка,
|   Реализация.Номер КАК num,
|   Реализация.Дата КАК date
|ИЗ
|   Документ.Реализация КАК Реализация";

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

ВыборкаДок = РезультатЗапроса.Выбрать();            
Пока ВыборкаДок.Следующий() Цикл
   ЗаписьXML.ЗаписатьНачалоЭлемента("Doc");         
   
   ЗаписатьЭлементХМЛ(ЗаписьXML, "num", ВыборкаДок.num);
   ЗаписатьЭлементХМЛ(ЗаписьXML, "date", ВыборкаДок.date);
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   
   "ВЫБРАТЬ
   |   РеализацияТовары.Номенклатура.Код КАК code,
   |   РеализацияТовары.Количество КАК quantity
   |ИЗ
   |   Документ.Реализация.Товары КАК РеализацияТовары
   |ГДЕ
   |   РеализацияТовары.Ссылка.Ссылка = &Ссылка
   
   Запрос.УстановитьПараметр("Ссылка", ВыборкаДок.Ссылка);   
   РезультатЗапроса2 = Запрос.Выполнить();            
   
   ЗаписьXML.ЗаписатьНачалоЭлемента("Table");
   
   ВыборкаНом = РезультатЗапроса2.Выбрать();            
   Пока ВыборкаНом.Следующий() Цикл
      ЗаписьXML.ЗаписатьНачалоЭлемента("SKU");
      
      ЗаписатьЭлементХМЛ(ЗаписьXML, "code", ВыборкаНом.code);
      ЗаписатьЭлементХМЛ(ЗаписьXML, "quantity", ВыборкаНом.quantity);
      
      ЗаписьXML.ЗаписатьКонецЭлемента();   //SKU
   КонецЦикла;   
   ЗаписьXML.ЗаписатьКонецЭлемента();   //Table
   ЗаписьXML.ЗаписатьКонецЭлемента();   //Doc
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();   //Docs

alexandr_ll

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

Запрос.УстановитьПараметр("НачДата", НачалоДня(НачПериода));
Запрос.УстановитьПараметр("КонДата", КонецДня(КонПериода));
РезультатЗапроса = Запрос.Выполнить();
СОРП=РезультатЗапроса.Выгрузить();

Ном=0;

Для каждого Ц Из СОРП Цикл  //цикл по документам
Для каждого Ц1 Из Ц.Продукция Цикл  //цикл по продукции
Стр=ТЗ.Добавить();
Стр.Документ=Ц.Ссылка;
Стр.Продукция=Ц1.Номенклатура;
Стр.КоличествоП=Ц1.Количество;
Стр.СуммаПлан=Ц1.СуммаПлановая;
Для каждого Ц2 Из Ц.Материалы Цикл  //цикл по материалам
Стр=ТЗ.Добавить();
Стр.Документ=Ц.Ссылка;
Стр.Продукция=Ц1.Номенклатура;
Стр.Сырье=Ц2.Номенклатура;
Стр.КоличествоС=Ц2.Количество;

КонецЦикла;
КонецЦикла;
КонецЦикла;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск