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

<< Click to Display Table of Contents >>

Navigation:  Создание окон для клиента визуализации > Библиотека HMI > Категория Контролы > Справочник >

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

Постановка задачи:

Заносить показания приборов на объектах в зависимости от тарифа. Для этого в базе данных MSSQL есть четыре таблицы:

Address с адресами объектов,

Models с наименованиями приборов,

Rates с текущими тарифами,

Main - показания.

Таблицы. Первичный и внешний ключ. Представления

Сначала обозначим требования к таблицам в MSSQL. В таблице должен быть столбец - первичный ключ (Primary key) с выставленной настройкой Спецификация идентификатора.

Таблица Address

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

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

City - город,

Street-  улица,

Building- корпус ,

House - номер дома .

Вид таблицы данных Address в MSSQL, где отображен столбец с первичным ключом и идентификатором.

_Xs5ceOgnN7q_5jgBPNsZyq8Vp2ChpU1qKrKD11Ap5r2ihyewk3OyDW8GBiklta36T9IZjZiKLI1_WCxeFRLblaH0fP9T-b_iHkkGVwNogPC432Z2soKynTMcCQwNrGdkeTL4V_5Столбцу Building разрешено использовать нулевые значения, так как корпуса здания может и не быть:

Таблица  Models

В таблице списка приборов Models первичным ключом с идентификатором является столбец IDModel, а также другие столбцы:

Name - это название прибора,

Number - его регистрационный номер -  Number.

Вид таблицы:

Kbc8R44PikEh5jv-0Jk1BbvenwBGivYXpvv-zEcgeeij0CMbbgeivaU0dWQXWYc2p_-Gn3Bh_4LrKCZ4FRIn9Gtt5n8R93GsolnoU2VMLJVsJIUjp2EiTMlH1fCff0RYhzwqKc3N

Таблица Rates

В таблице тарифов Rates первичный ключ с идентификатором idRates и столбцы: Rate, Value1, Value2:

jBBMhOXN3aUuwDhjts-872qN5Vl1CZA-lt3kn2xPxRfB3uhTnt50lQbNHDNxKi7DC5rdTucgMjprYHgYu1cG9EkXGc6kVwXnZU4r12XQW_Umx3YXkGh3yVLh7HmnS2eN__WMTFqk

Таблица Main

Главная таблица имеет следующие столбцы:

idMain - первичный ключ и идентификатор,

DateMeter - время снятия показания,

Meter 1, Meter 2 - значения самих показаний.

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

Вид таблицы:

OoZxr_qT45h3oCxGm5Q8_cd6DlY8hAy7nT_Uhq0rj9ndxL50qZTknU76khn-566YOf8UkeNMJnx3KCWdYdXxUOiceEVq48WJd7e4jOg4xpJ1DmTnE5_PuseGsgySCpY-c5J1U_AK

Создание диаграммы

Для  того, чтобы в момент задания значений в главной таблице можно было отображать данные из других таблиц необходимо таблицы добавить в диаграмму баз данных:

PnvCvfJpItVxwwhwSg9rrknpIV4VgudB1qjnlMUPTmvV0oddaJ4YM-Zm-G_zkbxGkg6jq7PxEL7b_BxyiRxwVg39tJAWcsobWC75CFSGoB5wvrgNLcuVNwlX9U_H6BTLCfVL-T3T

 

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

 

33Yjb1C7XHYngBqs8H11vnsE7loxyKxChLj9ttEI2IsirAwIwyHUfuEgKqTxdleknTSue1essrfyYvRsWczBvcx9m8nJlisE3T-Gt_GrR3kSvz374FQa0G1arHip8GvbF7c0iU2G

 

После этого столбцы таблицы Main, с которой была установлена связь, приобретут свойство внешнего ключа.  Вид связанных таблиц в диаграмме базы данных:

LEtXW8ux36SbmVga8l6KqSjYzl9RtxviGExKAihDg_pH_RKmn6YvvNXQPQhBIrzL88MPahEeoCapL6yw_TMLQfSDiBS2gGo6WE4NpwYIgbhForT8zPivQbMw33JoIMyxaXIakdL3

Таблицы для примера готовы. Можно перейти к их добавлению в проект MS4D.

Справочник как тип данных

Для работы справочников в проекте MasterSCADA 4D нужно завести соответствующий элемент в пользовательской библиотеке. Элемент называется Справочник. Создаваемый в библиотеке элемент должен называться точно также как таблица в базе данных, а поля справочника иметь такой же тип данных как столбцы этой таблицы. Для столбца с первичным ключом обязательно должна быть выставлена настройка Ключевое поле. Настройка Отображаемое имя требуется для отображения значения столбца удаляемой строки, а также отображения отладочного значения параметра типа Справочник, об этом позже.

Вид справочника после изменения имени и добавления полей:

2sReLViOW513vSkWAFl4B537m9hI7p0_fxF4ARoHDTxE4Ic2Ewuql-wbGmmOj-mXaOwhesyVoLn6vAe8R1KdCPdYfZizQHyiYLTSO09pSdYG8pmhLfix0BSIjsgblkYo7PDtd7tM

Панели свойств некоторых полей справочника:

8sYiV3xwJHqf9yZ91sEy21fr6kil-YGKO8aMy18O7woR-u2HlQNTQdWodxNxeXBr6uJI4eysf9d3Ji1rlNdTYWRKQU7Mo8WFG7HoBhcyuSoklhHyOY31ZkpETL5ytCs7r9dbB0swOeC-gYw8gnjdrBW4CzmBLVij_5xNCDRuJFbYlXLjdQGMMois6LCTBiZFMUrKg3qjQ908H9QXVrYc17bjAuOirWB-eSV4sqeMdLbfpPIunSGabOdGdZARUu5FXkM2Cp4ZHNDyYIrA

БД справочников.

Для установления связи с сервером MSSQL нужно добавить БД справочников в папку Архивы узла:

3OufMzeqxcxOa4fMzndIbGyhlbn1U4yqzfOigcZvNp0-MryKt8ZBh2pAlmw9CqRDxuLE5_XTqfrSfe1e1M_wcUia4YwQSUp4APOr1xaJ5fj_mOH7RkDStSs3nxYSiR057XzcrtD6

 

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

hmi_trmd6img367

Далее необходимо установить связь между созданным ранее Справочником в библиотеке и данным элементом. Для этого методом Drag&Drop нужно перетащить Справочник из дерева библиотек в БД справочников. В дереве системы появится ссылка:

4FVXCIvCPQINGufq_bfPgP3dNEoTYk78GE2ltfwZ_QRz75SYP5ZJvWiJgnuoTJif39cVv2WsX3EsG81o05Tvhnvb5V7_4UD16zUzdBsAtJaoeePSEUxxjj11h9AgPgmUdeJ3K4GZ

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

Графический элемент справочник

Для работы с таблицей данных в графическом клиенте нужен контрол Справочник.

В дереве объектов создадим объект, окно, назначим это окно стартовым.  В это окно вытащим из категории палитры Контролы графический элемент Справочник. В панели свойств найдем параметр Источник данных и на него перетащим библиотечный элемент Справочник. Появится связь:

s399ANKxp0zBaAtxRAT_gXiVuMByCVfZhXXVdRXZ5jdEAt4hordKOhyBwZuYZRq2L5q44r0EImo5TWgvvQrXKRJ7yHA8Q2aiuQlDoJmRMo8_fWEB4gsEHcYdCI0q6FWHIJw4wuss

 

Откроем редактор справочника с помощью кнопки, расположенной по центру элемента. Добавим несколько столбцов и в строке Поле выберем нужные поля справочника:

NjDCwIjSxHwOBDb3R_AG0ncYE1v6ySnq0TPEJwymqMLynFHsFIlTl8UPOb48eG2GtObVzSazkM3GoVqQlmXvEL1_HdSMmrk1KCeLWk3BKGIz76o-969nQScpspTNFIL9uQO7ZBbo

Работа со справочником в клиенте визуализации

Запустим режим исполнения с  загрузкой конфигурации. Если данных в базе данных нет, то изначально отобразится пустая таблица: MsrvnC_zkN36IefsNdoWHQIEu1fmC3tROmWxnLBJSwG9qlI0D8scjC0QY-wowTbvhZZmfF3Dj7AlWpovfGI7u322sX68ZKs0ECjC0Bb7DsAi5WtMCGAbuDKW9pyjxKzPcYAAeZXy

Нажмем на кнопку “+”. После этого появляется всплывающее окно, с помощью которого можно добавлять строки в базу:

zMa8LkPkN1ESSos9rsQq029JfBHkTV_iIFXLNqriWyi_psYrTH-WzY6lrjVf5NHK3fjyoYM1dH2jrYXglwiuBQ4fUtV-R5gBooadDwWUyd7vU9alfTRDLKMRggqA_-q5v6G1Zofp

 

После нажатия кнопки Применить запись появится как в справочнике, так и в базе данных. Вид справочника:

Ajb4wLI96qNGiocgAw90Yu0-WAGiK0bTR8A2HTo95AT8EE0HI0BE1k0B_2g9dDX90ES9RcrLnfjBLPUga3BXZj3EXpibm8IKJNiytsTomHbmLSKX4Uwx05zaqvdsayN1v0UDkoMC

Вид БД:

NidMGKqGZDbNdso7ZwY423IWmvuXUjx4OKS_g0yG3NefM9pXyelQJ5b5URQ5Z2XG03IFj8EBbVLdOaehdcNnGnxqNBclg5FJ8RU22JUrbnlYvfmBLvTuhSdSC-s0j5bXsHnVOfFZ

 

Каждую запись можно редактировать и удалять, для этого можно воспользоваться панелью инструментов справочника:

q7n5VsxSInFC1L48XYUI87I2hb3Sqy2RbGBSXCzFsaCb8U_CYBnlb-FWXAXdGUAWj4emsF5uyK5m0EcW3Wo89jJdablh7bocP78wuwsxmf1sDtwsuFhcI-abCLvqO-Lvd1mRDzBx

При попытке удалить строку из базы будет отображаться сообщение:

GOiEtsbQa6bOAtQdFpZemcOVnmQ9tjK3qeYmsK37uAr17WthjRhs4Ba5ODyglZta3ev9zjC35xA3QFMYivryPgBlAsFVYh6uZslzi96NBm9StXoFrSNVNGYHNGZOyH8mxJM8903m

Слово undefined можно заменить на значение столбца удаляемой строки. Это делается с помощью настройки поля Отображаемое имя:

kP7jhd-lsOq__5BrjzTAZbSujuAU2cOPCkTvbJugAzYCn-1ThVALTKb8frDPElDO3HqJ_0E7Qa1kKh4tJMu_Y14BqdbM0Vh6MtlooUL7oe73_3D3219De2kZpCjSei_oujLkxs-R

После этого в режиме исполнения при удалении строки будет отображаться нужное значение:

ZToEP7eguZb78Do2IV2MdPjbMYU4bBW2z_7xFE3j2JdE2o8LOBcPNXlwPGQ4RNAJR4JH23ycTdOHOMdb3zT4ek_YmJue-a7XIec5AQjC3Id5CyKM239vY8dxsqInAfSF2aj0FbQH

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

 

vISuhNWFIW0JhTVlfoi2hMfrNoiTAGJ215LcgYvjbv62mot81MYG_YxG6hDo7Tj3d1eCuMdw_7bHjJLX37QeTEejUosTH4ErD52W7P8bVDdhPz7u7l7HJGlZdAQv9ak1rCl_uAit

В результате заголовок столбца отличается от имени поля справочника:

yeFk8cloNdXvcSrx8AYy7qLaBA88u8WDrwE8m4akbfwFyWSMnvT1csfNboPZCkAh0K4FQNadfcEKLkjfhiGzUaIbXw9Px9CLfDsZpWfGZ0Sd1TFdmjInp3ghpM5PnpG3A5DUqisg

Можно применить фильтр к столбцу, чтобы выделить только нужные значения в таблице:

CKHyXYswVfJHAx2he2q5Hks8l2YzRY0hRMbXBk6YWgqAQAnfhho0S7aOBTOGRXO2YAfDpmhPEmHuZoWSp8W9MY6eCNmd5RoBuJtye5P1fykkuvyNaMzHEGTuRAHkhBPWxhB5fbR8

Значение столбца Улица ограничено выставленным форматом значений в 10 символов t10:

GOgFBHEWOb4dB000n7JrmIHvR174Uy7pSGJCqFGJhZ7-UL7MtG2vS8SbPDirL3gpVdOn5Vx91oK60RSsmYpw-u8FmG3lnyLmYP2hvN6e7zqB6dYjBMXltlNPhTxXbN7_YGUHqD6J

Сделаем такие же Справочники и перенесем их в БД справочников для таблиц Models и Rates. В описываемом проекте окна со справочниками Адреса, Модели и Тарифы открываются во всплывающих окнах, так как на стартовом окне будет отображаться справочник Main:

