Процедура выбора периода с установкой стандартных интервалов

Иногда стоит задача выбора стандартного интервала (год, квартал, год…)…

Процедура выбора интервала дат. Которая анализирует уже заполненые реквизиты ДатаНач и ДатаКон и если они соответствуют стандартному интервалу (год, месяц, квартал, с начала года, с начала квартала,…) устанавливают их при вызове диалога «Настройка периода»

 

Процедура УстановитьПериодОбработки()

ДеньВСекундах=24*60*60;
//Дата начала по умолчению, если не указана
ДатаН_Умолчание=НачалоДня(ТекущаяДата())-ДеньВСекундах;
//Дата окончания по умолчанию, если не указана
ДатаК_Умолчание=НачалоДня(ТекущаяДата());

НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.УстановитьПериод(?(ДатаНач=ПустаяДата, ДатаН_Умолчание, ДатаНач), ?(ДатаКон=ПустаяДата, ДатаК_Умолчание, ДатаКон));
НастройкаПериода.РедактироватьКакИнтервал=Истина;
НастройкаПериода.РедактироватьКакПериод=Истина;
НастройкаПериода.ВариантНастройки=ВариантНастройкиПериода.Период;

Если ДатаНач=ДатаКон Тогда
НастройкаПериода.ВариантПериода=ВариантПериода.День;
НастройкаПериода.ЗначениеПериода=ДатаНач;
ИначеЕсли
КонецМесяца(ДатаНач)=КонецДня(ДатаКон) И ДатаНач=НачалоМесяца(ДатаКон) Тогда
НастройкаПериода.ВариантПериода=ВариантПериода.Месяц;
НастройкаПериода.ЗначениеПериода=ДатаНач;
ИначеЕсли
КонецГода(ДатаНач)=КонецДня(ДатаКон) И ДатаНач=НачалоГода(ДатаКон) Тогда
НастройкаПериода.ВариантПериода=ВариантПериода.Год;
НастройкаПериода.ЗначениеПериода=ДатаНач;
ИначеЕсли
КонецКвартала(ДатаНач)=КонецДня(ДатаКон) И ДатаНач=НачалоКвартала(ДатаКон) Тогда
НастройкаПериода.ВариантПериода=ВариантПериода.Квартал;
НастройкаПериода.ЗначениеПериода=ДатаНач;
ИначеЕсли
ДатаНач=НачалоГода(ДатаНач) И КонецДня(ДатаКон)=КонецКвартала(ДатаКон) И Год(ДатаНач)=Год(ДатаКон) Тогда
НастройкаПериода.ВариантПериода=ВариантПериода.КварталСНачалаГода;
НастройкаПериода.ЗначениеПериода=ДатаКон;
ИначеЕсли
ДатаНач=НачалоКвартала(ДатаКон) И КонецДня(ДатаКон)=КонецМесяца(ДатаКон) Тогда
НастройкаПериода.ВариантПериода=ВариантПериода.МесяцСНачалаКвартала;
НастройкаПериода.ЗначениеПериода=ДатаКон;
ИначеЕсли
ДатаНач=НачалоГода(ДатаКон) И КонецДня(ДатаКон)=КонецМесяца(ДатаКон) Тогда
НастройкаПериода.ВариантПериода=ВариантПериода.МесяцСНачалаГода;
НастройкаПериода.ЗначениеПериода=ДатаКон;
ИначеЕсли
ДатаНач=НачалоМесяца(ДатаКон) И Месяц(ДатаНач)=Месяц(ДатаКон) И Год(ДатаНач)=Год(ДатаКон) Тогда
НастройкаПериода.ВариантПериода=ВариантПериода.ДеньСНачалаМесяца;
НастройкаПериода.ЗначениеПериода=ДатаКон;
ИначеЕсли
ДатаНач=НачалоКвартала(ДатаНач) И КонецКвартала(ДатаНач)=КонецКвартала(ДатаКон) Тогда
НастройкаПериода.ВариантПериода=ВариантПериода.ДеньСНачалаКвартала;
НастройкаПериода.ЗначениеПериода=ДатаКон;
ИначеЕсли
ДатаНач=НачалоГода(ДатаКон) И Год(ДатаНач)=Год(ДатаКон) Тогда
НастройкаПериода.ВариантПериода=ВариантПериода.ДеньСНачалаГода;
НастройкаПериода.ЗначениеПериода=ДатаКон;
Иначе
НастройкаПериода.ВариантПериода=ВариантПериода.ПроизвольныйИнтервал;
КонецЕсли;

Если НастройкаПериода.Редактировать() Тогда
ДатаНач=НастройкаПериода.ПолучитьДатуНачала();
ДатаКон=НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;

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

 

2 Comments

  1. chmv

    А зачем она? есть стандарные

    Reply
  2. AnryMc

    (1) chmv,

    Стандартный механизм «не различает» например: «01.01.2015-31.01.2015» и «январь 2015» — пользователь может выбрать период так и этак…

    А это что-то подобное «(финансового) представлению периода» — если пользователь выберет вариант «01.01.2015-31.01.2015» он будет заменён на «январь 2015″…

    Ну и так далее…

    ЗЫ Писалось в 2010 году — поэтому уж и не припомню, зачем… Но точно комуто было нужно… Да и 8 «плюсов» — набрала — значит кому то пригодилось…

    Reply

Leave a Comment

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