<< Click to Display Table of Contents >> Navigation: Создание окон для клиента визуализации > Библиотека HMI > Категория Контролы > Справочник > Пример работы со Справочником |
Постановка задачи:
Заносить показания приборов на объектах в зависимости от тарифа. Для этого в базе данных MSSQL есть четыре таблицы:
•Address с адресами объектов,
•Models с наименованиями приборов,
•Rates с текущими тарифами,
•Main - показания.
Сначала обозначим требования к таблицам в MSSQL. В таблице должен быть столбец - первичный ключ (Primary key) с выставленной настройкой Спецификация идентификатора.
В таблице Address это столбец idAddress, который будет увеличиваться на единицу при создании новой записи в базу. Это означает, что следующая запись в таблице будет иметь новое значение idAddress вне зависимости от удаления ранее добавленных записей. Первичные ключи нужны для связывания таблиц с помощью диаграмм баз данных.
Также в этой таблице есть другие столбцы, которые будем заполнять в уже работающем проекте:
City - город,
Street- улица,
Building- корпус ,
House - номер дома .
Вид таблицы данных Address в MSSQL, где отображен столбец с первичным ключом и идентификатором.
Столбцу Building разрешено использовать нулевые значения, так как корпуса здания может и не быть:
В таблице списка приборов Models первичным ключом с идентификатором является столбец IDModel, а также другие столбцы:
Name - это название прибора,
Number - его регистрационный номер - Number.
Вид таблицы:
В таблице тарифов Rates первичный ключ с идентификатором idRates и столбцы: Rate, Value1, Value2:
Главная таблица имеет следующие столбцы:
idMain - первичный ключ и идентификатор,
DateMeter - время снятия показания,
Meter 1, Meter 2 - значения самих показаний.
Важно! Остальные столбцы имеют те же названия, что и столбцы с первичным ключом остальных таблиц. Это сделано для того, чтобы в момент задания значений в главной таблице мы могли использовать и отображать данные из других таблиц.
Вид таблицы:
Для того, чтобы в момент задания значений в главной таблице можно было отображать данные из других таблиц необходимо таблицы добавить в диаграмму баз данных:
Связать столбцы одной таблицы с другой. Установить связи между внешним ключом одной таблицы и первичным ключом другой таблицы:
После этого столбцы таблицы Main, с которой была установлена связь, приобретут свойство внешнего ключа. Вид связанных таблиц в диаграмме базы данных:
Таблицы для примера готовы. Можно перейти к их добавлению в проект MS4D.
Для работы справочников в проекте MasterSCADA 4D нужно завести соответствующий элемент в пользовательской библиотеке. Элемент называется Справочник. Создаваемый в библиотеке элемент должен называться точно также как таблица в базе данных, а поля справочника иметь такой же тип данных как столбцы этой таблицы. Для столбца с первичным ключом обязательно должна быть выставлена настройка Ключевое поле. Настройка Отображаемое имя требуется для отображения значения столбца удаляемой строки, а также отображения отладочного значения параметра типа Справочник, об этом позже.
Вид справочника после изменения имени и добавления полей:
Панели свойств некоторых полей справочника:
Для установления связи с сервером MSSQL нужно добавить БД справочников в папку Архивы узла:
В панели свойств указывается имя сервера, логин, пароль и другие параметры подключения:
Далее необходимо установить связь между созданным ранее Справочником в библиотеке и данным элементом. Для этого методом Drag&Drop нужно перетащить Справочник из дерева библиотек в БД справочников. В дереве системы появится ссылка:
При необходимости нужно установить связь со всеми справочниками, которые необходимы для работы проекта
Для работы с таблицей данных в графическом клиенте нужен контрол Справочник.
В дереве объектов создадим объект, окно, назначим это окно стартовым. В это окно вытащим из категории палитры Контролы графический элемент Справочник. В панели свойств найдем параметр Источник данных и на него перетащим библиотечный элемент Справочник. Появится связь:
Откроем редактор справочника с помощью кнопки, расположенной по центру элемента. Добавим несколько столбцов и в строке Поле выберем нужные поля справочника:
Запустим режим исполнения с загрузкой конфигурации. Если данных в базе данных нет, то изначально отобразится пустая таблица:
Нажмем на кнопку “+”. После этого появляется всплывающее окно, с помощью которого можно добавлять строки в базу:
После нажатия кнопки Применить запись появится как в справочнике, так и в базе данных. Вид справочника:
Вид БД:
Каждую запись можно редактировать и удалять, для этого можно воспользоваться панелью инструментов справочника:
При попытке удалить строку из базы будет отображаться сообщение:
Слово undefined можно заменить на значение столбца удаляемой строки. Это делается с помощью настройки поля Отображаемое имя:
После этого в режиме исполнения при удалении строки будет отображаться нужное значение:
Внутри редактора справочника также можно менять различные настройки. Например, менять имена столбцов, включать/отключать фильтрацию значений столбцов, а также ограничить количество вводимых/выводимых значений с помощью формата значений tN, где N - количество вводимым символов:
В результате заголовок столбца отличается от имени поля справочника:
Можно применить фильтр к столбцу, чтобы выделить только нужные значения в таблице:
Значение столбца Улица ограничено выставленным форматом значений в 10 символов t10:
Сделаем такие же Справочники и перенесем их в БД справочников для таблиц Models и Rates. В описываемом проекте окна со справочниками Адреса, Модели и Тарифы открываются во всплывающих окнах, так как на стартовом окне будет отображаться справочник Main:
В главном справочнике Main мы будем вводить данные показаний счетчиков, при этом адрес, наименование прибора и данные по тарифу выбирать из уже готового списка, т.е. пользователю системы вводить все данные не потребуется. Создадим элемент Справочник Main аналогично остальным, но, так как эта таблица имеет связи с другими таблицами, типы данных полей этого справочника должны иметь тип связанного с этим полем с помощью диаграммы другого справочника, например, со справочником Address
В результате справочник в пользовательской библиотеке будет выглядеть следующим образом:
Переносим справочник Main в БД справочников. На стартовое окно из палитры вытаскиваем графический элемент Справочник, связываем источник данных этого справочника со справочником Main в библиотеке, открываем редактор справочника. Так как поля этого справочника имеют типы данных других справочников, то в поле столбца будут отображаться поля всех справочников:
Задавая поле, мы выбираем столбцы, которые хотим отображать. В этом случае стоит учитывать, что если столбцы оставить для редактирования, то при добавлении новой строки в общую таблицу остается возможность добавлять значения из разных строк других связанных таблиц. На следующих риуснках явно отображается эта ситуация: в справочнике Main у столбцов City, Street, Building и House из справочника Address не выставлена настройка Запрет редактирования. Это приведет к тому, что в режиме исполнения при добавлении новой записи можно выбрать значения из разных строк таблицы Address
Вид окна Добавление к клиенте визуализации:
Т.е. в основную таблицу можно добавить как разные названия улицы, так и разные номера домов, хотя в этом примере, по условию так делать нельзя. Для того, чтобы можно было выбирать только значения одной строки, надо выставить настройку Запрет редактирования у всех нужных столбцов. В этом примере это idAddress.Street, idAddress.Building, idAddress.House, IDModel.Number, idRates.Value1, idRates.Value2.
Стоит отметить, что во всех справочниках мы не отображаем столбцы id с первичным ключом и идентификаторов, так как в этом нет необходимости. В противном случае у этого столбца надо обязательно выставлять настройку Запрет редактирования.
В итоге после запуска режима исполнения мы получим таблицу в таком виде:
В самой таблице базы данных Main значения такие:
В справочнике видим данные из связанных таблиц. В самой же таблицу Main в базу данных попали только введенные значения столбцов этой таблицы.