Добрый день!
У меня вопрос новичка :oops:
Моя задача - максимально просто построить отчет по документам реализации с группировкой по контрагентам (с возможностью сворачивания и разворачивания данных по группировкам), с выводом итогов по суммам реализации для каждого контрагента.
Вот текст процедуры формирования отчета:
Процедура КнопкаСформироватьНажатие(Кнопка)
Запрос=Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка,
| РеализацияТоваровУслуг.Номер КАК Номер,
| РеализацияТоваровУслуг.Дата КАК Дата,
| РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента,
| РеализацияТоваровУслуг.Контрагент КАК Контрагент
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|ИТОГИ
| СУММА(СуммаДокумента)
|ПО
| ОБЩИЕ,
| Контрагент";
Запрос.УстановитьПараметр("ДатаНачала", ЭлементыФормы.ДатаНачала.Значение);
Запрос.УстановитьПараметр("ДатаОкончания", ЭлементыФормы.ДатаОкончания.Значение);
Вопрос: как в строках, в которые выводятся итоги выводить самого контрагента, по которому эти итоги формируются?
Или посоветуйте, как по-другому построить этот отчет обязательно со сворачиванием-разворачиванием группировок.
Заранее спасибо)
Вообще говоря, получать данные из документов, противоречит методологии 1с, необходимо получать данные из регистров, но это лирика.
Убери из Итогов ОБЩИЕ (здесь в этом нет необходимости), оставь только контрагентов, и для удобства добавь область "контрагент" в макет
ОбластьКонтрагент=Макет.ПолучитьОбласть("Контрагент");
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
// выводится группировка контрагента с итогами
ОбластьКонтрагент.Параметры.Контрагент=Выборка.Контрагент;
ТабДок.Вывести(ОбластьКонтрагент,ВыборкаОбщийИтог.Уровень());
ВыборкаДок=Выборка.Выбрать();
Пока ВыборкаДок.Следующий Цикл
// Выводишь свои документы, как у тебя и сделано
КонецЦикла;
КонецЦикла;
Показать
где-то так , если сильно надо, могу тебе скинуть простенький пример отчета
Спасибо большое за ответ!
Да, я вчера изменила макет:
И что-то в таком духе переписала в коде:
//Вывод Реализации
Пока РезультатРеализация.Следующий() Цикл
Область=Макет.ПолучитьОбласть("ОбщийИтог");
Область.Параметры.Заполнить(РезультатРеализация);
ТабДок.Вывести(Область, РезультатРеализация.Уровень());
Результат1 = РезультатРеализация.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент");
Пока Результат1.Следующий() Цикл
Область=Макет.ПолучитьОбласть("КонтрагентИтог");
//выводим итоги по контрагенту
Область.Параметры.Заполнить(Результат1);
ТабДок.Вывести(Область, Результат1.Уровень());
Результат2 = Результат1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "");
Пока Результат2.Следующий() Цикл
Область=Макет.ПолучитьОбласть("ДетальнаяЗапись");
//выводим строки
Область.Параметры.ДокументСсылка=Результат2.Ссылка;
Область.Параметры.НомерДокумента=Результат2.Номер;
Область.Параметры.ДатаДокумента=Результат2.Дата;
Область.Параметры.СуммаДокумента=Результат2.СуммаДокумента;
Область.Параметры.Заполнить(Результат2);
ТабДок.Вывести(Область, Результат2.Уровень());
КонецЦикла;
КонецЦикла;
КонецЦикла;
Показать
Так мне посоветовали на др. форуме, да и аналогичный пример откопала в Габец, Гончаров "Простые примеры разработки".
Все заработало.
Но теперь я хочу вывести в отдельную колонку результаты запроса по платежным документам и не знаю, как явно результат запроса вывести в конкретную ячейку с параметром. Т.е. на данный момент он выводился так:
Область.Параметры.Заполнить(Результат1);
И я не знаю, как обратиться к результату запроса. Т.е. чтобы конструкция была примерно такой:
Что-то я тебя не совсем понял чего ты хочешь, чтоб у тебя был итог по группировке, надо добавить это поле в ИТОГИ,
Наприме если ты используешь группировки "Контрагент", "Дата", то
при обходе запроса получаешь
Контрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Контрагент.Следующий() Цикл
// Получаешь итог по конкретному контрагенту
// теперь
Дата = Контрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Дата.Следующий() Цикл
// получаешь итог по каждой дате у этого контрагента
// теперь /пусто потому как не нужны и нет больше группировок
Док = Дата.Выбрать(); /
Пока Док.Следующий() Цикл
// получаешь доки по дате у этого контрагента
КонецЦикла;
КонецЦикла;
КонецЦикла;
а строка Область.Параметры.Заполнить(Результат2);
просто заполняет параметры строки макета, имена которых совпадают с именами полей в запросе, то же самое что, например,
Я сейчас пытаюсь добавить в этот же отчет результаты выборки по платежным документам. на данный момент мне поставили учебную задачу вывести это по одному всего лишь контрагенту.
Я добавляю колонку, в которой хочу видеть результаты выборки по платежкам и получаю вот что:
Т.е. там, где я явно указала:
мне кажется , что тебе будет проще всё-таки сделать запрос не по документам, а по регистру, тогда у тебя будет разделение суммы на ПРИХОД и РАСХОД (Реализация - Расход, Платежка -Приход) это будет правильнее и нагляднее, а с запросом по докам, тебя новерное завалят при сдаче.
Поназывала свои параметры в макете лишь бы как, и еще чего-то от них хочу)))
Just пишет:
мне кажется , что тебе будет проще всё-таки сделать запрос не по документам, а по регистру, тогда у тебя будет разделение суммы на ПРИХОД и РАСХОД (Реализация - Расход, Платежка -Приход) это будет правильнее и нагляднее, а с запросом по докам, тебя новерное завалят при сдаче.
Я изначально, в принципе, так и хотела - строить запрос по регистрам, но ПОКА мне поставили задачу сделать по документам. Это не я сама придумала такое задание)
чтоб тебе разделить итоги по документам, тебе надо их или разделить прямо в запросе по "Виду документа", ну и соответственно создать группировку "ВидДокумента", или при выводе их разделять и считать сумму
типа
Если Реализация Тогда
СуммаРеал=Реализация.Сумма;
ИначеЕсли Платежка Тогда
СуммаПл=Платежка.Сумма;
но это геморно
Честно говоря, у меня сейчас просто 3 запроса :D : по документам "Реализация товаров и услуг", "Платежн. поручения входящ." и "Приходные кас. ордера" :oops: :oops: :oops:
И я вот сейчас в ужасе, что надо будет еще из всей этой каши сделать отчет уже не по одному контрагенту, которого на формочке в поле ввода выбирала, а по всем :cry:
ты уточни, может все-таки надо запрос делать по регистру и выдергивать только эти документы из него, иначе это что-то как-то сложновато для новичков, на 77 это было бы нормально , но на 8-ке надо одним запросом все получать, проще, быстрее и удобнее при выводе
Тебе нужно что-то вроде такого, попробуй, и сделай обход как я тебе написал по группировкам, сначало у тебя будет контрагнет (хоть 100), потом вид документа и его сумма и документы и их сумма
ВЫБРАТЬ
РеализацияТоваровУслуг.Контрагент КАК Контрагент,
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента,
" Реализация " КАК ВидДока
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПлатежноеПоручениеВходящее.Контрагент,
ПлатежноеПоручениеВходящее.Ссылка,
ПлатежноеПоручениеВходящее.СуммаДокумента,
"Платежка"
ИЗ
Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПриходныйКассовыйОрдер.Контрагент,
ПриходныйКассовыйОрдер.Ссылка,
ПриходныйКассовыйОрдер.СуммаДокумента,
"Приходник"
ИЗ
Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
ИТОГИ
СУММА(СуммаДокумента)
ПО
Контрагент,
ВидДока
Вывожу как раз пока что именно сначала одни доки, потом другие.
А по какому регистру можно построить такой отчет по проплатам покупок? "Взаиморасчеты с контрагнтами"?
Спасибо большое, я попробую этот вариант, но только уже после обеда, т.к. сейчас пока есть другое задание. Конечно же это НАМНОГО более рациональный вариаант.
Эх... Сложно очень мне набрасываться так сходу и сразу на 1С, я вот только-только сдала на "1С Профессионал", УТ. Теперь закапываюсь в книжки)
Уххх... Опробываю Ваш вариант с "Объединить ВСЕ"...
Как мне все-таки указать в выборке ВидДокумента? Ведь соответствующего реквизита нет, чтоб на него сослаться :(
Поставила двойные кавычки (я б даже назвала их четверными :D ) на "Реализация", "Платежка", "Приходник" в запросе, заработало :)
Только вот теперь вывести бы суммы по платежкам в отдельную колонку. Подумаю над этим уже завтра.
Сделай проще, а макете табличного документа, создаешь две колонки,
в одной колонке будет "СуммаРеализ" , в другой "СуммаПлатежки",
при выводе в отчет пишешь что-то типа
Если ВидДока="Реализация" Тогда
ОбластьМакета.Параметры.СуммаРеализ=Выборка.Сумма;
ОбластьМакета.Параметры.СуммаПлатежки=0;
ИначеЕсли ВидДока="Реализация" Тогда
ОбластьМакета.Параметры.СуммаРеализ=0; ОбластьМакета.Параметры.СуммаПлатежки=Выборка.Сумма;
Иначе...............................