Зачастую для своих разработок необходимо вынести часть настроек в системную настроку Галактики (=H= - Настройка).
Для решения этой задачи необходимо воспользоваться объектным интерфейсом Crtune.vih
Код: Выделить всё
// начиная с версии 5.85 API создания настроек позволяет делать неограниченное
// количество интерфейсов добавления настроек. Предназначен для выпуска патчей и сторонних
// разработчиков.
// Для этого служат объекты objCreateTune и ObjCreateTunePlugin
// objCreateTune - предоставляет доступ к функциям создания настроек
ObjInterface objCreateTune;
Function AddPart ( SysType:word; Code:string; CodeParent:string; Name:string; Help:word ) : word;
Function AddTune ( SysType:word; Code:string; CodeParent:string; Name:string; ValType:word;
DefaultValue : string; Mask:string[20]; Help:word ) : word;
Function AddListTune (Code:string; ValueNo:word; Value : string) : word;
Function AddIntrTune (Code : string; Intr:string) : word;
Function SetRghTune (Code:string; Rgh : word) : word;
Function SetOldNameTune ( Code:string; oldName : string) : word;
end;
// ObjCreateTunePlugin - вызвается интерфейсом CreateTune в конце создания настроек.
// Сторонние разработчики могут написать свои реализации этого объектного интерфейса, чтобы дополнить список.
// Также можно использовать в патчах.
// Все реализации должны начинатся с префикса "CreateTunePatch_"
ObjInterface ObjCreateTunePlugin;
// эта процедура вызвается в момент построения списка настроек
// TuneRef - ссылка на интерфейс создания настроек используется, для обратной связи
Procedure AddTunePatch (TuneRef : objCreateTune);
end;
VipInterface CreateTune implements objCreateTune;
И четко придерживаться этого правила!Все реализации должны начинатся с префикса "CreateTunePatch_"
Для реализации собственных настроек нам понадобиться файл, в котором описываются необходимые константы tunes.inc
Код: Выделить всё
// ╔═══════════════════════════════════════════════════════════════════════════╗
// ║ (c) 1994,97 корпорация ГАЛАКТИКА ║
// ║ Проект : Реестр настроек ║
// ║ Версия : 5.80 ║
// ║ Назначение : Описание констант ║
// ║ Ответственный : Пстыга М.В. ║
// ╚═══════════════════════════════════════════════════════════════════════════╝
// Тип настройки (поле SYSTYPE таблицы TuneDef)
ttSYSTUNE = 0; // Системная
ttSYSUSERTUNE = 1; // Системная и Пользователя для Разделов содержащих обе
ttUSERTUNE = 2; // Пользователя
// Типы данных
// Определены в Атлантисе и доступны в Настройках
// ftBoolean = 1; // Да/Нет
// ftChar = 2;
// ftWord = 4;
// ftLongInt = 6;
// ftDate = 7;
// ftTime = 8;
// ftDouble = 11;
// ftString = 12;
// ftComp = 17;
// Мы определили
ftList = 50; // Список (Word)
ftCompString = 60; // Есть интерфейс выбора и ручной ввод
ftMemo = 70; // Memo
// Коды возврата функций настроек
ttTuneOk = 0; // Операция выполнена успешно
ttTuneWriteError = 2; // Физическая ошибка записи в таблицу
ttTuneReadError = 3; // Физическая ошибка чтения
ttTuneAccessDenied = 4; // Доступ к ключу запрещен
ttTuneInvalidType = 5; // Неверно запрошен тип ключа
ttTuneKeyNotFound = 6; // Ключ не найден
ttTuneValNotFound = 7; // Значение не найдено
ttTuneListNotFound = 8; // Не найдено значение List для настройки
// Уровень доступа (поле Rgh таблицы TuneDef, TuneRgh)
ttMODIF = 0; // Модифицировать
ttREAD = 1; // Только Читать
ttInVISIBLE = 2; // Нет доступа
ttREADInVISIBLE = 3; // Читать и Нет доступа
// Типы прав доступа (поле TuneRgh.TypeRgh)
// и тип объекта настройки (поле OBJ таблицы TuneVal - ttUSER либо ttGroup)
ttUSER = 0; // Пользователя
ttGroup = 1; // Группы
ttCalcUser = 2; // Расчитанная Пользователя
ttTmpUser = 3; // Временная для Пользователя
ttTmpGroup = 4; // Временная для группы
//Строка - разделитель в файле сохранённых настроек
ttSeparator : string[40] = '******************TUNE******************';
cgCreateTunePrefix = 'CreateTunePath_';
cgPostTunePrefix = 'PostTuneUpdate_';
cgInterfaceTunePrefix = 'InterfaceTune_';
Файл назовем addtunem.vip
Код: Выделить всё
#include CrTune.vih
VipInterface CreateTunePatch_AddOneMF implements ObjCreateTunePlugin;
Interface CreateTunePatch_AddOneMF
Create View
Var
wState : word;
;
Public Procedure AddTunePatch (tuneRef : objCreateTune);
{
tuneRef.AddPart(ttSysUserTune, 'TMBASU', '', 'Дополнительная настройка [Тюмбит-АСУ]', 0) ;
tuneRef.AddPart(ttSysUserTune, 'TMBASU.EXPORT', 'TMBASU', 'Экспорт данных из системы Галактика', 0) ;
tuneRef.AddTune (ttSysTune, 'TMBASU.EXPORT.FULLPATHEXPORT', 'TMBASU.EXPORT', 'Путь к базе выгрузки', ftString , '', '255', 0);
TuneRef.AddIntrTune ('TMBASU.EXPORT.FULLPATHEXPORT', 'MF_GETFULLPATHEXPORT');
tuneRef.AddTune (ttSysTune, 'TMBASU.EXPORT.KODBUH', 'TMBASU.EXPORT', 'Код базы бухучета', ftString, 'ТА', '40', 0);
}
END.
Воспользуемся ОИ TuneSpec.vih, который предоставляет такую возможность.
Код: Выделить всё
// Начиная с версии 5.85 пост-методы обработки настроек можно делать в неограниченном количестве интерфейсов.
// Предназначен для выпуска патчей и сторонних разработчиков.
// Для этого служат объекты TuneFuncObj и ObjPostTunePlugin
ObjInterface TuneFuncObj;
Function PostUpdateSpec (TuneCode : string; TuneObj : word; TuneUser : comp) : word;
Function TuneMessage (Msg : string; Mode : word) : word;
Function SetTmpRgh (TuneCode : string; TuneObj : word; cUser : comp) : word;
Function ClearTmpRgh (TuneCode : string; TuneObj : word; cUser : comp) : word;
end;
// ObjPostTunePlugin - вызвается интерфейсом TuneFunc.
// Сторонние разработчики могут написать свои реализации этого объектного интерфейса, чтобы дополнить пост-методы .
// Также можно использовать в патчах. Все реализации должны начинатся с префикса "PostTunePatch_"
ObjInterface ObjPostTunePlugin;
// TuneRef - ссылка на интерфейс TuneFunc используется, для обратной связи
// Возвращает False если обработка не производилась, иначе true
Function PostUpdatePatch (TuneRef : TuneFuncObj; TuneCode : string; TuneObj : word; TuneUser : comp) : boolean;
end;
// ObjIntrTunePlugin - вызвается интерфейсом UserReestrTune при Обработка настроек с вызовом интерфейсов.
// Сторонние разработчики могут написать свои реализации этого объектного интерфейса, чтобы дополнить вызовы интерфейсов.
// Также можно использовать в патчах. Все реализации должны начинатся с префикса "IntrTunePatch_"
ObjInterface ObjIntrTunePlugin;
// Возвращает False если обработка не производилась, иначе true
Function TuneIntrPatch (TuneCode : string; TuneObj : word; TuneUser : comp; Inter : string) : boolean;
end;
VipInterface TuneFunc implements TuneFuncObj;
Код: Выделить всё
#include TuneSpec.vih
vipInterface intrTunePatch_AddOneMF implements ObjIntrTunePlugin;
Interface intrTunePatch_AddOneMF;
Create View
Var
WtUNE: Word;
;
Public function TuneIntrPatch(TuneCode: String; TuneObj: Word; TuneUser: Comp; Inter: String): Boolean;
{
tuneIntrPatch := true;
case UpCase(Inter) of
'MF_GETFULLPATHEXPORT':
{
var s: string;
s := GetDirName('Путь к базе выгрузки');
if s <> '' sSetTune (tuneCode, s);
}
else tuneIntrPatch := false;
end ; // case
}
end. //