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

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

Добавлено: 01 июл 2011, 18:00
Masygreen
Итак вот и я залез в эту ...
Вообщем Сбыт-Акты на услуги надо добавить кнопку или контекстное меню ..
с меню вроде лучше т.к. не надо ни какого наследования и если форма поменяется то пофиг...
Не работает, собирается без ошибок, но не работает .. где накосячил ?

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

#component 'L_SOPRDOC'
const cmCreateTXO = 990099; End;

alter interface AKTUSL; 
overload   end;
var menuID_ni:longint;
HandleEvent

cmHotKeys:{
inherited::handleEvent(cmHotKeys);
menuId_ni := LoadMenu('mnuSoprUslKatSopr');
AddMenuItem(menuId_ni,'****Создать ДО с ТХО****',cmCreateTXO);
PutHotCommand(RunLoadMenu(menuId_ni));}

cmCreateTXO:{  message('hi');}end;end.
Коротко: загружаю меню стандратное, добавляю свой пункт .. перегружаю cmHotKeys...

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

Добавлено: 01 июл 2011, 18:14
galover
скорей всего нужно закомментить inherited::handleEvent(cmHotKeys);
и если не прокатит, то попробовать заменить PutHotCommand на PutCommand.

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

Добавлено: 01 июл 2011, 18:36
Masygreen
как оказалось в cmHotKeys:{ вообще не попадает программа

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

Добавлено: 01 июл 2011, 18:52
galover
так там же в окне вызывается меню, значит нужно

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

alter interface AktUsl;
  window EditSopr;
    handleEvent
        cmHotKeys:{}
    end;
  end;
end.

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

Добавлено: 03 июл 2011, 17:47
spark
galover писал(а):так там же в окне вызывается меню, значит нужно

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

alter interface AktUsl;
  window EditSopr;
    handleEvent
        cmHotKeys:{}
    end;
  end;
end.
У меня вот так получилось:

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

#component 'L_SOPRDOC'
const cmCreateTXO = 990099; End;

alter interface AKTUSL;
overload   end;
var menuID_ni:longint;
window EditSopr;
HandleEvent
cmHotKeys:
{
 //inherited::handleEvent(cmHotKeys);
 menuId_ni := LoadMenu('mnuSoprUslKatSopr');
 AddMenuItem(menuId_ni,'****Создать ДО с ТХО****',cmCreateTXO);
 PutHotCommand(RunLoadMenu(menuId_ni));
}

cmCreateTXO:
{
  message('hi');
}
end;
end;
end.

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

Добавлено: 04 июл 2011, 18:31
Masygreen
и правда помогло :) спасибо!

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

Добавлено: 31 май 2012, 13:43
sildae
Подскажите пожалуйста, если нужно докомпилировать меню накладной на сбыт, то какие значения нужно поставить?
L_SOPRDOC изучила, разные варианты mnu... попробовала, но не получается и где взять = 990099 значение константы.

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

Добавлено: 15 авг 2012, 18:33
Ruslan_V
Подскажите, пожалуйста, никода еще не сталкивался с докомпиляцией. Хочется понять, что необходимо для ее выполнения, с чего начать. Задача заключается в следующем: необходимо для ДО на закупку при изменении статуса тестировать наличие МЦ из спецификации на складах предприятия и запрещать изменение статуса в каком-то случае. В vipprogr.chm прочитал, что можно перегружать и расширять обработчики событий. Я так понял, что для докомпиляции необходимо иметь исходный текст интерфейса ДО на закупку. Или я ошибаюсь? Галактика 7.12, SQL. Версия Atlantis 3.03.22.

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

Добавлено: 15 авг 2012, 19:38
Den
2 Ruslan_V

