Добавление колонок в макет

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

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

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


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

ТабДок = Новый ТабличныйДокумент;
	Макет = ПолучитьМакет("МакетРазвернутогоОтчета"); 
	
	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
	ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
	ОбластьШапка	 = Макет.ПолучитьОбласть("Шапка");
	
	ОбластьИтого = Макет.ПолучитьОбласть("Итог");
	ОбластьГруппа = Макет.ПолучитьОбласть("Группа");
	ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
	ОбластьГруппаПодр = Макет.ПолучитьОбласть("ГруппаПодр");
	ОбластьСтрокаПодробно = Макет.ПолучитьОбласть("СтрокаПодробно");

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


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

	ТабДок.ОтображатьСетку = Ложь;
	ТабДок.Показать();
Показать
+
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
13. vervolf9 30.10.13 16:56 Сейчас в теме
Далее к примеру код:

ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("МакетРазвернутогоОтчета"); 
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапкаОсновное     = Макет.ПолучитьОбласть("Шапка|Основное");
    ОбластьШапкаФакт     = Макет.ПолучитьОбласть("Шапка|Факт");

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

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

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

//Так как у нас есть список всех периодов тогда можем для каждого месяца отбирать данные и выводить
Gadzhalik; Garikomus; konyashkingn; +3
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. leriko 3 30.10.13 12:49 Сейчас в теме
в цикле перебора по месяцам каждый раз выводим вертикальную область для каждой горизонтальной
ОбластьФакт = Макет.ПолучитьОбласть("ИмяГоризонтальнойОбласти|ИмяВертикальнойОбласти");
заполняем параметры, и далее выводим
ТабДок.Присоединить(ОбластьФакт);
Ворчун; igormiro; kanalya; +3
6. piffoff 82 30.10.13 15:51 Сейчас в теме
(2) leriko, т.е каждую строку надо выводить по месяцам?
+
7. leriko 3 30.10.13 16:05 Сейчас в теме
(6) piffoff, когда каждую строку выводите делаете цикл, в котором объявляете вертикальную область и с помощью Присоединить() прикрепляете столбцы для каждой строки. А ещё я бы сделала в запросе, где данные выбираю виртуальную табличку с разбивкой периода отчета по месяцам. Это для того, чтобы для каждой строки было одинаковое количество месяцев (столбцов).
+
8. piffoff 82 30.10.13 16:22 Сейчас в теме
(7) leriko, что вообще жесть.

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

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

	Запрос.Текст =  "ВЫБРАТЬ
	                |	ХозрасчетныйОбороты.Счет,
	                |	ХозрасчетныйОбороты.Подразделение КАК Подразделение,
	                |	ХозрасчетныйОбороты.Подразделение.ПодразделениеУпр КАК ПодразделениеУпр,
	                |	ХозрасчетныйОбороты.Субконто1 КАК НоменклатурнаяГруппа,
	                |	0 КАК СуммаПлан,
	                |	ЕСТЬNULL(ХозрасчетныйОбороты.СуммаОборотКт, 0) КАК СуммаФакт
	                |ИЗ
	                |	РегистрБухгалтерии.Хозрасчетный.Обороты(
	                |			&НачалоПериода,
	                |			&КонецПериода,
	                |			Период,
	                |			Счет = &Счет,
	                |			,
	                |			(Организация В ИЕРАРХИИ (&Организация)
	                |				ИЛИ &Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка))
	                |				И НЕ Субконто1 = &аренда
	                |				И 11 = 11
	                |				И 22 = 22,
	                |			,
	                |			) КАК ХозрасчетныйОбороты
	                |
	                |ОБЪЕДИНИТЬ ВСЕ
	                |
	                |ВЫБРАТЬ
	                |	NULL,
	                |	ПланДоходовОбороты.Подразделение,
	                |	ПланДоходовОбороты.Подразделение.ПодразделениеУпр,
	                |	ПланДоходовОбороты.НоменклатурнаяГруппа,
	                |	ЕСТЬNULL(ПланДоходовОбороты.СуммаОборот, 0),
	                |	0
	                |ИЗ
	                |	РегистрНакопления.ПланДоходов.Обороты(
	                |			&НачалоПериода,
	                |			&КонецПериода,
	                |			Период,
	                |			(Организация В ИЕРАРХИИ (&Организация)
	                |				ИЛИ &Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка))
	                |				И СтатьяПрочихДоходов = ЗНАЧЕНИЕ(Справочник.ИИ_СтатьиБюджета.ПустаяСсылка)
	                |				И 22 = 22) КАК ПланДоходовОбороты
	                |ИТОГИ
	                |	СУММА(СуммаПлан),
	                |	СУММА(СуммаФакт)
	                |ПО
	                |	ОБЩИЕ,
	                |	ПодразделениеУпр ИЕРАРХИЯ,
	                |	НоменклатурнаяГруппа,
	                |	Подразделение";
	
	Запрос.УстановитьПараметр("НачалоПериода",Новый Граница(НачалоДня(НачалоПериода),ВидГраницы.Включая));
	Запрос.УстановитьПараметр("КонецПериода", Новый Граница(КонецДня(КонецПериода),ВидГраницы.Включая));
	Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД);//90.01.1
	Запрос.УстановитьПараметр("Организация",ВыбОрганизация);
	Запрос.УстановитьПараметр("Аренда",Аренда);
	
	Если ИсключитьОборот Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст,"11 = 11","НЕ (Организация = &ОрганизацияОборот И КорСубконто1 = &КонтрагентОборот) И НЕ (Организация = &ОрганизацияОборот И КорСубконто1 = &КонтрагентОборотСинема)");
		Запрос.УстановитьПараметр("ОрганизацияОборот",ОрганизацияОборот);
		Запрос.УстановитьПараметр("КонтрагентОборот",КонтрагентОборот);
		Запрос.УстановитьПараметр("КонтрагентОборотСинема",КонтрагентОборотСинема);
	КонецЕсли;
	
	Если ИсключитьПодразделение Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст,"22 = 22","НЕ Подразделение.ПодразделениеУпр = &Подразделение");
		Запрос.УстановитьПараметр("Подразделение",Подразделение);
	КонецЕсли;
