2007-08-01 16:16:26 +00:00
|
|
|
unit uDataModuleEDI_Inventary;
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
|
|
uses
|
|
|
|
|
SysUtils, Classes, JvComponentBase, JvLogFile, uDAClasses,
|
|
|
|
|
uDABusinessProcessor, uDAScriptingProvider, uDADataTable, uDACDSDataTable,
|
|
|
|
|
uDataModuleServer, uBizEDIInventary, EDI_Reader, EDI_Inventary_Impl,
|
|
|
|
|
EDI_INVRPT, uDAInterfaces;
|
|
|
|
|
|
|
|
|
|
type
|
|
|
|
|
TdmEDIInventary = class(TDataModule)
|
|
|
|
|
schEDIInventary: TDASchema;
|
|
|
|
|
private
|
2008-03-11 19:13:35 +00:00
|
|
|
FConnection : IDAConnection;
|
|
|
|
|
FNumDocCargados : TStringList;
|
|
|
|
|
|
|
|
|
|
function ExisteNumDoc(const ANumDoc : String): Boolean;
|
2007-08-01 16:16:26 +00:00
|
|
|
function InsertarCabecera(const ACabData : TEDIFileData; var NumRegNuevos : integer) : Boolean;
|
|
|
|
|
function InsertarLineas(const ALinData : TEDIFileData; var NumRegNuevos : integer) : Boolean;
|
|
|
|
|
function InsertarCantidades(const ACantData : TEDIFileData; var NumRegNuevos : integer) : Boolean;
|
|
|
|
|
procedure InsertarLog(OK : Boolean; Error_msg : String = '');
|
2007-08-08 15:18:45 +00:00
|
|
|
function GenerarInventarioEDI: Boolean;
|
|
|
|
|
function MarcarRegistrosUltimoInventarioEDI: Boolean;
|
2007-08-01 16:16:26 +00:00
|
|
|
public
|
|
|
|
|
function CargarFicheros(const FicheroCAB: String; const FicheroLIN: String;
|
|
|
|
|
const FicheroCANT: String; var NumRegNuevos: Integer ): Boolean;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
var
|
|
|
|
|
dmEDIInventary: TdmEDIInventary;
|
|
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
|
|
|
|
|
uses
|
|
|
|
|
Controls, Forms, uDataTableUtils, DB,
|
|
|
|
|
Dialogs, Variants, schEDIInventaryClient_Intf, EDI_Utils, EDI_Log_Impl,
|
|
|
|
|
VARELA_Intf;
|
|
|
|
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
|
|
|
|
|
{ TdmEDIInventary }
|
|
|
|
|
|
|
|
|
|
function TdmEDIInventary.CargarFicheros(const FicheroCAB, FicheroLIN,
|
|
|
|
|
FicheroCANT: String; var NumRegNuevos: Integer ): Boolean;
|
|
|
|
|
var
|
|
|
|
|
Cab_Reader : TCABINV_Reader;
|
|
|
|
|
Lin_Reader : TLININV_Reader;
|
|
|
|
|
Cant_Reader : TCANTINV_Reader;
|
|
|
|
|
|
|
|
|
|
NumRegNuevosCab : Integer;
|
|
|
|
|
NumRegNuevosLin : Integer;
|
|
|
|
|
NumRegNuevosCant : Integer;
|
2008-03-11 19:13:35 +00:00
|
|
|
|
|
|
|
|
bContinuar : Boolean;
|
2007-08-01 16:16:26 +00:00
|
|
|
begin
|
2008-03-11 19:13:35 +00:00
|
|
|
bContinuar := False;
|
|
|
|
|
|
|
|
|
|
FNumDocCargados := TStringList.Create;
|
|
|
|
|
|
|
|
|
|
FConnection := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionName);
|
|
|
|
|
FConnection.BeginTransaction;
|
2007-08-01 16:16:26 +00:00
|
|
|
|
2007-08-08 15:18:45 +00:00
|
|
|
Cab_Reader := TCABINV_Reader.Create;
|
2008-03-11 19:13:35 +00:00
|
|
|
Lin_Reader := TLININV_Reader.Create;
|
|
|
|
|
Cant_Reader := TCANTINV_Reader.Create;
|
|
|
|
|
|
2007-08-01 16:16:26 +00:00
|
|
|
try
|
|
|
|
|
Cab_Reader.Filename := FicheroCAB;
|
|
|
|
|
Cab_Reader.ReadFile;
|
|
|
|
|
|
2008-03-11 19:13:35 +00:00
|
|
|
Lin_Reader.Filename := FicheroLIN;
|
|
|
|
|
Lin_Reader.ReadFile;
|
|
|
|
|
|
|
|
|
|
Cant_Reader.Filename := FicheroCANT;
|
|
|
|
|
Cant_Reader.ReadFile;
|
|
|
|
|
|
2007-08-08 15:18:45 +00:00
|
|
|
try
|
2008-03-11 19:13:35 +00:00
|
|
|
bContinuar := InsertarCabecera (Cab_Reader.FileData, NumRegNuevosCab);
|
2007-08-08 15:18:45 +00:00
|
|
|
|
2008-03-11 19:13:35 +00:00
|
|
|
if bContinuar then
|
|
|
|
|
bContinuar := InsertarLineas (Lin_Reader.FileData, NumRegNuevosLin);
|
|
|
|
|
|
|
|
|
|
if bContinuar then
|
|
|
|
|
bContinuar := InsertarCantidades(Cant_Reader.FileData, NumRegNuevosCant);
|
|
|
|
|
|
|
|
|
|
if bContinuar then
|
|
|
|
|
begin
|
|
|
|
|
NumRegNuevos := NumRegNuevosCant;
|
|
|
|
|
bContinuar := GenerarInventarioEDI;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
if bContinuar then
|
|
|
|
|
begin
|
|
|
|
|
if MarcarRegistrosUltimoInventarioEDI then
|
|
|
|
|
FConnection.CommitTransaction
|
|
|
|
|
else
|
|
|
|
|
FConnection.RollbackTransaction;
|
|
|
|
|
end;
|
|
|
|
|
except
|
|
|
|
|
on E : Exception do
|
|
|
|
|
begin
|
|
|
|
|
FConnection.RollbackTransaction;
|
|
|
|
|
InsertarLog(False, e.Message + ' (CargarFicheros - InventarioEDI)');
|
2007-08-08 15:18:45 +00:00
|
|
|
end;
|
|
|
|
|
end;
|
2008-03-11 19:13:35 +00:00
|
|
|
finally
|
|
|
|
|
FreeAndNIL(Cab_Reader);
|
|
|
|
|
FreeAndNIL(Lin_Reader);
|
|
|
|
|
FreeAndNIL(Cant_Reader);
|
|
|
|
|
FConnection.Close;
|
|
|
|
|
FConnection := NIL;
|
|
|
|
|
FreeAndNIL(FNumDocCargados);
|
2007-08-01 16:16:26 +00:00
|
|
|
end;
|
2008-03-11 19:13:35 +00:00
|
|
|
Result := bContinuar;
|
|
|
|
|
end;
|
2007-08-01 16:16:26 +00:00
|
|
|
|
2008-03-11 19:13:35 +00:00
|
|
|
function TdmEDIInventary.ExisteNumDoc(const ANumDoc: String): Boolean;
|
|
|
|
|
var
|
|
|
|
|
ds: IDADataset;
|
|
|
|
|
begin
|
|
|
|
|
try
|
|
|
|
|
ds := schEDIInventary.NewDataset(FConnection, 'ExisteNumDoc');
|
|
|
|
|
ds.ParamByName('NUMDOC').AsString := ANumDoc;
|
|
|
|
|
ds.Open;
|
|
|
|
|
Result := (not ds.IsEmpty);
|
|
|
|
|
ds.Close;
|
|
|
|
|
finally
|
|
|
|
|
ds := NIL;
|
2007-08-01 16:16:26 +00:00
|
|
|
end;
|
2007-08-08 15:18:45 +00:00
|
|
|
end;
|
2007-08-01 16:16:26 +00:00
|
|
|
|
2007-08-08 15:18:45 +00:00
|
|
|
function TdmEDIInventary.GenerarInventarioEDI: Boolean;
|
|
|
|
|
var
|
|
|
|
|
ACommand: IDASQLCommand;
|
|
|
|
|
begin
|
|
|
|
|
Result := False;
|
2008-03-11 19:13:35 +00:00
|
|
|
ACommand := schEDIInventary.NewCommand(FConnection, 'RDX_P_CARGAR_INVENTARIOEDI');
|
2007-08-08 15:18:45 +00:00
|
|
|
|
|
|
|
|
try
|
|
|
|
|
ACommand.Execute;
|
|
|
|
|
Result := True;
|
|
|
|
|
except
|
|
|
|
|
on E : Exception do
|
|
|
|
|
begin
|
2008-03-11 19:13:35 +00:00
|
|
|
InsertarLog(False, e.Message + ' (GenerarInventarioEDI)');
|
|
|
|
|
raise E;
|
2007-08-08 15:18:45 +00:00
|
|
|
end
|
|
|
|
|
end;
|
2007-08-01 16:16:26 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function TdmEDIInventary.InsertarCabecera(const ACabData: TEDIFileData;
|
|
|
|
|
var NumRegNuevos : integer) : Boolean;
|
|
|
|
|
var
|
|
|
|
|
i : integer;
|
|
|
|
|
Registro : PCABINV;
|
|
|
|
|
ACommand: IDASQLCommand;
|
2008-03-11 19:13:35 +00:00
|
|
|
ANumDoc : String;
|
2007-08-01 16:16:26 +00:00
|
|
|
begin
|
2008-03-11 19:13:35 +00:00
|
|
|
|
2007-08-01 16:16:26 +00:00
|
|
|
Result := False;
|
|
|
|
|
NumRegNuevos := 0;
|
|
|
|
|
|
|
|
|
|
for i := 0 to ACabData.Count - 1 do
|
|
|
|
|
begin
|
|
|
|
|
Registro := ACabData[i];
|
|
|
|
|
|
|
|
|
|
if not Registro.REGISTRO_OK then
|
|
|
|
|
Continue;
|
|
|
|
|
|
2008-03-11 19:13:35 +00:00
|
|
|
ANumDoc := Trim(Registro.NUMDOC);
|
|
|
|
|
if ExisteNumDoc(ANumDoc) then
|
|
|
|
|
Continue;
|
|
|
|
|
|
|
|
|
|
ACommand := schEDIInventary.NewCommand(FConnection, 'Insert_RDX_CABINV');
|
2007-08-01 16:16:26 +00:00
|
|
|
with ACommand do
|
|
|
|
|
begin
|
2008-03-11 19:13:35 +00:00
|
|
|
ParamByName('NUMDOC').AsString := ANumDoc;
|
2007-08-01 16:16:26 +00:00
|
|
|
ParamByName('TIPODOC').AsString := Trim(Registro.TIPODOC);
|
|
|
|
|
ParamByName('TIPOLIQ').AsString := Trim(Registro.TIPOLIQ);
|
|
|
|
|
ParamByName('FECHA').AsDateTime := EDIDateToDateF(Trim(Registro.FECHA));
|
|
|
|
|
ParamByName('FECHALIQ').AsDateTime := EDIDateToDateF(Trim(Registro.FECHALIQ));
|
|
|
|
|
ParamByName('EMISOR').AsString := Trim(Registro.EMISOR);
|
|
|
|
|
ParamByName('RECEPTOR').AsString := Trim(Registro.RECEPTOR);
|
|
|
|
|
ParamByName('DPTO').AsString := Trim(Registro.DPTO);
|
|
|
|
|
ParamByName('CENTRO').AsString := Trim(Registro.CENTRO);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
ACommand.Execute;
|
2008-03-11 19:13:35 +00:00
|
|
|
NumRegNuevos := NumRegNuevos + 1;
|
|
|
|
|
FNumDocCargados.Add(ANumDoc);
|
2007-08-01 16:16:26 +00:00
|
|
|
Result := True;
|
|
|
|
|
except
|
|
|
|
|
on E : Exception do
|
|
|
|
|
begin
|
2008-03-11 19:13:35 +00:00
|
|
|
InsertarLog(False, e.Message + ' (InsertarCabecera INV)');
|
|
|
|
|
raise E;
|
2007-08-01 16:16:26 +00:00
|
|
|
end
|
|
|
|
|
end;
|
|
|
|
|
end; //for
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function TdmEDIInventary.InsertarCantidades(const ACantData: TEDIFileData;
|
|
|
|
|
var NumRegNuevos : integer) : Boolean;
|
|
|
|
|
var
|
|
|
|
|
i : integer;
|
|
|
|
|
Registro : PCANTINV;
|
|
|
|
|
ACommand: IDASQLCommand;
|
2008-03-11 19:13:35 +00:00
|
|
|
ANumDoc : String;
|
2007-08-01 16:16:26 +00:00
|
|
|
begin
|
|
|
|
|
Result := False;
|
|
|
|
|
NumRegNuevos := 0;
|
|
|
|
|
|
|
|
|
|
for i := 0 to ACantData.Count - 1 do
|
|
|
|
|
begin
|
|
|
|
|
Registro := ACantData[i];
|
|
|
|
|
|
|
|
|
|
if not Registro.REGISTRO_OK then
|
|
|
|
|
Continue;
|
|
|
|
|
|
2008-03-11 19:13:35 +00:00
|
|
|
ANumDoc := Trim(Registro.NUMDOC);
|
|
|
|
|
if FNumDocCargados.IndexOf(ANumDoc) = -1 then
|
|
|
|
|
Continue;
|
|
|
|
|
|
|
|
|
|
ACommand := schEDIInventary.NewCommand(FConnection, 'Insert_RDX_CANTINV');
|
2007-08-01 16:16:26 +00:00
|
|
|
with ACommand do
|
|
|
|
|
begin
|
|
|
|
|
ParamByName('NUMDOC').AsString := Trim(Registro.NUMDOC);
|
|
|
|
|
ParamByName('NUMLIN').AsInteger := StrToInt(Trim(Registro.NUMLIN));
|
|
|
|
|
ParamByName('NUMCANT').AsInteger := StrToInt(Trim(Registro.NUMCANT));
|
|
|
|
|
ParamByName('TIPOCANT').AsString := Trim(Registro.TIPOCANT);
|
|
|
|
|
ParamByName('CANTIDAD').AsFloat := StrToFloat(Trim(Registro.CANTIDAD));
|
|
|
|
|
ParamByName('CENTRO').AsString := Trim(Registro.CENTRO);
|
|
|
|
|
ParamByName('TMOV').AsString := Trim(Registro.TMOV);
|
|
|
|
|
ParamByName('FACT').AsString := Trim(Registro.FACT);
|
|
|
|
|
ParamByName('DEPTO').AsString := Trim(Registro.DEPTO);
|
|
|
|
|
ParamByName('IDVEN').AsString := Trim(Registro.IDVEN);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
ACommand.Execute;
|
|
|
|
|
NumRegNuevos := NumRegNuevos + 1;
|
|
|
|
|
Result := True;
|
|
|
|
|
except
|
|
|
|
|
on E : Exception do
|
|
|
|
|
begin
|
2008-03-11 19:13:35 +00:00
|
|
|
InsertarLog(False, e.Message + ' (InsertarCantidades INV)');
|
|
|
|
|
raise E;
|
2007-08-01 16:16:26 +00:00
|
|
|
end
|
|
|
|
|
end;
|
|
|
|
|
end; //for
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function TdmEDIInventary.InsertarLineas(const ALinData: TEDIFileData;
|
|
|
|
|
var NumRegNuevos : integer) : Boolean;
|
|
|
|
|
var
|
|
|
|
|
i : integer;
|
|
|
|
|
Registro : PLININV;
|
|
|
|
|
ACommand: IDASQLCommand;
|
2008-03-11 19:13:35 +00:00
|
|
|
ANumDoc : String;
|
2007-08-01 16:16:26 +00:00
|
|
|
begin
|
|
|
|
|
Result := False;
|
|
|
|
|
NumRegNuevos := 0;
|
|
|
|
|
|
|
|
|
|
for i := 0 to ALinData.Count - 1 do
|
|
|
|
|
begin
|
|
|
|
|
Registro := ALinData[i];
|
|
|
|
|
|
|
|
|
|
if not Registro.REGISTRO_OK then
|
|
|
|
|
Continue;
|
|
|
|
|
|
2008-03-11 19:13:35 +00:00
|
|
|
ANumDoc := Trim(Registro.NUMDOC);
|
|
|
|
|
if FNumDocCargados.IndexOf(ANumDoc) = -1 then
|
|
|
|
|
Continue;
|
|
|
|
|
|
|
|
|
|
ACommand := schEDIInventary.NewCommand(FConnection, 'Insert_RDX_LININV');
|
2007-08-01 16:16:26 +00:00
|
|
|
with ACommand do
|
|
|
|
|
begin
|
|
|
|
|
ParamByName('NUMDOC').AsString := Trim(Registro.NUMDOC);
|
|
|
|
|
ParamByName('NUMLIN').AsInteger := StrToInt(Trim(Registro.NUMLIN));
|
|
|
|
|
ParamByName('CODART').AsString := Trim(Registro.CODART);
|
|
|
|
|
ParamByName('FAMILIA').AsString := Trim(Registro.FAMILIA);
|
|
|
|
|
ParamByName('BARRA').AsString := Trim(Registro.BARRA);
|
|
|
|
|
ParamByName('TALLA').AsString := Trim(Registro.TALLA);
|
|
|
|
|
ParamByName('MARCA').AsString := Trim(Registro.MARCA);
|
|
|
|
|
ParamByName('TAMANO').AsString := Trim(Registro.TAMANO);
|
|
|
|
|
ParamByName('SERIE').AsString := Trim(Registro.SERIE);
|
|
|
|
|
ParamByName('COLOR').AsString := Trim(Registro.COLOR);
|
|
|
|
|
ParamByName('MODELO').AsString := Trim(Registro.MODELO);
|
|
|
|
|
ParamByName('DIBUJO').AsString := Trim(Registro.DIBUJO);
|
|
|
|
|
ParamByName('DESCRIP').AsString := Trim(Registro.DESCRIP);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
ACommand.Execute;
|
2008-03-11 19:13:35 +00:00
|
|
|
NumRegNuevos := NumRegNuevos + 1;
|
2007-08-01 16:16:26 +00:00
|
|
|
Result := True;
|
|
|
|
|
except
|
|
|
|
|
on E : Exception do
|
|
|
|
|
begin
|
2008-03-11 19:13:35 +00:00
|
|
|
InsertarLog(False, e.Message + ' (InsertarLineas INV)');
|
|
|
|
|
raise E;
|
2007-08-01 16:16:26 +00:00
|
|
|
end
|
|
|
|
|
end;
|
|
|
|
|
end; //for
|
|
|
|
|
Result := True;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
procedure TdmEDIInventary.InsertarLog(OK: Boolean; Error_msg: String);
|
|
|
|
|
var
|
|
|
|
|
LogService : IEDI_Log;
|
|
|
|
|
begin
|
|
|
|
|
LogService := EDI_Log_Impl.TEDI_Log.Create(Self);
|
|
|
|
|
try
|
|
|
|
|
LogService.InsertarLog(Now, 'INVRPT', OK, Error_msg);
|
|
|
|
|
finally
|
|
|
|
|
LogService := nil;
|
|
|
|
|
end;
|
|
|
|
|
end;
|
|
|
|
|
|
2007-08-08 15:18:45 +00:00
|
|
|
function TdmEDIInventary.MarcarRegistrosUltimoInventarioEDI: Boolean;
|
|
|
|
|
var
|
|
|
|
|
ACommand: IDASQLCommand;
|
|
|
|
|
begin
|
|
|
|
|
Result := False;
|
2008-03-11 19:13:35 +00:00
|
|
|
ACommand := schEDIInventary.NewCommand(FConnection, 'RDX_P_SET_ULTIMOINVENTARIO');
|
2007-08-08 15:18:45 +00:00
|
|
|
|
|
|
|
|
try
|
|
|
|
|
ACommand.Execute;
|
|
|
|
|
Result := True;
|
|
|
|
|
except
|
|
|
|
|
on E : Exception do
|
|
|
|
|
begin
|
2008-03-11 19:13:35 +00:00
|
|
|
InsertarLog(False, e.Message + ' (MarcarRegistrosUltimoInventarioEDI)');
|
|
|
|
|
raise E;
|
2007-08-08 15:18:45 +00:00
|
|
|
end
|
|
|
|
|
end;
|
|
|
|
|
end;
|
|
|
|
|
|
2007-08-01 16:16:26 +00:00
|
|
|
initialization
|
|
|
|
|
dmEDIInventary := TdmEDIInventary.Create(nil);
|
|
|
|
|
|
|
|
|
|
finalization
|
|
|
|
|
FreeAndNil(dmEDIInventary);
|
|
|
|
|
|
|
|
|
|
end.
|