gifts2017

Обработка "EditPeriod": традиционный диалог настройки периода на Web-клиенте и тонком клиенте.

Опубликовал Юрий Осипов (yuraos) в раздел Обработки - Универсальные обработки

Обработка имитирует функционал системного объекта «НастройкаПериода».  
Обеспечивает работу альтернативного диалога настройки периода,
как в режиме обычного приложения, так и в Web-клиенте и в тонком клиенте.
Неудобно спать на потолке, одеяло спадает. А остальное - все удобно!!!
...мнение прапорщика РККА.

Das ist schweinen, buggy, gluhten, nicht verstehen, nicht einfaches programmen!!!
...мнение фюрера 3-го рейха.

Предыстория вопроса: 

Часто при работе в базах данных возникает необходимость ввода периода «чего-нибудь».
Традиционно в 1С для этой цели служил специальный системный диалог.
В случае платформы 1С 7.x этот диалог выводится функцией ВвестиПериод(),
а случае платформы 1С 8.x этот диалог открывается методом Редактировать() объекта “НастройкаПериода”.
Классификация же вариантов периодов, используемых в этом диалоге, заложена ещё в 1С:Бухгалтерия-6.0.

К сожалению в настоящее время на Web-клиенте и тонком клиенте объект “НастройкаПериода” не доступен.
И в этих режимах для ввода периода на безальтернативной основе предлагается
использовать диалог ввода стандартного периода системы компоновки данных.

Вопрос удобства, конечно, является понятием субъективным  (и чего греха таить - внушаемым).
Однако я полагаю, что многие считают традиционный диалог настройки периода более удобным.


Реализация решения: 

Чтобы как-то компенсировать указанное ограничение платформы и связанную с ней “несправедливость” в подсистему “ViewValues”,
начиная с версий 8.1.1.4 и 8.2.1.4, включены обработка EditPeriod и используемый ей одноименный общий модуль.

Обработка имеет два интерфейса - обычный и управляемый (управляемый – только в подсистеме версии 8.2.1.4).

Это обеспечивает ее работу в различных режимах:

Основные формы обработки (Рис.1, Рис.5, Рис.9)  - являются тестовыми,
служат для проверки работы объекта “НастройкаПериода” и демонстрации ее собственных возможностей. 
Также у обработки есть служебные формы, непосредственно реализующие функционал объекта “НастройкаПериода”.


Обработка максимально точно имитирует поведение системного диалога настройки периода:

  • Всем свойствам объекта “НастройкаПериода” соответствуют одноименные  реквизиты обработки;
  • Всем методам объекта “НастройкаПериода” соответствуют экспортные функции служебных форм обработки;
  • Диалоги служебных форм обработки для настройки периода максимально приближены
    к системному диалогу по дизайну и поведению при изменении данных;

Имеются также свои особенности:

  • Свойства диалога настройки периода в служебных формах обработки доступны не напрямую,
    а через реквизит формы “Объект” (смотрите ниже пример использования);
  • Поскольку служебные перечисления, связанные с объектом “НастройкаПериода”, также не доступны в управляемом приложении,
    то вместо их значений в обработке используются строковые мнемокоды в стиле макрокоманд установки периода 1С:Бухгалтерии-6.0.
    Так мнемокод “!ДНК” – соответствует варианту периода “День с начала квартала”.
    Полный перечень мнемокодов приведен в справочном описании к обработке;
  • Положение окна диалога ввода периода запоминается при использовании (системный диалог всегда выводится в центре экрана);
  • Есть и другие, более тонкие отличия поведения диалога (смотрите справочное описание);

Дополнительные возможности:

  • Обработка поддерживает дополнительный режим ввода периода «Редактировать как стандартный период» и
    соответствующую ей закладку в диалоге настройки (Рис.4, Рис.8, Рис.12);
  • Для диалога настройки периода обработки можно задать свой заголовок и тайм-аут ввода.
    Истечение тайм-аута выводится в заголовке формы в квадратных скобках (Рис.10);
  • В диалоге настройки периода обработки можно включать-выключать вывод текущей даты и времени,
    а также переключать представление выбранного периода с «обычного» на «финансовый»;
  • На закладке “Период” имеется дополнительная опция выбора периода 'С текущей даты' / 'По текущую дату',
    облегчающая выбор периода типа "Год NNNN по текущую дату" (Рис.13);

Общие замечания: 

Управляемая форма настройки периода обработки оптимизирована по взаимодействию с сервером.
При ее работе на клиенте в явном виде не используются серверные вызовы (включая внеконтекстные).

Основной функционал обработки вынесен в общий модульEditPeriod, который кроме этого предоставляет
экспортный метод
Создать() - своего рода «конструктор» для более привычного создания диалога настройки периода.


Пример использования:

НастройкаПериода = EditPeriod.Создать(,,);
НастройкаПериода.Объект.РедактироватьКакИнтервал  = Истина;
НастройкаПериода.Объект.РедактироватьКакПериод = Истина;
НастройкаПериода.Объект.РедактироватьКакСтандартныйПериод = Истина;
НастройкаПериода.Объект.ВариантНастройки = "!П";
НастройкаПериода.УстановитьПериод(ДатаНачала, ?(ДатаОкончания='0001-01-01', ДатаОкончания, КонецДня(ДатаОкончания)),Ложь);

НастройкаПериода.Объект.ФинансовыйПериод = Истина;
НастройкаПериода.Объект.ВыводитьТекущуюДату = Истина;

Если
НастройкаПериода.Редактировать("Ввод периода акта взаиморасчётов:", 180) Тогда
   
ДатаНачала = НастройкаПериода.ПолучитьДатуНачала();
   
ДатаОкончания = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;

Описание файлов поставки и установки:

В архиве с файлами поставки к статье находятся выгрузки демонстрационных баз подсистемы “ViewValues”
для платформы 1С версий 8.1 и 8.2, в которых можно проверить работу обработки.

Для установки описанного в статье функционала достаточно из конфигураций подсистемы “ViewValues”
указанных версий включить в конфигурацию базы данных обработку “EditPeriod” и используемый ей одноименный общий модуль.


Имеется похожая публикация:

http://infostart.ru/public/175213/ (автор nnn).
Обе разработки велись независимо примерно в одно время. Но nnn опубликовал свою работу раньше.
Выложенная в его статье обработка больше ориентирована на выбор массива интервалов дат с помощью отметки в поле календаря,
однако она также имеет «бонусные» закладки “Интервал” и “Период”,
аналогичные одноименным закладкам системного диалога настройки периода.

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

Наименование Файл Версия Размер
ViewValues-8x_Demo.rar 25
.rar 1,30Mb
22.03.14
25
.rar 1.5 1,30Mb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Юрий Осипов (yuraos) 13.07.13 06:13
Обработка тестировалась на платформах
8.1.15, 8.2.13, 8.2.14.

На 8.3 - не тестировалась,
но думаю особых проблем возникнуть не должно.

если что - сообщайте,
будем думать как скрестить "ужа" с "ежом".
2. Юрий Осипов (yuraos) 13.07.13 06:46
Примечание к эпиграфу статьи:
--
С мнением прапорщика посмею не согласиться, ну а
мнение фюрера у нас в последнее время - это ГЛАС НАРОДА - его надо уважать.
---
и так:
кто кого? Прапорщик или фюрер?

---
дружно голосуем, рассказываем что-нибудь интересное.
3. ediks (ediks) 13.07.13 22:00
Две грамматические ошибки в одном предложении - это, пожалуй, перебор.
Не один из диалогов не удобен, лутше вводить обе даты вручную
4. Сергей Ожерельев (Поручик) 13.07.13 23:20
(1) Аффтар, из какого класса церковно-приходской школы тебя вытурили за безграмотность?
Не один из диалогов не удобен, лутше вводить обе даты вручную
5. Сергей Ожерельев (Поручик) 13.07.13 23:23
(0) Не зря хозяин сайта убрал из заголовка слово "профессиональное".
6. Юрий Осипов (yuraos) 14.07.13 15:39
(4) Поручик,
не обессудь
1) школа была физико - матИматической, по русскАму с литИратурой в аттестате трояки.
2) намеренные грамматические ошибки сейчас - это новое слово в пиаре.
3) в голосовании, если в спешке прокосячился - то уже исправить ничего невозможно.
7. Юрий Осипов (yuraos) 14.07.13 15:43
(3) ediks, (4) Поручик,
в древнем Риме, если нечего было ответить оппоненту - его обвиняли в нетрадиционной ориентации.
ну а на современном Инфостарте, смотрю, - обвиняют в грамматических ошибках.
8. Сергей Ожерельев (Поручик) 14.07.13 18:03
(7) В позднем Древнем Риме многие были той самой ориентации, даже императоры не прочь были. Да и в раннем на ту самую ориентацию особо не смотрели. Причём в войсках в походах это даже поощрялось.
А что плохого в обвинении в грамматических ошибках? Давайте и дальше становиться безграмотным быдлом, политика такая в этой стране.
9. ediks (ediks) 14.07.13 21:43
(6) 1. Не поверишь, я тоже заканчивал физико-математическую школу, но тем не менее с грамотностью все нормально.
2. Ну, может быть, не надо было спешить с голосованием. Можно и без него обойтись на современном Инфостарте.
3. И потом, это было не обвинение, а констатация факта.
10. Юрий Осипов (yuraos) 15.07.13 06:01
(8) Поручик, (9) ediks,
я все понимаю,
но давайте все-таки по теме господа ...
11. spleen - (spleen) 15.07.13 09:37
фразу фюрера переведи на русский.
12. Юрий Осипов (yuraos) 15.07.13 10:02
(11) spleen,
что опять претензии по правописанию?
теперь уже немецкому?

по-моему "бункеровские" приколы переводить с немецкого бесмысленно.
13. Елена Пименова (Bukaska) 15.07.13 12:08
По мне так самое удобное - стандартный период
14. Юрий Осипов (yuraos) 15.07.13 12:36
(13) Bukaska,
ну удобно так удобно.