Показать
+
9. piffoff 82 30.10.13 16:23 Сейчас в теме
(7) leriko, а подскажите пожайлуста как
виртуальную табличку с разбивкой периода отчета по месяцам
+
21. Roman004 31.10.13 05:22 Сейчас в теме
(7) - Вот тебе предлагают реальное решение. СКД, запрос к виртуальной таблице с периодичностью Месяц, вывод - Таблица (строки - статьи затрат, колонки - месяцы). Сделай в СКД запрос, выкладывай сюда и дальше расскажу, где, куда, что ставить.(18) - Вот человек говорит дело. Причем, даже если ты сделаешь так, как сейчас (что, в принципе, реально), через какое-то время может понадобиться что-то поменять (группировку там добавить или отбор) - и опять тот же геморр со сменой логики выборки данных и вывода данных, а в СКД - это на уровне "галочку там, галочку там и ок".
+
24. piffoff 82 31.10.13 09:07 Сейчас в теме
(21) Roman004, все делов том что я не знаю как
http://forum.infostart.ru/forum26/topic97671/message1010727/#message1010727
этот запрос в СКД перевести. Подскажет кто буду делать в скд
+
25. m-serg74 46 31.10.13 09:25 Сейчас в теме
(24) piffoff, как то так:
Запрос.Текст =  
"ВЫБРАТЬ
|    ХозрасчетныйОбороты.Счет,
|    ХозрасчетныйОбороты.Подразделение КАК Подразделение,
|    ХозрасчетныйОбороты.Подразделение.ПодразделениеУпр КАК ПодразделениеУпр,
|    ХозрасчетныйОбороты.Субконто1 КАК НоменклатурнаяГруппа,
|    0 КАК СуммаПлан,
|    ЕСТЬNULL(ХозрасчетныйОбороты.СуммаОборотКт, 0) КАК СуммаФакт
|ИЗ
|    РегистрБухгалтерии.Хозрасчетный.Обороты(
|            &НачалоПериода,
|            &КонецПериода,
|            Период,
|            Счет = &Счет,
|            ,
|            (Организация В ИЕРАРХИИ (&Организация)
|                ИЛИ &Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка))
|                И НЕ Субконто1 = &аренда
|                И (&ИсключитьОборот ИЛИ (Организация = &ОрганизацияОборот И (КорСубконто1 = &КонтрагентОборот ИЛИ КорСубконто1 = &КонтрагентОборотСинема)))
|                И (&ИсключитьПодразделение ИЛИ (Подразделение.ПодразделениеУпр = &Подразделение)),
|            ,
|            ) КАК ХозрасчетныйОбороты
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    NULL,
|    ПланДоходовОбороты.Подразделение,
|    ПланДоходовОбороты.Подразделение.ПодразделениеУпр,
|    ПланДоходовОбороты.НоменклатурнаяГруппа,
|    ЕСТЬNULL(ПланДоходовОбороты.СуммаОборот, 0),
|    0
|ИЗ
|    РегистрНакопления.ПланДоходов.Обороты(
|            &НачалоПериода,
|            &КонецПериода,
|            Период,
|            (Организация В ИЕРАРХИИ (&Организация)
|                ИЛИ &Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка))
|                И СтатьяПрочихДоходов = ЗНАЧЕНИЕ(Справочник.ИИ_СтатьиБюджета.ПустаяСсылка)
|                И (&ИсключитьПодразделение ИЛИ (Подразделение.ПодразделениеУпр = &Подразделение))) КАК ПланДоходовОбороты
|ИТОГИ
|    СУММА(СуммаПлан),
|    СУММА(СуммаФакт)
|ПО
|    ОБЩИЕ,
|    ПодразделениеУпр ИЕРАРХИЯ,
|    НоменклатурнаяГруппа,
|    Подразделение";

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

Синтаксис:

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

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

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

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

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

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

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

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

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

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

