Меню

Компонента для сохранения настроек



Хранилище настроек в 1С

Назначение объекта конфигурации «Хранилище настроек» понятно из названия — хранить различные пользовательские настройки. Область применения данного объекта широка — в любой, хоть сколь-нибудь серьезной конфигурации требуется хранить какие-либо пользовательские настройки.

Для удобства программистов в каждой конфигурации существует несколько стандартных хранилищ настроек, кроме этого есть возможность создать столько дополнительных хранилищ настроек, сколько будет нужно.

Хранилища настроек в конфигураторе

Сначала разберемся со стандартными хранилищами настроек, которые присутствуют в любой конфигурации 1С начиная с версии 8.2.

Стандартные хранилища настроек

Итак, по умолчанию, в конфигурации имеются следующие хранилища настроек:

  • ХранилищеВариантовОтчетов — для доступа к настройкам вариантов отчетов.
  • ХранилищеПользовательскихНастроекОтчетов — для доступа к пользовательским настройкам отчетов.
  • ХранилищеНастроекДанныхФорм — для доступа к пользовательским настройкам данных форм.
  • ХранилищеОбщихНастроек — для доступа к общим настройкам.
  • ХранилищеСистемныхНастроек — для доступа к системным настройкам.
  • ХранилищеПользовательскихНастроекДинамическихСписков — для доступа к пользовательским настройкам динамических списков.

К каждому из этих хранилищ можно обратиться как к свойству глобального контекста.

Стандартные хранилище программист может использовать для своих нужд, сохраняя различные настройки в разрезе пользователя, объекта и самой настройки.

Для работы с хранилищами настроек (как со стандартными, так и с добавленными программистом) используются следующие методы.

Источник

Сохранение и восстановление значений компонентов

При описании примеров использования базовых модулей формирования интерфейса (base-jdialog, base-jpanel, base-universal) было отмечено, что при закрытии формы/панели, т.е. при остановке бандла, регулируемые настройки интерфейса сохраняются во внешнем файле. При повторном открытии формы/панели интерфейсные настройки восстанавливаются. К интерфейсным настройкам относятся положения разделителей JSplitPane и размеры колонок таблицы JTable, а для jdialog дополнительно размеры окна.

Вместе с регулируемыми настройками во внешнем файле сохраняются значения интерфейсных компонентов модулей, созданных с использованием базовых модулей base-universal и gui-widgets. Для чего это нужно? Ну, конечно же, для восстановления значений компонентов при повторном старте. А теперь разберем данный тезис подробнее.

Представим себе приложение, которое имеет много различных форм, создаваемых различными интерфейсными бандлами. Естественно, все формы невозможно разместить на одном экране. Необходимо какие-то скрывать, а какие-то открывать. Для реализации данного функционала необходимо иметь хороший диспетчер, который бы «управлял этим оркестром». То есть, диспетчер должен одному из бандлов при старте или при переводе его в активное состояние передать главный контейнер приложения для размещения своего интерфейса, а интерфейс другого бандла «убрать» с экрана (из контейнера). А если интерфейсный бандл интегрирует в свою форму интерфейс одного или нескольких бандлов? В этом случае, необходимо контролировать функционирование сразу нескольких бандлов. Задача может усложниться ещё и тем, что каждый бандл может загрузить в интерфейс большой объём информации. Кто-то может сказать, что сейчас компьютеры мощные и за ресурсы можно не волноваться. Можно. Но, во-первых, время переключения между формами может возрасти. Этим можно пренебречь, тем более, что загрузка информации тоже может оказаться «недешевой». Но самое главное, что доступ к интерфейсной части бандла доступен только его активатору, у других бандлов данного доступа просто нет. Поэтому диспетчер должен понимать, какие интерфейсные компоненты какому бандлу принадлежат. Помните, что при останове бандлов необходимо также «убрать» их интерфейс; это прерогатива программиста.

Читайте также:  Атол sb 2105 настройка префикса

Чтобы не «заморачиваться с диспетчером» платформа JаBricks в базовом модуле base-universal содержит функционал сохранения во внешнем файле значений интерфейсных компонентов вместе с регулируемыми настройками и методы их восстановления при переводе бандла в состояние ACTIVE. Для восстановления значений компонентов при переводе бандла в активное состояние необходимо проверить время сохранения настроек, и, в случае их сохранения после старта приложения, вызвать методы восстановления значений компонентов. Данный функционал реализован в демонстрационном приложении «Домашние финансы», созданным на платформе JaBricks.

Примечание : сохранение и восстановление значений компонентов нужно только для компонентов типа панелей (JPanel), размещаемых в контейнера главного фрейма или интегрируемых в интерфейс другого бандла. Данный сервис можно реализовать в интерфейсных бандлах, наследующих свойства базового модуля base-universal.

Сохранение настроек и значений компонентов

Для сохранения интерфейсных настроек и значений компонентов необходимо переопределить метод активатора saveComponentParams. Ниже представлен код метода примера templ-universal.

Именование компонентов

Метод восстановления значений компонентов restoreComponentsValue класса JBCommon в качестве параметров принимает сам компонент, краткое наименование класса компонента и его наименование. То есть, чтобы восстановливать значение компонента, он должен быть «именован». Поскольку интерфейсная форма может включать несколько однотипных компонентов, то регулируемые настройки и значения сохраняются только у именованных компонентов. Для именования Swing-компонента имеется метод setName (String), позволяющий определять его наименование. Но это касается простых Swing-компонентов.

Библиотека компонентов gui-widgets включает виджеты JDatePicker, Grid и Gridp. Каждый виджет содержит один или несколько Swing-компонентов, отображаемых в интерфейсе. Так, например, JDatePicker представляет в интерфейсе компонент JFormattedTextField, Grid представляет таблицу JTable, а Gridp – таблицу JTable и группу компонентов для навигации (пагинатор), значимым из которых является компонент типа JTextField. Таким образом, при использовании в интерфейсе виджета, необходимо именовать его «значимые» Swing-компоненты.

Рассмотрим пример интерфейсного бандла, наследующего свойства классов базового модуля base-universal и включающего :

  • TemplActivator, активатор, наследует UniversalActivator;
  • TemplPanel, наследует JBPanel и организует создание интерфейсной панели;
  • TemplCommon, наследует JBCommon и формирует интерфейс.

Допустим, интерфейс бандла (класс TemplCommon) включает набор компонентов, представленных в следующем листинге, и методы, рассмотренные ниже. Особый интерес в классе представляют три последних компонента (cbPeriod, dpDate, gridp) :

Здесь следует отметить, что компонент cbPeriod использует объект типа Reference из базового модуля base-universal. Это обязательное условие для восстановления значения компонента, чтобы класс JBCommon смог определить выделенное значение.

Что касается вопроса создания интерфейса, то он не относится к теме данной статьи, и мы его не будем рассматривать. Рассмотрим только код именования компонентов в методе создания интерфейса createGUI :

Читайте также:  Mikrotik настройка firewall для pptp

Обратите внимание, как именуются два последних компонента (dpDate и gridp). У них именование касается значимых для интерфейса Swing-компонентов. Здесь следует отметить, что gridp помимо таблицы включает дополнительно панель навигации, о которой было отмечено выше. Чтобы учесть возможность останова бандла при нахождении не на первой странице навигации, необходимо также именовать и пагинатор. Особо напрягаться здесь не придётся : виджеты IGrid, IGridp библиотеки компонентов gui-widgets версии 1.0.2 включают методы setGridName, которые именуют одновременно таблицу и пагинатор. Правда, пагинатор имеет то же самое наименование, что и таблица. Но типы компонентов пагинатора и таблицы отличаются, поэтому при сохранении и дальнейшем восстановлении значений данных компонентов они не пересекаются. Для таблиц сохраняются размеры колонок и выделенная строка. Таблица с компонентами JCheckBox дополнительно сохраняет значения выделенных строк. У пагинатора сохраняется активная страница таблицы.

Таким образом, для именования табличного компонента из библиотеки base-gui версии 1.0.2 можно использовать следующий код :

Запрос времени активности приложения

Для восстановления значений компонентов в первую очередь необходимо получить время старта приложения для определения активности настроек бандла, стартуемого фреймворком. В течение одного сеанса функционирования бандл может быть несколько раз стартован и остановлен. Для получения времени старта приложения необходимо в методе активатора start выполнить определенную «подписку», пример :

