Вопрос по построению отчета по документам реализации

1. Sunny:) 17.11.09 11:48 Сейчас в теме
Добрый день!
У меня вопрос новичка :oops:
Моя задача - максимально просто построить отчет по документам реализации с группировкой по контрагентам (с возможностью сворачивания и разворачивания данных по группировкам), с выводом итогов по суммам реализации для каждого контрагента.
Вот текст процедуры формирования отчета:
Процедура КнопкаСформироватьНажатие(Кнопка)
Запрос=Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка,
| РеализацияТоваровУслуг.Номер КАК Номер,
| РеализацияТоваровУслуг.Дата КАК Дата,
| РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента,
| РеализацияТоваровУслуг.Контрагент КАК Контрагент
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|ИТОГИ
| СУММА(СуммаДокумента)
|ПО
| ОБЩИЕ,
| Контрагент";
Запрос.УстановитьПараметр("ДатаНачала", ЭлементыФормы.ДатаНачала.Значение);
Запрос.УстановитьПараметр("ДатаОкончания", ЭлементыФормы.ДатаОкончания.Значение);

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

ТабДок.НачатьАвтогруппировкуСтрок();
// Заголовок

Область=Макет.ПолучитьОбласть("Заголовок");
Область.Параметры.Контрагент=ЭлементыФормы.Контрагент.Значение;
ТабДок.Вывести(Область);
// Шапка

Область=Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Область);
// Строка

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

ТабДок.ЗакончитьАвтогруппировкуСтрок();

ТабДок.ОтображатьСетку=Ложь;
ТабДок.Защита=Ложь;
ТабДок.ТолькоПросмотр=Ложь;
ТабДок.ОтображатьЗаголовки=Ложь;
ТабДок.Показать();

КонецПроцедуры

Вот так выглядит отчет:


Вопрос: как в строках, в которые выводятся итоги выводить самого контрагента, по которому эти итоги формируются?
Или посоветуйте, как по-другому построить этот отчет обязательно со сворачиванием-разворачиванием группировок.
Заранее спасибо)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. braynt 55 17.11.09 12:33 Сейчас в теме
3. Sunny:) 17.11.09 12:41 Сейчас в теме
Спасибо, но у меня стоит задача именно вручную построить отчет. Это учебная задача.
4. Just 3 18.11.09 10:10 Сейчас в теме
Вообще говоря, получать данные из документов, противоречит методологии 1с, необходимо получать данные из регистров, но это лирика.
Убери из Итогов ОБЩИЕ (здесь в этом нет необходимости), оставь только контрагентов, и для удобства добавь область "контрагент" в макет

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

   ВыборкаДок=Выборка.Выбрать();
   Пока ВыборкаДок.Следующий Цикл
// Выводишь свои документы, как у тебя и сделано
   КонецЦикла;
КонецЦикла;
Показать

где-то так , если сильно надо, могу тебе скинуть простенький пример отчета
5. Sunny:) 18.11.09 10:26 Сейчас в теме
Спасибо большое за ответ!
Да, я вчера изменила макет:


И что-то в таком духе переписала в коде:

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

	КонецЦикла;
Показать


Так мне посоветовали на др. форуме, да и аналогичный пример откопала в Габец, Гончаров "Простые примеры разработки".
Все заработало.

Но теперь я хочу вывести в отдельную колонку результаты запроса по платежным документам и не знаю, как явно результат запроса вывести в конкретную ячейку с параметром. Т.е. на данный момент он выводился так:
Область.Параметры.Заполнить(Результат1);


И я не знаю, как обратиться к результату запроса. Т.е. чтобы конструкция была примерно такой:
Область.Параметры.ДатаДокумента=Результат2.Дата;

