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

Компонентная принадлежность

Добавлено: 27 сен 2007, 11:45
edd
Приветствую!

Не могу победить проблему:
Есть проект, в котором, кроме наличия других файлов с формами отчетов, описаниями таблиц и интерфейсов, есть два следующих файла

XEXTRATTR.VIH

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

#ifndef __XEXTRATTR
#define __XEXTRATTR
#endif

#ifndef _ExtAttr_Func
#define _ExtAttr_Func
#ifdef ComponentVersion
#component "C_ExtClass" 
#endif

ObjInterface ObjXExtrAttr;
 Public Function sAttr(codeTable: word; crec: comp; ExAttr_Name: string): string;

 Public Function doAttr(codeTable: word; crec: comp; ExAttr_Name: string): double;

 Public Function datAttr(codeTable: word; crec: comp; ExAttr_Name: string): date;
End;
VipInterface XExtrAttr Implements ObjXExtrAttr 

#ifdef ATL51
   licensed (FREE)
#end
;
#end
XEXTRATTR.VPP

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

interface XExtrAttr; 
create view;

function sAttr(codeTable: word; crec: comp; ExAttr_Name: string): string;
{
 var cAttrNam : comp;
 if getfirst AttrNam where ((codeTable == AttrNam.wTable and ExAttr_Name  == AttrNam.Name)) = tsOk
 {
  cAttrNam := AttrNam.nrec;
  if getfirst AttrVal where ((cAttrNam == AttrVal.cAttrNam and CodeTable == AttrVal.wTable and crec == AttrVal.cRec)) = tsOk 
   sAttr := AttrVal.vString;
  else
   sAttr := '';
 }
 else 
  sAttr := '';
}
function doAttr(codeTable: word; crec: comp; ExAttr_Name: string): double;
{
 var cAttrNam : comp;
 if getfirst AttrNam where ((codeTable == AttrNam.wTable and ExAttr_Name  == AttrNam.Name)) = tsOk
 {
  cAttrNam := AttrNam.nrec;
  if getfirst AttrVal where ((cAttrNam == AttrVal.cAttrNam and CodeTable == AttrVal.wTable and crec == AttrVal.cRec)) = tsOk 
   doAttr := AttrVal.vDouble;
  else
   doAttr := 0.0;
 }
 else 
  doAttr := 0.0;
}
function datAttr(codeTable: word; crec: comp; ExAttr_Name: string): date;
{
 var cAttrNam : comp;
 if getfirst AttrNam where ((codeTable == AttrNam.wTable and ExAttr_Name  == AttrNam.Name)) = tsOk
 {
  cAttrNam := AttrNam.nrec;
  if getfirst AttrVal where ((cAttrNam == AttrVal.cAttrNam and CodeTable == AttrVal.wTable and crec == AttrVal.cRec)) = tsOk 
   datAttr := AttrVal.vDate;
  else
   datAttr := date(1,1,1900);
 }
 else 
  datAttr := date(1,1,1900);
}
end.
При компиляции проекта выдает ошибку: "не задано имя компонента, компонентная принадлежность таблиц учитывыться не будет" и указывает на начало VPP файла (interface XExtrAttr). Если указываю компонент явно, без "#ifdef ComponentVersion", то компилятор выдает другую ошибку: "Компонент C_ExtClass не имеет ни одной таблицы в словаре..."

После двухдневных поисков по форуму и докам, и безрезультатного применения найденных решений я пришел к тем же результатам.
Может я ошибаюсь в компоненте? Или как то надо по другому описать интерфейс XExtrAttr? Вроде всё правильно сделал, не пойму, что ему не нравится...
После компиляции проекта ресурс формуруется, но после подключения другой интерфейс, идущий в этом проекте вместе с ними, не виден в списке интерфейсов.
Помогите, мне уже самому интересно стало. :???:

Добавлено: 27 сен 2007, 13:04
edward_K
НЕ путайте ошибки с предупреждениями. А чтобы не лопатить все vih в проекте определите
#define ComponentVersion
да и проверте что
#define ATL51 существует
правильно если сначала в проекте вы подцепите все vih а потом объявите
#component "?????"
#make "?????\*.vip"
в компоненте например указать нужный контур или же компонент отчетов пользователя - чтобы нечайно не хватать лицензию другого контура. А так зачем компилить этот фейс если есть стандартные с таким же функционалом не знаю.

Добавлено: 27 сен 2007, 14:00
edd
Нет, функционал немного другой... Хотя я не смотрел новый фейс, но специально дописывали старый.
правильно если сначала в проекте вы подцепите все vih а потом объявите
#component "?????"
А как узнать, какой компонент? Или я правильно указал, что это C_ExtClass? Почему то продолжает после этих изменений выдавать ПРЕДУПРЕЖДЕНИЕ: "компонент не имеет ни одной таблицы в словаре"

Добавлено: 27 сен 2007, 15:27
edd
в компоненте например указать нужный контур или же компонент отчетов пользователя
Это насколько я знаю F_USERREPORT, да? Указываю его, проблема таже (...компонент не имеет...)

Добавлено: 27 сен 2007, 15:53
edward_K
это предупреждение - на работу не влияет. Если это ваш то можно было б вообще не указывать или усе таки F_userreport.

Добавлено: 27 сен 2007, 15:57
edd
А почему тогда фейс, который так же учавствует в этом проекте, не виден в списке фейсов? Ошибок не было, предупреждения про неявное добавление таблиц я считал вытекающими из предыдущего.

Добавлено: 27 сен 2007, 19:15
edward_K
"неявное добавление" лучше убирать, особено если вьюх несколько.
не виден потому как нет визуальной части, на что в cfg есть параметр ( в секции Vip кажись - ну нету 810 под рукой 8) )

Добавлено: 28 сен 2007, 05:24
san
vip.VisibleAllInterface=on

Добавлено: 28 сен 2007, 09:03
edd
Визуальная часть есть.

Добавлено: 28 сен 2007, 11:21
edd
а как убрать "неявное добавление"?

Добавлено: 29 сен 2007, 15:07
edward_K
From ....

Добавлено: 19 ноя 2007, 08:54
Galex
А как быть если после предупреждения "Компонент C_PARTNER не имеет не одной таблицы в словаре..." Галактика выдает ошибку "tTableDef.InitSegment: не найдено поле """ и вылетает???

Добавлено: 19 ноя 2007, 10:20
edward_K
logstrtofile вам поможет, или попробуйте через debug прогнать. Сделайте простенький фейс с одной таблицей(не времянной). На C_partner не пробовал, усе больше на F_userreport - и все работает что раньше работало. Да. такой нюансик - объявление временых табл должно лежать в той же компоненте, что и их использование, иначе могут возникнуть некоторые проблемы с их использованием, я с одной так столкнулся - из фейса с другой компонентной принадлежностью не видел в них записи.

Добавлено: 19 ноя 2007, 10:33
Galex
Я, честно говоря, не видел ничего проще:

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

#component "C_PARTNER"

interface RunKatUsl;

handleevent

cmInit: {
  RunInterface('L_MCU::KATUSL');
}

end;

end.
А LogStrToFile я попробовать не могу, т.к. Галактика стартуя, с подключенной реской говорит: tTableDef.InitSegment: не найдено поле """

Добавлено: 19 ноя 2007, 10:46
edward_K
что даже просто достаточно галку стартануть?. Ну дык попробуйте удалить ваш рес и скомпилить с F_userreport или добавте усе таки create view as select xarpred.nrec from xarpred ;
а вообще возможно дело в том каким vip вы компилили - совпадает ли его версия с патчами по атлантису?