Обеспечивает работу альтернативного диалога настройки периода,
как в режиме обычного приложения, так и в 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).
Это обеспечивает ее работу в различных режимах:
- В Web-клиенте (Рис.1, рис.2, Рис.3, Рис.4);
- В тонком клиенте (Рис.5, рис.6, Рис.7, Рис.8);
- В обычном приложении (Рис.9, рис.10, Рис.11, Рис.12);
Основные формы обработки (Рис.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 опубликовал свою работу раньше.
Выложенная в его статье обработка больше ориентирована на выбор массива интервалов дат с помощью отметки в поле календаря,
однако она также имеет «бонусные» закладки “Интервал” и “Период”,
аналогичные одноименным закладкам системного диалога настройки периода.




Обработка тестировалась на платформах
8.1.15, 8.2.13, 8.2.14.
На 8.3 — не тестировалась,
но думаю особых проблем возникнуть не должно.
если что — сообщайте,

будем думать как скрестить «ужа» с «ежом».
Примечание к эпиграфу статьи:

—
С мнением прапорщика посмею не согласиться, ну а
мнение фюрера у нас в последнее время — это ГЛАС НАРОДА — его надо уважать.
—
и так:
кто кого? Прапорщик или фюрер?
—
дружно голосуем, рассказываем что-нибудь интересное.
Две грамматические ошибки в одном предложении — это, пожалуй, перебор.
(1) Аффтар, из какого класса церковно-приходской школы тебя вытурили за безграмотность?
(0) Не зря хозяин сайта убрал из заголовка слово «профессиональное».
(4) Поручик,
не обессудь
1) школа была физико — матИматической, по русскАму с литИратурой в аттестате трояки.
2) намеренные грамматические ошибки сейчас — это новое слово в пиаре.
3) в голосовании, если в спешке прокосячился — то уже исправить ничего невозможно.
(3) ediks, (4) Поручик,

в древнем Риме, если нечего было ответить оппоненту — его обвиняли в нетрадиционной ориентации.
ну а на современном Инфостарте, смотрю, — обвиняют в грамматических ошибках.
(7) В позднем Древнем Риме многие были той самой ориентации, даже императоры не прочь были. Да и в раннем на ту самую ориентацию особо не смотрели. Причём в войсках в походах это даже поощрялось.
А что плохого в обвинении в грамматических ошибках? Давайте и дальше становиться безграмотным быдлом, политика такая в этой стране.
(6) 1. Не поверишь, я тоже заканчивал физико-математическую школу, но тем не менее с грамотностью все нормально.
2. Ну, может быть, не надо было спешить с голосованием. Можно и без него обойтись на современном Инфостарте.
3. И потом, это было не обвинение, а констатация факта.
(8) Поручик, (9) ediks,
я все понимаю,
но давайте все-таки по теме господа …
фразу фюрера переведи на русский.
(11) spleen,
что опять претензии по правописанию?
теперь уже немецкому?
по-моему переводить с немецкого бесмысленно.
По мне так самое удобное — стандартный период
(13) Bukaska,

ну удобно так удобно.
—
ну по результатам голосования я смотрю…
ФЮРЕР далеко позади оставил ПРАПОРЩИКА
(14) А теперь расшифруй))))))
(15)
. Придумай что-нибудь.
Ну Bukaska, ты у меня такая умненькая
(16)
И так, судя по результатам голосования
подавляющее большинство не согласно с ПРАПОРЩИКОМ
и таким образом уважает мнение ФЮРЕРА
…
(17)
По поводу этого позволю себе
немного покритиковать управляемый интерфейс и
управляемое приложение в нынешнем виде.
При разработке обработке мне пришлось
столкнуться с рядом проблем.
I) КОНЦЕПТУАЛЬНЫЕ ПРОБЛЕММЫ:
1) Часть функционала обработки вынесена в общий модуль
с потерей универсальности не от хорошей жизни:
к сожалению, ни модуль объекта обработки, ни модуль ее менеджера
(где этот функционал можно было бы разместить) на клиенте не доступны
—
очень не хватает публичных модулей, подчиненых объектам метаданных,
с доступом на клиенте
2) Для функционирования формы часто
(как в случае диалога настройки периода) сервер в принципе не нужен.
Всю работу можно было бы организовать на строне клиента
(кстати с выигрыщем по производительности, ради которой весь сыр-бор).
—
Но управляемое приложение в нынешнем виде не дает такой возможности:
а. Чтобы создать форму нужен сервер.
б. После ее создания без обращения к серверу тоже не обойтись:
Например вызовы к серверу идут при установке флагов
«Доступность» и «ТолькоПросмотр» у элементов управления.
II) ИНТЕРФЕЙСНЫЕ ПРОБЛЕММЫ:
1) Нельзя запретить изменение размеров управляемой формы,
открытой модально. Также нельзя запретить ее максимизацию.
2) Нельзя в заголовке управляемой формы устанавливать картинку.
3) Вид управляемая форма с фиксированными размерами
(если у всех элементов формы для свойств
«Автоматически расширять по вертикали/горизонтали»
установить значение «Нет»)
может сильно искажаться в разных клиентах разных версий.
4) Нельзя для поля надписи в форме задать цвет фона, отличный от фона формы.
5) У поля надписи можно настроить контекстное меню,
но его команды не отрабатываются обработчиками событий
(пришлось такие надписи заменить на поля ввода).
6) Поле переключателя —
— это единый блок отдельных элементов-переключателей,
между которыми нельзя воткнуть другие элементы.
(пришлось решать проблемму способом умножения:
для каждого функционального переключателя в диалоге
свое поле переключателя из одного элемента).
7) У полей флажка и полей переключателя почему-то не предусмотрено свойства «Длина».
Реальная длина устанавливается длине выводимого заголовка с учетом пробелов.
(пришлось «прыгать с бубном», особенно для поля переключателя)
В опросе голосую за пункт: «Ни один из диалогов не удобен, но пользуюсь ими из-за отсутствия
альтернативылучшего )»(24) absolutblohin,
благодарю!
Ты первый, кто высказался по теме…
а в поле
может будет удобней ?
(25)О, да. Это один из самых удобных вариантов. Я тоже писал свой выбор периода, называл его «выбор произвольного периода в один клик (в пределах года)», т.е. выбор периода драг энд дропом в поле календаря. Все закончилось что тонкий клиент зависал на вечно при попытке отрисовать поле календаря размером в год :(. Может в новых версиях платформы баг пофиксили, но запал прошел.
А в основном все упирается в то, что свой диалог выбора периода приходится вручную прикручивать, и если в отчетах еще можно как-то автозаменой, то с журналами документов(да и любыми динамическими списками) вообще беда. Не видать своей 1с с шахматами и поэтессами 🙁
Всем доброго времени суток!
Обновлен файл поставки.
Текущие изменения не каснулись функционала описанного в этой публикации.
Конфигурация демонстрационной базы обновлена до последних изменений
в .