Создадим примитивный отчет - Остатки на складе, в котором не нужно будет выбирать склад и период - они будут задаваться автоматически/будут предопределенными:
- Создаем внешний отчет;
- Создаем схему компоновки данных;
- Добавляем набор данных, текст запроса:
"
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад,
ТоварыНаСкладахОстатки.Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
ГДЕ
ТоварыНаСкладахОстатки.Склад = &Склад
"
- Добавим ресурс - "КоличествоОстаток", Выражение = "Сумма(КоличествоОстаток)"
- Добавляем параметры - Период, Склад
- Создаем форму отчета (автоматически - без изменений)
- В модуле формы отчета инициируем стандартную процедуру "ПриСозданииНаСервере";
- В процедуру добавляем следующий код:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьПривилегированныйРежим(Истина);
СтандартнаяОбработка = Ложь; // если не отключить стандартную обработку, то настройки затрутся
Дата = ТекущаяДата();
ЗначениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
Если НЕ ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
ЗначениеПараметра.Значение = Дата;
//Объект.Дата = Дата;
КонецЕсли;
ЗначениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Склад"));
Если НЕ ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
ЗначениеПараметра.Значение = Справочники.Склады.НайтиПоНаименованию("Москва");
//Объект.Склад = Справочники.Склады.НайтиПоНаименованию("Москва");
КонецЕсли;
КонецПроцедуры
Стоит отметить, что очень важно понимать объектное ориентирование - путь к данным на форме отчета, уже представляет не "Объект.+", а "Отчет.+"
Если требуется вывести на форму окна с настройками, то можно добавить соответствующие реквизиты в отчет.
После вывести их на форму, и добавить соответствующие обработчики, например:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьПривилегированныйРежим(Истина);
СтандартнаяОбработка = Ложь; // если не отключить стандартную обработку, то настройки затрутся
тДата = НачалоДня(ТекущаяДата());
ЗначениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Дата1"));
Если НЕ ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
ЗначениеПараметра.Значение = тДата;
КонецЕсли;
Отчет.ДатаС = тДата;
тДата = КонецДня(ТекущаяДата());
ЗначениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Дата2"));
Если НЕ ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
ЗначениеПараметра.Значение = тДата;
КонецЕсли;
Отчет.ДатаПо = тДата;
тСклад = Справочники.Склады.НайтиПоНаименованию("Москва");
ЗначениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Склад"));
Если НЕ ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
ЗначениеПараметра.Значение = тСклад;
КонецЕсли;
тНоменклатура = Справочники.Номенклатура.НайтиПоКоду("00000000012");
ЗначениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Номенклатура"));
Если НЕ ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
ЗначениеПараметра.Значение = тНоменклатура;
КонецЕсли;
Отчет.Номенклатура = тНоменклатура;
КонецПроцедуры
&НаСервере
Процедура ДатаСПриИзмененииНаСервере()
тДата = Отчет.ДатаС;
ЗначениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Дата1"));
Если НЕ ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
ЗначениеПараметра.Значение = тДата;
КонецЕсли;
ФлагПерезаполнитьДатуПо=0;
Если Отчет.ДатаПо = Дата(1,1,1) Тогда
ФлагПерезаполнитьДатуПо = ФлагПерезаполнитьДатуПо + 1;
КонецЕсли;
Если Отчет.ДатаПо <= Отчет.ДатаС Тогда
ФлагПерезаполнитьДатуПо = ФлагПерезаполнитьДатуПо + 1;
КонецЕсли;
Если ФлагПерезаполнитьДатуПо>0 Тогда
Если Не Отчет.ДатаС = Дата(1,1,1) Тогда
Отчет.ДатаПо = КонецДня(Отчет.ДатаС);
ДатаПоПриИзмененииНаСервере();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаСПриИзменении(Элемент)
ДатаСПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ДатаПоПриИзмененииНаСервере()
тДата = Отчет.ДатаПо;
ЗначениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Дата2"));
Если НЕ ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
ЗначениеПараметра.Значение = тДата;
КонецЕсли;
ФлагПерезаполнитьДатуС=0;
Если Отчет.ДатаС = Дата(1,1,1) Тогда
ФлагПерезаполнитьДатуС = ФлагПерезаполнитьДатуС + 1;
КонецЕсли;
Если Отчет.ДатаС >= Отчет.ДатаПо Тогда
ФлагПерезаполнитьДатуС = ФлагПерезаполнитьДатуС + 1;
КонецЕсли;
Если ФлагПерезаполнитьДатуС>0 Тогда
Если Не Отчет.ДатаПо = Дата(1,1,1) Тогда
Отчет.ДатаС = НачалоДня(Отчет.ДатаПо);
ДатаСПриИзмененииНаСервере();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаПоПриИзменении(Элемент)
ДатаПоПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура НоменклатураПриИзмененииНаСервере()
ЗначениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Номенклатура"));
Если НЕ ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
ЗначениеПараметра.Значение = Отчет.Номенклатура;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НоменклатураПриИзменении(Элемент)
НоменклатураПриИзмененииНаСервере();
КонецПроцедуры