Ошибка компиляции при Alter Interface

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

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

Ответить
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Ошибка компиляции при Alter Interface

Сообщение Zver »

Уважаемые форумчане,

Компиляция файла заканчивается сообщением "Ошибка: Компиляция прервана в результате ошибки процесса компиляции. (стр. 0, поз. 0)".

В логе об ошибках появляется вот такое описание:

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

Необработанная исключительная ситуация
Код исключения: C0000005 (Общее нарушение защиты доступа к памяти)
Параметры исключения (2): 00000000 00000035
Адрес исключения: 00930ADC streams_.dll.1:0002FADC
Содержимое регистров процессора
 EAX = 0000002D
 EBX = 0B1A4848
 ECX = 00000000
 EDX = 00440720 ViperCompile.exe.1:0003F720
 ESI = 0A785360
 EDI = 00000000
 EBP = 0385D324
 ESP = 0385D304
 EIP = 00930ADC streams_.dll.1:0002FADC
 CS = 0023 База: 00000000 Размер: FFFFFFFF Флаги: CFB
 DS = 002B База: 00000000 Размер: FFFFFFFF Флаги: CF3
 SS = 002B База: 00000000 Размер: FFFFFFFF Флаги: CF3
 ES = 002B База: 00000000 Размер: FFFFFFFF Флаги: CF3
 FS = 0053 База: 7EFDA000 Размер: 00000FFF Флаги: 4F3
 GS = 002B База: 00000000 Размер: FFFFFFFF Флаги: CF3
Содержимое стека
 0385D314: 004407BC ViperCompile.exe.1:0003F7BC
 0385D324: 00929624 streams_.dll.1:00028624
 0385D328: 004431DD ViperCompile.exe.1:000421DD
 0385D334: 0062C750 ViperCompile.exe.2:00001750
 0385D33C: 0092AC13 streams_.dll.1:00029C13
 0385D340: 003407EC atlantis.rtl.1:0005F7EC
 0385D358: 00930B4F streams_.dll.1:0002FB4F
 0385D35C: 00930908 streams_.dll.1:0002F908
 0385D36C: 00930D44 streams_.dll.1:0002FD44
 0385D378: 00930FAA streams_.dll.1:0002FFAA
 0385D384: 0093100A streams_.dll.1:0003000A
 0385D388: 00402EAC ViperCompile.exe.1:00001EAC
 0385D38C: 00439840 ViperCompile.exe.1:00038840
 0385D394: 0043F9B4 ViperCompile.exe.1:0003E9B4
 0385D398: 0043AA1C ViperCompile.exe.1:00039A1C
 0385D39C: 00402EAC ViperCompile.exe.1:00001EAC
 0385D3A4: 0062C710 ViperCompile.exe.2:00001710
 0385D3C0: 00323507 atlantis.rtl.1:00042507
 0385D3D4: 002F841B atlantis.rtl.1:0001741B
 0385D3DC: 002F8A2D atlantis.rtl.1:00017A2D
 0385D3F4: 002F4E00 atlantis.rtl.1:00013E00
 0385D3F8: 0034EF8C atlantis.rtl.2:00000F8C
Вот исходный текст интерфейса:

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

#include GetKau.vih
#include ExtAttr.vih
#include ExtClass.vih
#include ValFunc.vih
#include BranchHelper.vih
#include aOfpCalc.vih
#include xlReport.Vih
!#include xlSetUp.Vih
!#include aAktOfp.vih
!#include KauConst.inc
const
#include fpConst.inc

end;

alter interface OfpByDr  ('');
  overload
  end;
ExtendFormats scrDocReq01;


const
  MAIN_MENU       : string[16] = 'F_OFP::MNUDOCREQ';
  TO_PAY          : string[9 ] = 'к платежу';
  cmDoGroupSelect : word = 60001;
  cmPrintRegistr  : word = 60002;
  START_ROW       : word = 7;
  TEMPL_ID        : string = 'F_OFP\IndentReestr';
  COL_NPP         : string = 'COL_NPP';
  COL_NUM         : string = 'COL_NUM';
  COL_STEP        : string = 'COL_STEP';
  COL_STBD        : string = 'COL_STBD';
  COL_STSUM       : string = 'COL_STSUM';
  COL_ACCDT       : string = 'COL_ACCDT';
  COL_ACCNUM      : string = 'COL_ACCNUM';
  COL_CONTRACTOR  : string = 'COL_CONTRACTOR';
  COL_SUMNDE      : string = 'COL_SUMNDE';
  COL_SUMVAL      : string = 'COL_SUMVAL';
  COL_VAL         : string = 'COL_VAL';
  COL_NUMPLAT     : string = 'COL_NUMPLAT';
  COL_DTPLAT      : string = 'COL_DTPLAT';
  COL_PRIOR       : string = 'COL_PRIOR';
  COL_PAYER       : string = 'COL_PAYER';
  COL_PRIM        : string = 'COL_PRIM';
  VAR_USD         : string = 'VAR_USD';
  VAR_EUR         : string = 'VAR_EUR';
  VAR_CO          : string = 'VAR_CO';
  VAR_DATE        : string = 'VAR_DATE';
  VAR_POST1       : string = 'VAR_POST1';
  VAR_FIO1        : string = 'VAR_FIO1';
end;

var
  pXL           : XLSRepBuilder;
  sXLTFileName
 ,sXLSFileName  : string;
  hasValDocRec  : boolean; // есть хотя бы одна валютная или валютно-рублевая заявка
  firstCO       : string;  // первый попавшийся центр ответственности
  fio1          : string;
  post1         : string;

table struct TIndent
(
   Npp       : longint,
   Number    : string,
   Step      : string,
   AccDate   : string,
   AccNum    : string,
   Contractor: string,
   SumNDE    : double,
   SumVal    : double,
   Val       : string,
   Prior     : string,
   Payer     : string,
   cIndent   : comp
)
with index
(
   ind01 = Npp (unique, autoinc)
);

table struct TStBudj
(
   cIndent   : comp,
   Name      : string,
   Summa     : double
)
with index
(
   ind01 = cIndent
);

table struct TInTotal
(
   Summa : double,
   Val   : string
)
with index
(
  ind01 = Val (unique)
);


var
  gl_cAttrNam : comp;
  orderColumn : longint;
  sCurVal     : string;

#include ExtAttr.var  // piExtAttr
#include ExtClass.var  // piExtClass
#include ValFunc.var

create view
var
  vi_cOrder
 ,vi_cPrRegZakaz
 ,vw_cMnPlan     : comp;
  vi_dDatVal     : date;
as select
 piExtAttr.sGetAttrID(coDocReq, DocReq.Nrec, gl_cAttrNam)
   (fieldname = OrderName)