---
ну по результатам голосования я смотрю...
ФЮРЕР далеко позади оставил ПРАПОРЩИКА
15. Елена Пименова (Bukaska) 15.07.13 15:57
(14) yuraos, А теперь расшифруй))))))
16. Юрий Осипов (yuraos) 16.07.13 06:10
(15)
Ну Bukaska, ты у меня такая умненькая . Придумай что-нибудь.
17. Юрий Осипов (yuraos) 16.07.13 06:21
(16)
И так, судя по результатам голосования
подавляющее большинство не согласно с ПРАПОРЩИКОМ
и таким образом уважает мнение ФЮРЕРА
...
18. Юрий Осипов (yuraos) 16.07.13 06:25
(17)
По поводу этого позволю себе
немного покритиковать управляемый интерфейс и
управляемое приложение в нынешнем виде.
19. Юрий Осипов (yuraos) 16.07.13 06:48
При разработке обработке мне пришлось
столкнуться с рядом проблем.

I) КОНЦЕПТУАЛЬНЫЕ ПРОБЛЕММЫ:
20. Юрий Осипов (yuraos) 16.07.13 06:50
1) Часть функционала обработки вынесена в общий модуль
с потерей универсальности не от хорошей жизни:

к сожалению, ни модуль объекта обработки, ни модуль ее менеджера
(где этот функционал можно было бы разместить) на клиенте не доступны
---
очень не хватает публичных модулей, подчиненых объектам метаданных,
с доступом на клиенте
21. Юрий Осипов (yuraos) 16.07.13 07:00
2) Для функционирования формы часто
(как в случае диалога настройки периода) сервер в принципе не нужен.
Всю работу можно было бы организовать на строне клиента
(кстати с выигрыщем по производительности, ради которой весь сыр-бор).
---
Но управляемое приложение в нынешнем виде не дает такой возможности:
а. Чтобы создать форму нужен сервер.
б. После ее создания без обращения к серверу тоже не обойтись:
Например вызовы к серверу идут при установке флагов
"Доступность" и "ТолькоПросмотр" у элементов управления.
22. Юрий Осипов (yuraos) 16.07.13 07:18
II) ИНТЕРФЕЙСНЫЕ ПРОБЛЕММЫ:
23. Юрий Осипов (yuraos) 16.07.13 07:38
1) Нельзя запретить изменение размеров управляемой формы,
открытой модально. Также нельзя запретить ее максимизацию.

2) Нельзя в заголовке управляемой формы устанавливать картинку.

3) Вид управляемая форма с фиксированными размерами
(если у всех элементов формы для свойств
"Автоматически расширять по вертикали/горизонтали"
установить значение "Нет")
может сильно искажаться в разных клиентах разных версий.

4) Нельзя для поля надписи в форме задать цвет фона, отличный от фона формы.

5) У поля надписи можно настроить контекстное меню,
но его команды не отрабатываются обработчиками событий
(пришлось такие надписи заменить на поля ввода).

6) Поле переключателя -
- это единый блок отдельных элементов-переключателей,
между которыми нельзя воткнуть другие элементы.
(пришлось решать проблемму способом умножения:
для каждого функционального переключателя в диалоге
свое поле переключателя из одного элемента).

7) У полей флажка и полей переключателя почему-то не предусмотрено свойства "Длина".
Реальная длина устанавливается длине выводимого заголовка с учетом пробелов.
(пришлось "прыгать с бубном", особенно для поля переключателя)
24. absolutblohin (absolutblohin) 16.07.13 17:23
В опросе голосую за пункт: "Ни один из диалогов не удобен, но пользуюсь ими из-за отсутствия альтернативы лучшего )"
25. Юрий Осипов (yuraos) 16.07.13 18:57
(24) absolutblohin,
благодарю!
Ты первый, кто высказался по теме...
а в поле календаря как в этой статье
может будет удобней ?
26. absolutblohin (absolutblohin) 17.07.13 12:05
(25)О, да. Это один из самых удобных вариантов. Я тоже писал свой выбор периода, называл его "выбор произвольного периода в один клик (в пределах года)", т.е. выбор периода драг энд дропом в поле календаря. Все закончилось что тонкий клиент зависал на вечно при попытке отрисовать поле календаря размером в год :(. Может в новых версиях платформы баг пофиксили, но запал прошел.
А в основном все упирается в то, что свой диалог выбора периода приходится вручную прикручивать, и если в отчетах еще можно как-то автозаменой, то с журналами документов(да и любыми динамическими списками) вообще беда. Не видать своей 1с с шахматами и поэтессами :(
27. Юрий Осипов (yuraos) 15.03.14 09:11
Всем доброго времени суток!
Обновлен файл поставки.

Текущие изменения не каснулись функционала описанного в этой публикации.

Конфигурация демонстрационной базы обновлена до последних изменений
в подсистеме "ViewValues" от 01.03.2014.