Кросс отчет

1. Сергей Котович (user631997_seirosso1) 15.03.17 23:38 Сейчас в теме
Добрый День! Подскажите делаю внешний отчет, немного запутался не могу сообразить как сделать обход Контрагентов в документах!

Для Каждого СтрТов ИЗ Выборка.Товары Цикл
		ОбластьШапка = Макет.ПолучитьОбласть("Шапка|Колонка");
		ОбластьШапка.Параметры.Номенклатура = СтрТов.Номенклатура;
		ТабДок.Присоединить(ОбластьШапка);
		
	КонецЦикла;
		
КонецЦикла;
	  
	Пока Выборка.Следующий() Цикл---------вот в этом цикле не могу обойти контрагентов для вывода в отчет!
		  
	   ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Начало");
	   ОбластьСтрока.Параметры.Контрагент = Выборка.Контрагент;
	   ТабДок.Вывести(ОбластьСтрока);
	   
   КонецЦикла;
...Показать Скрыть
Вознаграждение за ответ
Показать полностью
Ответы
2. Сергей Котович (user631997_seirosso1) 17.03.17 17:02 Сейчас в теме
Я так понимаю никто не умеет делать кросс отчет
3. Сергей Котович (user631997_seirosso1) 17.03.17 17:09 Сейчас в теме
А вообще кто нибудь может помочь мне в написании кросс отчета, он небольшой за старт мани?
4. Сергей Котович (user631997_seirosso1) 17.03.17 17:10 Сейчас в теме
Кто нибудь вообще умеет писать отчеты без СКД или только на СКД?
5. Sergey Andreev (starik-2005) 854 17.03.17 17:12 Сейчас в теме
Тихо сам с собою (с)
Сделай на СКД и не мучайся. Номенклатуру в колонки, контрагентов в строки, результаты в ресурс.
6. Сергей Котович (user631997_seirosso1) 18.03.17 23:56 Сейчас в теме
Добрый день! Кто нибудь знает каким путем можно вывести Параметр Количество, т е Контрагент Номенклатура, Номенклатура
Контрагент Количество Количество
Контрагент Количество Количество
Номенклатуру и Контрагента вывел, а вот количество правильно не могу вывести, то пишу ТабДок присоединить и он мне присоед сбоку как и номенклатуру, то если написать ТабДок вывести, то тогда мне количество выводится под Контрагентом.?
7. Артём Шарипов (borodatii) 1 19.03.17 01:31 Сейчас в теме
(6) эм, так и не понятно, что именно надо. Сбоку не нужно, снизу не нужно. А где нужно?
Если нужно вида
К | Н | Кол
к1 | Н1 | 10
к2 | Н2 | 15

То выводишь по строчкам: сначала шапку, потом строчка за строчкой
выводишь контрагента, присоединяешь номенклатуру, присоедишяешь количество
повторить пока не надоест.
Т.е. смысл в том, что если не извращаться с позиционирование по ячейкам, то выводить надо построчно, каждый раз обходя все колонки.
8. Сергей Котович (user631997_seirosso1) 19.03.17 14:36 Сейчас в теме
Спасибо что ответили, мне нужно вывести таким образом: Контрагент Товар1,Товар2,Товар3 итд.
Контрагент Кол-во, Кол-во, Кол-во
Контрагент Кол-во, Кол-во, Кол-во
Контрагент Кол-во, Кол-во, Кол-во

а у меня почему то получается при обходе параметра Кол во при ТабДок.Присоединить, вот так

Контрагент Товар1,Товар2,Товар3
Контрагент
Контрагент
Контрагент Кол-во, Кол-во, Кол-во----почему то Кол-во выводится
только в последнюю строку, а если написать ТабДок.Вывести, то тогда получается, вот так

Контрагент Товар1,Товар2,Товар3
Контрагент
Контрагент
Контрагент
Кол-во
Кол-во
Кол-во
Посмотрите пожалуйста во вложении мой отчет. чтобы вам было более понятно
Прикрепленные файлы:
ДинамическийОтчет.erf
9. Артём Шарипов (borodatii) 1 19.03.17 18:56 Сейчас в теме
(8) Ну так наверное стоит сесть и подумать, что в каком порядке нужно выводить. И как тогда должны быть устроены циклы. Какой цикл куда вложен. Сейчас там, мягко говоря, бардак. Как с логикой, так и с производительностью.
1. Сначала выводится в одну строку (т.к. "присоединить") список всех товаров из всех реализаций за период. Т.е. номенклатура в строке явно будет повторяться.
2. Затем все контрагенты из этих же реализаций выводятся, каждый в новую строку, так как "Вывести".
3. Затем опять берутся все реализации, и "Количество" из товаров выводится в новую строку, так как "Вывести".
Определись с тем, что тебе нужно, получи все данные запросом, потом выводи.
Либо СКД, там тупо мышкой всё натыкать можно. В чём причина отказа от СКД? Если это тестовое задание на работу, то, боюсь, на работу ещё рано.
10. Сергей Котович (user631997_seirosso1) 19.03.17 19:13 Сейчас в теме
Я хочу сперва вывести Шапку(Контрагент и Номенклатура), потом вывожу Всех контрагентов(строка)--это у меня все выводится,а Кол-во. никак не получается, подскажите как можно вывести кол -во?
11. Сергей Котович (user631997_seirosso1) 19.03.17 19:38 Сейчас в теме
У меня почему то Кол-во, Выводится под Контрагентами. хотя должна выводится напротив, вы можете мне что нибудь посоветовать как это сделать? Без СКД очень вас прошу!
12. Сергей Котович (user631997_seirosso1) 19.03.17 19:43 Сейчас в теме
Я пишу

