gifts2017

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

Опубликовал anry mc (AnryMc) в раздел Программирование - Практика программирования

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

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

 

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

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

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

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

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

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

 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Марина Чирина (chmv) 20.04.15 11:40
А зачем она? есть стандарные
2. anry mc (AnryMc) 20.04.15 11:53
(1) chmv,

Стандартный механизм "не различает" например: "01.01.2015-31.01.2015" и "январь 2015" - пользователь может выбрать период так и этак...
А это что-то подобное "(финансового) представлению периода" - если пользователь выберет вариант "01.01.2015-31.01.2015" он будет заменён на "январь 2015"...
Ну и так далее...
ЗЫ Писалось в 2010 году - поэтому уж и не припомню, зачем... Но точно комуто было нужно... Да и 8 "плюсов" - набрала - значит кому то пригодилось...