Зачастую для своих разработок необходимо вынести часть настроек в системную настроку Галактики (=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. //