Диалог ввода периода, УФ

Опубликовал Яков Коган (Yashazz) в раздел Программирование - Инструментарий

Почти привычное окно указания периода, давно всем знакомая форма объекта НастройкаПериода. Но теперь - для управляемых форм. Обработка и 2 способа её вызова. Сэкономит время программисту, которого клиент попросил "сделать, как было раньше".

С удивлением обнаружил, что а) объект НастройкаПериода в тонком клиенте не существует, б) на ИС именно идейной копии старого привычного варианта нету, в) не всем клиентам нравится "Произвольный период", штатно заложенный в платформу. Ну вот не радуют их этим нынешние типовые конфы. Поэтому быстренько сляпал своё, для модального и немодального вызовов, ну и почему бы не выложить? Публикация представляет собой обработку, реализующую функционал окна выбора, и описания её вызова. Параметры вызова предусматривают исходное указание периода и регулировку видимости закладок "Интервал" и "Период". Для желающих встроен также "Стандартный период".

С некоторой степенью вероятности это баян, а я, возможно, просто не умею искать. Так что, можно пинать и необязательно плюсить.

Найденные коллегами примеры похожих решений: //infostart.ru/public/77517/ //infostart.ru/public/194190/ //infostart.ru/public/175213/

Примеры вызова (сами вызывающие процедуры, в которые обёрнута форма, и собственно их инициация). Естественно, при немодальном вызове не забывайте вставить код, указанный в "ОбработкаОповещения". Наверняка есть ещё несколько способов вызова, пользуйтесь, как кому удобнее, я предлагаю лишь два из многих вариантов. 

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
   
// ...другой код...
   
Если ИмяСобытия="OnPeriodSelect" Тогда
       
Предупреждение("Получен период "+ПредставлениеПериода(Параметр.НачалоПериода,Параметр.КонецПериода));
    КонецЕсли;
   
// ...другой код...
КонецПроцедуры

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

&НаКлиенте
Процедура ВвестиПериод(рПараметры="") Экспорт
    Попытка
        Если
ТипЗнч(рПараметры)Тип("Структура") Тогда
           
рПараметры=Новый Структура;
        КонецЕсли;
       
пар=Новый Структура;
       
пар.Вставить("НачалоПериода",?(рПараметры.Свойство("НачалоПериода"),рПараметры.НачалоПериода,Дата(1,1,1)));
       
пар.Вставить("КонецПериода",?(рПараметры.Свойство("КонецПериода"),рПараметры.КонецПериода,Дата(3999,12,31)));
       
пар.Вставить("ДоступенИнтервал",?(рПараметры.Свойство("ДоступенИнтервал"),рПараметры.ДоступенИнтервал,Истина));
       
пар.Вставить("ДоступенПериод",?(рПараметры.Свойство("ДоступенПериод"),рПараметры.ДоступенПериод,Истина));
       
пар.Вставить("ВызывающаяФорма",?(рПараметры.Свойство("ВызывающаяФорма"),рПараметры.ВызывающаяФорма,Неопределено));
       
пар.Вставить("ЭтоМодальныйРежим",Ложь);
       
ОткрытьФорму("Обработка.ВыборПроизвольногоПериода.Форма.ВыборПериода",пар);
    Исключение
       
Сообщить("ВвестиПериод, ошибка: "+ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура КомандаВызоваМодально(Команда)
   
// например, может применяться где-то посередине кода, где надо запросить период
   
рез=ВвестиПериодМодально();
   
Предупреждение("Получен период "+ПредставлениеПериода(рез.НачалоПериода,рез.КонецПериода));
КонецПроцедуры

&НаКлиенте
Процедура КомандаВызоваНемодально(Команда)
   
// например, может применяться из другой формы, когда на ней надо указать период
   
пар=Новый Структура("ВызывающаяФорма",ЭтаФорма.УникальныйИдентификатор);
   
ВвестиПериод(пар);
КонецПроцедуры

Скачать файлы

Наименование Файл Версия Размер
ВыборПериодаУФ
.epf 9,64Kb
12.11.13
9
.epf 9,64Kb 9 Скачать

См. также

Комментарии
1. Антон (anton.fly7) 134 13.11.13 15:56 Сейчас в теме
я вот такую делал, когда с 1с77 переходил ))

http://infostart.ru/public/77517/
2. Яков Коган (Yashazz) 1976 13.11.13 18:12 Сейчас в теме
(1) Дык, я нутром чуял, шо баяню. Ну не могло за столько лет не быть ни одной подобной разработки. Кстати, интерфейс симпатичнее, чем у моей, только бы ачипятки поправить, и вообще супер. ))
3. kiv82 (AltF1) 14.11.13 08:19 Сейчас в теме
Типовой механизм в упр. формах достойно выглядит
4. Юрий Осипов (yuraos) 850 14.11.13 11:54 Сейчас в теме
Плюсану ка собрату по разуму.
:)
а вот мой скромненький аналог:
EditPeriod
6. Юрий Осипов (yuraos) 850 14.11.13 12:01 Сейчас в теме
(5)
еще одну статейку видел -
но интерфейс диалога выбора совсем не стандартный
и только для обычного приложения.
7. Юрий Осипов (yuraos) 850 14.11.13 12:03 Сейчас в теме
(1)(4)(5)
так сто можешь для порядку навставлять в статью ссылок.
---
чтоб собратьям приятное сделать...
:)
8. Яков Коган (Yashazz) 1976 14.11.13 12:18 Сейчас в теме
(3) Это который? То же, что у меня на третьем скрине?
9. Яков Коган (Yashazz) 1976 17.11.13 00:49 Сейчас в теме
Ссылки вставил, правда, что-то при редактировании не задалось... Кстати, посмотрел их - именно идейной копии того, что есть штатно в обычных формах, таки нету, а есть разные вариации нестандартного вида.
10. Александр Медведев (anig99) 2489 17.11.13 17:03 Сейчас в теме
В процедуре ПриСозданииНаСервере есть ошибка

Если ЗначениеЗаполнено(Параметры.НачалоПериода) Тогда
		спНачало = "Указанная дата";
		ДатаНачала = текдата;
	Иначе
		спНачало = "Без ограничения";
	КонецЕсли;
...Показать Скрыть


Должно быть

Если ЗначениеЗаполнено(Параметры.НачалоПериода) Тогда
		спНачало = "Указанная дата";
		ДатаНачала = Параметры.НачалоПериода;
	Иначе
		спНачало = "Без ограничения";
	КонецЕсли;
...Показать Скрыть
11. DAnry (DAnry) 3 20.11.13 16:46 Сейчас в теме
Плюсанул, лишний раз доказывает, что конфигурации на управляемых формах требуют доводки и "прилизывания"
12. Яков Коган (Yashazz) 1976 20.11.13 17:26 Сейчас в теме
(10) Ага, спасибо, упустил.
(11) Да уж. "Стандартный период" са-а-авсем не панацея.
13. Яков Коган (Yashazz) 1976 07.01.14 21:44 Сейчас в теме
Кстати, я обратил внимание, что разукрашка "съедает" сивмолы "<>", так что если копируете, будьте внимательны. Если нет условия, то это оно самое. И, вообще, не худо бы сообщить об этом автору разукрашки.