9N6DTXdtL-tzPyGMr2PgDONCpX1Ttu3XioWEco9gqu-_YwjzB_QRrqpXs9OstMNU9TDL8fvjj3sJMci2G5bLefmDw-rHbBHwVtDnqeW8L5sBog1sFsBIrqaWo6od-2rT_Xb1KF6t

 

Отображение данных из других справочников

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

nrTksluXmAtRDdRuLyOg_IBYpOD5Joo3Zv_ogJunI7UjkiC9zPbFV5if0ggf3P0Zv5uOV7BJvUN7MubjKwTs5rPhG4hv7CGgRL-wnVSuy4gkD___w76XWm4U1qR4gSDRbT837xNl

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

 

Zrg9-IqrkiGH6j31qvA35UJQcwzAmfD0bhNHxiWuGW_sNhleoA42q9bqS2x_Y1xhsPrBlb0fD9ilDMjpqMYEHq13o20RfS4c9hYxwu1xct0b_TaeKNWcUXO6wm223M4LIrwozn2B

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

FFZL44f9MLQ3QYHKY3PSau1GXXR9HUoiP67so1_qQEwXif84S5qGz16kp9gW1MRu7tJ2esZ9ias68btfThS3zq6yDnEsNvFA47TJq_W1u5PXnXN7xQE5G7K5-Jqls5PEoUzIeM-2

Задавая поле, мы выбираем столбцы, которые хотим отображать. В этом случае стоит учитывать, что если столбцы оставить для редактирования, то при добавлении новой строки в общую таблицу остается возможность добавлять значения из разных строк других связанных таблиц. На следующих риуснках явно отображается эта ситуация: в справочнике Main у столбцов City, Street, Building и House из справочника Address не выставлена настройка Запрет редактирования. Это приведет к тому, что в режиме исполнения при добавлении новой записи можно выбрать значения из разных строк таблицы Address

SR-1EkIG6Gwcj4SebDSEF92aQW4f34tiK57yZqkZmrC-jp8EtKQPN_YrEHqB5Wk7guEeF6KsI0Wi_meAv7E10ugEyx3bw06iygyR9WADvD9Idw_r5fXgo8wksuH76D1N6StyHFX

Вид окна Добавление к клиенте визуализации:

hoVmETHh9Sw2SJEnocFE9b7RmKYHJA656KaiuJN5Y2ChtRZG0_nqkyYZvWDF_zHXcQytXx2p2k7f7jqbonxbHmxCcS4QL4hVKpxaGn9kv_nEbYoLqZzz0T-KQA5mcUrv7jI02rnM

Kr7KZzSNK3eOtoDR_9i1HIy-cA8I_XCwYrVEc_ijY8_Q82ZFxXemobNhoTpdRFl-yRn4pAQEhYnoeObZ1gRsPR510okTDcRrGwtADelsyVIMWodGi1MCLwcMrhNU1O3jgNgHvDbK

 

Т.е. в основную таблицу можно добавить как разные названия улицы, так и разные номера домов, хотя в этом примере, по условию так делать нельзя. Для того, чтобы можно было выбирать только значения одной строки, надо выставить настройку Запрет редактирования у всех нужных столбцов. В этом примере это idAddress.Street, idAddress.Building, idAddress.House, IDModel.Number, idRates.Value1, idRates.Value2.

hqxilAsCUjn1OvQMvkPFE4tfrY6r2BYgShh2JLZUHlq3GF5nDSbF6dVUZHWNJA_RmbP_NIP6i12R5j-zNIfNjM_BwZALB44Ux15fBDlhNPw8JqpCD01JAMB_-ofWemXncoAm_-wn

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

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

l6Hf1hRGpYfjDEryL6SNlx6xpjTAXgHQV8p3atiZwXv82Rq7k5Vm2oOXX0aHFYDCIJHMa_53MiIgmp8bVh6QYSntMKHreDpuHyunQXBhxtld0gh0BiXRUZrEC56r5ino0OfelKds

 

В самой таблице базы данных Main значения такие:

vjTtjIUmxT2mXpN8gcFmnlt1YcK70jzmwbDJNBETJmOZS05haU1Dd8m_u1ZIdR_uHCMc0xaAQVFpifAB1kX95f637fyCKkWPtwZymUmuuEyGqAHCx4V6_7bdPdNolAq7Pb661uYf

 

В справочнике видим данные из связанных таблиц. В самой же таблицу Main в базу данных попали только введенные значения столбцов этой таблицы.