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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

edd
Постоянный обитатель
Сообщения: 170
Зарегистрирован: 29 мар 2005, 17:49

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

Сообщение 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? Вроде всё правильно сделал, не пойму, что ему не нравится...
После компиляции проекта ресурс формуруется, но после подключения другой интерфейс, идущий в этом проекте вместе с ними, не виден в списке интерфейсов.
Помогите, мне уже самому интересно стало. :???:
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

НЕ путайте ошибки с предупреждениями. А чтобы не лопатить все vih в проекте определите
#define ComponentVersion
да и проверте что
#define ATL51 существует
правильно если сначала в проекте вы подцепите все vih а потом объявите
#component "?????"
#make "?????\*.vip"
в компоненте например указать нужный контур или же компонент отчетов пользователя - чтобы нечайно не хватать лицензию другого контура. А так зачем компилить этот фейс если есть стандартные с таким же функционалом не знаю.
edd
Постоянный обитатель
Сообщения: 170
Зарегистрирован: 29 мар 2005, 17:49

Сообщение edd »

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

Сообщение edd »

в компоненте например указать нужный контур или же компонент отчетов пользователя
Это насколько я знаю F_USERREPORT, да? Указываю его, проблема таже (...компонент не имеет...)
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

это предупреждение - на работу не влияет. Если это ваш то можно было б вообще не указывать или усе таки F_userreport.
edd
Постоянный обитатель
Сообщения: 170
Зарегистрирован: 29 мар 2005, 17:49

Сообщение edd »

А почему тогда фейс, который так же учавствует в этом проекте, не виден в списке фейсов? Ошибок не было, предупреждения про неявное добавление таблиц я считал вытекающими из предыдущего.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

"неявное добавление" лучше убирать, особено если вьюх несколько.
не виден потому как нет визуальной части, на что в cfg есть параметр ( в секции Vip кажись - ну нету 810 под рукой 8) )
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

vip.VisibleAllInterface=on
edd
Постоянный обитатель
Сообщения: 170
Зарегистрирован: 29 мар 2005, 17:49

Сообщение edd »

Визуальная часть есть.
edd
Постоянный обитатель
Сообщения: 170
Зарегистрирован: 29 мар 2005, 17:49

Сообщение edd »

а как убрать "неявное добавление"?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

From ....
Galex
Постоянный обитатель
Сообщения: 175
Зарегистрирован: 29 июн 2006, 14:39
Контактная информация:

Сообщение Galex »

А как быть если после предупреждения "Компонент C_PARTNER не имеет не одной таблицы в словаре..." Галактика выдает ошибку "tTableDef.InitSegment: не найдено поле """ и вылетает???
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

logstrtofile вам поможет, или попробуйте через debug прогнать. Сделайте простенький фейс с одной таблицей(не времянной). На C_partner не пробовал, усе больше на F_userreport - и все работает что раньше работало. Да. такой нюансик - объявление временых табл должно лежать в той же компоненте, что и их использование, иначе могут возникнуть некоторые проблемы с их использованием, я с одной так столкнулся - из фейса с другой компонентной принадлежностью не видел в них записи.
Galex
Постоянный обитатель
Сообщения: 175
Зарегистрирован: 29 июн 2006, 14:39
Контактная информация:

Сообщение Galex »

Я, честно говоря, не видел ничего проще:

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

#component "C_PARTNER"

interface RunKatUsl;

handleevent

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

end;

end.
А LogStrToFile я попробовать не могу, т.к. Галактика стартуя, с подключенной реской говорит: tTableDef.InitSegment: не найдено поле """
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

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