Есть отчет есть макет) все работает)
но нужно изменить так, что бы данный выводильсь за период в колонках
т.е. 1 на колонка один месяц

макет у нас такой http://s1.ipicture.ru/uploads/20131030/QF7WXUvB.png
нужно что бы колонка факт была по месяцам)

как изменить код что бы он заполнял одну колонку потом добавлял еще и заполнял ее

код заполнения макета очень хитрый

```1c
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("МакетРазвернутогоОтчета");

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

    ОбластьИтого = Макет.ПолучитьОбласть("Итог");
    ОбластьГруппа = Макет.ПолучитьОбласть("Группа");
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьГруппаПодр = Макет.ПолучитьОбласть("ГруппаПодр");
    ОбластьСтрокаПодробно = Макет.ПолучитьОбласть("СтрокаПодробно");

    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапка);

    Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,,"Все");
    Если Выборка.Следующий() Тогда
    ОбластьИтого.Параметры.СтатьяЗатрат = "ВЫРУЧКА";
    ОбластьИтого.Параметры.Заполнить(Выборка);
    Прибыль = Прибыль+Выборка.СуммаФакт;
    ОбластьИтого.Параметры.Процент = ";
    ИтДоходы = Выборка.СуммаФакт;
    ИтДоходыПлан = Выборка.СуммаПлан;
    ТабДок.Вывести(ОбластьИтого);

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

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

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

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

    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Показать();
```
---
Далее к примеру код:

```1c
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("МакетРазвернутогоОтчета");

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапкаОсновное = Макет.ПолучитьОбласть("Шапка|Основное");
    ОбластьШапкаФакт = Макет.ПолучитьОбласть("Шапка|Факт");

    ОбластьСтрокаОсновное = Макет.ПолучитьОбласть("Строка|Основное");
    ОбластьСтрокаОсновное = Макет.ПолучитьОбласть("Строка|Факт");

    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаОсновное);

    МассивПериодов = Запрос.Выполнить().Выгрузить().Свернуть("ПериодМесяц");

    Для Каждого Стр Из МассивПериодов Цикл
    ОбластьШапкаФакт.Параметры.Заголовок = Стр.ПериодМесяц;
    ТабДок.Присоединить(ОбластьШапкаФакт);
    Конеццикла;
```

//Так как у нас есть список всех периодов тогда можем для каждого месяца отбирать данные и выводить
---
в цикле перебора по месяцам каждый раз выводим вертикальную область для каждой горизонтальной
```1c
    ОбластьФакт = Макет.ПолучитьОбласть("ИмяГоризонтальнойОбласти|ИмяВертикальнойОбласти");
```
 заполняем параметры, и далее выводим
```1c
    ТабДок.Присоединить(ОбластьФакт);
```
---
leriko, т.е каждую строку надо выводить по месяцам?
---
piffoff, когда каждую строку выводите делаете цикл, в котором объявляете вертикальную область и с помощью Присоединить() прикрепляете столбцы для каждой строки. А ещё я бы сделала в запросе, где данные выбираю виртуальную табличку с разбивкой периода отчета по месяцам. Это для того, чтобы для каждой строки было одинаковое количество месяцев (столбцов).
---
leriko, что вообще жесть.

Может проще вот это в скд? Я не знаю как в скд запросы с условием делать

вот такой у меня запрос