но с результатом выборки по группировке.
6. Just 3 18.11.09 10:43 Сейчас в теме
Что-то я тебя не совсем понял чего ты хочешь, чтоб у тебя был итог по группировке, надо добавить это поле в ИТОГИ,

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

             // теперь  /пусто потому как не нужны и нет больше группировок
             Док = Дата.Выбрать(); /
              Пока Док.Следующий() Цикл 
                      // получаешь доки по дате у этого контрагента

                КонецЦикла;
        КонецЦикла;
КонецЦикла;
Показать
7. Just 3 18.11.09 10:45 Сейчас в теме
а строка Область.Параметры.Заполнить(Результат2);
просто заполняет параметры строки макета, имена которых совпадают с именами полей в запросе, то же самое что, например,
 Область.Параметры.Ссылка=Результат2.Ссылка; 
            Область.Параметры.Номер=Результат2.Номер; 
            Область.Параметры.Дата=Результат2.Дата; 
            Область.Параметры.СуммаДокумента=Результат2.СуммаДокумента
8. Just 3 18.11.09 10:49 Сейчас в теме
и попробуй использовать при написании запросов "Консоль запросов" вывод результатов в "дерево", Станет понятнее где и какие данные и как их обходить
9. Sunny:) 18.11.09 10:55 Сейчас в теме
Я сейчас пытаюсь добавить в этот же отчет результаты выборки по платежным документам. на данный момент мне поставили учебную задачу вывести это по одному всего лишь контрагенту.
Я добавляю колонку, в которой хочу видеть результаты выборки по платежкам и получаю вот что:

Т.е. там, где я явно указала:
Область.Параметры.СуммаДокументаОпл=Результат2.СуммаДокумента;

результаты выводятся. А вот как вывести итоговую сумму по платежкам, я недопонимаю.
10. Sunny:) 18.11.09 10:59 Сейчас в теме
Just пишет:

а строка
Область.Параметры.Заполнить(Результат2);
просто заполняет параметры строки макета, имена которых совпадают с именами полей в запросе

Вооот) Я не знаю имя поля в запросе, чтобы в соответствии с ним назвать параметр строки макета. :oops:
11. Sunny:) 18.11.09 11:06 Сейчас в теме
Мне кажется, я уже поняла :) Сейчас попробую.
12. Just 3 18.11.09 11:10 Сейчас в теме
мне кажется , что тебе будет проще всё-таки сделать запрос не по документам, а по регистру, тогда у тебя будет разделение суммы на ПРИХОД и РАСХОД (Реализация - Расход, Платежка -Приход) это будет правильнее и нагляднее, а с запросом по докам, тебя новерное завалят при сдаче.
13. Just 3 18.11.09 11:11 Сейчас в теме
а ты где делаешь, в типовой конфе или в самописной?
14. Just 3 18.11.09 11:14 Сейчас в теме
имя поля в запросе после слова "как"
Запрос.Текст = "ВЫБРАТЬ 
| РеализацияТоваровУслуг.Ссылка КАК Ссылка, 
| РеализацияТоваровУслуг.Номер КАК Номер, 
| РеализацияТоваровУслуг.Дата КАК Дата
15. Sunny:) 18.11.09 11:14 Сейчас в теме
Поназывала свои параметры в макете лишь бы как, и еще чего-то от них хочу)))

Just пишет:

мне кажется , что тебе будет проще всё-таки сделать запрос не по документам, а по регистру, тогда у тебя будет разделение суммы на ПРИХОД и РАСХОД (Реализация - Расход, Платежка -Приход) это будет правильнее и нагляднее, а с запросом по докам, тебя новерное завалят при сдаче.

Я изначально, в принципе, так и хотела - строить запрос по регистрам, но ПОКА мне поставили задачу сделать по документам. Это не я сама придумала такое задание)
16. Sunny:) 18.11.09 11:15 Сейчас в теме
Just пишет:

а ты где делаешь, в типовой конфе или в самописной?

