Varela_PuntosVenta/Source/Servidor/EDI/EDI_SLSRPT.pas

285 lines
8.9 KiB
ObjectPascal

{
===============================================================================
Copyright (©) 2006. Rodax Software.
===============================================================================
Los contenidos de este fichero son propiedad de Rodax Software titular del
copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
bajo el que se suministra.
-----------------------------------------------------------------------------
Web: www.rodax-software.com
===============================================================================
Fecha primera versión: 18-04-2006
Versión actual: 1.0.0
Fecha versión actual: 18-04-2006
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
===============================================================================
}
unit EDI_SLSRPT;
interface
uses
Classes, EDI_Reader;
const
LONG_LINEA_CAB = 859;
LONG_LINEA_LUG = 142;
LONG_LINEA_ART = 778;
type
TEDIFILE_CABVEN = record
REGISTRO_OK : boolean;
CLAVE1 : array[1..10] of char;
NUMINF : array[1..35] of char;
FUNCION : array[1..3] of char;
FECINI : array[1..12] of char;
FECFIN : array[1..12] of char;
FECINF : array[1..12] of char;
PERVEN : array[1..16] of char;
EANOFI : array[1..17] of char;
EANEMI : array[1..17] of char;
EANREC : array[1..17] of char;
EANVEN : array[1..17] of char;
EANALM : array[1..17] of char;
EANREP : array[1..17] of char;
EANPRO : array[1..17] of char;
EANADMSA: array[1..17] of char;
EANREPSR: array[1..17] of char;
ADMVENSA: array[1..35] of char;
REPDEPSR: array[1..35] of char;
EMAILSA : array[1..35] of char;
NUMFAXSA: array[1..35] of char;
NUMTELSA: array[1..35] of char;
NUMTLXSA: array[1..35] of char;
X400SA : array[1..35] of char;
EMAILSR : array[1..35] of char;
NUMFAXSR: array[1..35] of char;
NUMTELSR: array[1..35] of char;
NUMTLXSR: array[1..35] of char;
X400SR : array[1..35] of char;
NUMPRE : array[1..35] of char;
NUMINFSC: array[1..35] of char;
NUMCON : array[1..35] of char;
FECPRE : array[1..12] of char;
FECINFSC: array[1..12] of char;
FECCON : array[1..12] of char;
DIVPED : array[1..3] of char;
DIVPRE : array[1..3] of char;
DIVPAG : array[1..3] of char;
DIVPEDF : array[1..3] of char;
DIVPREF : array[1..3] of char;
DIVPAGF : array[1..3] of char;
TASCAM : array[1..15] of char;
FECTAS : array[1..12] of char;
end;
TEDIFILE_LUGVEN = record
REGISTRO_OK : boolean;
CLAVE1 : array[1..10] of char;
CLAVE2 : array[1..5] of char;
EANLUG : array[1..17] of char;
LUGVEN : array[1..70] of char;
FECINI : array[1..12] of char;
FECFIN : array[1..12] of char;
PERVEN : array[1..16] of char;
end;
TEDIFILE_ARTVEN = record
REGISTRO_OK : boolean;
CLAVE1 : array[1..10] of char;
CLAVE2 : array[1..5] of char;
CLAVE3 : array[1..5] of char;
EANART : array[1..17] of char;
CODCOM : array[1..35] of char;
NUMVAR : array[1..35] of char;
CODPRO : array[1..35] of char;
DESARTCO: array[1..35] of char;
DESART : array[1..70] of char;
NUMCON : array[1..35] of char;
NUMLIS : array[1..35] of char;
CONESP1 : array[1..3] of char;
CONESP2 : array[1..3] of char;
CONESP3 : array[1..3] of char;
VALVEN : array[1..15] of char;
PRENETCT: array[1..15] of char;
PREBRUCT: array[1..15] of char;
PREINFET: array[1..15] of char;
PREINFFT: array[1..15] of char;
PRECALCT: array[1..15] of char;
PRENETCA: array[1..15] of char;
PREBRUCA: array[1..15] of char;
PREINFEA: array[1..15] of char;
PREINFFA: array[1..15] of char;
PRECALCA: array[1..15] of char;
BAPRUN1 : array[1..9] of char;
UNIMED1 : array[1..3] of char;
BAPRUN2 : array[1..9] of char;
UNIMED2 : array[1..3] of char;
BAPRUN3 : array[1..9] of char;
UNIMED3 : array[1..3] of char;
BAPRUN4 : array[1..9] of char;
UNIMED4 : array[1..3] of char;
BAPRUN5 : array[1..9] of char;
UNIMED5 : array[1..3] of char;
CANVEN : array[1..15] of char;
EXIPRO : array[1..15] of char;
DESEXI : array[1..15] of char;
ESPMEDCV: array[1..3] of char;
ESPMEDEP: array[1..3] of char;
ESPMEDDE: array[1..3] of char;
CANDEV : array[1..15] of char;
EANVEN : array[1..17] of char;
NOMVEN : array[1..70] of char;
NUMTALON: array[1..35] of char;
CANVENNET : array[1..15] of char;
UMEDVENNET: array[1..3] of char;
CANESP : array[1..15] of char;
UMEDESP : array[1..3] of char;
end;
PCABVEN = ^TEDIFILE_CABVEN;
PLUGVEN = ^TEDIFILE_LUGVEN;
PARTVEN = ^TEDIFILE_ARTVEN;
TCABVEN_Reader = class(TEDIFile_Reader)
protected
function ProcessLine (const ALine : String) : Boolean; override;
end;
TLUGVEN_Reader = class(TEDIFile_Reader)
protected
function ProcessLine (const ALine : String) : Boolean; override;
end;
TARTVEN_Reader = class(TEDIFile_Reader)
protected
function ProcessLine (const ALine : String) : Boolean; override;
end;
implementation
uses
SysUtils, Dialogs, uDataModuleEDI_Sales;
{ TCABVEN_Reader }
function TCABVEN_Reader.ProcessLine(const ALine: String): Boolean;
var
Registro : TEDIFILE_CABVEN;
pRegistro : PCABVEN;
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_CABVEN), 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_CABVEN));
FileData.Add(pRegistro);
Result := True;
end;
{ TLUGVEN_Reader }
function TLUGVEN_Reader.ProcessLine(const ALine: String): Boolean;
var
Registro : TEDIFILE_LUGVEN;
pRegistro : PLUGVEN;
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_LUG) + '.' + IntTostr(LONG_LINEA_LUG) + 's', [ALine]);
// Inicializo los campos del registro.
FillChar(Registro, SizeOf(TEDIFILE_LUGVEN), 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_LUG+1); // +1 por el byte del concat
// El registro es correcto si tiene la longitud adecuada.
Registro.REGISTRO_OK := (LongLinea = LONG_LINEA_LUG);
// Añado el registro a la lista de registros.
New(pRegistro);
Move(Registro, pRegistro^, SizeOf(TEDIFILE_LUGVEN));
FileData.Add(pRegistro);
Result := True;
end;
{ TARTVEN_Reader }
function TARTVEN_Reader.ProcessLine(const ALine: String): Boolean;
var
Registro : TEDIFILE_ARTVEN;
pRegistro : PARTVEN;
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_ART) + '.' + IntTostr(LONG_LINEA_ART) + 's', [ALine]);
// Inicializo los campos del registro.
FillChar(Registro, SizeOf(TEDIFILE_ARTVEN), 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_ART+1); // +1 por el byte del concat
// El registro es correcto si tiene la longitud adecuada.
Registro.REGISTRO_OK := (LongLinea = LONG_LINEA_ART);
// Añado el registro a la lista de registros.
New(pRegistro);
Move(Registro, pRegistro^, SizeOf(TEDIFILE_ARTVEN));
FileData.Add(pRegistro);
Result := True;
end;
end.