Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
15 Июн 2021, 15:44
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
МультиВход
 
collapse

Автор Тема: Как правильно делается запрос по докам и их ТЧ  (Прочитано 1735 раз)

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

Оффлайн Prestion

  • *
  • Регистрация: 2016-12-20
  • Сообщений: 3
  • РЕПУТАЦИЯ: 0
  • Профессия: Ученик 1С
Есть список документов за период. Мне нужно выгрузить в файл данные по документу и по его ТЧ
Формат типа:

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

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


Оффлайн Prestion

  • *
  • Регистрация: 2016-12-20
  • Сообщений: 3
  • РЕПУТАЦИЯ: 0
  • Профессия: Ученик 1С
Сейчас примерно вот так (выбросил данные, оставил суть)


Запись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

  • *****
  • Регистрация: 2016-08-23
  • Сообщений: 1528
  • РЕПУТАЦИЯ: 222
  • КПД: 15%
  • Профессия: Программист 1С
Сделайте выборку по документам и по их табличным частям в одном запросе, тогда запрос вернет сведения о табличных частях в виде таблицы значений, например
Запрос = Новый Запрос;
Запрос.Текст =      "ВЫБРАТЬ
|   ОРП.Ссылка,
|      ОРП.Дата,
|      ОРП.Продукция.(     
|            НомерСтроки,     
|            Номенклатура,     
|            Количество,     
|            СуммаПлановая
|      ),     
|      ОРП.Материалы.(     
|            НомерСтроки,     
|            Номенклатура,     
|            Количество,     
|            Себестоимость
|      )     
|ИЗ     
|      Документ.ОтчетПроизводстваЗаСмену КАК ОРП     
|ГДЕ
|   (ОРП.Проведен) И
|   (ОРП.Дата МЕЖДУ &НачДата И &КонДата) ";

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

Ном=0;

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

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


Теги:
 

Как вывести текущего пользователя в панель инструментов?

Автор Алексей2014Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 998
Последний ответ 18 Янв 2017, 21:31
от Алексей2014
Как программно определить значение RLS?

Автор redoksРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 2364
Последний ответ 02 Фев 2017, 03:04
от redoks
Конвертация данных, как задать период

Автор ВовчикРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 4496
Последний ответ 14 Окт 2016, 08:59
от Вовчик
Как сформировать единую декларацию по двум отдельно заведенным организациям.

Автор vikkiРаздел Пользователям "1С - Предприятие 8"

Ответов: 0
Просмотров: 787
Последний ответ 09 Ноя 2016, 13:21
от vikki
Как в программе 1С 8.3 перенести расходы второго квартала в четвертый.

Автор well_06Раздел Пользователям "1С - Предприятие 8"

Ответов: 0
Просмотров: 1967
Последний ответ 16 Июл 2016, 21:34
от well_06

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Последние вакансии

* Том 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
69 Сообщений
LexaK
67 Сообщений
antoneus antoneus
32 Сообщений
Ивашка
27 Сообщений
neek666
25 Сообщений
KATERINA 861
19 Сообщений
SSC
15 Сообщений
alexandr_ll
13 Сообщений
Алексей_1985_06
12 Сообщений
pouyo
8 Сообщений

* Кто онлайн

  • Точка Гостей: 714
  • Точка Скрытых: 1
  • Точка Пользователей: 10
  • Точка Сейчас на форуме:

* Облако тэгов

* Инструменты

* Дополнительно

Поиск