в типовой
17. Just 3 18.11.09 11:17 Сейчас в теме
18. Sunny:) 18.11.09 11:17 Сейчас в теме
19. Just 3 18.11.09 11:22 Сейчас в теме
а что это УТП ? "Управление торговлей"? или УПП ? :D
20. Sunny:) 18.11.09 11:24 Сейчас в теме
Управление торговым предприятием для Украины. Разве нет такой типовой конфигурации? ;)
21. Just 3 18.11.09 11:25 Сейчас в теме
не знаю, у нас это называется просто "Управление торговлей", вроде :D
22. Sunny:) 18.11.09 11:27 Сейчас в теме
В УТ нет бухгалтерского, налогового и кадрового учета. В УТП все это есть. Т.е. УТП = УТ + Бухгалтерия
23. Just 3 18.11.09 11:29 Сейчас в теме
чтоб тебе разделить итоги по документам, тебе надо их или разделить прямо в запросе по "Виду документа", ну и соответственно создать группировку "ВидДокумента", или при выводе их разделять и считать сумму
типа
Если Реализация Тогда
СуммаРеал=Реализация.Сумма;
ИначеЕсли Платежка Тогда
СуммаПл=Платежка.Сумма;
но это геморно
24. Just 3 18.11.09 11:31 Сейчас в теме
прикольно, у нас нет такой, недавно сделали "Комплексная автоматизация" там УТ+БП+ЗУП, а прикольно было бы только УТ+БП
25. Sunny:) 18.11.09 11:32 Сейчас в теме
Честно говоря, у меня сейчас просто 3 запроса :D : по документам "Реализация товаров и услуг", "Платежн. поручения входящ." и "Приходные кас. ордера" :oops: :oops: :oops:
26. Sunny:) 18.11.09 11:33 Сейчас в теме
И я вот сейчас в ужасе, что надо будет еще из всей этой каши сделать отчет уже не по одному контрагенту, которого на формочке в поле ввода выбирала, а по всем :cry:
27. Just 3 18.11.09 11:37 Сейчас в теме
на самом деле это не сложно, просто по документам это геморно делать, как ты кстати написала запрос по двум докам? Через Объединить ВСЕ ?
28. Sunny:) 18.11.09 11:39 Сейчас в теме
Я уже написала: делала 3 запроса))). Пробовала через "Объединить", но какая-то каша получилась.
29. Just 3 18.11.09 11:39 Сейчас в теме
ты уточни, может все-таки надо запрос делать по регистру и выдергивать только эти документы из него, иначе это что-то как-то сложновато для новичков, на 77 это было бы нормально , но на 8-ке надо одним запросом все получать, проще, быстрее и удобнее при выводе
30. Just 3 18.11.09 11:41 Сейчас в теме
а выводишь тогда как? сначало одни доки потом другие или с выборкой по контрагенту типа НайтиСледующий() ?
31. Just 3 18.11.09 11:48 Сейчас в теме
Тебе нужно что-то вроде такого, попробуй, и сделай обход как я тебе написал по группировкам, сначало у тебя будет контрагнет (хоть 100), потом вид документа и его сумма и документы и их сумма
ВЫБРАТЬ
	РеализацияТоваровУслуг.Контрагент КАК Контрагент,
	РеализацияТоваровУслуг.Ссылка,
	РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента,
	" Реализация " КАК ВидДока
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ПлатежноеПоручениеВходящее.Контрагент,
	ПлатежноеПоручениеВходящее.Ссылка,
	ПлатежноеПоручениеВходящее.СуммаДокумента,
	"Платежка"
ИЗ
	Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ПриходныйКассовыйОрдер.Контрагент,
	ПриходныйКассовыйОрдер.Ссылка,
	ПриходныйКассовыйОрдер.СуммаДокумента,
	"Приходник"
ИЗ
	Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
ИТОГИ
	СУММА(СуммаДокумента)
ПО
	Контрагент,
	ВидДока
