Найти в Дзене
ITэ и ТэДэ

ИСУБД CronosPro, мой подход к работе. № 4 Словари ч.1 Каркас модуля.

Словарь, как много в этом слове! Что я хочу от элемента ввода словарного значения? Подпись - название поля, возможность поиска на вводе, возможность выбрать значение из ограниченного списка значений по умолчанию. Открыть словарь для изменения. Если было установлено какое то значение, возможность отменить изменения. Мне видится как то так: Если интересно, подписываемся, читаем, Вам не сложно, нам в копилку :) Предыдущая статья в этой теме: При вводе значения в поле со списком происходит поиск по словарю с отображением найденного в выпадающем списке. При нажатии кнопки открывается окно диалога "Словарь". Словарные поля применяются во многих базах и не по одному разу. Реализовывать эту конструкцию по несколько раз на форму, да в нескольких формах... такое себе занятие. Поэтому буду писать модуль, в терминологии Кроноса, или Класс в терминологии Lua и ООП. Подпись поля в класс добавлять не буду, проще красиво размещать на форме по отдельности.
На форме для реализации кл

Словарь, как много в этом слове! Что я хочу от элемента ввода словарного значения? Подпись - название поля, возможность поиска на вводе, возможность выбрать значение из ограниченного списка значений по умолчанию. Открыть словарь для изменения. Если было установлено какое то значение, возможность отменить изменения. Мне видится как то так:

Если интересно, подписываемся, читаем, Вам не сложно, нам в копилку :) Предыдущая статья в этой теме:

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

Словарные поля применяются во многих базах и не по одному разу. Реализовывать эту конструкцию по несколько раз на форму, да в нескольких формах... такое себе занятие. Поэтому буду писать модуль, в терминологии Кроноса, или Класс в терминологии Lua и ООП. Подпись поля в класс добавлять не буду, проще красиво размещать на форме по отдельности.
На форме для реализации класса создаю "Панель", высотой 30 и минимальной длинной 150. В ней хорошо поместятся нужные элементы:

рис.2 Как будет  выглядеть.
рис.2 Как будет выглядеть.

В отладчике, В списке скриптов банка - добавлю новый элемент. Назову модуль (класс) - TVocSingle - для работы с одинарными словарными полями. И минимальный каркас модуля:

На форме размещаю надпись (GenderLb) и панель (GenderPnl) которая будет передана в функцию new(ctrl) моего класса. Старую реализацию выбора пола пока не трогаю.

рис. 4 Доработаная форма.
рис. 4 Доработаная форма.

В скрипте формы за реализацию класса отвечает переменная Gender и подключается соответствующий модуль.

рис.5 Объявление переменной.
рис.5 Объявление переменной.

Инициализация происходит в функции Форма_Open() выполняющейся до отображения формы на экране. В функцию new() класса передается панель на которой программным методом создам необходимые элементы интерфейса.
Проверяю на корректность создания модуля, при ошибке из модуля возвращается nil и строка с текстом ошибки. При корректном срабатывании переменная Gender будет ссылаться на экземпляр класса TVocSingle.

рис.6 Инициализация класса.
рис.6 Инициализация класса.

В функции Форма_UnloadForm() скрипта формы, вызываемого при закрытии формы, проверяю наличие созданного класса в переменной Gender. И если он создан, то вызываю функцию его удаления. Кронос по идее и сам справится, но, что сам создал - то сам убрал! Хорошая привычка.

рис.7 Уборка за собой.
рис.7 Уборка за собой.

Далее содержимое модуля (класса) TVocSingle. В функции new() происходит проверка на наличие переданного в нее элемента "Панель" и соответствует ли его тип "Panel". В проверке допускается тип "GroupBox" так как в произвольном порядке CronosPro меняет тип передаваемого элемента с "Panel" на "GroupBox". Каких-то закономерностей я в этом не определил. А так работает.
Ну и проверяю минимальный размер переданной панели.

рис.8 Проверка на корректность переданой панели.
рис.8 Проверка на корректность переданой панели.

Затем вызывается локальная функция Prepare() в которой создаю элементы "Выпадающий список" (ComboBox) и "Кнопка" (Button). В глобальной функции Delete() удаляются созданные программно элементы.

На этом каркас модуля (класса) для словарного поля готов. В запущенной форме выглядит:

рис.10 Элемент TVocSingle для работы со словарным полем.
рис.10 Элемент TVocSingle для работы со словарным полем.

Реализация взаимодействия с базой данных в следующей части.

Традиционно:

Листинг скрипта формы Данные_на_Лицо к ч.4-1
Листинг модуля TVocSingle ч.4-1

Копия формы "Данные на Лицо".

Копия скрипта банка TVocSingle.

Копия полного банка Primer1.