Страница 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);
.... дальше мой говнокод
}