Форма отчета. Часть 1 Период отчетов

Печать (Ctrl+P)

Библиотека стандартных подсистем 3.0

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

Рис 1. Подключение общей формы отчета в свойствах конфигурации

В этой первой части я хочу показать простой пример управления периодом в модуле данной формы.

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

Рис 2 . Реквизиты общей формы отчета

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

Рис 3. Сообщение при изменении третьего недоступного периода

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

Рис 4 Пример изменения формы отчета. Добавлен реквизит типа булево

Для отражения на форме результат действия установки или снятия галочки я создал процедуру ДекорацияПериод() в модуле формы:

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

Обратите внимание, что в данной процедуре обрабатывается реквизит формы Период1, потому, что в параметрах СКД данного отчета используется только один праметр типа стандартного периода

Данная процедура ДекорацияПериод() должна вызываться из тела разных стандартных процедур модуля отчета :

&НаКлиенте
 Процедура ПриОткрытии(Отказ)
  ДекорацияПериод();  //Санчес 

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

&НаКлиенте
 Процедура ПодключаемыйПериодПриИзменении(Элемент)
 ДекорацияПериод();  //Санчес
 ОтчетыКлиент.УстановитьПериод(ЭтотОбъект, Элемент.Имя);
 КонецПроцедуры

&НаКлиенте
 Процедура Сформировать()
     //Санчес
     Если  Отчет.УчитыватьПолныеНедели Тогда
    Элементы.ДекорацияПериод.Видимость = Истина;
    Период1.ДатаНачала = НачалоНедели(Период1.ДатаНачала);
    Период1.ДатаОкончания =КонецНедели (Период1.ДатаОкончания);
    ОтчетыКлиент.УстановитьПериод(ЭтотОбъект, "Период1");
    КонецЕсли;
       ДекорацияПериод();
  // .......... 
 КонецПроцедуры

Следует отметить, что стандартная процедура ОтчетыКлиент.ВыбратьПериод(ЭтотОбъект, Команда.Имя) не вызывает процедуру ПодключаемыйПериодПриИзменении(Элемент) при окончании выбора периода и мне пришлось изменить тело процедуры Подключаемый_ВыбратьПериод(Команда) таким образои:

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

См. также

0

Автор публикации

не в сети 8 часов

master1c8

1
Комментарии: 16Публикации: 449Регистрация: 25-12-2016

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.