Добрый день. помогите, пожалуйста .

Получаю в запросе:

Код наим кол Дата

01 тов1 10 11.05
15 тов18 32 11.05
36 тов 47 12.05
95 тов0 100 18.05

как сделать вывод в макет таким образом без СКД?

Код наим 11.05 12.05 18.05
01 тов1 10
15 тов18 32
36 тов 47
95 тов0 100
---
Сделал на примере Заказа покупателя, не сложно заменить таблицу на Заказ поставщику

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

    Запрос.УстановитьПараметр("НачДата", НачалоДня(НачПериода));
    Запрос.УстановитьПараметр("КонДата", КонецДня(КонПериода));
    Запрос.УстановитьПараметр("Контрагент", выбКонтрагент);

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

    ВыборкаОбщие = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Дата");
    текСтрока = "Общие: ";
    Пока ВыборкаОбщие.Следующий() Цикл
    текСтрока = текСтрока + Формат(ВыборкаОбщие.Дата, "ДФ=dd.MM.yy") + " ";
    КонецЦикла;
    Сообщить(текСтрока);

    ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
    Пока ВыборкаНоменклатура.Следующий() Цикл
    текСтрока = " + ВыборкаНоменклатура.НоменклатураКод + " " + ВыборкаНоменклатура.Номенклатура + " ";
    ВыборкаДата = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Дата", "ВСЕ");
    Пока ВыборкаДата.Следующий() Цикл
    //текСтрока = текСтрока + Формат(ВыборкаДата.Дата, "ДФ=dd.MM.yy") + " ";
    текСтрока = текСтрока + ?(ВыборкаДата.Количество = NULL, 0, ВыборкаДата.Количество) + " ";
    КонецЦикла;
    Сообщить(текСтрока);
    КонецЦикла;
```

Соответственно код "текСтрока = " заменяем на Таб.Вывести()
"текСтрока = текСтрока + " заменяем на Таб.Присоеденить()
---
На ИТС есть статья по запросам, там есть пример как сформировать кросс-таблицу с помощью обычного запроса.

Синтаксис:
Выбрать(<ТипОбхода>, <Группировки>, <ГруппировкиДляЗначенийГруппировок>)

ИМХО без примера трудно разобраться.
---
```1c
    ТабличныйДокумент.Присоединить(Макет)
```

НО! Нахрена так делать, если есть СКД???!!!
---
Уже принципиально хочется разобраться с присоединением
---
Я присоединяю к шапке даты. а как распределить кол по этим датам?
---
Не плохо бы видеть запрос.
Код примерно должен быть такой:

```1c
    ВыборкаНоменклатура = Запрос.Выполнить.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
    Пока ВыборкаНоменклатура.Следующий() Цикл
    ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
    ТабДок.Вывести(ОбластьНоменклатура);
    ВыборкаДата = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Дата", "ВСЕ");
    Пока ВыборкаДата.Следующий() Цикл
    ОбластьДата.Параметры.Заполнить(ВыборкаДата);
    ТабДок.Присоединить(ОбластьДата);
    КонецЦикла;
    КонецЦикла;
```
---
запрос самый обычный. без группировок

```1c
    ВЫБРАТЬ
    ЗаказПоставщикуТовары.Ссылка.Дата КАК Дата,
    ЗаказПоставщикуТовары.Номенклатура.Код,
    ЗаказПоставщикуТовары.Номенклатура,
    ЗаказПоставщикуТовары.Количество КАК Количество

    ИЗ
    Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
    ГДЕ
    ЗаказПоставщикуТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
    И ЗаказПоставщикуТовары.Ссылка.Контрагент = &Контрагент

    УПОРЯДОЧИТЬ ПО
    ДатаПоступления
    АВТОУПОРЯДОЧИВАНИЕ