,if (isValid(#PrRegBaseDoc), PrRegBaseDoc.NoDoc + ' от ' + DateToStr(PrRegBaseDoc.DDoc, 'DD/MM/YYYY'), '')
   (fieldName = InfoOfBaseDoc)
,piExtClass.GetClassCode ( coDocReq, 'Этап оплаты' )
   (fieldName = flStepClass)
from
 MnPlan
,KlVal
,MnPlan   PrRegZakaz
,KatNotes DRKatNotes
,StatLog  StLog
,KatOrg   PrRegKatOrg
,BaseDoc  PrRegBaseDoc
,KlVal    PrRegKlVal
,Dogovor  PrRegDogovor
,CursVal  PrRegCursVal
,MnPlan   MnPlanName
,FpSpAttr PrRegFpSpAttr
,FpStBud  PrRegFpStBud
,FpCO     PrRegFpCO
,Persons  PrRegPersons
,Appointments
,Catalogs
,TIndent
,TStBudj
,TInTotal
where
((
      vi_cOrder   ==  MnPlan.Nrec
  and tREQ_RASHOD ==  DrKatNotes.VidDoc
  and word(1)     ==  DrKatNotes.Status
  and TO_PAY      ==  DrKatNotes.Name

  // для печати реестра
  and vi_cPrRegZakaz         == PrRegZakaz.nRec
  //and DocReq.Prior           == PrRegPriority.Npp
  and DocReq.cOrg            == PrRegKatOrg.nRec
  and DocReq.cDogovor        == PrRegDogovor.nRec
  and DocReq.cBaseDoc        == PrRegBaseDoc.nRec
  and DocReq.cVal            == PrRegKlVal.nRec
  and cgKat_DocReq           == PrRegFpSpAttr.wCode
  and DocReq.Nrec            == PrRegFpSpAttr.cRec
  and PrRegFpSpAttr.cMean    == PrRegFpStBud.Nrec
  and DocReq.cPodr           == PrRegFpCO.Nrec
  and PrRegFpCO.cPersons     == PrRegPersons.Nrec
  and PrRegPersons.AppointCur== Appointments.Nrec
  and Appointments.Post      == Catalogs.Nrec
  and DocReq.cVal            == PrRegCursVal.KodValut
  and vi_dDatVal            >>= PrRegCursVal.DatVal
  and TIndent.cIndent        == TStBudj.cIndent
  and sCurVal                == TInTotal.Val
  // для получения имени заказа
  and vw_cMnPlan             == MnPlanName.Nrec
))
;

Function getMnPlanName(acMnPlan: comp) : String;
{
   result     := '';
   vw_cMnPlan := acMnPlan;
   if (GetFirst FastFirstRow MnPlanName = tsOk)
     result := MnPlanName.Name;
}

Procedure SaveSelOrder();
{
   SaveMyDsk(vi_cOrder, 'OfpByDr_vi_cOrder' )
}

Procedure LoadSelOrder();
{
   if (not ReadMyDsk(vi_cOrder, 'OfpByDr_vi_cOrder', true ))
      vi_cOrder := 0;
}

Procedure InsToStatLog(p_cDoc, p_cNote: comp; p_Status : word);
var
  pv_OldSt : word;
  pv_OldNt : comp;
{
    pv_OldSt := 0;
    pv_OldNt := 0h;

    if (GetFirst StLog where ((     tREQ_RASHOD == StLog.DocType
                               and p_cDoc       == StLog.cDoc
                           ))
       = tsOk )
      {
         pv_OldSt := StLog.NewStatus;
         pv_OldNt := StLog.cNewNote;
      }

    insert StLog
      set
        StLog.cDoc      := p_cDoc
       ,StLog.DocType   := tREQ_RASHOD
       ,StLog.DOper     := Cur_Date
       ,StLog.cNewNote  := p_cNote
       ,StLog.TimeOper  := Cur_Time
       ,StLog.DesGr     := sGetTune('USER.DESGR')
       ,StLog.Descr     := sGetTune('USER.DESCR')
       ,StLog.NewStatus := p_Status
       ,StLog.OldStatus := pv_OldSt
       ,StLog.cOldNote  := pv_OldNt
       ,StLog.Comment   := 'Изменен автоматически при формировании фин. обязательства'

    ;
}

Procedure UpdateStatus();
{
   // меняем статус, только если есть финобязательство
   if (RecordExists AktOfp where ((DocReq.Nrec == AktOfp.cBudVar))
        != tsOk)
      exit;

   // только если предыдущий статус был исполняемым
   if (DocReq.Status = 1)
   {
       if (GetFirst DRKatNotes = tsOk)
       {
         DocReq.cNote  := DRKatNotes.nRec
         InsToStatLog(DocReq.Nrec, DocReq.cNote, DRKatNotes.Status)
         Update current DocReq;
       }
   }
}

Procedure ChangeStatus_ToPay;
{
  if GetMarkerCount( markRecord ) = 0
   {
      UpdateStatus();
   }
  else
   {
      var lv_cReq : comp;
      var i   : integer;

      i       := 0;
      lv_cReq := 0;

      PushPos(#DocReq);

      while GetMarker(markRecord, i++, lv_cReq)
       {
          if (GetFirst DocReq where ((lv_cReq == DocReq.nRec))
               = tsOk
              )
            {
               UpdateStatus();
            }
        }
      PopPos(#DocReq);
   }
   RescanPanel(#DocReq)
}

function MarkAllRecords() : void;
{
  _Loop DocReq
    InsertMarker(markRecord, DocReq.nRec);
  RereadRecord();
}

function addSumToTotal(p_Sum: double; p_Val : string): void;
{
   if (p_Sum = 0)
     Exit;
   sCurVal := p_Val;
   if (GetFirst FastFirstRow TInTotal = tsOk)
    {
      update current TInTotal set TInTotal.Summa := TInTotal.Summa + p_Sum;
    }
   else
    {
      insert TInTotal set TInTotal.Summa := p_Sum, TInTotal.Val := p_Val;
    }
}

function prepareReportData(): boolean;
{
   StartNewVisual(vtRotateVisual, vfTimer, 'Подготовка данных для отчета...', 0);
   MtClear(#TIndent,  mfNormal);
   MtClear(#TStBudj,  mfNormal);
   MtClear(#TInTotal, mfNormal);
   hasValDocRec := false;
   firstCO := fio1 := post1 := '';
   _Loop DocReq
    {
      if (FoundMarker(markRecord, DocReq.nRec))
      {
        ClearBuffer(#TIndent);

        if (firstCO = '')
          if (isValid(#PrRegFpCO))
          {
            firstCO := PrRegFpCO.Name;
            if (GetFirst FastFirstRow PrRegPersons = tsOk)
             {
               fio1 := PrRegPersons.FIO;
               if (GetFirst FastFirstRow Appointments = tsOk)
                 if (GetFirst FastFirstRow Catalogs = tsOk)
                   post1 := Catalogs.Name;
             }
          }

        TIndent.cIndent    := DocReq.Nrec;
        TIndent.Number     := DocReq.NoDoc;
        TIndent.Step       := piExtClass.getSegName(flStepClass, DocReq.Nrec);
        TIndent.Payer      := BranchHelper::GetBranchName(GetCurrentBranch());
        TIndent.Prior      := piOfpCalc.Priority_GetName(DocReq.Prior)
        if (isValid(#PrRegKatOrg))
           TIndent.Contractor := PrRegKatOrg.Name;
        if (isValid(#PrRegBaseDoc))
         {
           TIndent.AccDate := DateToStr(PrRegBaseDoc.DDoc, 'DD.MM.YYYY');
           TIndent.AccNum  := PrRegBaseDoc.NoDoc;
         }
        case DocReq.TipMoney of
          1 : {
               TIndent.SumNDE := DocReq.Summa;
               addSumToTotal(TIndent.SumNDE, 'RUR');
            }
          2 : {
               hasValDocRec   := true;
               TIndent.SumNDE := oValFunc.CurrencyExchange(DocReq.cVal, DocReq.Summa, 0, Cur_Date());
               TIndent.SumVal := DocReq.Summa;
               addSumToTotal(TIndent.SumNDE, 'RUR');
               if (isValid(#PrRegKlVal))
                  TIndent.Val := PrRegKlVal.SimvolV;
            }
          3 : {
               hasValDocRec   := true;
               TIndent.SumVal := DocReq.Summa;
               if (isValid(#PrRegKlVal))
               {
                  TIndent.Val := PrRegKlVal.SimvolV;
                  addSumToTotal(TIndent.SumVal, TIndent.Val);
               }
            }
        end;
        Insert current TIndent;
        // статьи бюджета
        _Loop PrRegFpSpAttr
        {
           if (GetFirst FastFirstRow PrRegFpStBud = tsOk)
             Insert TStBudj
             Set
                Name   := PrRegFpStBud.LevelCode
               ,Summa  := PrRegFpSpAttr.Summa
               ,cIndent:= TIndent.cIndent;
        }

      }
    }
   StopVisual('',0);
   result := true;
}

function getValBySimvol(p_simv: string): comp;
{
   result := 0;
   if (GetFirst FastFirstRow KlVal where ((p_simv == KlVal.SimvolV)) = tsOk)
     result := KlVal.Nrec;
}

function printInTotal(): void;
var
  xLeft
, yTop
, xRight
, yBottom
, nRow    : longint;
{
  sCurVal := 'RUR';
  if (GetFirst TInTotal = tsOk)
  {
     pXL.ClearTblBuffer();
     pXL.SetTblStringFldValue(COL_CONTRACTOR, 'Итого:');
     pXL.SetTblNumberFldValue(COL_SUMNDE, TInTotal.Summa);
     pXL.InsTblRow();
  }
  ResetBounds(#TInTotal)
  _Loop TInTotal
   {
     if (TInTotal.Val = 'RUR')
      continue;
     pXL.ClearTblBuffer();
     pXL.SetTblStringFldValue(COL_CONTRACTOR, 'Итого:');
     pXL.SetTblNumberFldValue(COL_SUMVAL, TInTotal.Summa);
     pXL.SetTblStringFldValue(COL_VAL, TInTotal.Val);
     pXL.InsTblRow();
   }
  SetBounds(#TInTotal)
}

function RunPrintRegistr(p_createTemplateOnly: boolean = false) : void;
var
  rowCount    : longint;
{
  if (GetMarkerCount(markRecord) = 0)
  {
    if (message('Не помечено ни одной записи. Пометить все?', YesNo) = cmYes)
      MarkAllRecords();
    else
    {
      abort;
      exit;
    }
  }

  if (not prepareReportData())
    Exit;

  ResetBounds(#TStBudj);
  rowCount := RecordsInTable(#TIndent) + RecordsInTable(#TStBudj);
  SetBounds(#TStBudj);

  sXLTFileName := TranslatePath('%ClientStartPath%') + 'XLS\' + TEMPL_ID + '.xlt';
  StartNewVisual(vtNumericVisual, vfTimer, 'Печать отчета...', 0);
  if (p_createTemplateOnly)
    sXLSFileName := pXl.CreateXLT(sXLTFileName, true);
  else
    sXLSFileName := pXl.CreateReport(sXLTFileName, true);

  pXL.CreateTbls(sXLSFileName);
  pXL.CreateTbl('Reestr');
  pXL.CreateTblFld(COL_NPP       );
  pXL.CreateTblFld(COL_NUM       );
  pXL.CreateTblFld(COL_STEP      );
  pXL.CreateTblFld(COL_STBD      );
  pXL.CreateTblFld(COL_STSUM     );
  pXL.CreateTblFld(COL_ACCDT     );
  pXL.CreateTblFld(COL_ACCNUM    );
  pXL.CreateTblFld(COL_CONTRACTOR);
  pXL.CreateTblFld(COL_SUMNDE    );
  pXL.CreateTblFld(COL_SUMVAL    );
  pXL.CreateTblFld(COL_VAL       );
  pXL.CreateTblFld(COL_NUMPLAT   );
  pXL.CreateTblFld(COL_DTPLAT    );
  pXL.CreateTblFld(COL_PRIOR     );
  pXL.CreateTblFld(COL_PAYER     );
  pXL.CreateTblFld(COL_PRIM      );

  if (not p_createTemplateOnly)
   {
    _Loop TIndent
     {
       NextVisual;
       pXL.ClearTblBuffer;
       pXL.SetTblStringFldValue(COL_NPP       , TIndent.Npp);
       pXL.SetTblStringFldValue(COL_NUM       , TIndent.Number);
       pXL.SetTblStringFldValue(COL_STEP      , TIndent.Step);
       pXL.SetTblStringFldValue(COL_ACCDT     , TIndent.AccDate);
       pXL.SetTblStringFldValue(COL_ACCNUM    , TIndent.AccNum);
       pXL.SetTblStringFldValue(COL_CONTRACTOR, TIndent.Contractor);
       pXL.SetTblNumberFldValue(COL_SUMNDE    , TIndent.SumNDE);
       pXL.SetTblNumberFldValue(COL_SUMVAL    , TIndent.SumVal);
       pXL.SetTblStringFldValue(COL_VAL       , TIndent.Val);
       pXL.SetTblStringFldValue(COL_PRIOR     , TIndent.Prior);
       pXL.SetTblStringFldValue(COL_PAYER     , TIndent.Payer);
       var bool : boolean;
       bool := true
       _Loop TStBudj
        {
          if (not bool)
            pXL.ClearTblBuffer;
          pXL.SetTblStringFldValue(COL_STBD , TStBudj.Name);
          pXL.SetTblNumberFldValue(COL_STSUM, TStBudj.Summa);
          pXL.InsTblRow();
          bool := false;
     }

     if (bool)
        pXL.InsTblRow();
    }
  }
  printInTotal();
  pXL.PublishTbl('Reestr');
  pXL.CreateVar(sXLSFileName);
  pXL.SetStringVar(VAR_CO  , firstCo);
  pXL.SetNumberVar(VAR_USD , if (hasValDocRec, oValFunc.Rate(getValBySimvol('USD'),Cur_Date()),''));
  pXL.SetNumberVar(VAR_EUR , if (hasValDocRec, oValFunc.Rate(getValBySimvol('EUR'),Cur_Date()),''));
  pXL.SetStringVar(VAR_DATE, DateToStr(Cur_Date, 'DD.MM.YYYY'));
  pXL.SetStringVar(VAR_FIO1, fio1);
  pXL.SetStringVar(VAR_POST1, post1);
  pXL.PublishVar;
  pXL.LoadReport(sXLSFileName);
  Message(' Запускается формирование отчета из файла ' + sXLSFileName + Chr(13) +
          ' Шаблон берётся здесь:' + sXLTFileName);
  pXL.DisConnectExcel();
  StopVisual('',0);
}



Window winDocReq_Edit 'Заявки' EscClose;
  Show at (,,90,35);

Panel panDocReq;
  Show at (,,,26);
Table DocReq;
// расходование средств
/*Screen scrDocReq01 (,hcOfpIReqRashodEdit,sci178Esc);
Fields
  OrderName           (,,sci13Esc)                                  : noProtect, PickButton;
  [ContentBillComment] piExtAttr.sGetAttr(coDocReq, DocReq.Nrec, CONTENT_BILL_ATTR_NAME) : noProtect;

<<
























`Заказ`            .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
`Содержание счета` .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
end; // Screen*/
handleEvent
  cmPick:
    {
    if (inherited::handleevent(cmPick) != heok)
      {
      abort;
      exit;
      }
    Case CurField of
      #OrderName:
        {
        var cTmp : comp; //nrec заказа из внешнего атрибута
        cTmp := piExtAttr.coGetAttrID(coDocReq, DocReq.Nrec, gl_cAttrNam);
        iGetKau.GetCodeKau(cgiNo, cgKau_Zakaz, cTmp);
        piExtAttr.coSetAttrID(coDocReq, DocReq.Nrec, gl_cAttrNam, cTmp, getMnPlanName(cTmp));
        set OrderName;
        }
    end;
    }
  cmExprFieldChanged:
    {
    /*if (inherited::handleevent(cmExprFieldChanged) = heok) {}

    Case CurField of
      #ContentBillComment:
        {
        if piDocReq.DocReq_CanEdit(TDocReq(DocReq.buffer), true, true)
          if (OldFieldValue != ExprFieldValue)
            piExtAttr.sSetAttr(coDocReq, DocReq.Nrec, CONTENT_BILL_ATTR_NAME, ExprFieldValue);
        }
    end;  */
    }
end; //handleEvent

end; //panel
end; //window winDocReq_Edit

Window wSelOrder 'Выбор заказа (вн. атр. "Заказ")', doAccept, EscClose, Dialog;
show at (,,57, 5)
Screen scSelOrder;
fields
  [SelOrder]  if (vi_cOrder = 0, NOTHING_SELECTED, MnPlan.Name) : pickButton, protect,
                   {font = {italic = (vi_cOrder = 0); backcolor = if (vi_cOrder = 0, COLORNEED, 0)}};
  [NSelOrder] if (vi_cOrder = 0, '', MnPlan.Number) : pickButton, protect,
                   {font = {italic = (vi_cOrder = 0); backcolor = if (vi_cOrder = 0, COLORNEED, 0)}};
buttons
 cmOk , default,, ;
 cmCancel ,,, ;
<<

   `Выделить по:`.@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@

                              <. Далее .>  <. Отмена .>

>>
end;

HandleEvent
cmInit :
 {
    LoadSelOrder();
 }
cmPick :
 {

   case CurField of
   #SelOrder, #NSelOrder:
    {
       iGetKau.GetCodeKau(cgiNo, cgKau_Zakaz, vi_cOrder);
       Set vi_cOrder := vi_cOrder;
    }
   end;
 }

cmOk :
 {
   if (vi_cOrder = 0)
    {
       Message('Выберите сначала заказ, по которому хотите выделить заявки', Information);
        Exit;
    }

   SaveSelOrder();

   StartNewVisual(vtNumericVisual, vfTimer, 'Выделяю...', 1)
   ClearMarker(markRecord);

   PushPos(#DocReq)
   _Loop DocReq
   {
      var tmpOrder : comp;
      NextVisual;
      tmpOrder := piExtAttr.coGetAttrID(coDocReq, DocReq.Nrec, gl_cAttrNam);
      if (tmpOrder = vi_cOrder)
       {
         InsertMarker(markRecord, DocReq.Nrec);
       }
   }
   PopPos(#DocReq)
   StopVisual('', 0)
   CloseWindow(wSelOrder);
   RereadRecord();
 }
end;
end;

HandleEvent

cmInit :
 {
   gl_cAttrNam := piExtAttr.CreateAttrComp(coDocReq, ORDER_ATTR_NAME, cgAttrType_Comp, cgKatKau_Table, cgKau_Zakaz);

        // добавляю колонку Заказ после колонки Номер заявки

   cfsSetCurrentContainer('F_OFP::OFPBYDR.BRDOCREQ')

   if (cfsCreateObject ('Column', 'BRDOCREQ', 'OrderName', false, orderColumn)
          = cfOk)
       {
          cfsSetProp(orderColumn, cfpTitle, 'Заказ');
          cfsSetProp(orderColumn, cfpIndex, integer(3));
          cfsSetProp(orderColumn, cfpDefWidth, integer(10));
       }

        // колонка "Счёт"

   if (cfsCreateObject ('Column', 'BRDOCREQ', 'InfoOfBaseDoc', false, orderColumn)
          = cfOk)
       {
          cfsSetProp(orderColumn, cfpTitle, 'Счёт');
          cfsSetProp(orderColumn, cfpIndex, integer(4));
          cfsSetProp(orderColumn, cfpDefWidth, integer(10));
          cfsSetProp(orderColumn, cfpProtect, true);
       }

   if (Inherited :: HandleEvent (cmInit) ) = heOk
    {
       if (not MenuHelper::DynamicMenuIsExists(MAIN_MENU))
         if (Message('Для того, чтоб был доступен дополнительный функционал '#13'' +
                     'необходимо изменить стандартное меню.'#13'' +
                     'Сделать это сейчас?', Confirmation + YesNo
                    )
              = cmYes
              )
          {
              MenuHelper::GetDynMenuBuilder(MAIN_MENU)
                .addSeparator()
                .addItem('Групповое выделение по заказу (ЭП-Аудит)', cmDoGroupSelect)
                .addItem('Печать реестра (ЭП-Аудит)', cmPrintRegistr)
                .storeAndDispose();
          }

    }
 }

cmDone:
 {
    Inherited :: HandleEvent (cmDone);
    cfsDestroyObject(orderColumn);
 }

cmDoGroupSelect:
 {
   RunWindowModal(wSelOrder)
 }

cmPrintRegistr :
{
  RunPrintRegistr();
}

cmNal :
 {
    if (Inherited :: HandleEvent(cmNal) = heOk)
     {
       if (piAktOfp.AktOfp_GetTypeOfReason(parDocType) = rsREQUEST_PRD)
          Exit;

       ChangeStatus_ToPay();

     }
 }
end;
end.
Программист-самоучка
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Ошибка компиляции при Alter Interface

Сообщение Zver »

Всем спасибо, проблема решена!

Оказалось, что не был подключен ресурсный файл в котором находился докомпилируемый интерфейс.

Надеюсь поможет кому-либо в дальнейшем :).
Программист-самоучка
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Ошибка компиляции при Alter Interface

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

напишу сюда. собрались переходить на 9-ку, начал собирать всё барахло :) часто, при компиляции альтеров выскакивает ошибка

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

Ошибка: Тип уже определен: BOOLEAN_X05 \\FS06\GALSRV\SOURCES\910\INCLUDE\INC\dictypes.def(стр. 11, поз. 14)
больше этот тип нигде не описан.

дальше интересней, ругается так же на

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

  tSumma           = Decimal(31,15),               // Число с фиксированной точкой
комментирую, компилирую, получаю сообщение

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

Ошибка: Неизвестный тип : TSUMMA ...\910\INCLUDE\INC\dictypes.def(стр. 195, поз. 28)
ничего не понимаю :)
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Ошибка компиляции при Alter Interface

Сообщение Zver »

Попробуйте найти этот тип в:
1) стандартных заголовочных файлах
2) в ваших файлах

и посмотрите какие #include используются при сборке.
Может быть, что один и тот же тип описан сразу в двух подключаемых файлах.
Программист-самоучка
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Ошибка компиляции при Alter Interface

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

в том то и дело, что я искал... этот тип описывается только в dictypes.def
я думаю випер каким то образом уже это тип вытаскивает из... репозитария или ещё откуда-то... пока обхожусь тем, что убираю инклюд и всё собирается.
Irina_
Местный житель
Сообщения: 547
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Ошибка компиляции при Alter Interface

Сообщение Irina_ »

Здравствуйте.
Сегодня нашла данную тему. Столкнулась с проблемой, очень похожей на проблему Алексея. При отключении/ подключении dictypes.def получала аналогичные ошибки, но с типами tNrec и Boolean_x04: то неизвестный тип, то тип уже определен. В результате проблему решила:
- в prj подключила #include glotypes.inc (в нем подключается dictypes.def)
- в Viper в окне менеджера проекта файл prj оставила на верхнем уровне. Создала на этом же уровне папку, и в нее перенесла остальные файлы для компиляции.
При компиляции ошибки насчет типов больше не появлялись.

P.S. Просто убрать инклюд, как сделал Алексей, я не могла, т. к. тип tNrec используется в одной vih, которой я пользуюсь в alter.
Ответить