```1c
    Запрос.Текст = "ВЫБРАТЬ
    | ХозрасчетныйОбороты.Счет,
    | ХозрасчетныйОбороты.Подразделение КАК Подразделение,
    | ХозрасчетныйОбороты.Подразделение.ПодразделениеУпр КАК ПодразделениеУпр,
    | ХозрасчетныйОбороты.Субконто1 КАК НоменклатурнаяГруппа,
    | 0 КАК СуммаПлан,
    | ЕСТЬNULL(ХозрасчетныйОбороты.СуммаОборотКт, 0) КАК СуммаФакт
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.Обороты(
    | &НачалоПериода,
    | &КонецПериода,
    | Период,
    | Счет = &Счет,
    | ,
    | (Организация В ИЕРАРХИИ (&Организация)
    | ИЛИ &Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка))
    | И НЕ Субконто1 = &аренда
    | И 11 = 11
    | И 22 = 22,
    | ,
    | ) КАК ХозрасчетныйОбороты
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | NULL,
    | ПланДоходовОбороты.Подразделение,
    | ПланДоходовОбороты.Подразделение.ПодразделениеУпр,
    | ПланДоходовОбороты.НоменклатурнаяГруппа,
    | ЕСТЬNULL(ПланДоходовОбороты.СуммаОборот, 0),
    | 0
    |ИЗ
    | РегистрНакопления.ПланДоходов.Обороты(
    | &НачалоПериода,
    | &КонецПериода,
    | Период,
    | (Организация В ИЕРАРХИИ (&Организация)
    | ИЛИ &Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка))
    | И СтатьяПрочихДоходов = ЗНАЧЕНИЕ(Справочник.ИИ_СтатьиБюджета.ПустаяСсылка)
    | И 22 = 22) КАК ПланДоходовОбороты
    |ИТОГИ
    | СУММА(СуммаПлан),
    | СУММА(СуммаФакт)
    |ПО
    | ОБЩИЕ,
    | ПодразделениеУпр ИЕРАРХИЯ,
    | НоменклатурнаяГруппа,
    | Подразделение";

    Запрос.УстановитьПараметр("НачалоПериода",Новый Граница(НачалоДня(НачалоПериода),ВидГраницы.Включая));
    Запрос.УстановитьПараметр("КонецПериода", Новый Граница(КонецДня(КонецПериода),ВидГраницы.Включая));
    Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД);//90.01.1
    Запрос.УстановитьПараметр("Организация",ВыбОрганизация);
    Запрос.УстановитьПараметр("Аренда",Аренда);

    Если ИсключитьОборот Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст,"11 = 11","НЕ (Организация = &ОрганизацияОборот И КорСубконто1 = &КонтрагентОборот) И НЕ (Организация = &ОрганизацияОборот И КорСубконто1 = &КонтрагентОборотСинема)");
    Запрос.УстановитьПараметр("ОрганизацияОборот",ОрганизацияОборот);
    Запрос.УстановитьПараметр("КонтрагентОборот",КонтрагентОборот);
    Запрос.УстановитьПараметр("КонтрагентОборотСинема",КонтрагентОборотСинема);
    КонецЕсли;

    Если ИсключитьПодразделение Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст,"22 = 22","НЕ Подразделение.ПодразделениеУпр = &Подразделение");
    Запрос.УстановитьПараметр("Подразделение",Подразделение);
    КонецЕсли;
```
---
leriko, а подскажите пожайлуста как виртуальную табличку с разбивкой периода отчета по месяцам
---
- Вот тебе предлагают реальное решение. СКД, запрос к виртуальной таблице с периодичностью Месяц, вывод - Таблица (строки - статьи затрат, колонки - месяцы). Сделай в СКД запрос, выкладывай сюда и дальше расскажу, где, куда, что ставить.(18) - Вот человек говорит дело. Причем, даже если ты сделаешь так, как сейчас (что, в принципе, реально), через какое-то время может понадобиться что-то поменять (группировку там добавить или отбор) - и опять тот же геморр со сменой логики выборки данных и вывода данных, а в СКД - это на уровне "галочку там, галочку там и ок".
---
Roman004, все делов том что я не знаю как
http://forum.infostart.ru/forum26/topic97671/message1010727/#message1010727
этот запрос в СКД перевести. Подскажет кто буду делать в скд
---
piffoff, как то так:

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

    Запрос.УстановитьПараметр("НачалоПериода",Новый Граница(НачалоДня(НачалоПериода),ВидГраницы.Включая));
    Запрос.УстановитьПараметр("КонецПериода", Новый Граница(КонецДня(КонецПериода),ВидГраницы.Включая));
    Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД);//90.01.1
    Запрос.УстановитьПараметр("Организация",ВыбОрганизация);
    Запрос.УстановитьПараметр("Аренда",Аренда);
    Запрос.УстановитьПараметр("ИсключитьОборот",ИСТИНА);
    Запрос.УстановитьПараметр("ОрганизацияОборот",ОрганизацияОборот);
    Запрос.УстановитьПараметр("КонтрагентОборот",КонтрагентОборот);
    Запрос.УстановитьПараметр("КонтрагентОборотСинема",КонтрагентОборотСинема);
    Запрос.УстановитьПараметр("ИсключитьПодразделение",ИСТИНА);
    Запрос.УстановитьПараметр("Подразделение",Подразделение);
```
---
Используй Присоединить()

Синтаксис:

Присоединить(<Таблица>, <Уровень>, <ИмяГруппы>, <Открыта>)
Параметры:

<Таблица> (обязательный)

Тип: ТабличныйДокумент; ПолеТабличногоДокумента.
Выводимая таблица.
<Уровень> (необязательный)

Тип: Число.
Уровень используется для автоматической группировки колонок табличного документа. Соседние колонки с одинаковым уровнем будут отнесены к одной группе. Строки с минимальным уровнем в группу не объединяются.
<ИмяГруппы> (необязательный)

Тип: Строка.
Название группы, к которой относятся выводимые колонки.
<Открыта> (необязательный)

Тип: Булево.
Истина - выведенная группа будет открыта,
Ложь - группа будет выведена в свернутом виде.
Возвращаемое значение:

Тип: ОбластьЯчеекТабличногоДокумента.
Область, в которую был осуществлен вывод.
Описание:

Присоединяет табличный документ к результирующему табличному документу, помещая его в следующей колонке правее самой правой выведенной колонки, начиная со строки, с которой выводился предыдущий табличный документ.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

```1c
    ТабДок = Новый ТабличныйДокумент;
    Секция = ТабДок.ПолучитьОбласть("R1C1");
    ТабДок.НачатьАвтогруппировкуКолонок();
    Секция.Область("R1C1").Текст = "Параметр";
    ТабДок.Вывести(Секция,1,"Группа 1",Ложь);
    Для К=1 По 10 Цикл
    Секция = ТабДок.ПолучитьОбласть("R1C1");
    Секция.Область().Текст = "А"+К;
    Секция.Область().ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
    ТабДок.Присоединить(Секция,2,"Группа 2",Истина);
    КонецЦикла;
    Секция.Область("R1C1").Текст = "Итого:";
    ТабДок.Присоединить(Секция,1,"Группа 2",Ложь);
    Секция.Область("R1C1").Текст = "Значение";
    ТабДок.Вывести(Секция,1,"Группа 2",Ложь);
    Цена = 10; Итог = Цена;
    Для К=1 По 10 Цикл
    Секция = ТабДок.ПолучитьОбласть("R1C1");
    Секция.Область().Текст = Цена;
    ТабДок.Присоединить(Секция,2,"Группа 2",Истина);
    Цена = Цена + 10;
    Итог = Итог + Цена;
    КонецЦикла;
    Секция.Область("R1C1").Текст = Итог;
    ТабДок.Присоединить(Секция,1,"Группа 2",Ложь);
    ТабДок.ЗакончитьАвтогруппировкуКолонок();
    ТабДок.ИтогиСправа = Истина;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.Показать("Пример использования гор. автогруппировки");
```
---
А на СКД не быстрее будет наклепать этот отчет? Опишите логику что он выбирает.
---
vervolf9, он уже ж готовый не быстрее ли будет колонки сделать?
и там множество всяких условий и составные запросы, так что заново скд делать ...
---
Первое что нужно добавить в запрос поля ПериодМесяц
---
В оба запроса. Далее в макете задать имя области все что перед колонкой областью "Факт" к примеру "Основное".
---
vervolf9, а дальше?)
---
Далее к примеру код:

```1c
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("МакетРазвернутогоОтчета");

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапкаОсновное = Макет.ПолучитьОбласть("Шапка|Основное");
    ОбластьШапкаФакт = Макет.ПолучитьОбласть("Шапка|Факт");

    ОбластьСтрокаОсновное = Макет.ПолучитьОбласть("Строка|Основное");
    ОбластьСтрокаОсновное = Макет.ПолучитьОбласть("Строка|Факт");

    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаОсновное);

    МассивПериодов = Запрос.Выполнить().Выгрузить().Свернуть("ПериодМесяц");

    Для Каждого Стр Из МассивПериодов Цикл
    ОбластьШапкаФакт.Параметры.Заголовок = Стр.ПериодМесяц;
    ТабДок.Присоединить(ОбластьШапкаФакт);
    Конеццикла;
```

//Так как у нас есть список всех периодов тогда можем для каждого месяца отбирать данные и выводить
---
Но суть в том чтобы из запроса или получить сразу всю выборку а потом работать из таблицой значения или добавить группировку в запрос по "ПериодМесяц".
---
Но мне все таки кажеться что на СКД было бы легче организовать все это, так как руками не писал отчеты уже больше года. И вот по своей практике скажу что на СКД пишуться отчеты любой сложности.
---
vervolf9, ну это уже готовый отчет) его надо изменить добавив разбивку на месяца. Если б делать его с нуля то делал бы СКД
---
Чем предложенный выше вариант не устраивает?
---
Готовый слабо сказано ))) Для разбивки по месяцам нужно менять логику построения всего отчета, тоесть нам наперед нужно знать месяца, вот реально проще сделать новый на скд чем менять этот, и с группировками еще возиться, переписывать..
---
В любом случае отчет переделывать. Макет рисовать. На проще перенести в СКДО и не придется с макетом заморачиваться.
---
Вот же блин привязалась ко мне эта СКДО, СКДО = СКД
---
скд клипай, быстрее будет и проще коррективы вносить
---
Беда. Блин. Попробую и так и так
---
У Насыпова на http://www.spec8.ru/ в свое время были видеокурсы по основам СКД, в общем случае видео на ~300 мегабайт. Рассказывают довольно доходчиво. Рекомендую поискать и просмотреть.
На самом деле в СКД ничего сложного нет, нужно просто понять идеалогию, да изучить некоторые тонкости.
---
Фарид Насипов
---
isn, Да, конечно. Извиняюсь, по памяти писал. :(
---
Я заполнил так:

```1c
    КоличетвоСтрокНаСтранице = 54;

    Обл = Макет.ПолучитьОбласть("Строка");

    ТекСтрока = 0;

    Для каждого Стр Из тзТовары Цикл

    ТекСтрока = ТекСтрока + 1;

    //вывести в первую колонку
    Если ТекСтрока <= КоличетвоСтрокНаСтранице Тогда

    Обл.Параметры.Номенклатура = Стр.Номенклатура;
    Таб.Вывести(Обл);

    //вывести во вторую колонку
    Иначе

    Строка = ТекСтрока - КоличетвоСтрокНаСтранице + 3; //3 шапка

    _Обл = Таб.Область(Строка, 7, Строка, 7);
    _Обл.Текст = Стр.Номенклатура;

    КонецЕсли;

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