Показать
32. Sunny:) 18.11.09 11:52 Сейчас в теме
Вывожу как раз пока что именно сначала одни доки, потом другие.
А по какому регистру можно построить такой отчет по проплатам покупок? "Взаиморасчеты с контрагнтами"?
33. Just 3 18.11.09 11:57 Сейчас в теме
ну в УТ можно, надо только отфильтровать только эти доки, а то по этому регистру может быть очень много всего
34. Sunny:) 18.11.09 12:01 Сейчас в теме
Спасибо большое, я попробую этот вариант, но только уже после обеда, т.к. сейчас пока есть другое задание. Конечно же это НАМНОГО более рациональный вариаант.
Эх... Сложно очень мне набрасываться так сходу и сразу на 1С, я вот только-только сдала на "1С Профессионал", УТ. Теперь закапываюсь в книжки)
35. Just 3 18.11.09 12:04 Сейчас в теме
а у нас уже рабочий день заканчивается :)
36. Sunny:) 18.11.09 12:07 Сейчас в теме
Когда же он начался, если уже заканчивается? :D
37. Just 3 18.11.09 12:15 Сейчас в теме
в 9-00 обычно начинается и заканчивается в 18-00 8-)
38. Sunny:) 18.11.09 12:17 Сейчас в теме
Сейчас вроде как далеко не 18.00, даже если перевести стрелки на рос. время :)
39. Just 3 18.11.09 12:18 Сейчас в теме
Россия большая страна, как оказалось 11 часовых поясов
40. Sunny:) 18.11.09 12:20 Сейчас в теме
Ой, мама дорогая, я извиняюсь. У меня что-то сегодня с утра состояние повышенной тупости :D
41. Sunny:) 18.11.09 12:23 Сейчас в теме
Хабаровск или Владивосток выходит?
42. Sunny:) 18.11.09 12:25 Сейчас в теме
Хотя нет, если конец рабочего дня правильно прикинула, то еще есть Южно-Сахалинск, Уссурийск, Находка :o , Комсомольск-на-Амуре и Артем.
:D
43. Just 3 18.11.09 12:31 Сейчас в теме
да нет поближе Новосиб-Красноярск-Иркутск
44. Sunny:) 18.11.09 12:33 Сейчас в теме
Ясненько. Для меня это все просто названия городов :D . Как на уроке географии. Я и на Украине-то почти нигде не была. :)
45. Sunny:) 18.11.09 16:35 Сейчас в теме
Уххх... Опробываю Ваш вариант с "Объединить ВСЕ"...
Как мне все-таки указать в выборке ВидДокумента? Ведь соответствующего реквизита нет, чтоб на него сослаться :(
46. Sunny:) 18.11.09 16:39 Сейчас в теме
Just пишет:

да нет поближе Новосиб-Красноярск-Иркутск

Эт как? :D
47. Sunny:) 18.11.09 17:53 Сейчас в теме
Поставила двойные кавычки (я б даже назвала их четверными :D ) на "Реализация", "Платежка", "Приходник" в запросе, заработало :)
Только вот теперь вывести бы суммы по платежкам в отдельную колонку. Подумаю над этим уже завтра.
48. Sunny:) 20.11.09 10:09 Сейчас в теме
А в двух колонках вывести так и не смогла...
49. Just 3 20.11.09 11:55 Сейчас в теме
Сделай проще, а макете табличного документа, создаешь две колонки,
в одной колонке будет "СуммаРеализ" , в другой "СуммаПлатежки",
при выводе в отчет пишешь что-то типа
Если ВидДока="Реализация" Тогда 
 ОбластьМакета.Параметры.СуммаРеализ=Выборка.Сумма;
 ОбластьМакета.Параметры.СуммаПлатежки=0;
ИначеЕсли ВидДока="Реализация" Тогда 

ОбластьМакета.Параметры.СуммаРеализ=0; ОбластьМакета.Параметры.СуммаПлатежки=Выборка.Сумма;

Иначе...............................


Показать
50. Sunny:) 20.11.09 11:59 Сейчас в теме
Оставьте свое сообщение

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