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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

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

Ответить
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

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

Сообщение 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); то они отрабатывают...а друг за другом нет ..
Время ведет!
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

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

Сообщение 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.
Время ведет!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

1. cmValue2 нельзя прописывать константой - она уже есть штатная
2. 2 другие тоже не желательно - нет гарантии что вы не пересекетсь со штатными(или делайте после 30000). Лучше использовать одну из cmValue (1-60) - вободный в этом фейсе смотрите в консоли управления
3. Возможно в cmValue2 стоит stop или abort, который прерывает выполнение. Перехватите эти события - будет ли так работать?
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

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

Сообщение 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 - берется из стандартного галактичского перечня констант и если эти команды посылать по отдельности то они срабатывают
Время ведет!
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

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

Сообщение n0where »

inherited::handleEvent(cmCommand);
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

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

Сообщение Masygreen »

n0where писал(а):inherited::handleEvent(cmCommand);
а это здесь зачем ? и какой команде?
я не перегружаю стандартные - я хочу отработать стандартную, а после неё выполнить свой код..
Время ведет!
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

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

Сообщение Masygreen »

в Procedure do_batch_Button тоже exita ни какого нет ...
Время ведет!
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

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

Сообщение Masygreen »

n0where писал(а):inherited::handleEvent(cmCommand);
спасибо помогло :) я понял намек

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

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