Для Каждого СтрКол ИЗ ВыборкаКол.Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Колонка");
ОбластьСтрока.Параметры.Количество = СтрКол.Количество;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
а он мне выводит почему то под Контрагентом как будто я написал вместо(Строка|Колонка),(Строка|Начало) что то не въеду?
13. Сергей Котович (user631997_seirosso1) 19.03.17 19:51 Сейчас в теме
Хотя я кажись понял в чем причина, сейчас попробую!!!!!!!!!!
14. Сергей Котович (user631997_seirosso1) 19.03.17 20:50 Сейчас в теме
Да все получилось вы были правы я совсем не то делал!!!
15. Сергей Котович (user631997_seirosso1) 19.03.17 23:15 Сейчас в теме
Не могу разобраться с циклами, немного оптимизировал, но результата нужного нет. Подскажите пожалуйста в коде по циклу, буду рад любому совету!

Выборка = Документы.РеализацияТоваровУслуг.Выбрать(ПериодНачало,ПериодКонец);
	
		
	Пока Выборка.Следующий() Цикл
		Если Выборка.Проведен = Ложь Тогда
			 Продолжить;
		 КонецЕсли;	 
	
			Для Каждого СтрТов ИЗ Выборка.Товары Цикл
		ОбластьШапка = Макет.ПолучитьОбласть("Шапка|Колонка");
		ОбластьШапка.Параметры.Номенклатура = СтрТов.Номенклатура;
		ТабДок.Присоединить(ОбластьШапка);
		
	      КонецЦикла;
	//КонецЦикла;
	   
	   ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Начало");
	   ОбластьСтрока.Параметры.Контрагент = Выборка.Контрагент;
	   ТабДок.Вывести(ОбластьСтрока);
	      		  
    	Для Каждого СтрКол ИЗ Выборка.Товары Цикл
    	ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Колонка");
    	ОбластьСтрока.Параметры.Количество = СтрКол.Количество;
    	ТабДок.Присоединить(ОбластьСтрока);
    	КонецЦикла;
КонецЦикла;
 	
	Возврат ТабДок;
...Показать Скрыть
16. Сергей Котович (user631997_seirosso1) 19.03.17 23:26 Сейчас в теме
Получается следующее : Контрагент Товар1
Контрагент Кол-во Товар2
Контрагент Кол-во Товар3
Контрагент Кол-во Товар4 разные варианты пробовал, т е менял циклы и соответственно все по разному меняется, но не так как надо! Подскажите пожалуйста по циклу, не пойму пока никак как правильно его сделать!
17. Павел Островский (32ops) 79 20.03.17 08:45 Сейчас в теме
1) ВЫВЕСТИ "Шапка|Начало"
2) В цикле по товарам ПРИСОЕДЕНИТЬ "Шапка|Колонка"
3) Цикл по выборке (здесь должен начаться цикл Пока Выборка.Следующий())
3.а) ВЫВЕСТИ "Строка|Начало"
3.б) В цикле по товарам ПРИСОЕДЕНИТЬ "Строка|Колонка"
18. Сергей Котович (user631997_seirosso1) 20.03.17 18:52 Сейчас в теме
Пожалуйста помогите мне вывести правильно отчет или пожалуйста просто расставьте правильно циклы, я уже всяко разно пробовал и подпишите по позможности комментарии возле кода что и для чего.Во вложении есть рисунок как должно получиться и часть кода, чтобы не писать с нуля, отчет должен быть без СКД. За вознаграждение 1$(стартмани)
Прикрепленные файлы:
ДинамическийОтчет.erf
19. Сергей Котович (user631997_seirosso1) 20.03.17 23:34 Сейчас в теме
Если не понятно пишите , с удовольствием отвечу на все вопросы!
20. Sergey Andreev (starik-2005) 854 21.03.17 10:11 Сейчас в теме
(19)
Если не понятно пишите
Да всем пофиг, собсно. Задача решается элементарно на СКД. Если нужно решить не на СКД, то это говорит о том, что задача практической пользы не несет и нужна для проверки квалификации.

Отсюда как бы идет отсыл к школьной программе:
Цикл 1 для строк
Цикл 2 для колонок
Исходные данные при таком подходе должны быть в виде таблиц со строками для каждого контрагента, номенклатуры, месяца и ресурса. Номенклатуры в таблице должны быть или все, или придется проверять и выводить отдельно пустые колонки для каждой пропущенной позиции.