ТабДок = Новый ТабличныйДокумент;
Секция = ТабДок.ПолучитьОбласть("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",Ложь);
ТабДок.ЗакончитьАвтогруппировкуКолонок();
ТабДок.ИтогиСправа = Истина;
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать("Пример использования гор. автогруппировки");
Показать
Ворчун; +1
4. vervolf9 30.10.13 15:17 Сейчас в теме
А на СКД не быстрее будет наклепать этот отчет? Опишите логику что он выбирает.
Bukaska; 3762515; asmodey0807; +3
5. piffoff 82 30.10.13 15:50 Сейчас в теме
(4) vervolf9, он уже ж готовый не быстрее ли будет колонки сделать?
и там множество всяких условий и составные запросы, так что заново скд делать ...
+
10. vervolf9 30.10.13 16:47 Сейчас в теме
Первое что нужно добавить в запрос поля ПериодМесяц
+
11. vervolf9 30.10.13 16:50 Сейчас в теме
В оба запроса. Далее в макете задать имя области все что перед колонкой областью "Факт" к примеру "Основное".
+
12. piffoff 82 30.10.13 16:55 Сейчас в теме
13. vervolf9 30.10.13 16:56 Сейчас в теме
Далее к примеру код:

ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("МакетРазвернутогоОтчета"); 
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапкаОсновное     = Макет.ПолучитьОбласть("Шапка|Основное");
    ОбластьШапкаФакт     = Макет.ПолучитьОбласть("Шапка|Факт");

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

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

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

//Так как у нас есть список всех периодов тогда можем для каждого месяца отбирать данные и выводить
Gadzhalik; Garikomus; konyashkingn; +3
14. vervolf9 30.10.13 16:57 Сейчас в теме
Но суть в том чтобы из запроса или получить сразу всю выборку а потом работать из таблицой значения или добавить группировку в запрос по "ПериодМесяц".
+
15. vervolf9 30.10.13 16:59 Сейчас в теме
Но мне все таки кажеться что на СКД было бы легче организовать все это, так как руками не писал отчеты уже больше года. И вот по своей практике скажу что на СКД пишуться отчеты любой сложности.
+
16. piffoff 82 30.10.13 17:01 Сейчас в теме
(15) vervolf9, ну это уже готовый отчет) его надо изменить добавив разбивку на месяца. Если б делать его с нуля то делал бы СКД
+
17. isn 15 30.10.13 18:09 Сейчас в теме
(16)Чем предложенный выше вариант не устраивает?
+
18. vervolf9 30.10.13 22:56 Сейчас в теме
Готовый слабо сказано ))) Для разбивки по месяцам нужно менять логику построения всего отчета, тоесть нам наперед нужно знать месяца, вот реально проще сделать новый на скд чем менять этот, и с группировками еще возиться, переписывать..
+
19. gp42 31.10.13 04:31 Сейчас в теме
В любом случае отчет переделывать. Макет рисовать. На проще перенести в СКДО и не придется с макетом заморачиваться.
+
20. gp42 31.10.13 04:32 Сейчас в теме
Вот же блин привязалась ко мне эта СКДО, СКДО = СКД
+
22. 89132605794 31.10.13 05:48 Сейчас в теме
скд клипай, быстрее будет и проще коррективы вносить
+
23. piffoff 82 31.10.13 09:05 Сейчас в теме
Беда. Блин. Попробую и так и так
+
26. MarchTomCat 31.10.13 10:56 Сейчас в теме
У Насыпова на http://www.spec8.ru/ в свое время были видеокурсы по основам СКД, в общем случае видео на ~300 мегабайт. Рассказывают довольно доходчиво. Рекомендую поискать и просмотреть.
На самом деле в СКД ничего сложного нет, нужно просто понять идеалогию, да изучить некоторые тонкости.
+
27. isn 15 31.10.13 11:15 Сейчас в теме
28. MarchTomCat 31.10.13 15:01 Сейчас в теме
(27) isn, Да, конечно. Извиняюсь, по памяти писал. :(
+
29. victor_k 95 06.12.18 09:48 Сейчас в теме
Я заполнил так:

КоличетвоСтрокНаСтранице = 54;
	
	Обл = Макет.ПолучитьОбласть("Строка");
	
       ТекСтрока = 0;
	
	Для каждого Стр Из тзТовары Цикл
		
		ТекСтрока = ТекСтрока + 1;
		
		//вывести в первую колонку
		Если ТекСтрока <= КоличетвоСтрокНаСтранице Тогда
			
			Обл.Параметры.Номенклатура 	= Стр.Номенклатура;
			Таб.Вывести(Обл);
			
		//вывести во вторую колонку	
		Иначе
		
			Строка = ТекСтрока - КоличетвоСтрокНаСтранице + 3; //3 шапка
			
			_Обл = Таб.Область(Строка, 7, Строка, 7);
			_Обл.Текст = Стр.Номенклатура;

		КонецЕсли;
		
	КонецЦикла;
Показать
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот