unit CVBNorma32CSB;

interface

uses
  Messages, SysUtils, Classes, Dialogs, CVBUtils;

type

  TProcedimiento = (prPrimero, prSegundo);
  TCVBParte = (CABECERA_GENERAL, CABECERA_REMESA,
               REGISTRO1, REGISTRO2, REGISTRO3, FIN_REMESA, FIN_GENERAL);

  TCVBNorma32CSB = class(TComponent)
  private
    pReg: array[0..152] of char; // Un digito más por el /0
    _LL_: integer;  // Longitud Línea. Aquí almacenamos el valor 164 para usarlo
    // en el resto del componente.
    _INDICA_: string;
    _CERO_, _SPCE_: char;
    _MSK_PT_, _MSK_EU_: string;

    prProced: TProcedimiento;
    HayError: boolean;

    FEuro:   boolean;
    FDepura: boolean;

    NFic: file;

    fSumaImpRecibos: double; // Suma de los recibos dentro de una remesa
    fSumaImpRemesas: double; // Suma de las remesas dentro del fichero

    iNumRecibos: integer; // Nº de recibos dentro de una remesa
    iNumRemesas: integer; // Nº de remesas dentro del fichero

    iTotalLineas: integer;  // Nº de líneas en el fichero
    iTotalRecibos : integer; // Nº de recibos dentro de un fichero

    FEnCasoError: TNotifyEvent;
    sReg: string;

    _19_, _58_, _32_: integer;
  protected
    procedure ChequearDatos(Parte: TCVBParte); overload;
    procedure Error(iErr: integer); dynamic;
    procedure CompRegistro1;
    procedure CompRegistro2;
    procedure CompRegistro3;
  public
    _NORMA_: integer;
    NrError: integer;
    CRLF:    string;
    FNomFic: string; // Nombre del archivo en disco

    // CABECERA FICHERO
    FechaFichero: TDateTime;
    EntReceptora: string;        //4
    SucReceptora: string;        //4

    // CABECERA REMESA
    NumRemesa:    string;        //4
    IdCedente:    string;        //15

    AboEnt:       string;        //4
    AboOfi:       string;        //4
    AboDC:        string;        //2
    AboCC:        string;        //10

    AdeEnt:       string;        //4
    AdeOfi:       string;        //4
    AdeDC:        string;        //2
    AdeCC:        string;        //10

    ImpEnt:       string;        //4
    ImpSuc:       string;        //4
    ImpDC:        string;        //2
    ImpCC:        string;        //10

    // REGISTRO REMESA
    // (I)
    RegNumRecibo:    string;         // 7
    RegCodigoINE:    string;         // 9
    RegPlazaLibr:    string;         // 20
    RegImpEfecto:    double;         // 9
    RegVtoEfecto:    TDateTime;      // 6
    // (II)
    RegCodEnt:       string;        // 4
    RegCodOfi:       string;        // 4
    RegDC:           string;        // 2
    RegCC:           string;        // 10
    RegLibrador:     string;        // 34
    RegLibrado:      string;        // 34
    RegInfoAdic:     string;        // 30
    // (III)
    RegDomicilio:    string;        // 34
    RegCodPostal:    string;        // 5
    RegPoblacion:    string;        // 20
    RegNIF:          string;        // 9



    constructor Create(AOwner: TComponent); override;
    procedure Abrir;
    procedure Cerrar;
    procedure IniCabeceraFichero;
    procedure IniCabeceraRemesa;
    procedure IniRegistro;
    procedure CompCabeceraFichero;
    procedure CompCabeceraRemesa;
    procedure CompRegistro;
    procedure CompFinRemesa;
  published
    property NomFichero: string read FNomFic write FNomFic;
    property Procedimiento: TProcedimiento read prProced write prProced default prPrimero;
    property Euros: boolean read FEuro write FEuro default False;
    property Depura: boolean read FDepura write FDepura default False;
    property EnCasoError: TNotifyEvent read FEnCasoError write FEnCasoError;
  end;

implementation

constructor TCVBNorma32CSB.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  {Asignar la propiedades por defecto}

  _32_ := 32;
  _19_ := 19;
  _58_ := 58;

  _LL_ := high(pReg);

  _INDICA_ := '<--';
  _CERO_   := '0';
  _SPCE_   := ' ';

  _MSK_PT_ := '0000000000';
  _MSK_EU_ := '00000000.00';

end;

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

procedure TCVBNorma32CSB.Abrir;
begin
  HayError := False;

  AssignFile(NFic, FNomFic);
{$I+}
  rewrite(Nfic, _LL_);
{$I-}
  if IOResult <> 0 then
    error(0);

  fSumaImpRecibos := 0.0;
  fSumaImpRemesas := 0.0;

  iNumRecibos := 0;
  iNumRemesas := 0;

  iTotalLineas := 0;
  iTotalRecibos := 0;

  IniCabeceraFichero;
  IniCabeceraRemesa;
  IniRegistro;

  if CRLF = '' then
    CRLF := #13 + #10;
end;

procedure TCVBNorma32CSB.IniCabeceraFichero;
begin
  FechaFichero := 0;
  EntReceptora := '';
  SucReceptora := '';
end;

procedure TCVBNorma32CSB.IniCabeceraRemesa;
begin
  NumRemesa := '0001';   // <--------------------------------------------

  AboEnt := '';
  AboOfi := '';
  AboDC := '';
  AboCC := '';

  AdeEnt := '';
  AdeOfi := '';
  AdeDC := '';
  AdeCC := '';

  ImpEnt := '';
  ImpSuc := '';
  ImpDC := '';
  ImpCC := '';
end;

procedure TCVBNorma32CSB.IniRegistro;
begin
  // (I)
  RegNumRecibo := '';
  RegCodigoINE := '';
  RegPlazaLibr := '';
  RegImpEfecto := 0.0;
  RegVtoEfecto := 0;
  // (II)
  RegCodEnt := '';
  RegCodOfi := '';
  RegDC := '';
  RegCC := '';
  RegLibrador := '';
  RegLibrado := '';
  RegInfoAdic := '';
  // (III)
  RegDomicilio := '';
  RegCodPostal := '';
  RegPoblacion := '';
  RegNIF := '';
end;