Раз Вы с докой знакомились, то внизу приписка есть
"Докомпиляция интерфейсов поддерживается начиная с Атлантиса 5.0." (

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

Добавлено: 16 авг 2012, 11:15
Ruslan_V
Да, не доглядел, глянул только на последнюю строку, где описано, что расширение потоков данных введено начиная с Атлантис 5.1.2x. Жаль (

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

Добавлено: 21 авг 2012, 15:59
Sheinina
Пришлось мне тут докомпилировать интерфейс - нужно было добавить дополнительный фильтр для отчета. Расширила обработчик события cmInit и вроде как все хорошо, но после того, как формируется отчет, на экране остается пустое поле интерфейса (как если в невизуальном интерфейсе в конце обработчика cmInit не поставить abort). Подскажите, пожалуйста, что делать, как победить эту заразу? Интерфейс L_SF::JOURNGETSETSF.
Вот код:

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

#component 'L_SF'

alter interface JOURNGETSETSF; 

var crec, cnaz: comp;
create view lbs as select * 
from synonym schfact schfact_1, basedoc, katnazna
where ((
    crec == schfact_1.nrec
and schfact_1.cbasedoc == basedoc.nrec
and basedoc.cnazna == katnazna.nrec
))
;


overload 
DataStream DTS;
end;

DataStream DTS 
(
[Fil_naz] cnaz;
Table inherited::FRSETSCHFACT 
(
[SetNaz] lbs.katnazna.nrec;
);
Table inherited::FRGETSCHFACT 
(
[GetNaz] lbs.katnazna.nrec;
);
)

Handleevent table FRSETSCHFACT
cmOnProcess: {
   crec:=FRSETSCHFACT.cschf;
   if lbs.getfirst schfact_1 = tsOK then 
      if lbs.getfirst basedoc = tsOK then
         if lbs.getfirst katnazna = tsOK then {}
}
end;

Handleevent table FRGETSCHFACT
cmOnProcess: {
   crec:=FRGETSCHFACT.cschf;
   if lbs.getfirst schfact_1 = tsOK then 
      if lbs.getfirst basedoc = tsOK then
         if lbs.getfirst katnazna = tsOK then {}
}
end;
end; // DataStream

Handleevent
cmInit:{
  RunInterface('L_Katnazna::GetNazna',cnaz);
  inherited::Handleevent(cmInit);
}
end;
end.

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

Добавлено: 21 авг 2012, 16:41
edward_K
ну раз вы берете на себя обработку каких то функций дорабатывайте до конца.
В данном случае

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

if inherited::Handleevent(cmInit)=heAbort
{ abort
}

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

Добавлено: 21 авг 2012, 18:10
Sheinina
Спасибо :)
На самом деле сама должна была догадаться, получив в запросе на текущее имя поля

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

'L_SF::JOURNGETSETSF.WSETPERIOD.SCRFILTPER.PD1'
,
что прорисовка окна производится не обработчике cmInit интерфейса, а несколько глубже.

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

Добавлено: 18 фев 2013, 08:26
Алексей
докомпилирую интерфейс, рисую кнопку, вешаю событие. все хорошо.

появляется слабовидящий пользователь и устанавливает себе значение в конфиг windows.fontsize=12 и при запуске галактики все мои явно выставленные значения по X Y позиционированию автоматом не умножаются...

если делать изменения ЦРФом - это как то учитывается, а как быть с добавленными программно элементами интьерфейсов ?

кто как решает данную проблему?

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

Добавлено: 18 фев 2013, 09:42
edward_K
я инклюдои подключаю следующий файл

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

// нужен для определения коэфицента при изменении шрифта
  var wkoef , wkoefx :double ;
  var wfont :string ;
  wkoef:=1 ;
  wfont:=GetStringParameter('Windows','FontSize',0)
  case wfont of
  '9' : { wkoef:=1.05 ;wkoefx:=1.14 ;}
  '10': { wkoef:=1.10 ;wkoefx:=1.25 ;}
  '8' : { wkoef:=1.00 ;wkoefx:=1.00 ;}
  else 
  { wkoef:=double(wfont)+0.0
    wkoef:=sqrt(wkoef/8.0) ;
    wkoefx:=wkoef/8.0
  }
  end ;
  // пока сделаем так
  // wkoef:=1;
  // wkoefx:=1;
если определите коэффициенты точнее поделитесь.
Но выяснилась еще проблема - если системный шрифт в винде стоит не стандартный (средний или крупный или процентом) то этого не хватает
Если найдете функцию как это определить, поделитесь.