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

Материал из Lexema.ru
Перейти к: навигация, поиск

Справочник представляет собой, как правило, небольшую таблицу содержащую редко меняющийся перечень уникальных позиций. Кроме служебных полей, модель справочника содержит в большинстве случаев одно или несколько полей (например, наименование). Справочники используются в документах для выбора значений тех или иных реквизитов. На уровне основной таблицы справочник представляет собой поле типа BigInt, является внешним ключом (Foreign Key) и хранит коды записей справочника. На уровне экранной формы для редактирования документа справочник отображается в виде выпадающего списка (Lookup).

Для создания справочника и его подключения к документу необходимо выполнить следующие действия:

  • создание модели справочника
  • добавление в основную модель поля справочника
  • обновление БД для создания поля в таблице
  • создание ЭФ и реестра для ввода значений справочника, ввод значений справочника
  • добавление выпадающего списка в ЭФ основного документа

Создание модели справочника

Процесс создания модели подробно описан в разделе статьи руководства "Создание документа на основе модели". Модель справочника должна содержать поле, являющееся первичным ключом (primary key), а также одно или несколько содержательных полей (например, наименование, описание), которые будут отображаться в выпадающем списке.

Пример параметров справочника показан на рисунке:

NewClassifier.png

Добавление в основную модель поля справочника

В основную модель документа необходимо добавить новое поле: введите наименование (колонка Name), имя поля в таблице БД (колонка DbName), описание поля (колонка Description). В колонке Type выберите созданную ранее модель справочника. Пример списка полей основной таблицы приведён на рисунке:

MainModelWithRef.png

Важно! После создания модели справочника и изменения основной модели необходимо произвести обновление БД, этот процесс подробно описан в разделе статьи руководства "Создание документа на основе модели". В результате будут сгенерированы и выполнены следующие запросы:

  • создание новой таблицы справочника (CREATE TABLE)
  • добавление поля в существующую основную таблицу (ALTER TABLE)
  • создание внешнего ключа
  • создание триггеров обновления системных полей и создания записей исторической таблицы

Пример списка выполняемых операций показан на рисунке:

UpdateDbRef.png

Создание ЭФ и реестра для ввода значений справочника

Существует два способа заполнения таблицы справочника значениями:

  • ввод данных вручную с помощью экранной формы для редактирования
  • импорт данных в таблицу средствами СУБД MS SQL Server

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

Добавление выпадающего списка в ЭФ основного документа

Для выбора в документе одного из значений справочника необходимо добавить выпадающий список. Для этого откройте экранную форму редактирования, разверните дерево элементов (RootItem - LayoutForm - LayoutGroup). Выберите контейнер (группу LayoutGroup или др.), в которую необходимо добавить новое поле - справочник. Нажмите на ней правую кнопку мыши, выберите в контекстном меню пункт "Добавить свойство модели", в списке найдите имя поля - справочника:

AddRefLookup.png

В результате в дерево будет добавлен новый элемент управления - выпадающий список (Lookup).

Добавление поля справочника в реестр

Процесс добавления поля справочника в реестр аналогичен работе с экранной формой. Для этого необходимо открыть реестр, раскрыть дерево элементов, найти элемент AnalyticalGrid, нажать правую кнопку мыши, выбрать пункт "Добавить свойство модели" и в выпавшем списке найти поле-справочник.

Создание многоколоночного списка

По умолчанию выпадающий список содержит два поля - код и наименование. Однако, система предоставляет возможность создания нескольких колонок, что делает справочники в документе более информативными.

Для добавления колонок к списку в дереве элементов выберите выпадающий список (Lookup), нажмите правую кнопку мыши, в контекстном меню выберите пункт "Добавить компонент" - "GridTextBoxColumn". Существует возможность добавления двух типов колонов - текстовых и списковых.

NewLookupColumn.png

В результате будет добавлен дочерний элемент - колонка списка. Для него необходимо указать ряд параметров:

  • datafield - имя поля модели, значение которого будет отображаться в колонке списка
  • width - ширина колонки в пикселях (например, 150px)
  • text - отображаемый заголовок колонки

LookupColumnProps.png

Колонка, добавленная в список таким образом, будет отображаться после полей кода и наименования.

Проверка работоспособности документа со справочником

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

Для того, чтобы в основном документе можно было выбрать значения в списке-справочнике, необходимо ввести значения в таблицу данного справочника с помощью соответствующей формы для редактирования или путём импорта в соответствующую таблицу БД. Для ввода значений вручную в главном меню в области "Мои документы" следует раскрыть соответствующую категорию и нажать на пункт меню реестра справочника. Используя реестр и форму, необходимо создать несколько записей в модели справочника.

ClassifierRegistry.png

После этого можно использовать их при выборе значений в экранной форме в основном документе. Откройте реестр основного документа, создайте новый документ или откройте для редактирования существующий. В поле-выпадающем списке теперь можно выбрать значения из модели справочника. На рисунке показан вид выпадающего списка, содержащий несколько колонок:

DocumentWithClassifier.png

Справочники с большим количеством данных

При загрузке экранной формы с элементом типа Lookup, привязанным к полю справочного типа, загружаются и все данные из модели-справочника. Если он содержит большой объём данных, то время загрузки формы может стать неприемлемо большим. Чтобы избежать этого, элемент типа Lookup необходимо заменить на PagableLookup - список с возможностью постраничного вывода записей. При использовании PagableLookup в его свойстве указывается максимальное количество записей, которые будут загружены при начальной загрузке формы. При наборе текста в поле PagableLookup производится поиск среди всех записей модели, включая и не загруженные в данный момент. Поиск осуществляется и по кодовому полю, и по полю значения. Для добавления списка с возможностью постраничного вывода необходимо нажать правой кнопкой мыши на соответствующем контейнере (LayoutGroup) и в контекстном меню выбрать пункт "Добавить компонент"-"PagableLookup":

AddPagableLookup.png

Так как этот элемент был добавлен вручную, а не создан при генерации формы или добавлении свойства модели, его параметры необходимо настроить вручную:

  • bind - имя поля модели, в которое будет сохранено выбранное значение. Содержит префикс "lookupValue:", например, "lookupValue:Base.Contractor", где Contractor - имя поля модели.
  • dataSource - параметры источника данных. Должен иметь следующий вид: "type=ТИП_ИСТОЧНИКА&name=ПРОСТР_ИМЁН.ИМЯ_ИСТОЧНИКА". Существует два типа источников данных - модель (model) и запрос (query). Пример значения данной настройки: "type=model&name=Base.Position". Base - пространство имён модели, Position - имя модели
  • caption - подпись элемента на форме
  • topCount - кол-во записей, загружаемых за один раз (по умолчанию - 100)

Свойства bind и dataSource добавляются при создании компонента, а свойства caption и topCount необходимо добавить вручную:

PagableLookupProperties.png

Проверка работоспособности списка с постраничным выводом

При открытии списка с постраничным выводом на форме загружается кол-во записей, заданное параметром topCount. При необходимости можно загрузить следующую порцию данных, нажав на ссылку "Загрузить ещё Х":

PagableLookupDemo.png

Для поиска нужных записей необходимо ввести наименование или код в поле списка:

PagableLookupSearch.png