Вопрос знатокам
Добавлено: 16 дек 2010, 12:47
Есть фейс. Компилится нормально. В логе даже нет ниодного предупреждения. Но при запуске выдаёт две ошибки
"Возникло необработанное исключение exObjIfcNoLoad(exref) ошибки загрузки объекта из ресурсного файла(TotalOrganizationAttributes)",
"Возникло необработанное исключение exObjIfcNoLoad(exref) ошибки загрузки объекта из ресурсного(RunRaise)"
Хотелось бы понять почему такая ругань Галактики?
Приведу код
файл TotalOrganizationAttributes.vih
файл totalorganizationattributes.var
файл TotalOrganizationAttributes.obj
файл OrganizationInfo.obj
файл RunRaise.vih
"Возникло необработанное исключение exObjIfcNoLoad(exref) ошибки загрузки объекта из ресурсного файла(TotalOrganizationAttributes)",
"Возникло необработанное исключение exObjIfcNoLoad(exref) ошибки загрузки объекта из ресурсного(RunRaise)"
Хотелось бы понять почему такая ругань Галактики?
Приведу код
Код: Выделить всё
#include CatFunc.vih
#include StrFunc.vih
#include DeptIer.vih
#include DepartmentsLimiter.vih //Интерфейс разграничения прав доступа к подразделениям
#include PickCat.VIH
#include STRUCTFN.VIH // для формирования отчета с сигналом, какие именно подразделения нужны в отчете
#include TotalOrganizationAttributes.vih // работа с атрибутами организации
#include RunRaise.vih // Интерфейс расчета доплат в кадрах
#include RunStaj.vih
#include TotalOrganizationAttributes.obj
#include OrganizationInfo.obj
const
clWhite = 0FFFFFFh;
clNone = 1FFFFFFFh;
end;
interface XXX 'YYY'
(,hcNoContext,) EscClose, gray;
show at (00,5,78,27);
var iCatFunc : CatalogsFunctions; // Переменная типа интерфейс CatalogsFunctions
var iStrFunc : StringFunctions; // Переменная типа интерфейс StringFunctions
var iDepartIer : DepartIer; // Переменная типа интерфейс DepartIer
var VuserAcs : IDepartmentsLimiter; // Переменная типа интерфейс DepartmentsLimiter
var iRaiseSts : ObjRunRaiseSts;//RunRaise; // переменная типа RunRaise
var iRaise : ObjRunRaise;//RunRaise; // переменная типа RunRaise
var objSHierarchy: IStructHierarchy; // Переменная типа интерфейс STRUCTFN
var iRunStaj : RunStaj;
//-------------------------------------------------------------------------------------------
parameters Title, StrTitleNrec, VidOtch,dateSts;
//------------------------------------------------------------------------------------------
//здесь кусок кода с процедурами и функциями и объявлением переменных опустил
//-------------------------------------------------------------------------------------------
HandleEvent
cmInit:
{
StartNewVisual(vtRotateVisual, vfTimer, ''#3'Идет загрузка требуемых объектов и данных', 1);
NamePrefis := 'Keramin_';
if ( not GetVipRef(iRaise, 'RunRaise') )or( not GetVipRef(iRaiseSts, 'RunRaise') )
{
Message('Не найден интерфейс расчет доплат RunRaise.');
ExitProc;
StopVisual('', 0);
Abort;
Exit;
}
var dVar: double;// передернуть объект для данных
dVar := iRaise.GetPercentRaise(comp(0), date(0,0,0));
dVar := iRaiseSts.GetPercentRaiseSts(comp(0), date(0,0,0));
// грузим объект разграничения доступа
if not GetVipRef(VuserAcs, 'UserDepartmentsLimiter')
{
Message('Не найден интерфейс разграничения прав доступа UserDepartmentsLimiter.', Information);
ExitProc;
StopVisual('', 0);
abort;
exit;
}
LoadVariables; // загрузить настройки отчета
TOA.Bind(0); // связываем TOA с собственной организацией
// грузим объект иерархий
LoadVipRef(objSHierarchy, 'StructHierarchy');
// инициализация нужных маркеров
DeptMarker_T3 := InitMarker(NamePrefis+String(Title)+'_DeptMarker_T3', 8, 200, 10); // подразделений
KategMarker := InitMarker(NamePrefis+String(Title)+'_Kategory_Marker', 8, 200, 10);
_SearchMarker := InitMarker('', 8, 200, 10); // вспомогательный
DoplOkrug1 := InitMarker(NamePrefis+String(Title)+'_MarkerDoplOkrug1', 8, 200, 10); // маркер от первой суммы
DoplOkrug2 := InitMarker(NamePrefis+String(Title)+'_MarkerDoplOkrug2', 8, 200, 10); // маркер от второй суммы
DDDopl := InitMarker(NamePrefis+String(Title)+'_MarkerDDDopl', 8, 200, 10); // маркер от должностного оклада
DDDoplAlg := InitMarker(NamePrefis+String(Title)+'_MarkerDDDoplAlg', 8, 200, 10); // маркер от должностного оклада
DDDoplMes := InitMarker(NamePrefis+String(Title)+'_MarkerDDDoplMes', 8, 200, 10); // маркер от должностного оклада
DDOkladDopl := InitMarker(NamePrefis+String(Title)+'_MarkerDDOkladDopl', 8, 200, 10); // маркер от должностного оклад
DS1 := InitMarker(NamePrefis+String(Title)+'_MarkerDS1', 8, 200, 10); // маркер от первой суммы
DS2 := InitMarker(NamePrefis+String(Title)+'_MarkerDS2', 8, 200, 10); // маркер от второй суммы
RejimMarker := InitMarker(NamePrefis+String(Title)+'_RejimMarker', 8, 200, 10);
PostMarker:= InitMarker(NamePrefis+String(Title)+'_PostMarker', 8, 100, 10 );
delete all RT;
delete all RezultTable;
ItogoSum := 0;
ItogoSumQuant := 0;
DoblIerItogo := 0;
DoblIerItogoQuant := 0;
// наполним таблицу уровней
FillLevelTable;
// набить временную таблицу, из которой будем затем осуществлять вывод
PickTmpTableWithNeedInfo;
// запустить формирование отчета
case PrintReport(Level) of
0: Message('Не удалось загрузить шаблон ' + fXlsBook, Information);
1:
{
Message('Нет данных для формирования отчета', Information);
xlDisplayAlerts(false);
xlKillExcel;
xlDisplayAlerts(true);
}
2:
{
Message('Приказ не утвержден!', Information);
xlDisplayAlerts(false);
xlKillExcel;
xlDisplayAlerts(true);
}
end; //case
#ifdef Atl51
#ifndef ServerApp
PutFileToClient(fXlsBook, false);
#end
#end
// закрыть маркер подразделений
DoneMarker(DeptMarker_T3, NamePrefis+String(Title)+'_DeptMarker_T3'); // подразделений
DoneMarker(KategMarker, NamePrefis+String(Title)+'_Kategory_Marker');
DoneMarker(_SearchMarker , '' ); // вспомогательный
DoneMarker(DDDopl, NamePrefis+String(Title)+'_MarkerDDDopl');
DoneMarker(DDDoplAlg, NamePrefis+String(Title)+'_MarkerDDDoplAlg');
DoneMarker(DDDoplMes, NamePrefis+String(Title)+'_MarkerDDDoplMes');
DoneMarker(DDOkladDopl, NamePrefis+String(Title)+'_MarkerDDOkladDopl');
DoneMarker(DS1, NamePrefis+String(Title)+'_MarkerDS1');
DoneMarker(DS2, NamePrefis+String(Title)+'_MarkerDS2');
DoneMarker(DoplOkrug1, NamePrefis+String(Title)+'_MarkerDoplOkrug1');
DoneMarker(DoplOkrug2, NamePrefis+String(Title)+'_MarkerDoplOkrug2');
DoneMarker(RejimMarker, NamePrefis+String(Title)+'_RejimMarker');// Маркер для полей
DoneMarker(PostMarker, NamePrefis+String(Title)+'_PostMarker');
// закрыть интерфейс
ExitProc;
abort;
exit;
}
end;
End.
Код: Выделить всё
#ifndef _TOTALORGANIZATIONATTRIBUTES_VIH_INCLUDED_
#define _TOTALORGANIZATIONATTRIBUTES_VIH_INCLUDED_
#include TotalOrganizationAttributes.obj
#ifdef ComponentVersion
#component "L_KATORG"
#end
vipinterface TotalOrganizationAttributes
implements
ITotalOrganizationAttributes,
ITotalOrganizationAttributes1
#ifdef ATL51
licensed (free)
#end
;
#end
Код: Выделить всё
var TOA: ITotalOrganizationAttributes;
var TOA1: ITotalOrganizationAttributes1;
handleevent
cmInit:
{
LoadVipRef(TOA, 'TotalOrganizationAttributes');
TOA1 := ITotalOrganizationAttributes1(TOA);
}
cmOnVipLoad:
{
LoadVipRef(TOA, 'TotalOrganizationAttributes');
TOA1 := ITotalOrganizationAttributes1(TOA);
}
end;
Код: Выделить всё
#ifndef _TOTALORGANIZATIONATTRIBUTES_OBJ_INCLUDED_
#define _TOTALORGANIZATIONATTRIBUTES_OBJ_INCLUDED_
#ifdef ComponentVersion
#component "L_KATORG"
#end
// выборка информации (юридической, нологовой и т.п.) об организации
#include OrganizationInfo.obj
// Для использовния интерфейса необходимо после описания логической таблицы
// подключить TotalOrganizationAttributes.var (объявление ссылки и создание
// нового экземпляра интерфейса).
#doc
набор методов для выборки атрибутов организации
#end
objinterface ITotalOrganizationAttributes;
#doc
нахождения головной организации по списку подразделений
#end
function Calc(Departments: longint): comp;
#doc
привязка к организации OrganizationRef
#end
procedure Bind(OrganizationRef: comp);
#doc
ссылка на текущую организацию
#end
function GetOrganizationRef: comp;
#doc
ссылка на юридические атрибуты организации (см. методы IOrganizationJuridicalInfo)
#end
function GetJuridicalInfo: IOrganizationJuridicalInfo;
#doc
ссылка на дополнительные юридические атрибуты организации (см. методы IOrganizationJuridicalInfo1)
#end
function GetJuridicalInfo1: IOrganizationJuridicalInfo1;
#doc
ссылка на налоговые атрибуты организации (см. методы IOrganizationTaxationInfo)
#end
function GetTaxationInfo: IOrganizationTaxationInfo;
#doc
ссылка на банковские счета организации (см. методы IOrganizationAccountsInfo)
#end
function GetAccountsInfo: IOrganizationAccountsInfo;
#doc
ссылка на список банков, в которых организация имеет расчетные счета
#end
function GetBanksList: IOrganizationBanksList;
#doc
ссылка на банк по умолчанию
#end
function GetDefaultBank(var Value: IBankInfo): boolean;
end;
#doc
Дополнительный метод для извлечения полного имени организации
#end
objinterface ITotalOrganizationAttributes1;
#doc
Ссылка на vip-интрефейс с методом, который возвращает имя организации в зависимости от системных настроек
#end
function GetNaming: IOrganizationNaming;
end;
#end
Код: Выделить всё
#ifndef _ORGANIZATIONINFO_OBJ_INCLUDED_
#define _ORGANIZATIONINFO_OBJ_INCLUDED_
#ifdef ComponentVersion
#component "L_KATORG"
#end
#doc
набор методов для выборки информации об организации
загрузка информации об организации по ее номеру записи OrganizationRef
#end
objinterface IOrganizationInfoFinder;
#doc
загрузить информации об организации по ее номеру записи OrganizationRef
#end
function Seek(OrganizationRef: comp): boolean;
end;
#doc
набор методов для выборки информации об организации
юридические атрибуты организации
#end
objinterface IOrganizationJuridicalInfo;
#doc
наименование организации
#end
function GetName: string;
#doc
дата регистрации
#end
function GetRegistrationDate: date;
#doc
дата ликвидации
#end
function GetLiquidationDate: date;
#doc
код по ОКВЭД (ОКОНХ)
#end
function GetOkvedCode: string;
#doc
код по ОКПО
#end
function GetOkpoCode: string;
#doc
код по ОКАТО
#end
function GetOkatoCode: string;
#doc
код по КБК
#end
function GetKbkCode: string;
#doc
код по ОГРН
#end
function GetOgrnCode: string;
#doc
регистрационный номер в ПФ
#end
function GetPfRegistrationNumber: string;
#doc
орган исполнительной власти
#end
function GetExecutiveOrgan: string;
#doc
адрес органа исполнительной власти
#end
function GetExecutiveOrganAddress: comp;
#doc
почтовый адрес (ссылка на запись в каталоге адресов)
#end
function GetPostAddress: comp;
#doc
юридический адрес (ссылка на запись в каталоге адресов)
#end
function GetJuridicalAddress: comp;
#doc
юридический адрес
#end
function GetJuridicalAddressStr: string;
#doc
индекс для юридического адреса
#end
function GetJuridicalAddressIndex: string;
#doc
электронный адрес
#end
function GetEmail: string;
#doc
контактная информация
#end
function GetContactInfo: string;
#doc
телефоны, факсы
#end
function GetPhones: string;
#doc
форма собственности
#end
function GetFormSobs: string;
#doc
Вид деятельности
#end
function GetVidD: string;
#doc
уполномоченный представитель (ссылка на физическое лицо)
#end
function GetDelegate: comp;
#doc
руководитель (ссылка на физическое лицо)
#end
function GetDirector: comp;
#doc
главный бухгалтер (ссылка на физическое лицо)
#end
function GetChiefAccountant: comp;
end;
#doc
набор методов для выборки информации об организации
дополнительные юридические атрибуты организации
#end
objinterface IOrganizationJuridicalInfo1;
#doc
внутренний номер
#end
function GetCode: string;
#doc
тип организации
#end
function GetType: string;
#doc
код по ОКДП
#end
function GetOkdpCode: string;
#doc
ссылка на запись в KatState (каталог стран)
#end
function GetStateRef: comp;
#doc
страна
#end
function GetStateStr: string;
#doc
ссылка на запись в KatCity (каталог городов)
#end
function GetCityRef: comp;
#doc
город
#end
function GetCityStr: string;
#doc
альтернативное наименование организации
#end
function GetAlternativeName: string;
#doc
признак входимости в состав корпорации
#end
function IsInCorporation: boolean;
#doc
признак архивной организации
#end
function IsArchive: boolean;
end;
#doc
набор методов для выборки информации об организации
налоговые атрибуты организации
#end
objinterface IOrganizationTaxationInfo;
#doc
идентификационный номер налогоплательщика
#end
function GetTaxPayerID: string;
#doc
код категории налогоплательщика
#end
function GetTaxPayerCategoryCode: string;
#doc
категория налогоплательщика
#end
function GetTaxPayerCategory: string;
#doc
ссылка на запись в таблице KATKOD (Классификатор кодов постановки на учет)
#end
function GetKppRef: comp;
#doc
строковое представление кода постановки на учет
#end
function GetKppStr: string;
#doc
серия и номер свидетельства о постановке на учет
#end
function GetSertificate: string;
#doc
дата выдачи свидетельства о постановке на учет
#end
function GetCertificateIssueDate: date;
#doc
наименование налоговой инспекции
#end
function GetTaxationInspection: string;
end;
#doc
набор методов для выборки информации об организации
атрибуты налоговой инспекции
#end
objinterface ITaxationInspectionInfo;
#doc
nrec
#end
function GetInspectionRef: comp;
#doc
наименование
#end
function GetName: string;
#doc
код
#end
function GetCode: string;
#doc
ссылка на единицу административно-территориального деления
#end
function GetAtdItemRef: comp;
#doc
ссылка на представляющую данную инспекцию организацию
#end
function GetOrganizationRef: comp;
#doc
ссылка на вышестоящую инспекцию
#end
function GetParentRef: comp;
end;
#doc
набор методов для выборки информации об организации
информация о ролях банков, в которых организация имеет расчетные счета
#end
objinterface IOrganizationAccountsInfo;
#doc
расчетный счет в банке
#end
function GetBank: comp;
#doc
валютный расчетный счет в банке
#end
function GetMonetaryBank: comp;
end;
#doc
набор методов для выборки информации об организации
атрибуты банков
#end
objinterface IBankInfo;
#doc
ссылка на банк
#end
function GetBankRef: comp;
#doc
наименование
#end
function GetName: string;
#doc
адрес банка
#end
function GetAddress: string;
#doc
ссылка на организацию
#end
function GetOrganizationRef: comp;
#doc
наименование организации банка
#end
function GetOrganization: string;
#doc
код 1
#end
function GetCode1: string;
#doc
код 2
#end
function GetCode2: string;
#doc
номер счета 1
#end
function GetAccount1: string;
#doc
номер счета 2
#end
function GetAccount2: string;
#doc
номер счета для платежных документов
#end
function GetPaymentDocumentsAccount: string;
#doc
признак активного счета
#end
function IsActive: boolean;
#doc
признак расчетного счета
#end
function IsAccounting: boolean;
end;
#doc
набор методов для выборки информации об организации
информация о списке банков, в которых организация имеет расчетные счета
#end
objinterface IOrganizationBanksList;
#doc
установить (Value = true) или сбросить (Value - false) режим редактирования
#end
procedure SetEditMode(Value: boolean);
#doc
позиционироваться на заданный банк
#end
function SeekBank(BankRef: comp): boolean;
end;
#doc
#end
objinterface IOrganizationNaming;
#doc
получить имя организации с типом или нет (в зависимости от системной настроки)
#end
function GetFullName: string;
end;
#end
Код: Выделить всё
#ifndef _RunRaise_vih_Included
#define _RunRaise_vih_Included
#ifdef ComponentVersion
#component "z_Staff"
#end
Table Struct RaiseVal (
NRecKlVal : comp, // NRec валюты
Summa : double // Сумма в текущей валюте
)
with index (
indexNRecKlVal = NRecKlVal
);
#doc
Расчет доплат
#end
objinterface ObjRunRaise;
#doc
получение суммы доплат на указанную дату в национальной валюте (иностранная валюта переводится по курсу на день расчета)
#end
public function GetSum(PsnNRec : comp; RunDate : date) : double;
#doc
получение суммы доплат на указанную дату во всех валютах в виде строки
#end
public function GetSumStr(PsnNRec : comp; RunDate : date) : string;
#doc
получение суммы доплат на указанную дату в национальной валюте по назначению
#end
public function GetSumApp(AppNRec : comp; RunDate : date) : double;
#doc
получение суммы доплат на указанную дату в национальной валюте по рабочему месту
#end
public function GetSumSts(StsNRec : comp; RunDate : date) : double;
#doc
получение суммы доплат на указанную дату в национальной валюте по приказу для персоны
#end
public function GetSumPrikaz(PsnNRec : comp; ContDocNRec : comp; RunDate : date) : double;
#doc
получить наименование доплаты по ее Nrec
#end
public function GetNameRaise(RaiseNrec : comp) : string;
#doc
получить сумму доплаты по ее Nrec на указанную дату
#end
public function GetSumRaise(RaiseNrec : comp; //Nrec записи о доплате
RunDate : date; //Дата, на которую берется история
Puth_TaxRate : integer;
Nrec_TaxRate : comp
) : double;
#doc
получить процент доплаты по ее Nrec
#end
public function GetPercentRaise(RaiseNrec : comp; RunDate : date) : double;
#doc
получить вид валюты доплаты по ее Nrec
#end
public function GetValRaise(RaiseNrec : comp) : string;
end;
#doc
#end
objinterface ObjRunRaiseSts;
// Функции работы с доплатами ШР
#doc
получить сумму доплаты по ее Nrec на указанную дату
#end
public function GetSumRaiseSts(RaiseStsNrec : comp; //Nrec записи о доплате
RunDate : date; //Дата, на которую берется история
Puth_TaxRate : integer;
Nrec_TaxRate : comp
) : double;
#doc
получить процент доплаты по ее Nrec
#end
public function GetPercentRaiseSts(RaiseStsNrec : comp; RunDate : date) : double;
#doc
получить вид валюты доплаты по ее Nrec
#end
public function GetValRaiseStS(RaiseStsNrec : comp; RunDate : date) : string;
end;
vipinterface RunRaise implements ObjRunRaise, ObjRunRaiseSts
#ifdef ATL51
Licensed (free)
#end
;
#endif