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

Почему выдается сообщение "таблица ... отсутствует в словар"

Добавлено: 18 янв 2012, 15:26
denisag
Добрый день.
У меня вот такая проблем - выскакивает сообщение о том что таблицы нету в словаре при компиляции следующего кода:

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

//Добавлять во все проекты -----------------
#param /linc:d:\viperprojekt\autoexec.vpp
#setcurenv "galnet" from 'c:\GAL810\exe\';
#define ComponentVersion
//-----------------------------------------
#include GALNET.CCM
//Выбираем с чем работаем (в данном случае ресурс L_SOPRDOC)
#Component "L_SOPRDOC"
//Выбираем интерфейс из ресурса (в данном случае AKTREC)
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)
    spsopr.rprice:=spsopr.price;
    update current spsopr;
    PutCommand(cmRefreshBDdata)
  }
   // иначе обрабатываем обычный "cmPick"
   else if(inherited::HandleEvent(cmPick) = heOk)   {}
 end;
}
end;
end.
Interface Example 'TEST' (,,scinterface), escClose, cyan, doAccept;
var _corg, _cmc, _csporder, _gruz, _cpodr, tmpGruzto:comp;
var _kol,_price:double;
parameters _corg, _cmc, _cpodr, _kol,_price,_csporder, tmpGruzto
//временная таблица
table struct tmpGruzto "Временная таблица Грузополучателей"
(
CGRUZTO     :string   "Наименование грузополучателя",
KATORG3     :string   "Наименование контрагента",
CGRUZTONREC :comp     "NREC грузополучателя"
)
with index
(
ind = CGRUZTONREC  //Индекс по NREC грузополучателя
);
// тут временная таблица закончилась
  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)
 ;
  browse EmployeeBrowse;
//  table spsopr;
  Fields
    katsopr.nsopr '№ сопроводительного документа':[30], protect;
    katsopr.dsopr 'Дата':[10], protect;
//    katsopr.vidsopr: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;
// При нажатии F6 запускаем интерфейс Example2
handleevent
cmnext :
{
RUNINTERFACE (L_SOPRDOC::Example2, _corg, tmpGruzto)
}
cmInit :
{
}
cmDefault:
{
 _kol:=spsopr.kolfact;
 _price:=spsopr.price;
 _csporder:=sporder.nrec;
}
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;
/*interface Example 'A'
   final procedure P; {message('Интерфейс A...')}
   screen S
      <<
      >>
   end
   handleevent
      cminit: {P; abort}
   end;                                       */
   end.

Interface Example2 'TEST2' , escClose, cyan, doAccept;
create view as select * from tmpGruzto;
browse GruztoBrowse;
Fields
tmpGruzto.CGRUZTO 'Наименование грузополучателя':[25], protect;
tmpGruzto.KATORG3 'Наименование контрагента':[25], protect;
end;
handleevent
cmInit :
{
var stmt:longint
stmt := sqlAllocStmt;
sqlBindParam(stmt, 1, _CORG);
sqlExecStmt(stmt, 'select distinct KATORG.NAME, 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.


Задача вывести в интерфейс данные из временной таблицы которая заполняется прямым SQL.
В виду малого опыта допускаю что объявил неверно временную таблицу, прошу помочь разобраться.

Re: Почему выдается сообщение "таблица ... отсутствует в сло

Добавлено: 18 янв 2012, 15:57
edward_K
Если вы планируете использовать таблицу в нескольких фейсах, то обявлять ее нужно вне интрефейса - например в проекте подключить инклюд перед сборокй фейса. Старайтесь ее тогда делать более универсальной - чтобы не плодить на каждый чих.

Re: Почему выдается сообщение "таблица ... отсутствует в сло

Добавлено: 18 янв 2012, 16:26
denisag
Нет. Буду вызывать во втором интерфейсе тока, подскажите как объявить пожалуйста кодом - а то я уже не знаю куда ее приткнуть.

Спасибо за наводку предыдущего автора - разобрался наконец то как это работает.