Создание собственной настройки

База знаний

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

Ответить
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Создание собственной настройки

Сообщение Max_Fin »

Создание собственной настройки в Галактике версий 5.85 и 7.11

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

Воспользуемся ОИ 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;
Теперь реализация обработки внутри собственного интерфейса inttunem.vip

Код: Выделить всё

#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. //
Желаю успехов в создании собственных настроек!
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Галактика 712 до (common3)

Сообщение Max_Fin »

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;
  Procedure CallPostMetod (Code : string);     // вызвать отложенный пост-метод для настройки
  Procedure SetNextNumberTune (Num : word);    // установить следующий номер настройки
  Procedure DeleteTune (Code: string);         // удалить настройку
end;

// ObjCreateTunePlugin - вызвается интерфейсом CreateTune в конце создания настроек.
// Сторонние разработчики могут написать свои реализации этого объектного интерфейса, чтобы дополнить список.
// Также можно использовать в патчах.
// Все реализации должны начинатся с префикса "CreateTunePatch_"
ObjInterface ObjCreateTunePlugin;
  // эта процедура вызвается в момент построения списка настроек
  // TuneRef - ссылка на интерфейс создания настроек используется, для обратной связи
  Procedure AddTunePatch (TuneRef : objCreateTune);
  function  SetLastDateModTune : date;   // установить дату модификации реестра
end;

