Форма отчета. Часть 1 Период отчетов
Библиотека стандартных подсистем 3.0
Я решил написать некоторые практические примеры управления общей формы “форма отчета” , которая используется в подсистеме “Варианты отчета” библиотеки Стандартных Подсистем 3.0 и подключена к всем отчетам в свойствах конфигурации ( см .рис 1)

В этой первой части я хочу показать простой пример управления периодом в модуле данной формы.
Для управления параметрами типа стандартного периода, заданными в схеме компоновки данных используются 2 реквизита формы Период1 и период2 ( см . рис 2)

Форма отчета не применима если используются в СКД больше двух параметров типа стандартного периода. При попытке изенения третьтего периода выдается соотщение: ” Получение элемента по индексу для значения не определено ” ( см рис 3)

Рассмотрим пример, когда требуется менять программным путем период в форме. Для этой цели , я вел реквизит формы “Учитывать полные недели” типа булево. Если галочка у этого реквизита установлена, то дата начала и дата окончания периода должны быть заменены датой начала недели и датой конца недели соответственно: (см рис 4 ):

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