Подскажите как разобраться с параметрами.
Код: Выделить всё
// -----------------
#param /linc:d:\viperprojekt\autoexec.vpp
#setcurenv "galnet" from 'c:\GAL810\exe\';
#define ComponentVersion
//-----------------------------------------
#include GALNET.CCM
//Выбираем с чем работаем (в данном случае ресурс L_SOPRDOC)
#Component "L_SOPRDOC"
//Выбираем интерфейс из ресурса (в данном случае AKTREC)
var tmpGruzto, tmpVozvratMC, _corg, _cmc, _csporder, _gruz, _cpodr :comp;
var _kol, _price:double;
//Временная таблица для 'Возврат материальной ценности'
table struct tmpVozvratMC "Возврат материальной ценности"
(
NNAKL :string "№ Накладной",
DATE :date "Дата",
NAMEMC :string "Наименование товара",
CENA :string "Цена",
CGRUZTO :string "Наименование грузополучателя",
PARTYNAME :string "Название партии",
NORDER :string "№ Ордера",
SKLAD :string "Наименование склада",
ADRES :string "Адрес грузополучателя",
OTGRUZ :string "Количество отгруженного товара",
VOZVRAT :string "Количество возвращенного товара",
DOSTVOZVRAT :string "Количество доступное для возврата",
KONTRAGENT :string "Наименование контрагента",
KOLFACT :string "Кол-во фактическое",
SPORDERNREC :string "NREC ордера",
CGRUZFROM :string "Код грузоотправителя"
)
with index
(
ind = CGRUZTO //Индекс по номеру сопроводительного документа
);
//Временная таблица для 'Грузополучатели'
table struct tmpGruzto "Грузополучатели"
(
CGRUZTO :string "Наименование грузополучателя",
ADRES :string "Адрес грузополучателя",
KATORG3 :string "Наименование контрагента",
CGRUZTONREC :comp "NREC грузополучателя"
)
with index
(
ind = CGRUZTONREC //Индекс по NREC грузополучателя
);
// тут временная таблица закончилась
alter interface AKTREC;
// Будем изменять обработчики таблице "SPSOPR"
tableEvent table SPSOPR
// Объявляем обработчик который нам нужен
cmPick:
{
// выбираем случай из "#NAMEMCUSL:" и присваиваем запуск интерфейса
case curfield of
#NAMEMCUSL:
{
if runinterface (L_MCU::GETMC,spsopr.cmcusl) = cmdefault and spsopr.cmcusl != 0
if isnew()
insert current spsopr;
else
update current spsopr;
rereadrecord(#spsopr);
runinterface (L_SOPRDOC::Example, katsopr.corg, spsopr.cmcusl, katsopr.cgruzto,spsopr.kolfact,spsopr.price,spsopr.csporder, tmpVozvratMC)
spsopr.rprice:=spsopr.price;
update current spsopr;
PutCommand(cmRefreshBDdata)
}
// иначе обрабатываем обычный "cmPick"
else if(inherited::HandleEvent(cmPick) = heOk) {}
end;
}
end;
end.
Interface Example 'Возврат материальной ценности' (,,scinterface), escClose, cyan, doAccept;
parameters _corg, _cmc, _cpodr, _kol, _price, _csporder, tmpVozvratMC
create view as select * from tmpVozvratMC
/*create view as select * from katsopr, spsopr, katorg, katparty, sklorder, sporder, katpodr, katorg katorg2
where
((
_corg == katsopr.corgbase and
_cpodr == katsopr.cgruzfrom(noindex) and
201 == katsopr.vidsopr and
_cmc == spsopr.cmcusl and
katsopr.nrec /== spsopr.csopr and
katsopr.corgbase == katorg.nrec and
spsopr.cmcusl == katmc.nrec and
1 == spsopr.prmc and
spsopr.cparty == katparty.nrec and
spsopr.nrec == sporder.cspsopr and
sporder.csklorder == sklorder.nrec and
sklorder.cpodr == katpodr.nrec and
katsopr.cgruzto == katorg2.nrec
))
bounds filGruz = _gruz == katsopr.cgruzfrom(noindex)*/
bounds filGruz = _gruz == katsopr.cgruzfrom(noindex)
;
browse EmployeeBrowse;
Fields
tmpVozvratMC.NNAKL '№ Накладной':[30], protect;
tmpVozvratMC.DATE 'Дата':[8], protect;
tmpVozvratMC.NAMEMC 'Наименование товара':[25], protect;
tmpVozvratMC.CENA 'Цена':[10], protect;
tmpVozvratMC.CGRUZTO 'Наименование грузополучателя':[25], protect;
tmpVozvratMC.PARTYNAME 'Название партии':[25], protect;
tmpVozvratMC.NORDER '№ Ордера':[10], protect;
tmpVozvratMC.SKLAD 'Наименование склада':[15], protect;
tmpVozvratMC.ADRES 'Адрес грузополучателя':[25], protect;
tmpVozvratMC.OTGRUZ 'Кол-во отгруженного товара':[30], protect;
tmpVozvratMC.VOZVRAT 'Кол-во возвращенного товара':[30], protect;
tmpVozvratMC.DOSTVOZVRAT 'Кол-во доступное для возврата':[30], protect;
tmpVozvratMC.KONTRAGENT 'Наименование контрагента':[25], protect;
end;
/*browse EmployeeBrowse;
Fields
katsopr.nsopr '№ сопроводительного документа':[30], protect;
katsopr.dsopr 'Дата':[10], protect;
katmc.name 'Наименование товара':[25], protect;
if (IsValid(tnKATSOPR), katorg.name, '') 'Наименование контрагента':[25], protect;
katparty.name 'Название партии':[25], protect;
sklorder.norder '№ Ордера':[10], protect;
katpodr.name 'Наименование склада':[15], protect;
katorg2.name 'Наименование грузополучателя':[25], protect;
end;*/
handleevent
// При нажатии F6 запускаем интерфейс Example2
cmnext :
{
RUNINTERFACE (L_SOPRDOC::Example2, _corg, tmpGruzto)
}
cmInit :
{
//Присваиваем имя вызываемому интерфейсом окну
SetWindowTitle(wnMainWindow,'Возврат материальной ценности '+katmc.name);
//Обрабатываем прямой SQL для первого интерфейса
var stmt:longint
stmt := sqlAllocStmt;
sqlBindParam(stmt, 1, _corg);
sqlBindParam(stmt, 2, _cpodr);
sqlBindParam(stmt, 3, _cmc);
sqlExecStmt(stmt,'select SET1.[№ накладной],'+
'SET1.[Дата накладной],'+
'SET1.[Наименование товара],'+
'SET1.[Цена за еденицу],'+
'SET1.[Наименование грузополучателя],'+
'SET1.[Наименование партии],'+
'SET1.[№ ордера],'+
'SET1.[Название склада],'+
'SET1.[адрес грузополучателя],'+
'SET1.[Кол-во отгруженного товара],'+
'SET2.[Кол-во возвращаемого товара],'+
'(SET1.[Кол-во отгруженного товара] - SET2.[Кол-во возвращаемого товара]),'+
'SET1.[Наименование контрагента]'+
'SET1.[Кол-во фактическое],'+
'SET1.[NREC ордера],'+
'SET1.[код грузоотправителя]'+
'from'+
'(select'+
'SPORDER.NREC,'+
'KATSOPR.NSOPR,'+
'KATSOPR.DSOPR,'+
'KATMC.NAME,'+
'SPSOPR.PRICE,'+
'katorg2.name,'+
'KATPARTY.NAME,'+
'SKLORDER.NORDER,'+
'KATPODR.NAME,'+
'KATORG2.ADDR,'+
'SPORDER.KOL,'+
'KATORG1.NAME,'+
'SPSOPR.CSPORDER,'+
'T$SPSOPR.F$KOLFACT,'+
'T$SPORDER.F$NREC,'+
'T$KATSOPR.F$CGRUZFROM'+
'from'+
'KATSOPR'+
'INNER JOIN SPSOPR on KATSOPR.NREC = SPSOPR.CSOPR and 1 = SPSOPR.PRMC'+
'INNER JOIN SKLORDER on KATSOPR.NREC = SKLORDER.CSOPR'+
'INNER JOIN SPORDER on SPORDER.CSPSOPR = SPSOPR.NREC'+
'LEFT OUTER JOIN KATORG as KATORG1 on KATSOPR.CORGBASE = KATORG1.NREC'+
'LEFT OUTER JOIN KATORG as KATORG2 on KATSOPR.CGRUZTO = katorg2.NREC'+
'LEFT OUTER JOIN KATMC on SPORDER.CMC = KATMC.NREC'+
'LEFT OUTER JOIN KATPARTY on SPORDER.CPARTY = KATPARTY.NREC'+
'LEFT OUTER JOIN KATPODR on SPORDER.CCPODR = KATPODR.NREC'+
'where'+
'201 = KATSOPR.VIDSOPR and'+
'? = katsopr.corgbase and'+
'? = katsopr.cgruzfrom(noindex) and'+
'? = spsopr.cmcusl ) as SET1'+
'LEFT OUTER JOIN'+
'(select'+
'SPSOPR.CSPORDER,'+
'SUM (SPORDER.KOL)'+
'from'+
'KATSOPR'+
'INNER JOIN SPSOPR on KATSOPR.NREC = SPSOPR.CSOPR and 1 = SPSOPR.PRMC'+
'INNER JOIN SKLORDER on KATSOPR.NREC = SKLORDER.CSOPR'+
'INNER JOIN SPORDER on SPORDER.CSPSOPR = SPSOPR.NREC'+
'LEFT OUTER JOIN KATORG as KATORG1 on KATSOPR.CORGBASE = KATORG1.NREC'+
'LEFT OUTER JOIN KATORG as KATORG2 on KATSOPR.CGRUZTO = katorg2.NREC'+
'LEFT OUTER JOIN KATMC on SPORDER.CMC = KATMC.NREC'+
'LEFT OUTER JOIN KATPARTY on SPORDER.CPARTY = KATPARTY.NREC'+
'LEFT OUTER JOIN KATPODR on SPORDER.CCPODR = KATPODR.NREC'+
'where'+
'106 = KATSOPR.VIDSOPR'+
'group by KATMC.NAME, KATORG1.NAME, katorg2.name, SPSOPR.CSPORDER, SPORDER.CSPORDV) as SET2'+
'ON SET1.NREC = SET2.CSPORDER');
sqlFetchInto(stmt, tntmpVozvratMC);
sqlFreeStmt(Stmt);
}
cmDefault:
{
/* _kol:=spsopr.kolfact;
_price:=spsopr.price;
_csporder:=sporder.nrec;*/
_kol:=tmpVozvratMC.KOLFACT
_price:=tmpVozvratMC.CENA
_csporder:=tmpVozvratMC.SPORDERNREC
}
cmpick:
{
_gruz:=0;
runinterface(L_KATORG::GetKatOr,_gruz,0,false,0,0);
if _gruz !=0
{
subbounds(tbfilGruz);
addbounds(tbfilGruz);
}
else
subbounds(tbfilGruz)
PutCommand(cmRefreshBDdata)
}
end;
end.
// Вызов второго интерфейса для использования его в качестве фильтров для первого
Interface Example2 'Грузополучатели' , escClose, cyan, doAccept;
parameters tmpGruzto, _CORG
create view as select * from tmpGruzto;
browse GruztoBrowse;
Fields
tmpGruzto.CGRUZTO 'Наименование грузополучателя':[25], protect;
tmpGruzto.ADRES 'Адрес грузополучателя':[25], protect;
end;
handleevent
cmInit :
{
//Обрабатываем прямой SQL для второго интерфейса
var stmt:longint
stmt := sqlAllocStmt;
sqlBindParam(stmt, 1, _CORG);
sqlExecStmt(stmt,
'select distinct KATORG.NAME,'+
'KATORG.ADDR,'+
'KATORG3.NAME,'+
'KATORG.NREC'+
'from KATORG,'+
'KATSOPR,'+
'KATORG KATORG3'+
'where KATSOPR.CGRUZTO = KATORG.NREC and'+
'KATSOPR.CORGBASE = KATORG3.NREC and'+
'? = KATSOPR.CORGBASE');
sqlFetchInto(stmt, tntmpGruzto);
sqlFreeStmt(Stmt);
}
end;
end.
Я наверное что то перемудрил с присвоением переменных и интерфейсы выходят пустыми,
Подскажите куда копать так как не совсем понятна логика.