Проблема с MCOriginCountry в 810

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

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

PViP
Местный житель
Сообщения: 254
Зарегистрирован: 08 июн 2007, 08:26
Откуда: Красноярск
Контактная информация:

Проблема с MCOriginCountry в 810

Сообщение PViP »

Поискал решение проблемы на форуме - не нашел!

Как компилировать я понял, да и не было проблем с компиляцией!

Вообщем есть форма СФ которая исправно работала в 712, сейчас с переходом на 810 надо перекомпилировать эту форму. В этой форме используется интерфейс MCOriginCountry, форма компилируется на отлично, но вот при запуске ее выдоется ошибка о необработанном исключении с текством "Ошибка закрузки интерфейса MCOriginCountry из ресурсного файла".

В начале формы прописано так

.declare
#ifndef __MCORIGINCOUNTRY_VIH
#define __MCORIGINCOUNTRY_VIH
#ifdef ComponentVersion
#component "L_SF"
#endif
ObjInterface IMCOriginCountry;
function getCountryName(cMC: comp; cParty: comp): string;
function getGTDNumber(cParty: comp): string;
end;
VipInterface MCOriginCountry implements IMCOriginCountry
#ifdef ATL51
Licensed (FREE)
#end
;
#end
.enddeclare

А в коде такой вызов:
var iCountry: MCOriginCountry;
SrcCountry := ’-’;
GTDNumber := ’-’;

if (vSpSchF.SpSchF.PrMC = 1) {
SrcCountry := if (trim(iCountry.getCountryName(vSpSchF.SpSchF.cMCUsl, vSpSchF.SpSchF.cParty)) = ’’, ’-’, iCountry.getCountryName(vSpSchF.SpSchF.cMCUsl, vSpSchF.SpSchF.cParty));
GTDNumber := if (trim(iCountry.getGTDNumber(vSpSchF.SpSchF.cParty)) = ’’, ’-’, iCountry.getGTDNumber(vSpSchF.SpSchF.cParty));
} else
{SrcCountry := ’-’;
GTDNumber := ’-’;
}

В чем проблема не могу понять, может в 8 изменился вызов интерфейса? Хотя в ресурснике L_SF этот интерфейс лежит, все имена и остались без изменений!

Возможно надо использовать так, но это не компилируется:

var iCountry: :IMCOriginCountry;
If (GetVipInterface (iCountry))
Message (‘VIP интерфейс загружен успешно!’);
SrcCountry := ’’;
GTDNumber := ’’;

if (vSpSchF.SpSchF.PrMC = 1) {
SrcCountry := if (trim(iCountry.getCountryName(vSpSchF.SpSchF.cMCUsl, vSpSchF.SpSchF.cParty)) = ’’, ’-’, iCountry.getCountryName(vSpSchF.SpSchF.cMCUsl, vSpSchF.SpSchF.cParty));
GTDNumber := if (trim(iCountry.getGTDNumber(vSpSchF.SpSchF.cParty)) = ’’, ’-’, iCountry.getGTDNumber(vSpSchF.SpSchF.cParty));
} else
{SrcCountry := ’-’;
GTDNumber := ’-’;
}
FreeVIPInterface(iCountry );
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

в проект добавте
#define ComponentVersion

объявлять объектные переменные следует так:
iGetKau : GetKau new; (мой случай)

ни каких
If (GetVipInterface (iCountry))
Message (‘VIP интерфейс загружен успешно!’);
и
FreeVIPInterface(iCountry );
не надо, делается теперь автоматом.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

PViP
Местный житель
Сообщения: 254
Зарегистрирован: 08 июн 2007, 08:26
Откуда: Красноярск
Контактная информация:

Сообщение PViP »

Вот точный текст предупреждения при запуске отчета:

"Возникло не обработанное исключение ExObjIfcNoLoad(ExRef) ошибка загрузки объекта из ресурсного файла(MCOriginCountry)"
PViP
Местный житель
Сообщения: 254
Зарегистрирован: 08 июн 2007, 08:26
Откуда: Красноярск
Контактная информация:

Сообщение PViP »

После объявления #define ComponentVersion перед .declare - отчет не компилируется, говорит что

Ошибка: ожидалось VipInterface, ObjInterface или .EndDeclare (стр.23, поз.1 в L
_SF_SCHFREES_SF_GALKR_COMP_ONLY.RTF)
#Сomponent "L_SF"
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

посмотрите про формы тут

http://support.galaktika.ru/news.asp?ne ... 8975,40951,
PViP
Местный житель
Сообщения: 254
Зарегистрирован: 08 июн 2007, 08:26
Откуда: Красноярск
Контактная информация:

Сообщение PViP »

Алексей, смотрел! От туда и код взят! Спасибо в любом случае!
PViP
Местный житель
Сообщения: 254
Зарегистрирован: 08 июн 2007, 08:26
Откуда: Красноярск
Контактная информация:

Сообщение PViP »

Ситуация зашла в тупик! Похоже компилятор не понимает директиву #component "L_SF" в формах, в интерфейсах все ровно, проходит.

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

Сообщение edward_K »

випа нет да?
попробуйте так
VipInterface L_SF::MCOriginCountry implements IMCOriginCountry
или так
VipInterface L_SF::MCOriginCountry implements L_SF::IMCOriginCountry
#component "L_SF" можно попробовать объявить не в теле формы.
а так прямой дорогой в ТП 8)
PViP
Местный житель
Сообщения: 254
Зарегистрирован: 08 июн 2007, 08:26
Откуда: Красноярск
Контактная информация:

Сообщение PViP »

edward_K, есть ВИП! А толку то?
Предложенное решение не компилируется, говорит что на месте :: ждет ;

А по поводу #component "L_SF" - такое ощущение, что компилятор не понимает вообще что это, где эту директиву не пихай, везде он споткнется с ругательствами типа я ждал одно а тут #component "L_SF"! :???:
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

если есть вип то нафига вам declare?
просто в проекте
#include ??????????.vih
#make "???????\*.frm"
все нужные vih идут в архивах в каталоге Frm
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

PViP
Вот вот. Именно.
Пока я не поставил в проект
#define ComponentVersion у меня тоже не подключалось, т.к. в моем ВИХе стояли такие строчки:
#ifdef ComponentVersion
#Component "F_GetAn"
#end

пока я не закоментил первую и третью ЛИБО не сделал дефайн, тоже не находился интерфейс.

Проще сделать дефайн в проекте и тогда должно подцеплять нормально.
PViP
Местный житель
Сообщения: 254
Зарегистрирован: 08 июн 2007, 08:26
Откуда: Красноярск
Контактная информация:

Сообщение PViP »

edward_K, проектом получается! Сделал так:
файл make который подкинул випу

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

#make "L_SF_Schfrees_SF.prj"
файл L_SF_Schfrees_SF.prj

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

#include MCOriginCountry.vih 
#make "MCOriginCountry.vih"
#make "L_SF_Schfrees_SF.rtf"
файл MCOriginCountry.vih

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

#define ComponentVersion
#ifndef __MCORIGINCOUNTRY_VIH
#define __MCORIGINCOUNTRY_VIH
#ifdef ComponentVersion
#Component "L_SF"
#endif
ObjInterface IMCOriginCountry;
  function getCountryName(cMC: comp; cParty: comp): string;
  function getGTDNumber(cParty: comp): string;
end;

VipInterface MCOriginCountry implements IMCOriginCountry;

#end
а в самом отчете L_SF_Schfrees_SF.rtf дописал вместо

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

var iCountry: MCOriginCountry;
такое вот

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

var iCountry: MCOriginCountry new;
Вопрос по .declare открыт, не сомпилируется отчет! Единственный выход компилить проект в vip.

А vih файл с MCOriginCountry в frm 810 я не обнаружил, склолько не искал!

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

Сообщение edward_K »

насчет new эт вы наверное загнули - вы сделали лишний экземпляр объекта- его потом еще и гасить нужно тыды.
да и 2 раза не надо компилить vih - include вполне достаточно.
а по поводу declare пишите в ТП - и здесь их ответ.
PViP
Местный житель
Сообщения: 254
Зарегистрирован: 08 июн 2007, 08:26
Откуда: Красноярск
Контактная информация:

Сообщение PViP »

Да, действительно лишнее написал, перестарался! :cool:
Ответить