После этого, используя метод активатора public long getStartTime, можно получить время старта приложения (мс) и определить активность сохраненных данных.

Определение активности сохраненных данных

Ниже представлен пример класса TemplPanel, конструктор которого получает активатор в качестве параметра. Метод класса createGUI(Container) создает интерфейс и проверяет активность сохраненных настроек вызовом метода isDataActive(). В случае активности сохраненных данных вызывается метод restoreComponentsValue() класса TemplCommon, в котором определены интерфейсные компоненты.

В представленном примере при создании интерфейса панели будет выполнена проверка активности сохраненных данных, и, при необходимости, восстановлены значения интефейсных компонентов вызовом метода restoreComponentsValue класса TemplCommon, наследника JBCommon.

Восстановление настроек и значений компонентов

Интерфейсные настройки и значения компонентов сохраняются во внешнем файла gui/[bundle_name].xml, если, конечно же, переопределен метод активатора saveComponentParams. Непосредственно работать с этим файлом нет необходимости : класс JBCommon базового модуля содержит методы извлечения необходимой информации и восстановления значений компонентов.

Структура файла gui/[bundle_name].xml включает время сохранения настроек, значение которого в виде Date можно получить вызовом метода getSaveDateTime класса JBCommon. Сохраненые настройки из файла можно методом readComponentParams() загрузить в переменную cparams типа List (см. листинг выше). Для восстановления значения компонента необходимо вызвать метод restoreComponentsValue базового класса JBCommon с передачей ему необходимых параметров :

Восстановление значений компонентов

Рассмотрим в качестве примера метод restoreComponentsValue интерфейсного класса TemplCommon, наследующего свойства JBCommon. Выше был представлен класс TemplPanel, в котором выполняется создание экземпляра данного класса и вызов его метода restoreComponentsValue :

Читайте также:  Лайф настройки профиля в

Листинг метода restoreComponentsValue демонстрирует процесс восстановления значений компонентов интерфейса. Особый интерес здесь представляют последние строки метода, в которых восстанавливается состояние таблицы с панелью навигации. Следует отметить, что сначала необходимо восстановить значение пагинатора при регистрации не первой страницы таблицы. Переопределенный метод selectPage относится к интерфейсу IPaginator, который должен наследовать класс, размещающий в своем интерфейсе таблицу с панелью навигации. Подробно об этом представлено здесь. Метод selectPage должен загрузить в таблицу необходимый набор данных, после чего можно выделить сохраненную запись.

Источник

Хранилище общих настроек в платформе 1С 8.2 и 8.3

Сохранение пользовательских настроек — достаточно важный момент в любой информационной системе, ведь иногда на настройку определенного функционала уходит большое количество времени и сил.

Специально для этого в платформе 1С были созданы 2 объекта — стандартные общие хранилища и хранилища настроек 1С, созданные разработчиком на стадии разработки конфигурации.

Стандартное хранилище настроек платформы 1С

Данная функция появилась вместе с платформой 1С версии 8.2. Она позволяет сохранить любые данные настроек в разрезе объекта, определенной настройки 1С, пользователя.

  • Записать настройки можно при помощи метода ХранилищеОбщихНастроек.Сохранить().
  • Потом для прочтения нужно использовать ХранилищеОбщихНастроек.Загрузить() с теми же параметрами.
  • Если настройка стала не актуальной, её можно удалить методом ХранилищеОбщихНастроек.Удалить().
  • Также в разрезе объекта можно получить список сохраненных настроек с помощью метода ХранилищеОбщихНастроек.ПолучитьСписок().

Сохраненные настройки хранятся в отдельной сводной таблице БД.

Хранилище настроек, создаваемое в конфигураторе

Хранилище настроек может создать и сам разработчик в конфигураторе 1С:

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Вместо стандартных хранилищ можно назначить хранилище, созданное разработчиком. Эта настройка производится в палитре свойств конфигурации:

Создание своих настроек может понадобиться в том случае, если:

  • необходима миграции настроек между базами данных;
  • необходим ссылочный контроль данных настроек.

Использование хранилищ настроек в отчетах и обработках 1С

Хранилище настроек можно указать для определенного отчета из конфигурации, указывается в свойствах отчета:

Флаг Сохраняемые данные данные позволяет автоматически сохранить значение при закрытии обработки:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник

Adblock
detector