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

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

Добавлено: 26 июл 2007, 09:49
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 );

Добавлено: 26 июл 2007, 09:58
Алексей
в проект добавте
#define ComponentVersion

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

ни каких
If (GetVipInterface (iCountry))
Message (‘VIP интерфейс загружен успешно!’);
и
FreeVIPInterface(iCountry );
не надо, делается теперь автоматом.

Добавлено: 26 июл 2007, 09:58
Алексей

Добавлено: 26 июл 2007, 10:00
PViP
Вот точный текст предупреждения при запуске отчета:

"Возникло не обработанное исключение ExObjIfcNoLoad(ExRef) ошибка загрузки объекта из ресурсного файла(MCOriginCountry)"

Добавлено: 26 июл 2007, 10:40
PViP
После объявления #define ComponentVersion перед .declare - отчет не компилируется, говорит что

Ошибка: ожидалось VipInterface, ObjInterface или .EndDeclare (стр.23, поз.1 в L
_SF_SCHFREES_SF_GALKR_COMP_ONLY.RTF)
#Сomponent "L_SF"

Добавлено: 26 июл 2007, 10:46
Алексей
посмотрите про формы тут

http://support.galaktika.ru/news.asp?ne ... 8975,40951,

Добавлено: 26 июл 2007, 10:49
PViP
Алексей, смотрел! От туда и код взят! Спасибо в любом случае!

Добавлено: 26 июл 2007, 15:28
PViP
Ситуация зашла в тупик! Похоже компилятор не понимает директиву #component "L_SF" в формах, в интерфейсах все ровно, проходит.

Help!!!! :(

Добавлено: 27 июл 2007, 00:27
edward_K
випа нет да?
попробуйте так
VipInterface L_SF::MCOriginCountry implements IMCOriginCountry
или так
VipInterface L_SF::MCOriginCountry implements L_SF::IMCOriginCountry
#component "L_SF" можно попробовать объявить не в теле формы.
а так прямой дорогой в ТП 8)

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

А по поводу #component "L_SF" - такое ощущение, что компилятор не понимает вообще что это, где эту директиву не пихай, везде он споткнется с ругательствами типа я ждал одно а тут #component "L_SF"! :???:

Добавлено: 27 июл 2007, 13:43
edward_K
если есть вип то нафига вам declare?
просто в проекте
#include ??????????.vih
#make "???????\*.frm"
все нужные vih идут в архивах в каталоге Frm

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

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

Проще сделать дефайн в проекте и тогда должно подцеплять нормально.

Добавлено: 30 июл 2007, 10:08
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: всем спасибо!

Добавлено: 30 июл 2007, 16:41
edward_K
насчет new эт вы наверное загнули - вы сделали лишний экземпляр объекта- его потом еще и гасить нужно тыды.
да и 2 раза не надо компилить vih - include вполне достаточно.
а по поводу declare пишите в ТП - и здесь их ответ.

Добавлено: 31 июл 2007, 08:39
PViP
Да, действительно лишнее написал, перестарался! :cool: