Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
26 сен 2021, 08:39

Как создать период отчёта за месяц, а не по дате?

Автор agranod, 12 дек 2016, 21:42

0 Пользователей и 1 гость просматривают эту тему.

agranod

Добрый вечер , помогите разобраться.
Есть готовый отчёт, который формируется по определённой дате. Но мне нужно чтобы он формировался за целый месяц.
Сам отчёт: внешний , имеется форма и макет. Запрос и модули формы написаны правильно.  Работа отчёта осуществляется только по определённой дате , а нужно чтобы формировался за весь месяц.


Геннадий ОбьГЭС

Внешний отчёт содержится в пользовательских данных базы, поэтому вкладывать конфигурацию - бесполезно, его там нет

agranod

Есть код модуля формы отчёта.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Дата = ТекущаяДата();
СформироватьОтчет();
КонецПроцедуры

&НаКлиенте
Процедура Сформировать(Команда)
СформироватьОтчет();
КонецПроцедуры

&НаСервере
Процедура СформироватьОтчет()

ТабДок.Очистить();
ТабДок.НачатьАвтогруппировкуСтрок();
Макет = Отчеты.ст_ДневнойЛистокУчета.ПолучитьМакет("ДневнойЛистокУчета");

//Получение данных для вывода в отчет
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.Текст = "ВЫБРАТЬ
                           | ст_ПриемНарядУслуги.Ссылка.Номер КАК НомерНаряда,
                           | ст_ПриемНарядУслуги.Ссылка.Врач КАК Врач,
                           | ст_ПриемНарядУслуги.Ссылка.Пациент КАК Пациент,
                           | ст_ПриемНарядУслуги.УслугаРабота КАК УслугаРабота,
                           | СУММА(ст_ПриемНарядУслуги.Сумма) КАК Сумма,
                           | ст_ПриемНарядУслуги.Ссылка КАК Регистратор
                           |ИЗ
                           | Документ.ст_ПриемНаряд.Услуги КАК ст_ПриемНарядУслуги
                           |ГДЕ
                           | ст_ПриемНарядУслуги.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&НаДату, ДЕНЬ) И КОНЕЦПЕРИОДА(&НаДату, ДЕНЬ)

                           | И ст_ПриемНарядУслуги.Ссылка.Проведен = ИСТИНА
                           |
                           |СГРУППИРОВАТЬ ПО
                           | ст_ПриемНарядУслуги.Ссылка,
                           | ст_ПриемНарядУслуги.Ссылка.Номер,
                           | ст_ПриемНарядУслуги.Ссылка.Врач,
                           | ст_ПриемНарядУслуги.Ссылка.Пациент,
                           | ст_ПриемНарядУслуги.УслугаРабота
                           |
                           |УПОРЯДОЧИТЬ ПО
                           | Врач,
                           | НомерНаряда
                           |ИТОГИ
                           | МИНИМУМ(НомерНаряда),
                           | СУММА(Сумма)
                           |ПО
                           | ОБЩИЕ,
                           | Врач,
                           | Регистратор,
                           | УслугаРабота
                           |АВТОУПОРЯДОЧИВАНИЕ";
ПостроительЗапроса.Параметры.Вставить("НаДату", Дата);
ПостроительЗапроса.ЗаполнитьНастройки();
ПостроительЗапроса.Выполнить();
Результат = ПостроительЗапроса.Результат;





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

ИтогиОбщие = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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


ВыборкаВрачи = ИтогиОбщие.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаВрачи.Следующий() Цикл

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

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

ОбластьПодвалТЧ = Макет.ПолучитьОбласть("ПодвалТЧ");
ЗаполнитьЗначенияСвойств(ОбластьПодвалТЧ.Параметры, ВыборкаВрачи);

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

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

КонецЦикла;

ТабДок.Вывести(ОбластьПодвалТЧ, ВыборкаВрачи.Уровень());

КонецЦикла;

ТабДок.Вывести(ОбластьПодвал);

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

ТабДок.ПоказатьУровеньГруппировокСтрок(1);

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

Добавлено: 13 дек 2016, 08:29


Цитата: Геннадий ОбьГЭС от 13 дек 2016, 07:26
Внешний отчёт содержится в пользовательских данных базы, поэтому вкладывать конфигурацию - бесполезно, его там нет


LexaK

а, тогда заведите две даты!
ДатаНачала и ДатаКонца, и заполняйте их с помощью стандартного периода, и немного переделайте условие отбора в отчете


//ст_ПриемНарядУслуги.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&НаДату, ДЕНЬ) И КОНЕЦПЕРИОДА(&НаДату, ДЕНЬ)
ст_ПриемНарядУслуги.Ссылка.Дата МЕЖДУ &ДатаНачала И КОНЕЦПЕРИОДА(&ДатаКонца, ДЕНЬ)



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

но вообще строить отчеты по данным документа считается не комильфо :fdbsdfbsd:
ответ Понравился? (в смысле пригодился?)

Kironten

Либо, как вариант бери одну дату. Её принимай за месяц отчета.
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(Дата));
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(Дата));

Теги: отчет 

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск