196 lines
5.8 KiB
ObjectPascal
196 lines
5.8 KiB
ObjectPascal
{*******************************************************}
|
|
{ }
|
|
{ Administración de puntos de venta }
|
|
{ }
|
|
{ Copyright (C) 2006 Rodax Software S.L. }
|
|
{ }
|
|
{*******************************************************}
|
|
|
|
unit EDI_INVRPT;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, EDI_Reader;
|
|
|
|
const
|
|
LONG_LINEA_CAB = 101;
|
|
LONG_LINEA_LIN = 319;
|
|
LONG_LINEA_CANT = 100;
|
|
|
|
type
|
|
TEDIFILE_CABINV = record
|
|
REGISTRO_OK : boolean;
|
|
NUMDOC : array[1..25] of char;
|
|
TIPODOC : array[1..3] of char;
|
|
TIPOLIQ : array[1..3] of char;
|
|
FECHA : array[1..8] of char;
|
|
FECHALIQ: array[1..8] of char;
|
|
EMISOR : array[1..17] of char;
|
|
RECEPTOR: array[1..17] of char;
|
|
DPTO : array[1..3] of char;
|
|
CENTRO : array[1..17] of char;
|
|
end;
|
|
|
|
TEDIFILE_LININV = record
|
|
REGISTRO_OK : boolean;
|
|
NUMDOC : array[1..25] of char;
|
|
NUMLIN : array[1..6] of char;
|
|
CODART : array[1..17] of char;
|
|
FAMILIA : array[1..17] of char;
|
|
BARRA : array[1..17] of char;
|
|
TALLA : array[1..17] of char;
|
|
MARCA : array[1..25] of char;
|
|
TAMANO : array[1..25] of char;
|
|
SERIE : array[1..25] of char;
|
|
COLOR : array[1..25] of char;
|
|
MODELO : array[1..25] of char;
|
|
DIBUJO : array[1..25] of char;
|
|
DESCRIP : array[1..70] of char;
|
|
end;
|
|
|
|
TEDITFILE_CANTINV = record
|
|
REGISTRO_OK : boolean;
|
|
NUMDOC : array[1..25] of char;
|
|
NUMLIN : array[1..6] of char;
|
|
NUMCANT : array[1..6] of char;
|
|
TIPOCANT: array[1..3] of char;
|
|
CANTIDAD: array[1..15] of char;
|
|
CENTRO : array[1..17] of char;
|
|
TMOV : array[1..3] of char;
|
|
FACT : array[1..12] of char;
|
|
DEPTO : array[1..3] of char;
|
|
IDVEN : array[1..10] of char;
|
|
end;
|
|
|
|
PCABINV = ^TEDIFILE_CABINV;
|
|
PLININV = ^TEDIFILE_LININV;
|
|
PCANTINV= ^TEDITFILE_CANTINV;
|
|
|
|
TCABINV_Reader = class(TEDIFile_Reader)
|
|
protected
|
|
function ProcessLine (const ALine : String) : Boolean; override;
|
|
end;
|
|
|
|
|
|
TLININV_Reader = class(TEDIFile_Reader)
|
|
protected
|
|
function ProcessLine (const ALine : String) : Boolean; override;
|
|
end;
|
|
|
|
|
|
TCANTINV_Reader = class(TEDIFile_Reader)
|
|
protected
|
|
function ProcessLine (const ALine : String) : Boolean; override;
|
|
end;
|
|
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils, Dialogs, uDataModuleEDI_Inventary;
|
|
|
|
{ TLININV_Reader }
|
|
|
|
function TLININV_Reader.ProcessLine(const ALine: String): Boolean;
|
|
var
|
|
Registro : TEDIFILE_LININV;
|
|
pRegistro : PLININV;
|
|
LongLinea : Integer;
|
|
AuxLine : String;
|
|
begin
|
|
Result := False;
|
|
LongLinea := Length(ALine);
|
|
|
|
{ Por si la línea fuera más larga o más corta de lo normal, la hago de
|
|
de la longitud que debería tener }
|
|
AuxLine := Format('%-' + IntTostr(LONG_LINEA_LIN) + '.' + IntTostr(LONG_LINEA_LIN) + 's', [ALine]);
|
|
|
|
// Inicializo los campos del registro.
|
|
FillChar(Registro, SizeOf(TEDIFILE_LININV), 0);
|
|
|
|
{ Para rellenar el campo REGISTRO_OK del registro mediante el 'move',
|
|
añado al principio de AuxLine el byte #0 (valor para 'False'). }
|
|
AuxLine := Concat(#0, AuxLine);
|
|
Move(AuxLine[1], Registro, LONG_LINEA_LIN+1); // +1 por el byte del concat
|
|
|
|
// El registro es correcto si tiene la longitud adecuada.
|
|
Registro.REGISTRO_OK := (LongLinea = LONG_LINEA_LIN);
|
|
|
|
// Añado el registro a la lista de registros.
|
|
New(pRegistro);
|
|
Move(Registro, pRegistro^, SizeOf(TEDIFILE_LININV));
|
|
FileData.Add(pRegistro);
|
|
Result := True;
|
|
end;
|
|
|
|
{ TCABINV_Reader }
|
|
|
|
function TCABINV_Reader.ProcessLine(const ALine: String): Boolean;
|
|
var
|
|
Registro : TEDIFILE_CABINV;
|
|
pRegistro : PCABINV;
|
|
LongLinea : Integer;
|
|
AuxLine : String;
|
|
begin
|
|
Result := False;
|
|
LongLinea := Length(ALine);
|
|
|
|
{ Por si la línea fuera más larga o más corta de lo normal, la hago de
|
|
de la longitud que debería tener }
|
|
AuxLine := Format('%-' + IntTostr(LONG_LINEA_CAB) + '.' + IntTostr(LONG_LINEA_CAB) + 's', [ALine]);
|
|
|
|
// Inicializo los campos del registro.
|
|
FillChar(Registro, SizeOf(TEDIFILE_CABINV), 0);
|
|
|
|
{ Para rellenar el campo REGISTRO_OK del registro mediante el 'move',
|
|
añado al principio de AuxLine el byte #0 (valor para 'False'). }
|
|
AuxLine := Concat(#0, AuxLine);
|
|
Move(AuxLine[1], Registro, LONG_LINEA_CAB+1); // +1 por el byte del concat
|
|
|
|
// El registro es correcto si tiene la longitud adecuada.
|
|
Registro.REGISTRO_OK := (LongLinea = LONG_LINEA_CAB);
|
|
|
|
// Añado el registro a la lista de registros.
|
|
New(pRegistro);
|
|
Move(Registro, pRegistro^, SizeOf(TEDIFILE_CABINV));
|
|
FileData.Add(pRegistro);
|
|
Result := True;
|
|
end;
|
|
|
|
{ TCANTINV_Reader }
|
|
|
|
function TCANTINV_Reader.ProcessLine(const ALine: String): Boolean;
|
|
var
|
|
Registro : TEDITFILE_CANTINV;
|
|
pRegistro : PCANTINV;
|
|
LongLinea : Integer;
|
|
AuxLine : String;
|
|
begin
|
|
Result := False;
|
|
LongLinea := Length(ALine);
|
|
|
|
{ Por si la línea fuera más larga o más corta de lo normal, la hago de
|
|
de la longitud que debería tener }
|
|
AuxLine := Format('%-' + IntTostr(LONG_LINEA_CANT) + '.' + IntTostr(LONG_LINEA_CANT) + 's', [ALine]);
|
|
|
|
// Inicializo los campos del registro.
|
|
FillChar(Registro, SizeOf(TEDITFILE_CANTINV), 0);
|
|
|
|
{ Para rellenar el campo REGISTRO_OK del registro mediante el 'move',
|
|
añado al principio de AuxLine el byte #0 (valor para 'False'). }
|
|
AuxLine := Concat(#0, AuxLine);
|
|
Move(AuxLine[1], Registro, LONG_LINEA_CANT+1); // +1 por el byte del concat
|
|
|
|
// El registro es correcto si tiene la longitud adecuada.
|
|
Registro.REGISTRO_OK := (LongLinea = LONG_LINEA_CANT);
|
|
|
|
// Añado el registro a la lista de registros.
|
|
New(pRegistro);
|
|
Move(Registro, pRegistro^, SizeOf(TEDITFILE_CANTINV));
|
|
FileData.Add(pRegistro);
|
|
Result := True;
|
|
end;
|
|
|
|
end.
|