Динамичный интерфейс без перекомпиляции

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Динамичный интерфейс без перекомпиляции

Сообщение Serges »

Задача: сделать интерфес выбора должностных лиц, подписывающих документ. Список лиц, как правило, не превышает 10 чел., поэтому вызывать Persons для этой задачи - не совсем правильно, учитывая численность работающих (более 1000). Поэтому, более подходящим является, например, элемент RadioButton.
Вместе с тем, указанный список - вещь непостоянная, зависящая от изменений в штатном расписании и причуд руководства.

Вопрос: можно ли список хранить отдельно от интерфейса - например, в текстовом файле, откуда он будет подставляться в диалог выбора?
Галактика 8.10, Oracle 10g / 10.2.0.4
Galpro_tut
Постоянный гость
Сообщения: 68
Зарегистрирован: 29 мар 2005, 17:49

Re: Динамичный интерфейс без перекомпиляции

Сообщение Galpro_tut »

Лучше ХРАНИТЕ В ЛЮБОЙ НЕ ИСПОЛЬЗУЕМОЙ ТАБЛИЧКЕ в БД
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Динамичный интерфейс без перекомпиляции

Сообщение m0p3e »

Можно извратиться с настройками. Например сделать аналог "Доступные контрагенты". Все довольно просто. Таблица есть.
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Re: Динамичный интерфейс без перекомпиляции

Сообщение Serges »

Внимательно изучив накопленный на форуме опыт ;), пришел к решению задачи таким образом.

Создается текстовый файл podpis.txt, где каждая строчка - ФИО и должность подписывающего, разделенные двоеточием.
Файл цепляется интерфейсом:

interface select_podp 'Документ подпишет' doaccept;
show at (,,60,20);

table struct tmp_db
(
dol: String,
fio: String
)
with index
(
tmp_db01 = fio
);

create view var _dol:string _fio:string;
as select * from tmp_db;

var f1n : string;
tmpStr : string;

Parameters _dol, _fio;

Browse sel_podp;
fields fio 'ФИО' : protect;
dol 'Должность' : protect;
end;

File My1File;

handleevent
cmInit: begin
delete all tmp_db;
f1n := 'podpis.txt';
If My1File.OpenFile(f1n,stOpen) then
{
do
{
My1File.ReadLn(tmpStr);
tmp_db.dol := ExtractDelimitedWord(tmpStr,1,':');
tmp_db.fio := ExtractDelimitedWord(tmpStr,2,':');
insert current tmp_db;
}
While Not My1File.EOF;
}
Else Message ('Невозможно открыть файл!');
end;
cmDefault: begin
_dol := tmp_db.dol;
_fio := tmp_db.fio;
end;
end;
end.
Галактика 8.10, Oracle 10g / 10.2.0.4
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Динамичный интерфейс без перекомпиляции

Сообщение edward_K »

а все таки лучше создать свою табличку ( как подсмотри в конвертере), не забудь потом вызвать
UPDATE X$FILES WHERE XF$CODE = 0 SET XF$CHECKSUM = 0;
так ты дашь возможность пользователю самому попдравлять список должностей.
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Re: Динамичный интерфейс без перекомпиляции

Сообщение Serges »

Edward_K
Я не сторонник по всякому случаю создавать свои таблицы и вообще менять словарь ;)

А подправлять список - можно добавить в интерфейс кнопку, которая будет запускать ProcessText.
Галактика 8.10, Oracle 10g / 10.2.0.4
wildman
Новичок
Сообщения: 21
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Украина. Киев.
Контактная информация:

Re: Динамичный интерфейс без перекомпиляции

Сообщение wildman »

Всем привет.

Иногда использую следующую методику решения вопроса хранения таких данных.
1) Делаю внешний аттрибут с "Финсированным" названием для таблицы X$Files
2) Создаю значение внешнего аттрибута для первой записи в X$Files
3) Мемо-поле значения аттрибута использую как место хранения временной таблицы в виде строк с разделителями
4) Для удобства пишу интерфейс редактирования это таблицы.

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