Вопрос знатокам

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

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

Ответить
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Вопрос знатокам

Сообщение BlazeBio »

Есть фейс. Компилится нормально. В логе даже нет ниодного предупреждения. Но при запуске выдаёт две ошибки
"Возникло необработанное исключение 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.
файл TotalOrganizationAttributes.vih

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

#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
файл totalorganizationattributes.var

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

var TOA:  ITotalOrganizationAttributes;
var TOA1: ITotalOrganizationAttributes1;

handleevent

cmInit:
{
  LoadVipRef(TOA, 'TotalOrganizationAttributes');
  TOA1 := ITotalOrganizationAttributes1(TOA);
}

cmOnVipLoad:
{
  LoadVipRef(TOA, 'TotalOrganizationAttributes');
  TOA1 := ITotalOrganizationAttributes1(TOA);
}

end;
файл TotalOrganizationAttributes.obj

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

#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
файл OrganizationInfo.obj

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

#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
файл RunRaise.vih

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

#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
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: Вопрос знатокам

Сообщение KATZ »

BlazeBio писал(а):"Возникло необработанное исключение exObjIfcNoLoad(exref) ошибки загрузки объекта из ресурсного файла(TotalOrganizationAttributes)",
"Возникло необработанное исключение exObjIfcNoLoad(exref) ошибки загрузки объекта из ресурсного(RunRaise)"
Раз пишет имена объектов без имен компонентов, то, вероятно, при компиляции отсутствует директива

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

#define ComponentVersion
P. S. Не вкладывайте вы огромные тексты, всё равно никто в них глубоко разбираться не станет.
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Вопрос знатокам

Сообщение BlazeBio »

Спасибо, заработало. :cool:
Ответить