Имя: Пароль:
1C
1С v8
Запрос к табличной части документа
0 brenli
 
03.10.19
22:52
Доброго времени.
Есть задача:
Имеется документ - маршрутный лист в табличной части у которого есть колонки:

Номенклатура / Характеристика / ЕдиницаИзмерения / Коэффициент / Цена / Сумма / СтавкаНДС / СуммаНДС / Контрагент / Договор / Склад.

Нужно реализовать команду при выполнении которой будут созданы документы РеализацияТоваровУслуг по всем контрагентам сгруппированным из таблицы документа Маршрутный лист.

Вопрос чисто практический. Мне нужно будет 11 вложенных циклов?  Или как поступить более красиво?

Понятно что нужно группировать по Склад / Контрагент / Договор / Номенклатура / Характеристика / Единица / (Нужно ли делать группировку по коэффициенту?) / (Цена- нужно ли делать группировку по Цене?) / (Ставка НДС  - нужно ли делать группировку по ставке НДС?) / (СуммаНДС - нужно ли делать группировку по СуммеНДС?)

Без группировок  не выводятся значения Единицы измерения...

Правильно ли это писать 11 циклов?
2 Свин-опёр
 
04.10.19
03:27
Как то так:

тзТЧ = [ТабличнаяЧастьДОкумента].Выгрузить();

тзГруппировки = тзТЧ.Скопировать();

тзГруппировки.Свернуть("Склад, Контрагент, Договор");

Для Каждого стрГрупп из тзГруппировки Цикл

    объДокРеал = ДОкументы.РеализацияТОваровУслуг.СоздатьОбЪект();
    объДокРеал.Дата = Дата;
    объДокРеал.Склад = стрГрупп.Склад;
    объДокРеал.Договор = стрГрупп.Договор ;
    объДокРеал.Контрагент = стрГрупп.Контрагент ;

    строкиТЧ = тзТЧ.НайтиСТроки(Новый Структура("Склад, Договор, Контрагент ", стрГрупп.Склад,              стрГрупп.Договор , стрГрупп.Контрагент ));

    Для Каждого стрТЧ из строкиТЧ Цикл

        стрТовары = объДокРеал.ТОвары.Добавить();
        ЗаполнитьЗначенияСвойств(стрТовары, строкиТЧ );

    КонецЦикла;


КонецЦикла;
3 Свин-опёр
 
04.10.19
03:30
НУ или аналогично через пакет запросов получить 2 выборки
4 Chameleon1980
 
04.10.19
04:04
А итоги в запросе нах?
5 brenli
 
04.10.19
07:03
(3)

Тип так ?

ВЫБРАТЬ
    Док.Склад КАК Склад,
    Док.Контрагент КАК Контрагент,
    Док.Договор КАК Договор
ПОМЕСТИТЬ
    Табл    
ИЗ
    Документ.оМаршрутныйЛист.Товары КАК Док
ГДЕ
   Док.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
   Док.Склад,
   Док.Контрагент,
   Док.Договор;
  
ВЫБРАТЬ
    *
ИЗ      
    Табл КАК Табл
  ЛЕВОЕ СОЕДИНЕНИЕ
   Документ.оМаршрутныйЛист.Товары КАК Док
ПО Табл.Склад = Док.Склад И Табл.Контрагент = Док.Контрагент И Табл.Договор = Док.Договор
6 brenli
 
04.10.19
07:10
(4)
Причем тут итоги?
7 Свин-опёр
 
04.10.19
07:12
(5) Нет не так.  Надо сделать два запроса без всяких "Поместить". ВыполниПакет. А потом перебирая выборку первого запроса устанавливать устанавливать отбор на второй.

Но если ты работаешь в рамках одного документа - смысла нет, если только документы не какие-то гигантски, проще через ТЗ.
8 brenli
 
04.10.19
07:24
(7) Можно пример с ВыполнитьПакет ? =)
9 brenli
 
04.10.19
07:24
(7) Получается второй запрос будет работать в цикле?
10 brenli
 
04.10.19
07:29
(7) +
Тогда не понимаю в чем отличие кода который привел я. В консоли запросов вбил его - выводит как надо.
В цикле второй пакет будет работать подобным образом получая параметры из первого  НО только в цикле, в моем варианте условия отбора накладываются при соединении .
Я не прав?
11 Chameleon1980
 
04.10.19
08:51
(6) при том.
или я не понял задачи.
или правильно выбрать поля и указать итоги и правильно обойти результат запроса
1(!) раз (просто вложенные выборки результата 1 (!) запроса)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.