procedure TCVBNorma32CSB.CompCabeceraFichero;
begin
  HayError := False;
  sReg := '';
  ChequearDatos(CABECERA_GENERAL);

  // A
  sReg := '02' + '65';
  sReg := sReg + Ajusta('', 'I', 2, _SPCE_); //2

  // B
  sReg := sReg + Ajusta(FormatDateTime('ddmmyy', FechaFichero), 'I', 6, _SPCE_); //6
  sReg := sReg + Ajusta('1', 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6

  // C
  sReg := sReg + Ajusta('', 'I', 15, _SPCE_); //15
  sReg := sReg + Ajusta('', 'I', 4, _SPCE_); //4
  sReg := sReg + Ajusta('', 'I', 4, _SPCE_); //4
  sReg := sReg + Ajusta(EntReceptora, 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta(SucReceptora, 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6

  // D
  sReg := sReg + Ajusta('', 'I', 61, _SPCE_); //61

  // E
  sReg := sReg + Ajusta('', 'I', 24, _SPCE_); //24

  sReg := sReg + CRLF; //2

  if not (length(sReg) = _LL_) then
    Error(_LL_);

  StrPCopy(@pReg, sReg);
  Blockwrite(NFic, pReg, 1);

  Inc(iTotalLineas);
end;

procedure TCVBNorma32CSB.CompCabeceraRemesa;
begin
  HayError := False;

  sReg := '';

  ChequearDatos(CABECERA_REMESA);
  Inc(iNumRemesas);

  // A
  sReg := '11' + '65';
  sReg := sReg + Ajusta('', 'I', 2, _SPCE_); //2

  // B
  sReg := sReg + Ajusta(FormatDateTime('ddmmyy', FechaFichero), 'I', 6, _SPCE_); //6
  sReg := sReg + Ajusta(IntToStr(iNumRemesas), 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6

  // C
  sReg := sReg + Ajusta(IdCedente, 'D', 15, _SPCE_); //15
  sReg := sReg + '1';
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6
  sReg := sReg + Ajusta('', 'I', 5, _SPCE_); //5
  sReg := sReg + Ajusta('', 'I', 4, _SPCE_); //4
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6

  // D
  sReg := sReg + Ajusta(AboEnt, 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta(AboOfi, 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta(AboDC, 'I', 2, _CERO_); //2
  sReg := sReg + Ajusta(AboCC, 'I', 10, _CERO_); //10

  sReg := sReg + Ajusta(AdeEnt, 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta(AdeOfi, 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta(AdeDC, 'I', 2, _CERO_); //2
  sReg := sReg + Ajusta(AdeCC, 'I', 10, _CERO_); //10

  sReg := sReg + Ajusta(ImpEnt, 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta(ImpSuc, 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta(ImpDC, 'I', 2, _CERO_); //2
  sReg := sReg + Ajusta(ImpCC, 'I', 10, _CERO_); //10

  sReg := sReg + Ajusta('', 'I', 1, _SPCE_); //1

  // E
  sReg := sReg + Ajusta('', 'I', 24, _SPCE_); //24

  sReg := sReg + CRLF; //2

  if not (length(sReg) = _LL_) then
    Error(_LL_);

  StrPCopy(@pReg, sReg);
  Blockwrite(NFic, pReg, 1);

  Inc(iTotalLineas);
end;

procedure TCVBNorma32CSB.CompFinRemesa;
var
  sTotImp, cIT : string;
  iP : integer;
begin
  HayError := False;
  sReg := '';
  ChequearDatos(FIN_REMESA);

  // A
  sReg := '71' + '65';
  sReg := sReg + Ajusta('', 'I', 2, _SPCE_); //2

  // B
  sReg := sReg + Ajusta(FormatDateTime('ddmmyy', FechaFichero), 'I', 6, _SPCE_); //6
  sReg := sReg + Ajusta(NumRemesa, 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6

  // C
  sReg := sReg + Ajusta('', 'I', 37, _SPCE_); //37

  // D
  sReg := sReg + Ajusta('', 'I', 10, _SPCE_); //10

  sTotImp := FormatFloat(_MSK_EU_, fSumaImpRecibos);
  iP := pos(',', sTotImp);
  if iP < 1 then
    iP := pos('.', sTotImp);
  cIT := copy(sTotImp, 1, iP - 1);
  sTotImp := cIT + copy(sTotImp, iP + 1, 2);
  sReg := sReg + Ajusta(sTotImp, 'I', 10, _CERO_); // 10
  
  sReg := sReg + Ajusta('', 'I', 10, _SPCE_); //10
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6
  sReg := sReg + Ajusta('', 'I', 7, _SPCE_); //7
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6

  // E
  sReg := sReg + Ajusta('', 'I', 5, _SPCE_); //5
  { Nº de registros de la remesa incluidos la cabecera y éste mismo:
    Num.registros = 1 (cabecera) + (3 registros * Num.recibos) + 1 (este pie)
  }
  sReg := sReg + Ajusta(IntToStr(1 + (3*iNumRecibos) + 1), 'I', 7, _CERO_); //7
  sReg := sReg + Ajusta(IntToStr(iNumRecibos), 'I', 6, _CERO_); //6
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); //6

  sReg := sReg + CRLF; //2

  if not (length(sReg) = _LL_) then
    Error(_LL_);

  StrPCopy(@pReg, sReg);
  Blockwrite(NFic, pReg, 1);

  Inc(iTotalLineas);

  // Acumular la suma de los importes de las remesas en el fichero
  fSumaImpRemesas := fSumaImpRemesas + fSumaImpRecibos;

  // Poner a cero la suma de los recibos y el número de recibos
  fSumaImpRecibos := 0.0;
  iNumRecibos := 0;
end;

procedure TCVBNorma32CSB.CompRegistro;
begin
  CompRegistro1;
  CompRegistro2;
  CompRegistro3;

  // Acumular la suma de los recibos en la remesa
  fSumaImpRecibos := fSumaImpRecibos + RegImpEfecto;

  // Acumular el nº de recibos en la remesa
  Inc(iNumRecibos);
  Inc(iTotalRecibos);
end;

procedure TCVBNorma32CSB.CompRegistro1;
var
  sTotImp, cIT : string;
  iP: integer;
begin
  HayError := False;

  sReg := '';

  ChequearDatos(REGISTRO1);

  // A
  sReg := '25' + '65';
  sReg := sReg + Ajusta('', 'I', 2, _SPCE_); // 2

  // B
  // Convertir referencia   EL/0001 - 1  =>   EL00001-1
  RegNumRecibo := StringReplace(RegNumRecibo, '/', '0', []);
  RegNumRecibo := StringReplace(RegNumRecibo, ' - ', '-', []);
  sReg := sReg + Ajusta(RegNumRecibo, 'D', 15, _SPCE_); // 15
  sReg := sReg + Ajusta(FormatDateTime('ddmmyy', FechaFichero), 'I', 6, _SPCE_); // 6
  sReg := sReg + Ajusta(NumRemesa, 'I', 4, _CERO_); // 4

  // C
  sReg := sReg + Ajusta(RegCodigoINE, 'D', 9, _SPCE_); // 9
  sReg := sReg + Ajusta('', 'I', 2, _SPCE_); // 2

  // D
  sReg := sReg + Ajusta(RegPlazaLibr, 'D', 20, _SPCE_); // 20
  sReg := sReg + Ajusta('', 'I', 1, _SPCE_); // 1

  // E
  sReg := sReg + Ajusta('', 'I', 15, _SPCE_); // 15
  sReg := sReg + Ajusta('', 'I', 9, _SPCE_); // 9

  sTotImp := FormatFloat(_MSK_EU_, RegImpEfecto);
  iP := pos(',', sTotImp);
  if iP < 1 then
    iP := pos('.', sTotImp);
  cIT := copy(sTotImp, 1, iP - 1);
  sTotImp := cIT + copy(sTotImp, iP + 1, 2);
  sReg := sReg + Ajusta(sTotImp, 'I', 9, _CERO_); // 9

  sReg := sReg + Ajusta('', 'I', 15, _SPCE_); // 15
  sReg := sReg + Ajusta(FormatDateTime('ddmmyy', RegVtoEfecto), 'I', 6, _SPCE_); // 6
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); // 6
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); // 6
  sReg := sReg + Ajusta('', 'I', 1, _SPCE_); // 1
  sReg := sReg + Ajusta('', 'I', 4, _SPCE_); // 4

  // F
  sReg := sReg + Ajusta('', 'I', 16, _SPCE_); // 16

  sReg := sReg + CRLF; //2

  if not (length(sReg) = _LL_) then
    Error(_LL_);

  StrPCopy(@pReg, sReg);
  Blockwrite(NFic, pReg, 1);

  Inc(iTotalLineas);
end;

procedure TCVBNorma32CSB.CompRegistro2;
begin
  HayError := False;

  sReg := '';

  ChequearDatos(REGISTRO2);

  // A
  sReg := '26' + '65';
  sReg := sReg + Ajusta('', 'I', 2, _SPCE_); // 2

  // B
  sReg := sReg + Ajusta(RegNumRecibo, 'D', 15, _SPCE_); // 15
  sReg := sReg + Ajusta('', 'I', 2, _SPCE_); // 2
  sReg := sReg + Ajusta('2', 'I', 1, _SPCE_); // 1
  sReg := sReg + Ajusta('000000', 'I', 6, _CERO_); // 6
  sReg := sReg + Ajusta('2', 'I', 1, _SPCE_); // 1
  sReg := sReg + Ajusta('0', 'I', 1, _SPCE_); // 1

  // C
  sReg := sReg + Ajusta(RegCodEnt, 'I', 4, _CERO_); //4
  sReg := sReg + Ajusta(RegCodOfi, 'I', 4, _CERO_); //4
  if Length(RegDC) = 0 then
    RegDC := '**';
  sReg := sReg + Ajusta(RegDC, 'I', 2, _CERO_); //2
  sReg := sReg + Ajusta(RegCC, 'I', 10, _CERO_); //10

  // D
  sReg := sReg + Ajusta(RegLibrador, 'D', 34, _SPCE_); // 34
  sReg := sReg + Ajusta(RegLibrado, 'D', 34, _SPCE_); // 34
  sReg := sReg + Ajusta(RegInfoAdic, 'D', 30, _SPCE_); // 30

  sReg := sReg + CRLF; //2

  if not (length(sReg) = _LL_) then
    Error(_LL_);

  StrPCopy(@pReg, sReg);
  Blockwrite(NFic, pReg, 1);

  Inc(iTotalLineas);
end;

procedure TCVBNorma32CSB.CompRegistro3;
begin
  HayError := False;

  sReg := '';

  ChequearDatos(REGISTRO3);

  // A
  sReg := '27' + '65';
  sReg := sReg + Ajusta('', 'I', 2, _SPCE_); // 2

  // B
  sReg := sReg + Ajusta(RegNumRecibo, 'D', 15, _SPCE_); // 15
  sReg := sReg + Ajusta('', 'I', 2, _SPCE_); // 2
  sReg := sReg + Ajusta(RegDomicilio, 'D', 34, _SPCE_); // 34
  sReg := sReg + Ajusta(RegCodPostal, 'I', 5, _SPCE_); // 5
  sReg := sReg + Ajusta(RegPoblacion, 'D', 20, _SPCE_); // 20
  sReg := sReg + Ajusta(RegCodigoINE, 'I', 2, _SPCE_); // 2
  sReg := sReg + Ajusta('', 'I', 7, _SPCE_); // 7
  sReg := sReg + Ajusta(RegNIF, 'I', 9, _SPCE_); // 9
  sReg := sReg + Ajusta('', 'I', 50, _SPCE_); // 50    

  sReg := sReg + CRLF; //2

  if not (length(sReg) = _LL_) then
    Error(_LL_);

  StrPCopy(@pReg, sReg);
  Blockwrite(NFic, pReg, 1);

  Inc(iTotalLineas);
end;

procedure TCVBNorma32CSB.Cerrar;
var
  sTotImp, cIT : string;
  iP: integer;
begin
  HayError := False;
  sReg     := '';

  Inc(iTotalLineas);

  // A
  sReg := '98' + '65';
  sReg := sReg + Ajusta('', 'I', 2, _SPCE_); // 2

  // B
  sReg := sReg + Ajusta('', 'I', 22, _SPCE_); // 22  

  // C
  sReg := sReg + Ajusta('', 'I', 37, _SPCE_); // 37

  // D
  sReg := sReg + Ajusta('', 'I', 10, _SPCE_); // 10

  sTotImp := FormatFloat(_MSK_EU_, fSumaImpRemesas);
  iP := pos(',', sTotImp);
  if iP < 1 then
    iP := pos('.', sTotImp);
  cIT := copy(sTotImp, 1, iP - 1);
  sTotImp := cIT + copy(sTotImp, iP + 1, 2);
  sReg := sReg + Ajusta(sTotImp, 'I', 10, _CERO_); // 10
  
  sReg := sReg + Ajusta('', 'I', 10, _SPCE_); // 10
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); // 6
  sReg := sReg + Ajusta('', 'I', 7, _SPCE_); // 7
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); // 6
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); // 6
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); // 6

  // E
  sReg := sReg + Ajusta(IntToStr(iNumRemesas), 'I', 5, _CERO_); //5
  sReg := sReg + Ajusta(IntToStr(iTotalLineas), 'I', 7, _CERO_); //7
  sReg := sReg + Ajusta(IntToStr(iTotalRecibos), 'I', 6, _CERO_); //6
  sReg := sReg + Ajusta('', 'I', 6, _SPCE_); // 6

  sReg := sReg + CRLF; //2

  if not (length(sReg) = _LL_) then
    Error(_LL_);

  StrPCopy(@pReg, sReg);
  Blockwrite(NFic, pReg, 1);

  CloseFile(NFic);
end;


procedure TCVBNorma32CSB.ChequearDatos(Parte: TCVBParte);
var
  bError: boolean;
begin
{  bError := False;

  if Parte = CABECERA_GENERAL then
  begin
    if ((Presentador = '') or (NomCliPres = '') or
      (EntRecepPres = '') or (OfiRecepPres = '')) then
    begin
      if Presentador = '' then
        Presentador := _INDICA_;
      if NomCliPres = '' then
        NomCliPres := _INDICA_;
      if EntRecepPres = '' then
        EntRecepPres := _INDICA_;
      if OfiRecepPres = '' then
        OfiRecepPres := _INDICA_;
      bError := True;
    end;
  end
  else
  if iParte = 2 then
  begin
    if ((Ordenante = '') or (NomCliOrd = '') or
      (EntOrde = '') or (OfiOrde = '') or
      (CcOrde = '')) then
    begin
      if Ordenante = '' then
        Ordenante := _INDICA_;
      if NomCliOrd = '' then
        NomCliOrd := _INDICA_;
      if EntOrde = '' then
        EntOrde := _INDICA_;
      if OfiOrde = '' then
        OfiOrde := _INDICA_;
      if CcOrde = '' then
        CcOrde := _INDICA_;
      bError := True;
    end;
  end
  else
  if (iParte = 3) or (iParte = 4) then
  begin
    if ((Referencia = '') or (NomTitDom = '') or
      (EntTitDom = '') or (OfiTitDom = '') or
      (ccTitDom = '')) then
    begin
      if Referencia = '' then
        Referencia := _INDICA_;
      if NomTitDom = '' then
        NomTitDom := _INDICA_;
      if EntTitDom = '' then
        EntTitDom := _INDICA_;
      if OfiTitDom = '' then
        OfiTitDom := _INDICA_;
      if ccTitDom = '' then
        ccTitDom := _INDICA_;
      bError := True;
    end;
  end;

  if bError then
    ShowMessage('' + CRLF +
      'Faltan datos al procesar el siguiente registro: ' + CRLF + CRLF +
      'Código Cli/Pro:     ' + Referencia + CRLF +
      'Nombre Titular:     ' + NomTitDom + CRLF +
      'Entidad Domiciliar: ' + EntTitDom + CRLF +
      'Oficina Domiciliar: ' + OfiTitDom + CRLF +
      'Cuenta  Domiciliar: ' + ccTitDom + CRLF +
      'Presentador:        ' + Presentador + CRLF +
      'Nombre Cliente Pres:' + NomCliPres + CRLF +
      'Entidad Receptora P:' + EntRecepPres + CRLF +
      'Oficina Receptora P:' + OfiRecepPres + CRLF +
      'Ordenante:          ' + Ordenante + CRLF +
      'Nombre Cliente Ord.:' + NomCliOrd + CRLF +
      'Entidad Ordenante:  ' + EntOrde + CRLF +
      'Oficina Ordenante:  ' + OfiOrde + CRLF +
      'Cuenta Ordenante:   ' + CcOrde
      );

  if iParte = 3 then
  begin
    if bError then
    begin
      if ((fImportePts = 0) and (FEuro = False)) or
        ((fImporteEu = 0) and (FEuro = True)) then
      begin
        ShowMessage('¡¡¡ El importe no puede ser cero !!!');
        Error(27);
      end;
    end;
  end;}
end;

procedure TCVBNorma32CSB.Error(iErr: integer);
begin
  NrError  := iErr;
  HayError := True;
  if Assigned(FEnCasoError) then
    FEnCasoError(Self)
  else
  if FDepura = False then
  begin
    CloseFile(NFic);
    if NrError = _LL_ then
      raise Exception.Create('Error en la longitud de la línea')
    else
      raise Exception.Create('Error en la generación del fichero');
  end;
end;


end.
