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

Обработки - Универсальные обработки

Обработка имитирует функционал системного объекта «НастройкаПериода».  
Обеспечивает работу альтернативного диалога настройки периода,
как в режиме обычного приложения, так и в 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” и используемый ей одноименный общий модуль.


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

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

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

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

См. также

В каком из диалогов выбора периода явдяется более удобным


Традиционный диалог "Настройка периода" (68.65%, 127 голосов.)
68.65%
Диалог ввода стандартного периода системы СКД (11.35%, 21 голосов.)
11.35%
Не один из диалогов не удобен, лутше вводить обе даты вручную (10.81%, 20 голосов.)
10.81%
я не в теме - затрудняюсь ответить (9.19%, 17 голосов.)
9.19%

Комментарии
1. Юрий Осипов (yuraos) 891 13.07.13 06:13 Сейчас в теме
Обработка тестировалась на платформах
8.1.15, 8.2.13, 8.2.14.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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