Подскажите как разобраться с параметрами.
Код: Выделить всё
// -----------------
#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.   
Я наверное что то перемудрил с присвоением переменных и интерфейсы выходят пустыми,
Подскажите куда копать так как не совсем понятна логика.