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

ошибка RunTime при запуске ресурса

Добавлено: 07 сен 2011, 15:37
titaeva
Добрый день!
Нужен совет экспертов.
Компилирую ресурс, подключаю, запускаю - отчёт формирует корректно (все данные какие должны быть), выходит ошибка Runtime error 216 (rtl: попытка обращения к некорректному дескриптору) in streams_.dll, Галактика виснет. Подскажите, пожалуйста, с чем может быть связана данная ошибка?
Компилирую и запускаю на одном и том же экзешнике, пробовала запускать данный рес только со стандартными ресурсами (вдруг конфликтует), ошибка повторяется на всех компьютерах у всех юзеров. Версия Атлантис 5.4.36.0

Re: ошибка RunTime при запуске ресурса

Добавлено: 07 сен 2011, 20:03
edward_K
Как правило это ошибка с некорреткным обрщением к логической таблице. logstrtofile вам в помощь. Заодно и в поиске поищите - я кому то уже советовал. Не поможет - код формы в студию.

Re: ошибка RunTime при запуске ресурса

Добавлено: 12 сен 2011, 17:42
savov
А отчет случаем не с Excel или Word связан?

Re: ошибка RunTime при запуске ресурса

Добавлено: 20 сен 2011, 13:41
titaeva
да, отчёт связан с выводом в Exel.
Комментируя некоторые части кода, выяснила, что ошибка кроется при работе с настройками отчёта - то бишь при работе с маркерами. После чего запуталась окончательно....

Re: ошибка RunTime при запуске ресурса

Добавлено: 20 сен 2011, 17:04
oiko
Бывает.
Без исходного кода трудно что-то посоветовать.

Re: ошибка RunTime при запуске ресурса

Добавлено: 21 сен 2011, 11:46
savov
Такую ошибку наблюдал когда скомпилировал саппортом с установленными патчами, а запустил в Гал-ке без этих патчей, но у вас ситуация совершенно другая (если отчет что-то выдавал и ТОЧНО запуск компиляция на одних экзешниках).

Re: ошибка RunTime при запуске ресурса

Добавлено: 22 сен 2011, 09:45
titaeva

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

#include GetKau.vih

#include ObjSaveNastr.vih
#include FT_MSFO_Log.vih
#include FT_MSFOPlagIn.vih
#include ExtClass.vih

#define IntName O3
// Указываем что наш интрфейс реализует отчет МСФО
VipInterface FT_MSFOPlagIn_#(IntName) implements ObjFT_MSFOPlagIn;
Interface FT_MSFOPlagIn_#(IntName);

var IsNastrLoad:array[1] of boolean;
    pNastr:ObjSaveNastr;
    sCurWorkBook:string;
    ExClassFun: iExtClass;
    mOrg,mLinkedOrg:longint;

    _za1,_za2,_za3:double;
    _za1a,_za1b,_za2a,_za3a:double;
// ------------------------
    vksf: word;

table struct tt (
  kre : string , // кредитор
  val : string , // валюта
  spr : double , // ставка_процента
  zal : double , // залог
  ost : double , // остаток
  pol : double , // получено
// vasya, tz sds008 --------------
  kor : double , // корректировки
// -------------------------------
  voz : double , // возвращено
  in1 : double , // до_31/12/2007
  in2 : double , // от_1/1/2008_до_31/12/2008
  in3 : double , // от_1/1/2009_до_31/12/2009
  in4 : double , // от_1/1/2010_до_31/12/2010
  in5 : double , // от_1/1/2011_до_31/12/2011
  ord : word   , // для_порядка
  tmp : word)
(
  i1 = ord + kre + val + spr
);

create view
var CurNoRep,xs1,ys1,xs2,ys2:word;
    DateRep1,DateRep2:date;
    IsNeedRepEx:boolean;
    vkod,vkliz:string;
    mvkod,mvkliz:longint;
    vks:word;
    daza:boolean;
    ViewOrg,ViewLinkedOrg:string;

as select tt.*
from tt,KatNotes,KatKlass,veksl,vekslop,basefin,PlPor,soprhoz,cursval,klval,grafkred,aval,KatOrg,KatOrgDescr;

form frm('FT_MSFO_#(IntName).OUT','FT_MSFO_#(IntName)') with novisual;

#include dLog.vpp // Модуль для работы с логом (Gera)

