{ =============================================================================== 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.