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

Докомпиляция интерфейса. Очередь комманд

Добавлено: 06 июл 2011, 14:22
Masygreen
Продолжаю изучать вопрос.
На прошлом уроке :) научили как правильно докомпилировать контекстное меню .. теперь надо разобраться с очередью команд
Лирическое отступление: дабы максимально не зависеть от патчей решил делать запуск через меню + вызывать стандартный обработчик+вызывать свой
как реализую:
добавляю меню - тут все отлично
cmHotKeys:

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

{
 //добавляем свой пункт меню в стандартный
 menuId_ni := LoadMenu('mnuSoprUslKatSopr');
 AddMenuItem(menuId_ni,'Создать ДО с ТХО',cmProcessCom);
 PutHotCommand(RunLoadMenu(menuId_ni));
}
здесь по меню я вызываю cmProcessCom которая формирует очередь команд где cmValue2 стандартная команда из интерфейса,cmMyProccess
моя команда. Ну вот эта очередь и не работает :(

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

cmProcessCom:
{
 //формируем очередь выполнения
 PutCommand(cmValue2);//создаем ДО
 PutCommand(cmMyProccess);//моя обработка после создания ДО
}
что не так?

З.Ы.
1) cmProcessCom - программа попадает
2) если в cmProcessCom вызвать по отдельности PutCommand(cmValue2); или PutCommand(cmMyProccess); то они отрабатывают...а друг за другом нет ..

Re: Докомпиляция интерфейса. Очередь комманд

Добавлено: 06 июл 2011, 14:25
Masygreen
на всякий случай полный код

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

#component 'L_SOPRDOC'
const
 cmProcessCom = 990099;
 cmMyProccess= 980088;
 cmValue2    = 2222;
End;

alter interface AKTUSL;
overload end;
var
 menuID_ni:longint;
window EditSopr;
HandleEvent
/*-------------------------------------------------------------*/
cmHotKeys:
{
 //добавляем свой пункт меню в стандартный
 menuId_ni := LoadMenu('mnuSoprUslKatSopr');
 AddMenuItem(menuId_ni,'Создать ДО с ТХО',cmProcessCom);
 PutHotCommand(RunLoadMenu(menuId_ni));
}
/*-------------------------------------------------------------*/
cmProcessCom:
{
 //формируем очередь выполнения
 PutCommand(cmValue2);//создаем ДО
 //ProcessCommand(cmValue2);//создаем ДО
 PutCommand(cmMyProccess);
}
/*-------------------------------------------------------------*/
cmMyProccess:
{
message(1); 
...................... куча кода который не выполняется
}
end;
end;
end.

Re: Докомпиляция интерфейса. Очередь комманд

Добавлено: 06 июл 2011, 15:33
edward_K
1. cmValue2 нельзя прописывать константой - она уже есть штатная
2. 2 другие тоже не желательно - нет гарантии что вы не пересекетсь со штатными(или делайте после 30000). Лучше использовать одну из cmValue (1-60) - вободный в этом фейсе смотрите в консоли управления
3. Возможно в cmValue2 стоит stop или abort, который прерывает выполнение. Перехватите эти события - будет ли так работать?

Re: Докомпиляция интерфейса. Очередь комманд

Добавлено: 06 июл 2011, 15:41
Masygreen
в исходниках галактики это формирование ДО по акту

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

cmValue2:
{
  if (IsNew)
  {
    Insert Current KatSopr;
    SetNew(FALSE);

    iGrPl.InsSpGrPlD_Default(KatSopr.VidSopr,  // тип документа системный
                             KatSopr.NRec,     //ссылка на документ
                             KatSopr.cOrg      //ссылка на контрагента
                            );
  }

  if (KatSopr.cNZakaz <> 0)
    if Message ('Акт связан с наряд-заказом!'+
                 ''#13'      Формировать ДО?', YesNo) <> cmYes
       Exit;

  Update_Current_KatSopr;

  do_Batch_Button (211, KatSopr.NRec, KatSopr.dSopr);

  RereadRecord(#KatSopr);
}
по exit так и надо чтоб я вылетел .. мне надо работать только если новое ДО.. а оно новое и формируется.. :(
кодировку я не перехватываю т.к. cmValue2 - берется из стандартного галактичского перечня констант и если эти команды посылать по отдельности то они срабатывают

Re: Докомпиляция интерфейса. Очередь комманд

Добавлено: 06 июл 2011, 15:48
n0where
inherited::handleEvent(cmCommand);

Re: Докомпиляция интерфейса. Очередь комманд

Добавлено: 06 июл 2011, 16:31
Masygreen
n0where писал(а):inherited::handleEvent(cmCommand);
а это здесь зачем ? и какой команде?
я не перегружаю стандартные - я хочу отработать стандартную, а после неё выполнить свой код..

Re: Докомпиляция интерфейса. Очередь комманд

Добавлено: 06 июл 2011, 16:36
Masygreen
в Procedure do_batch_Button тоже exita ни какого нет ...

Re: Докомпиляция интерфейса. Очередь комманд

Добавлено: 06 июл 2011, 16:44
Masygreen
n0where писал(а):inherited::handleEvent(cmCommand);
спасибо помогло :) я понял намек

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

cmHotKeys:
{
 //добавляем свой пункт меню в стандартный
 menuId_ni := LoadMenu('mnuSoprUslKatSopr');
 AddMenuItem(menuId_ni,'Создать ДО с ТХО',cmProcessCom);
 PutHotCommand(RunLoadMenu(menuId_ni));
}
/*-------------------------------------------------------------*/
cmProcessCom:
{
 inherited :: handleEvent(cmValue2);
 .... дальше мой говнокод
}