Страница 1 из 1

Обработка изменения настройки

Добавлено: 26 июн 2017, 14:12
Masygreen
Есть некоторая настройка XXXX ftBoolean, надо чтоб после её if (not boGetTune('XXXX')) изменения ряд настроек становились недоступными TR.SetRghTune('XXXXX.YYYY',ttREAD);, и обратно если true
Вроде как есть ObjPostTuneComponent, но как им пользоваться не пойму..хелп???

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

  VipInterface ObjPostTune_mi_tune implements ObjPostTuneComponent licensed (FREE);
Interface ObjPostTune_mi_tune; // Cacheable;

Create view;
//------------------------------------------------------------------------------
// TR - ссылка на интерфейс TuneFunc.
// Возвращает False если обработка не производилась, иначе true
Public Function PostUpdateComponent(TR: TuneFuncObj; TuneCode: string; TuneObj: LongInt;
TuneUser: comp): boolean;

// Локальные переменные
var
  vbSetChildTunesOn: boolean; //
var
  vsTune_UpdRight: string;    //

{

Re: Обработка изменения настройки

Добавлено: 26 июн 2017, 20:03
edward_K
Помимо всего подписывается обработчик (макроопределение в TuneSpec.vih)

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

#include  TuneSpec.vih
#include  PostFunc.vih

VipInterface PostTune_L_Sklad implements ObjPostTuneComponent  licensed (FREE);

// Обработчик точки расширения epPostTuneComponentGetVipName
#HandlerPointExtPostTuneGetVipName(L_Sklad,48)

#doc
 Дополнительные действия после редактирования настройки в компоненте L_Sklad
#end

Interface PostTune_L_Sklad;
Create view From
  x$users
;

//******************************************************************************
#include ReesFunc.vpp

var ifcPost : PostFunc;

// Возвращает False если обработка не производилась, иначе true
Public Function PostUpdateComponent (TR : TuneFuncObj; TuneCode : string; TuneObj: LongInt; TuneUser : comp) : boolean;
{

//******************************************************************************
// Дополнительные действия после редактирования настройки
//******************************************************************************
//   Входные параметры
//     TuneCode: string  - код настройки
//     TuneObj: LongInnt - офис и/или филиал пользователя ( использовать функцию UserOfficeFilial(x$Users.atl_nrec))
//     TuneUser: comp    - ID пользователя
//******************************************************************************
// !!! Внимание !!!
//     Строковые констаты кода настройки в CASE писать только в верхнем регистре
//        'UKS.FORMCODE.AUTOCODE': - правильно
//        'UKS.FormCode.RuleCode': - НЕправильно - Ваш пост-метод не сработает
//     В остальных местах коды настроек можно писать в смешанном регистре.
//******************************************************************************
// !!! при изменении системной настройки и необходимости изменить связанную
//     с ней пользовательскую, делать это ДЛЯ ВСЕХ пользователей,
//     используя _LOOP x$users
//******************************************************************************
// !!! следует использовать TuneEdit_ для настройки возможности редактирования
//     или TuneDisplay___ для настройки отображаемости значения настройки поля
//     в зависимости от того, актуально ли ее значение при ее недоступности
//     для редактирования
//******************************************************************************
// !!! В коде крайне желательно использовать комментарии
//******************************************************************************

  var b       : boolean;
  var tmpWord : word;

  PostUpdateComponent := true;

  case TuneCode of
//******************************************************************************
  'OPER.L_F':
    {
      var wT: word;
      wT:= wGetTuneEx(TuneCode, TuneObj, TuneUser);

      _loop x$users
        {
          if ( wT = 3 )  // ФИФО по складам
            TR.TuneEditOn( 'Oper.CarryPartyLF', UserOfficeFilial(x$Users.atl_nrec), x$users.atl_nRec)
          else
            TR.TuneEditOff ('Oper.CarryPartyLF', UserOfficeFilial(x$Users.atl_nrec), x$users.atl_nRec);
        }
    }

.......
  // если не зашли в case
  else  // case
    PostUpdateComponent := false;
  end;  // case
//******************************************************************************
}  // PostUpdateComponent

end. // интерфейс


Re: Обработка изменения настройки

Добавлено: 27 июн 2017, 12:36
Masygreen
Спасибо - дело в заглавных буквах было ...ппц .. как до этого можно догадаться???

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

/******************************************************************************
// !!! Внимание !!!
//     Строковые констаты кода настройки в CASE писать только в верхнем регистре
//        'UKS.FORMCODE.AUTOCODE': - правильно
//        'UKS.FormCode.RuleCode': - НЕправильно - Ваш пост-метод не сработает
//     В остальных местах коды настроек можно писать в смешанном регистре.
//******************************************************************************

Re: Обработка изменения настройки

Добавлено: 27 июн 2017, 12:46
edward_K
Найдите указанный vih - поймете. Иногда лучше придерживаться стандарта, а не делать свое.
На вход HandlerPointExtPostTuneGetVipName подаете любую(!) фразу (F_UserReportMY - она же должна быть в имени интерфейса), не совпадающую со стандартными компонентами, + номер побольше, типа 210. обработчики не должны пересекаться по номеру

Re: Обработка изменения настройки

Добавлено: 12 июл 2017, 11:00
Masygreen
edward_K писал(а):Найдите указанный vih - поймете. Иногда лучше придерживаться стандарта, а не делать свое.
На вход HandlerPointExtPostTuneGetVipName подаете любую(!) фразу (F_UserReportMY - она же должна быть в имени интерфейса), не совпадающую со стандартными компонентами, + номер побольше, типа 210. обработчики не должны пересекаться по номеру
а вот такой неожиданны вопрос как все левые "

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

HandlerPointExtPostTuneGetVipName
" разрегистрировать? достаточно отключить ресурс и пересчитать настройки или где-то надо почистить еще ?

Re: Обработка изменения настройки

Добавлено: 12 июл 2017, 11:12
edward_K
достаточно ресурс отключить.