```
---
и где Вы даты в нем возьмете для каждого товара?
---
Проще сделать с группировками, пример кода я привел.
можно конечно вручную перебирать, но это далеко не самый простой путь.
---
нут так помогите девушке дописать запрос, а не просто языком чешите.
---
Там в принципе простой код получается. Вот математическая модель:
1. Скопировать колонку "Дата" в новую таблицу значений.
2. Свернуть новую таблицу по дате. Отсортировать по дате.
3. Вывести даты в строку через присоединить().
4. Отсортировать по дате исходную таблицу (в запросе можно УПРОЯДОЧИТЬ ПО Дата).
5. Цикл по таблице.
6. Если товар уже был - получить номер строки таблицы с товаром.
7. Иначе вывести новую строку с товаром.
8. Получить колонку с датой.
9. ТабличныйДокумент.Область(Строка, колонка).Текст = Товар;
10. Конец цикла.
---
Кошмар какой. Чем алгоритм из (6) не угодил?
---
а у Вас все даты есть в запросе для каждого товара?
---
Просто внутренний цикл не по выборке, а по набору дат. Но поиск по макету с перебором товаров - очень жестоко для девушки, которая всего лишь хотела разобраться с присоединением :)
---
так для девушек (и не только) есть СКД.

И что там по макету искать собрались? Сохраняете в соответствии дату, в другом - товар. Ключ - объект, значение - номер колонки/строки.
---
Говрите знаете ООП, Си++, Java и т.д. и т.п. оно и заметно, подозреваю, что и все остальное знаете на уровне 1С, т.е. крайне поверхностно.
---
ну Вы то точно все это знаете судя по коду )))
---
Так вы еще сомневаетесь что код правильный :)
---
а что, он сработает на указанном запросе из (12)?
---
А вы сомневаетесь? :) Я вам уже говорил, что у вас глубокие провалы в знаниях.
Конечно сработает, только группировки нужно добавить.
---
ну так добавьте, раз у Вас в знаниях провалов нет)))

ЗЫ: всегда любил детсадовцев из трудных семей, у которых проблемы с самооценкой. Они такие забавные )))
---
Да ктож сомневался что сами себя очень любите :)
А мне не сложно, добавил группировочки, самых азов не знаете, а какая самооценка - экспердЪ.
---
ух какой шустрый - за полтора часа три строки кода - профессионал! )))
---
Не все же целыми днями сидят на инфостарте, кому-то еще работать надо.
---
да, прям вот с шести утра и хреначить до самой пенсии с перерывами на перекуры )))
---
Сделал на примере Заказа покупателя, не сложно заменить таблицу на Заказ поставщику

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

    Запрос.УстановитьПараметр("НачДата", НачалоДня(НачПериода));
    Запрос.УстановитьПараметр("КонДата", КонецДня(КонПериода));
    Запрос.УстановитьПараметр("Контрагент", выбКонтрагент);

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

    ВыборкаОбщие = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Дата");
    текСтрока = "Общие: ";
    Пока ВыборкаОбщие.Следующий() Цикл
    текСтрока = текСтрока + Формат(ВыборкаОбщие.Дата, "ДФ=dd.MM.yy") + " ";
    КонецЦикла;
    Сообщить(текСтрока);

    ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
    Пока ВыборкаНоменклатура.Следующий() Цикл
    текСтрока = " + ВыборкаНоменклатура.НоменклатураКод + " " + ВыборкаНоменклатура.Номенклатура + " ";
    ВыборкаДата = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Дата", "ВСЕ");
    Пока ВыборкаДата.Следующий() Цикл
    //текСтрока = текСтрока + Формат(ВыборкаДата.Дата, "ДФ=dd.MM.yy") + " ";
    текСтрока = текСтрока + ?(ВыборкаДата.Количество = NULL, 0, ВыборкаДата.Количество) + " ";
    КонецЦикла;
    Сообщить(текСтрока);
    КонецЦикла;
```

Соответственно код "текСтрока = " заменяем на Таб.Вывести()
"текСтрока = текСтрока + " заменяем на Таб.Присоеденить()
---
Спасибо большое. сейчас проверю
---
не то делаю что-то. да?

```1c
    ОбластьЗаголовок = Макет.ПолучитьОбласть("ОблШ|Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("ОблШ|Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ОблШ|ШапкаТаблицы");
    ОбластьПоставщик = Макет.ПолучитьОбласть("ОблШ|Поставщик");
    ОбластьПоставщик.Параметры.ПредставлениеПоставщика = "Поставщик: "+ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Контрагент, ТекущаяДата()), "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ОблШ|ПодвалТаблицы");
    ОбластьСуммаПрописью = Макет.ПолучитьОбласть("ОблШ|СуммаПрописью");
    ОбластьПодпись= Макет.ПолучитьОбласть("ОблШ|Подпись");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("ОблШ|Детали");
    обл=макет.ПолучитьОбласть("ШапкаТаблицы|обл");
    облкол=макет.ПолучитьОбласть("детали|обл");
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьПоставщик);
    //ТабДок.Вывести(ОбластьПокупатель);
    ТабДок.Вывести(ОбластьШапкаТаблицы);

    ВыборкаОбщие = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДатаПоступления");
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаОбщие);

    ТабДок.Вывести(ОбластьДетальныхЗаписей);
    Пока ВыборкаОбщие.Следующий() Цикл
    табдок.Присоединить( Формат(ВыборкаОбщие.ДатаПоступления, "ДФ=dd.MM.yy") + " ");
    КонецЦикла;

    ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
    Пока ВыборкаНоменклатура.Следующий() Цикл
    ТабДок.Вывести(ВыборкаНоменклатура.НоменклатураКод + " " + ВыборкаНоменклатура.Номенклатура + " ");
    ВыборкаДата = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДатаПоступления", "ВСЕ");
    Пока ВыборкаДата.Следующий() Цикл
    табдок.Присоединить( ?(ВыборкаДата.Количество = NULL, 0, ВыборкаДата.Количество) + " ");
    КонецЦикла;
    КонецЦикла;
```
---
Выводить и присоединять нужно Области (предварительно заполнив их), а не какие-то конкретные значения типа 0 или "количества"