В итоге для полностью заполненной таблицы нужно вывести первую строку - шапку - для каждого уникального элемента номенклатуры. Таблица должна быть отсортирована по "Контрагент, Номенклатура".
Дальше для каждой строки выводим контрагента (для итератора, равного "1"), после чего прикрепляем к нему элемент для каждой номенклатуры с ресурсом (просто следующая строка таблицы). Ну и счетчик на количество номенклатуры, по окончании которого рвем внутренний цикл брейком..
21. Сергей Котович (user631997_seirosso1) 21.03.17 14:39 Сейчас в теме
(20)Спасибо что ответили, надеюсь у меня с вашей помощью все получится!
22. Евгений Лукьянчиков (Jen1978) 2 21.03.17 17:13 Сейчас в теме
в каком порядке вложенность хотите в таком и циклы вкладывайте внутрь циклов
23. Евгений Лукьянчиков (Jen1978) 2 21.03.17 17:15 Сейчас в теме
(12) чтобы сбоку выводило надо использовать команду "присоединить" а у вас в коде "вывести" поэтому строчка появляется под контрагентом
24. A X (ditp) 45 22.03.17 10:26 Сейчас в теме
(1) см. вложение
Прикрепленные файлы:
ВнешнийОтчет1.erf
25. Сергей Котович (user631997_seirosso1) 26.03.17 17:00 Сейчас в теме
(20)До меня трудно немного доходит правильно ли я понял сперва я вывожу шапку, т е контрагент к нему присоединяю шапку номенклатуру и все это я делаю во вложенном цикле. Потом опять пишу

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

После этого вывожу контрагентов и к ним прикрепляю количество?
26. Сергей Котович (user631997_seirosso1) 26.03.17 19:52 Сейчас в теме
Скажем так у меня получается вывести шапку контрагент и номенклатуру, а вот строка контрагент не понятно там надо как то цикл сделать не пойму как для того чтобы потом вывести количество!
27. Сергей Котович (user631997_seirosso1) 26.03.17 19:59 Сейчас в теме
Пока Выборка.Следующий() Цикл
        Если Выборка.Проведен = Ложь Тогда
             Продолжить;
         КонецЕсли;     
    
            Для Каждого СтрТов ИЗ Выборка.Товары Цикл
        ОбластьШапка = Макет.ПолучитьОбласть("Шапка|Колонка");
        ОбластьШапка.Параметры.Номенклатура = СтрТов.Номенклатура;
        ТабДок.Присоединить(ОбластьШапка);
        
          КонецЦикла;
    //КонецЦикла;
       
       ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Начало");----------не могу понять как в цикле вывести Контрагента?
       ОбластьСтрока.Параметры.Контрагент = Выборка.Контрагент;
       ТабДок.Вывести(ОбластьСтрока);
                    
        Для Каждого СтрКол ИЗ Выборка.Товары Цикл
        ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Колонка");
        ОбластьСтрока.Параметры.Количество = СтрКол.Количество;
        ТабДок.Присоединить(ОбластьСтрока);
        КонецЦикла;
...Показать Скрыть
28. Сергей Котович (user631997_seirosso1) 26.03.17 20:12 Сейчас в теме
Интересно что когда пишу вывести мне контрагента и присоединяю к контрагенту количество, количество выводится, но выводится друг под другом а не под товаром к которому соответствует, кто нибудь может мне написать проверку для вывода количества ну чтоб оно выводилось под нужным товаром а не просто друг под другом!
29. Сергей Котович (user631997_seirosso1) 26.03.17 20:22 Сейчас в теме
Если кто- то что- то может мне подсказать то во вложении можетке посмотреть!Пожалуйста в моем коде может кто-нибудь сделать исправление, хотя бы комментариями напротив, ну очень надо!
Прикрепленные файлы:
ДинамическийОтчет.erf
30. Павел Кручинин (igel9780) 135 27.03.17 08:57 Сейчас в теме
Писатели, блин. Вы давайте сначала почитаете что-нибудь. Литературу какую-нибудь. А потом писать начинайте.
Прикрепленные файлы:
ДинамическийОтчет.erf
31. Сергей Котович (user631997_seirosso1) 28.03.17 23:15 Сейчас в теме
Спасибо за совет Павел, сейчас буду разбираться как его делать! Я этот отчет делал через документ, потому что меня попросили не пользоваться запросом, хотят научить делать отчет без запроса, чтобы я имел предстпвление что и откуда берется! И с запросом у меня не примут задание. но вы в принципе много интересных действий мне показали, так что спасибо, буду дальше разбираться! А так если без запроса делать, то это надо все таки выборкой делать или Выборкой по регистру?
32. Павел Кручинин (igel9780) 135 29.03.17 10:15 Сейчас в теме
Правильнее делать выборкой по регистру. Это парадигма работы 1С. Документ при проведении раскладывается по плоским таблицам. И отчеты должны работать с плоскими таблицами, а не с документами.
Полученные данные в любом случае необходимо свернуть до измерений отчета. Можете создать таблицу значений, заполнить её из документов в объектной модели, ну и свернуть, так же как сворачиваются измерения строк и столбцов.

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