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