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

27 Comments

  1. yuraos

    Обработка тестировалась на платформах

    8.1.15, 8.2.13, 8.2.14.

    На 8.3 — не тестировалась,

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

    если что — сообщайте,

    будем думать как скрестить «ужа» с «ежом».

    Reply
  2. yuraos

    Примечание к эпиграфу статьи:



    С мнением прапорщика посмею не согласиться, ну а

    мнение фюрера у нас в последнее время — это ГЛАС НАРОДА — его надо уважать.



    и так:

    кто кого? Прапорщик или фюрер?





    дружно голосуем, рассказываем что-нибудь интересное.

    Reply
  3. ediks

    Две грамматические ошибки в одном предложении — это, пожалуй, перебор.

    Не один из диалогов не удобен, лутше вводить обе даты вручную
    Reply
  4. Поручик

    (1) Аффтар, из какого класса церковно-приходской школы тебя вытурили за безграмотность?

    Не один из диалогов не удобен, лутше вводить обе даты вручную
    Reply
  5. Поручик

    (0) Не зря хозяин сайта убрал из заголовка слово «профессиональное».

    Reply
  6. yuraos

    (4) Поручик,

    не обессудь

    1) школа была физико — матИматической, по русскАму с литИратурой в аттестате трояки.

    2) намеренные грамматические ошибки сейчас — это новое слово в пиаре.

    3) в голосовании, если в спешке прокосячился — то уже исправить ничего невозможно.

    Reply
  7. yuraos

    (3) ediks, (4) Поручик,

    в древнем Риме, если нечего было ответить оппоненту — его обвиняли в нетрадиционной ориентации.

    ну а на современном Инфостарте, смотрю, — обвиняют в грамматических ошибках.

    Reply
  8. Поручик

    (7) В позднем Древнем Риме многие были той самой ориентации, даже императоры не прочь были. Да и в раннем на ту самую ориентацию особо не смотрели. Причём в войсках в походах это даже поощрялось.

    А что плохого в обвинении в грамматических ошибках? Давайте и дальше становиться безграмотным быдлом, политика такая в этой стране.

    Reply
  9. ediks

    (6) 1. Не поверишь, я тоже заканчивал физико-математическую школу, но тем не менее с грамотностью все нормально.

    2. Ну, может быть, не надо было спешить с голосованием. Можно и без него обойтись на современном Инфостарте.

    3. И потом, это было не обвинение, а констатация факта.

    Reply
  10. yuraos

    (8) Поручик, (9) ediks,

    я все понимаю,

    но давайте все-таки по теме господа …

    Reply
  11. spleen

    фразу фюрера переведи на русский.

    Reply
  12. yuraos

    (11) spleen,

    что опять претензии по правописанию?

    теперь уже немецкому?

    по-моему «бункеровские» приколы переводить с немецкого бесмысленно.

    Reply
  13. Bukaska

    По мне так самое удобное — стандартный период

    Reply
  14. yuraos

    (13) Bukaska,

    ну удобно так удобно.





    ну по результатам голосования я смотрю…

    ФЮРЕР далеко позади оставил ПРАПОРЩИКА

    Reply
  15. Bukaska

    (14) А теперь расшифруй))))))

    Reply
  16. yuraos

    (15)

    Ну Bukaska, ты у меня такая умненькая . Придумай что-нибудь.

    Reply
  17. yuraos

    (16)

    И так, судя по результатам голосования

    подавляющее большинство не согласно с ПРАПОРЩИКОМ

    и таким образом уважает мнение ФЮРЕРА

    Reply
  18. yuraos

    (17)

    По поводу этого позволю себе

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

    управляемое приложение в нынешнем виде.

    Reply
  19. yuraos

    При разработке обработке мне пришлось

    столкнуться с рядом проблем.

    I) КОНЦЕПТУАЛЬНЫЕ ПРОБЛЕММЫ:

    Reply
  20. yuraos

    1) Часть функционала обработки вынесена в общий модуль

    с потерей универсальности не от хорошей жизни:


    к сожалению, ни модуль объекта обработки, ни модуль ее менеджера

    (где этот функционал можно было бы разместить) на клиенте не доступны



    очень не хватает публичных модулей, подчиненых объектам метаданных,

    с доступом на клиенте

    Reply
  21. yuraos

    2) Для функционирования формы часто

    (как в случае диалога настройки периода) сервер в принципе не нужен.

    Всю работу можно было бы организовать на строне клиента

    (кстати с выигрыщем по производительности, ради которой весь сыр-бор).



    Но управляемое приложение в нынешнем виде не дает такой возможности:

    а. Чтобы создать форму нужен сервер.

    б. После ее создания без обращения к серверу тоже не обойтись:

    Например вызовы к серверу идут при установке флагов

    «Доступность» и «ТолькоПросмотр» у элементов управления.

    Reply
  22. yuraos

    II) ИНТЕРФЕЙСНЫЕ ПРОБЛЕММЫ:

    Reply
  23. yuraos

    1) Нельзя запретить изменение размеров управляемой формы,

    открытой модально. Также нельзя запретить ее максимизацию.

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

    3) Вид управляемая форма с фиксированными размерами

    (если у всех элементов формы для свойств

    «Автоматически расширять по вертикали/горизонтали»

    установить значение «Нет»)

    может сильно искажаться в разных клиентах разных версий.

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

    5) У поля надписи можно настроить контекстное меню,

    но его команды не отрабатываются обработчиками событий

    (пришлось такие надписи заменить на поля ввода).

    6) Поле переключателя —

    — это единый блок отдельных элементов-переключателей,

    между которыми нельзя воткнуть другие элементы.

    (пришлось решать проблемму способом умножения:

    для каждого функционального переключателя в диалоге

    свое поле переключателя из одного элемента).

    7) У полей флажка и полей переключателя почему-то не предусмотрено свойства «Длина».

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

    (пришлось «прыгать с бубном», особенно для поля переключателя)

    Reply
  24. absolutblohin

    В опросе голосую за пункт: «Ни один из диалогов не удобен, но пользуюсь ими из-за отсутствия альтернативы лучшего )»

    Reply
  25. yuraos

    (24) absolutblohin,

    благодарю!

    Ты первый, кто высказался по теме…

    а в поле календаря как в этой статье

    может будет удобней ?

    Reply
  26. absolutblohin

    (25)О, да. Это один из самых удобных вариантов. Я тоже писал свой выбор периода, называл его «выбор произвольного периода в один клик (в пределах года)», т.е. выбор периода драг энд дропом в поле календаря. Все закончилось что тонкий клиент зависал на вечно при попытке отрисовать поле календаря размером в год :(. Может в новых версиях платформы баг пофиксили, но запал прошел.

    А в основном все упирается в то, что свой диалог выбора периода приходится вручную прикручивать, и если в отчетах еще можно как-то автозаменой, то с журналами документов(да и любыми динамическими списками) вообще беда. Не видать своей 1с с шахматами и поэтессами 🙁

    Reply
  27. yuraos

    Всем доброго времени суток!

    Обновлен файл поставки.

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

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

    в подсистеме «ViewValues» от 01.03.2014.

    Reply

Leave a Comment

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