// Дата компиляции плагина (для отчета о подключенных о плагинах)
function PlagInDate: string;
{
  PlagInDate:='#__DATETIME__';//Не трогать!!!
}
// Количество реализуемых отчетов
function RepCount: word;
{
  RepCount:=1;
}
// Код i-го реализуемого отчета
function KodRep(i:word): word;//Код должен быть уникален среди всех отчетов!!!
{
  case i of
    1:KodRep:=8;
  end;
}
// Имя i-го реализуемого отчета
function NameRep(i:word): string;
{
  case i of
    1:NameRep:='Заемные средства';
  end;
}
// Имя листа Excel i-го реализуемого отчета
function ListRep(i:word): string;
{
  case i of
    1:ListRep:='O3';
  end;
}
// Размер окна параметров
function X(i:word): integer;
{
  case i of
    1:X:=10;
  end;
}
function Y(i:word): integer;
{
  case i of
    1:Y:=5;
  end;
}
function SX(i:word): integer;
{
  case i of
    1:SX:=80;
  end;
}
function SY(i:word): integer;
{
  case i of
    1:SY:=25;
  end;
}

//Обязательно должно быть! Внедряется в менеджер.
screen scMainParam (,,scI1Esc);
table tt;
fields
  xs1:noprotect;
  ys1:noprotect;
  xs2:noprotect;
  ys2:noprotect;
  vkod('Овердрафт',,scI13Esc): protect,pickbutton;
  vkliz('Лизинг',,scI13Esc): protect,pickbutton;
  vks('Валютные кредиты сформированы',,):[list 1'В валюте','В рублях','Согласно классификатору'],protect;
  daza:noprotect;
  ViewOrg('Фильтр по компаниям Группы',,scI13Esc): protect,pickbutton;
  ViewLinkedOrg('Фильтр по Связанным сторонам',,scI13Esc): protect,pickbutton;
