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




Почти привычное окно указания периода, давно всем знакомая форма объекта НастройкаПериода. Но теперь — для управляемых форм. Обработка и 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)));
       
пар.Вставить(«ДоступенИнтервал»,?(рПараметры.Свойство(«ДоступенИнтервал»),рПараметры.ДоступенИнтервал,Истина));
       
пар.Вставить(«ДоступенПериод»,?(рПараметры.Свойство(«ДоступенПериод»),рПараметры.ДоступенПериод,Истина));
       
пар.Вставить(«ВызывающаяФорма»,?(рПараметры.Свойство(«ВызывающаяФорма»),рПараметры.ВызывающаяФорма,Неопределено));
       
пар.Вставить(«ЭтоМодальныйРежим»,Ложь);
       
ОткрытьФорму(«Обработка.ВыборПроизвольногоПериода.Форма.ВыборПериода»,пар);
    Исключение
       
Сообщить(«ВвестиПериод, ошибка: «+ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
    КонецПопытки;
КонецПроцедуры

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

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

13 Comments

  1. anton.fly7

    я вот такую делал, когда с 1с77 переходил ))

    http://infostart.ru/public/77517/

    Reply
  2. Yashazz

    (1) Дык, я нутром чуял, шо баяню. Ну не могло за столько лет не быть ни одной подобной разработки. Кстати, интерфейс симпатичнее, чем у моей, только бы ачипятки поправить, и вообще супер. ))

    Reply
  3. AltF1

    Типовой механизм в упр. формах достойно выглядит

    Reply
  4. yuraos

    Плюсану ка собрату по разуму.

    🙂

    а вот мой скромненький аналог:

    EditPeriod

    Reply
  5. yuraos

    (5)

    еще одну статейку видел —

    но интерфейс диалога выбора совсем не стандартный

    и только для обычного приложения.

    Reply
  6. yuraos

    (1)(4)(5)

    так сто можешь для порядку навставлять в статью ссылок.



    чтоб собратьям приятное сделать…

    🙂

    Reply
  7. Yashazz

    (3) Это который? То же, что у меня на третьем скрине?

    Reply
  8. Yashazz

    Ссылки вставил, правда, что-то при редактировании не задалось… Кстати, посмотрел их — именно идейной копии того, что есть штатно в обычных формах, таки нету, а есть разные вариации нестандартного вида.

    Reply
  9. anig99

    В процедуре ПриСозданииНаСервере есть ошибка

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

    Должно быть

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

    Плюсанул, лишний раз доказывает, что конфигурации на управляемых формах требуют доводки и «прилизывания»

    Reply
  11. Yashazz

    (10) Ага, спасибо, упустил.

    (11) Да уж. «Стандартный период» са-а-авсем не панацея.

    Reply
  12. Yashazz

    Кстати, я обратил внимание, что разукрашка «съедает» сивмолы «<>», так что если копируете, будьте внимательны. Если нет условия, то это оно самое. И, вообще, не худо бы сообщить об этом автору разукрашки.

    Reply

Leave a Comment

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