285 lines
8.9 KiB
ObjectPascal
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.
|