VipInterface CreateTune implements objCreateTune;
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;
  Function EraseTuneVal (TuneCode : string; TuneObj : word; cUser : comp; Val: string) : word;   // Почистить стринг значение настройки
  Function RestoreTuneVal (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;
Последний раз редактировалось Max_Fin 04 июл 2005, 09:44, всего редактировалось 1 раз.
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Галактика 712 (common3)

Сообщение Max_Fin »

Crtune.vih

Код: Выделить всё

//********************************************************************************
//                                                        (c) корпорация Галактика
// Галактика 7.12 - настрокйи
// API создания настроек
//********************************************************************************

// начиная с версии 5.85 API создания настроек позволяет делать неограниченное
// количество интерфейсов добавления настроек. Предназначен для выпуска патчей и сторонних
// разработчиков.
// Для этого служат объекты objCreateTune и ObjCreateTunePlugin

//********************************************************************************
// objCreateTune - предоставляет доступ к функциям создания настроек
ObjInterface objCreateTune;
//--------------------------------------------------------------------------------
  Function AddPart ( SysType: word;  Code: string; CodeParent: string; Name: string; Help: word ): word;
  //------------------------------------------------------------------------------
  // следующие 3 функции являются клоном AddPart с явно указанным типом
  Function AddPartA(Code: string; Name: string; Help: word ): word; // All = Sys+User, имя родителя должно быть установлено SetParent
  Function AddPartS(Code: string; Name: string; Help: word ): word; // Sys,  имя родителя должно быть установлено SetParent
  Function AddPartU(Code: string; Name: string; Help: word ): word; // User, имя родителя должно быть установлено SetParent
//--------------------------------------------------------------------------------
  Function AddTune ( SysType: word;
                     Code: string; CodeParent: string;
                     Name: string; ValType: word;
                     DefaultValue: string; Mask: string[20]; Help: word  ): word;
  //------------------------------------------------------------------------------
  // следующие 2 функции являются клоном AddTune с явно указанным типом
  Function AddTuneS(Code: string;
                    Name: string; ValType: word;      // sys, имя родителя должно быть установлено SetParent
                    DefaultValue: string; Mask: string[20]; Help: word  ): word;
  Function AddTuneU(Code: string;
                    Name: string; ValType: word;      // user,имя родителя должно быть установлено SetParent
                    DefaultValue: string; Mask: string[20]; Help: word  ): word;
//--------------------------------------------------------------------------------
  Function AddListTune (Code: string; ValueNo: word; Value: string): word;
  Function AddList (ValueNo: word; Value: string): word; // AddListTune(

  Function AddIntrTune (Code: string; Intr: string): word;
  Function AddIntr (Intr: string): word;

  Function SetRghTune  (Code: string; Rgh: word): word;
  Function SetRgh (Rgh: word): word;
  Function MakeInvisible: word;

  Procedure CallPostMetod (Code: string);                       // вызвать отложенный пост-метод для настройки
  Procedure SetNextNumberTune (Num: word);                      // установить следующий номер настройки
  Procedure SetParent(CodeParent: string);                      // установить родителя
  Procedure SetParentAndNumber(CodeParent: string; Num: word);  // установить родителя и номер настройки
  Procedure DeleteTune (Code: string);                          // удалить настройку

  Function SetCorpoType  (Code: string; Tip: word): word;       // установить Корпо-тип настройки
end;

//********************************************************************************
// ObjCreateTunePlugin - вызвается интерфейсом CreateTune в конце создания настроек.
// Сторонние разработчики могут написать свои реализации этого объектного интерфейса, чтобы дополнить список.
// Также можно использовать в патчах.
// Все реализации должны начинатся с префикса "CreateTunePatch_"
ObjInterface ObjCreateTunePlugin;
  // эта процедура вызвается в момент построения списка настроек
  // TuneRef - ссылка на интерфейс создания настроек используется, для обратной связи
  Procedure AddTunePatch (TuneRef: objCreateTune);
  function  SetLastDateModTune: date;   // установить дату модификации реестра
end;

VipInterface CreateTune implements objCreateTune;
TuneSpec.vih

Код: Выделить всё

//********************************************************************************
//                                                        (c) корпорация Галактика
// Галактика 5.85 - настройка
// Объекты TuneFuncObj и ObjPostTunePlugin для патчей и сторонних разработчиков
//********************************************************************************

// Начиная с версии 5.85 пост-методы обработки настроек можно делать
// в неограниченном количестве интерфейсов.


ObjInterface TuneFuncObj;
  Function TuneMessage     (Msg: string; Mode: word): word;

  Function PostUpdateSpec  (TuneCode: string; TuneObj: word; TuneUser: comp): word;

  Function TuneEditOn      (TuneCode: string;  cUser: comp): word; // сделать настройку редактируемой
  Function TuneEditOff     (TuneCode: string;  cUser: comp): word; // сделать настройку НЕредактируемой
  Function TuneEditSetup   (TuneCode: string;  cUser: comp; boOn: boolean): word;
  // если true, вызывается TuneEditOn, иначе TuneEditOff

  Function SetTmpRgh       (TuneCode: string; TuneObj: word; cUser: comp): word; // не использовать!!! (= TuneEditOff для совместимости)
  Function ClearTmpRgh     (TuneCode: string; TuneObj: word; cUser: comp): word; // не использовать!!! (= TuneEditOn  для совместимости)

  Function EraseTuneVal    (TuneCode: string; cUser: comp; Val: string): word;
  // Почистить стринг значение настройки

  Function RestoreTuneVal  (TuneCode: string; cUser: comp): word;
  // Восстановить почищенное стринг значение настройки

  Function TuneDisplayOn   (TuneCode: string; cUser: comp): word; // RestoreTuneVal + TuneEditOn
  Function TuneDisplayOff  (TuneCode: string; cUser: comp): word; // EraseTuneVal + TuneEditOff
  Function TuneDisplaySetup(TuneCode: string; cUser: comp; bool: boolean): word;
  // если true, TuneDisplayOn, иначе TuneDisplayOff

  Function UpdTuneStr(TuneCode: string; TuneUser: comp; s: string): word; // модификация строкового значения настройки
  Function CallPostMetodExt  (TuneCode: string): word; // вызов постметода с анализом


  Function SetBit (var Val: word; Num: word; Bit: boolean) : word;
  Function GetBit (Val: word; Num: word) : boolean;

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;
Последний раз редактировалось Max_Fin 04 июл 2005, 16:27, всего редактировалось 1 раз.
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Особенность для Галактики 712, включая common3

Сообщение Max_Fin »

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

Соответственно наш интерфейс addtunem.vip измениться:

Код: Выделить всё

#include CrTune.vih 
VipInterface CreateTunePatch_AddOneMF implements ObjCreateTunePlugin; 

Interface CreateTunePatch_AddOneMF 
Create View 
Var 
 wState : word; 
; 

public function SetLastDateModTune: Date;
{
  SetLastDateModTune := Date(01, 07, 2005);
}


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.
Ответить