Обработка "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 не будет опубликован. Обязательные поля помечены *