<<
 `Верхняя левая ячейка таблицы 1:`
  .@@@@@  .@@@@@

 `Верхняя левая ячейка таблицы 2:`
  .@@@@@  .@@@@@

 `Вид кредита "овердрафт"`
  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 `Вид кредита "лизинг"`
  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 `Валютные кредиты сформированы`
  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   [.] Учитывать данные "залога"`
 `Фильтр по компаниям Группы`
  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 `Фильтр по Связанным сторонам`
  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
end;
screen sc1;
<<
>>
end;

// **********************************************************************************************

function GetViewKontr(m:longint):string;     //просмотр контрагента
var kol:longint;
    cRec:comp;
{
  kol:=getmarkercount(m);    //количество элементов в маркере m
  if (kol=0) GetViewKontr:='Не установлен'
  else if (kol<>1) GetViewKontr:='Множественный выбор ('+string(kol)+')'
  else {
    getmarker(m,0,cRec);
    if (getfirst katorg where((cRec==katorg.nrec))=tsok) GetViewKontr:=katorg.name;
  };
}

function PickKontr(m:longint):string;       //выбор контрагента
var i,MarkerDescr,MarkerOrg:longint;
    cRec:comp;
{
  MarkerDescr:=InitMarker('',8,100,10,false);
  MarkerOrg:=InitMarker('',8,100,10,false);
  for(i:=0;i<getmarkercount(m);i:=i+1) {
    getmarker(m,i,cRec);
    InsertMarker(MarkerOrg,cRec);
    _loop KatOrgDescr where((cRec==KatOrgDescr.cRec))
      InsertMarker(MarkerDescr,KatOrgDescr.NRec);
  };
  DoneMarker(MarkerOrg,'KatOrg');
  DoneMarker(MarkerDescr,'KatOrgDescr');
  runinterface(GetSomeKontrPrim,true);
  MarkerOrg:=InitMarker('KatOrg',8,100,10,false);
  clearmarker(m);
  for(i:=0;i<getmarkercount(MarkerOrg);i:=i+1) {
    getmarker(MarkerOrg,i,cRec);
    InsertMarker(m,cRec);
  };
  DoneMarker(MarkerOrg,'KatOrg');
  PickKontr:=GetViewKontr(m);
}

function PrintRep(MSFO_Log:FT_MSFO_Log):boolean;
var i,n:word;
    SumCell:double;
{
  PrintRep:=false;

  StartNewVisual(vtRotateVisual,vfTimer,'Формирование отчета',0);

  if (IsNeedRepEx) {//Нужна расшифровка
  };

  i:=0;

  if (getfirst tt where ((0==tt.ord))<>tsok) { i:=i+1; }; // если нет овердрафта, то сдвигаем на строку ниже

  if (xlSetActiveWorkBookByName(sCurWorkBook)) {

    if (xlSetActiveSheetByName(ListRep(CurNoRep))) {

      if (xlCreateMatrix(recordsintable(#tt)+i,14)) {

        xlClearMatrix;

        _loop tt {

          if (not NextVisual) break;
          if ((tt.ost=0) and (tt.pol=0) and (tt.voz=0) and (tt.in1=0) and (tt.in2=0) and (tt.in3=0) and (tt.in4=0) and (tt.in5=0)) { continue; };
          inc(i);
          if (i=ys2) { break; };
          if (i=1) { tt.spr:=tt.spr/100; }; // 20070726
          xlstWriteToMatrix(i, 1,tt.kre)      ; // кредитор                  , string
          xlstWriteToMatrix(i, 2,tt.val)      ; // валюта                    , string
          xldoWriteToMatrix(i, 3,tt.spr)      ; // ставка_процента           , double
          xldoWriteToMatrix(i, 4,tt.zal/1000) ; // залог                     , double
          xldoWriteToMatrix(i, 5,tt.ost/1000) ; // остаток                   , double
          xldoWriteToMatrix(i, 6,tt.pol/1000) ; // получено                  , double
          // vasya, tz sds008 -------------------------------------------------------
          xldoWriteToMatrix(i, 7,tt.kor/1000) ; // корректировка             , double
          // ------------------------------------------------------------------------
          xldoWriteToMatrix(i, 8,tt.voz/1000) ; // возвращено                , double
          xldoWriteToMatrix(i,10,tt.in1/1000) ; // до_31/12/2007             , double
          xldoWriteToMatrix(i,11,tt.in2/1000) ; // от_1/1/2008_до_31/12/2008 , double
          xldoWriteToMatrix(i,12,tt.in3/1000) ; // от_1/1/2009_до_31/12/2009 , double
          xldoWriteToMatrix(i,13,tt.in4/1000) ; // от_1/1/2010_до_31/12/2010 , double
          xldoWriteToMatrix(i,14,tt.in5/1000) ; // от_1/1/2011_до_31/12/2011 , double
        }; // _loop tt

        xlWriteMatrixToExcel(ys1+4,xs1);
        xlFreeMatrix;
      };

/* vasya, tz sds008 -----------------------------------------<<<<
      xlSetCellNumberValue(_za1/1000,ys2+1,xs2+1,ys2+1,xs2+1);
      xlSetCellNumberValue(_za2/1000,ys2+1,xs2+2,ys2+1,xs2+2);
      xlSetCellNumberValue(_za3/1000,ys2+5,xs2+1,ys2+5,xs2+1);
// ------------------------------------------------------------*/

      xlSetCellNumberValue(_za1/1000,ys2+1,xs2+1,ys2+1,xs2+1);
      xlSetCellNumberValue(_za1a/1000,ys2+1,xs2+2,ys2+1,xs2+2);
      xlSetCellNumberValue(_za1b/1000,ys2+1,xs2+3,ys2+1,xs2+3);


      xlSetCellNumberValue(_za2/1000,ys2+3,xs2+1,ys2+3,xs2+1);
      xlSetCellNumberValue(_za2a/1000,ys2+3,xs2+2,ys2+3,xs2+2);


      xlSetCellNumberValue(_za3/1000,ys2+5,xs2+1,ys2+5,xs2+1);
      xlSetCellNumberValue(_za3a/1000,ys2+5,xs2+2,ys2+5,xs2+2);
// vasya, tz sds008 ----------------------------------------->>>>
    }
    else MSFO_Log.add(1,'Нет листа "'+ListRep(CurNoRep)+'" в отчете!');
  }
  else MSFO_Log.add(1,'Нет книги "'+sCurWorkBook+'"!');

  PrintRep:=NextVisual;
  StopVisual('',0);
}

procedure set_vkod;    //просмотр кредита овердрафт
{
  var i: longint;
  var c: comp;
  i:=getmarkercount(mvkod);
  if (i=0) { set vkod:='не установлен'; }
  else {
    if (i<>1) { set vkod:='множественный выбор ('+string(i)+')'; }
    else {
      getmarker(mvkod, 0, c);
      if (getfirst KATKLASS where ((c==KATKLASS.NREC))=tsok) { set vkod:=KATKLASS.NAME; };
    };
  };
};

procedure set_vkliz;
{
  var i: longint;
  var c: comp;
  i:=getmarkercount(mvkliz);
  if (i=0) { set vkliz:='не установлен'; }
  else {
    if (i<>1) { set vkliz:='множественный выбор ('+string(i)+')'; }
    else {
      getmarker(mvkliz, 0, c);
      if (getfirst KATKLASS where ((c==KATKLASS.NREC))=tsok) { set vkliz:=KATKLASS.NAME; };
    };
  };
};

procedure InitPlagInParam(i:word;iNastr:ObjSaveNastr);
var GrName,TblName,sNoRow,sNoCol,sFilt,str:string;
    numf,wPos:word;
    k,kol:longint;
{
  if (i=0 or i>RepCount) exit;
  if (IsNastrLoad[i]) exit;

  if (mvkod=0) mvkod:=InitMarker('',8,1,1) else clearmarker(mvkod);
  //if (mvkod<>0) clearmarker(mvkod) else mvkod:=InitMarker('',8,1,1)  ;
  if (mvkliz=0) mvkliz:=InitMarker('',8,1,1) else clearmarker(mvkliz);
  if (mOrg<>0) ClearMarker(mOrg) else mOrg:=initmarker('',8,0,1);
  if (mLinkedOrg<>0) ClearMarker(mLinkedOrg) else mLinkedOrg:=initmarker('',8,0,1);

  if (NullVipRef(pNastr)) pNastr:=iNastr;//Для последующего использования
  CurNoRep:=i;

  //Обязательно хранить настройки отчетов в группах с таким именем
  GrName:=iNastr.OpenGroup(NameRep(i)+' '+KodRep(i));
  if (GrName<>'') {
    //Здесь уже настройки конкретного отчета ************************
    donemarker(mOrg,'');
    mOrg:=iNastr.ReadMarker('mOrg');
    ViewOrg:=GetViewKontr(mOrg);
    donemarker(mLinkedOrg,'');
    mLinkedOrg:=iNastr.ReadMarker('mLinkedOrg');
    ViewLinkedOrg:=GetViewKontr(mLinkedOrg);

    donemarker(mvkod,'');
    mvkod:=iNastr.ReadMarker('mvkod'); set_vkod;
    donemarker(mvkliz,'');
    mvkliz:=iNastr.ReadMarker('mvkliz'); set_vkliz;
    set vks:=word(iNastr.ReadStr('vks'));
    set daza:=if(iNastr.ReadStr('daza')='TRUE', true, false);
    set xs1:=word(iNastr.ReadStr('xs1'));
    set ys1:=word(iNastr.ReadStr('ys1'));
    set xs2:=word(iNastr.ReadStr('xs2'));
    set ys2:=word(iNastr.ReadStr('ys2'));
    //***************************************************************
    iNastr.CloseGroup(GrName);
  }
  IsNastrLoad[i]:=true;
}
// Здесь надо сохранить настройки отчета
procedure DonePlagInParam(i:word;iNastr:ObjSaveNastr);
var k,kol,numf:word;
    mTmp:longint;
{
  if (i=0 or i>RepCount) exit;
  if (not IsNastrLoad[i]) exit;

  //Обязательно хранить настройки отчетов в группах с таким именем
  if (iNastr.WriteBeginGroup(NameRep(i)+' '+KodRep(i))) {

    //Здесь уже настройки конкретного отчета ************************
   mTmp:=InitMarker('',8,0,1);CopyMarker(mTmp,mOrg);//Нельзя удалять маркер, только сохранить
   iNastr.WriteMarker('mOrg',mTmp);
   mTmp:=InitMarker('',8,0,1);CopyMarker(mTmp,mLinkedOrg);//Нельзя удалять маркер, только сохранить
   iNastr.WriteMarker('mLinkedOrg',mTmp);

    iNastr.WriteMarker('mvkod',mvkod);[b]//вот как раз эти маркеры глюча[/b]т
    iNastr.WriteMarker('mvkliz',mvkliz);[b]//вот как раз эти маркеры глючат[/b]
    iNastr.SaveStr(string(daza),'daza');
    iNastr.SaveStr(string(vks),'vks');
    iNastr.SaveStr(string(xs1),'xs1');
    iNastr.SaveStr(string(ys1),'ys1');
    iNastr.SaveStr(string(xs2),'xs2');
    iNastr.SaveStr(string(ys2),'ys2');
    //***************************************************************
    iNastr.WriteEndGroup(NameRep(i)+' '+KodRep(i));
    IsNastrLoad[i]:=false;
  };
}

Re: ошибка RunTime при запуске ресурса

Добавлено: 22 сен 2011, 09:48
titaeva
//iNastr.WriteMarker('mvkod',mvkod);
//iNastr.WriteMarker('mvkliz',mvkliz);
вот из-за этих маркеров висит....

Re: ошибка RunTime при запуске ресурса

Добавлено: 23 сен 2011, 11:15
Петр
Опять Вас ФТ не консультирует?

Посмотрите чуть выше как маркеры сохраняют, Вам нужно только скопировать и поменять имена маркеров.
Там и коментарий я специально писал "Нельзя удалять маркер, только сохранить".