unit FACTUALIZARTARIFAS;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, DB, DBClient,STRUTILS, ImgList,
  DBTables,DATEUTILS,tiposdefinidos, ExtCtrls;

type
  TACTUALIZARTARIFAS = class(TForm)
    CDS: TClientDataSet;
    ImageList1: TImageList;
    Table1: TTable;
    OpenDialog1: TOpenDialog;
    OpenDialog2: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Panel1: TPanel;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    SGORDEN: TStringGrid;
    SGORDEN1: TStringGrid;
    BitBtn5: TBitBtn;
    BitBtn6: TBitBtn;
    ABRIR: TButton;
    BBORRAR: TButton;
    Edit1: TEdit;
    GroupBox1: TGroupBox;
    BCABRIR: TButton;
    BGUARDAR: TButton;
    BINICIALIZAR: TButton;
    BINICIALIZAR2: TButton;
    Button5: TButton;
    procedure BUTTON1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure ABRIRClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BBORRARClick(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit1Exit(Sender: TObject);
    procedure Edit1DblClick(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BGUARDARClick(Sender: TObject);
    procedure BCABRIRClick(Sender: TObject);
    procedure BINICIALIZARClick(Sender: TObject);
    procedure BINICIALIZAR2Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
    ANCHO : INTEGER;
  public
    { Public declarations }
    SORDEN:STRING;
    nombre:string;
    ID_PROVEEDOR:INTEGER;
    ENTRAF1:BOOLEAN;
//    procedure abrir;
    procedure guardar;
    PROCEDURE INICIALIZAR;

  end;

var
  ACTUALIZARTARIFAS: TACTUALIZARTARIFAS;

implementation

uses UDMGS, fdlgPROVEEDORaux, FESPERA, menu, FTARIFAS;

{$R *.dfm}

procedure TACTUALIZARTARIFAS.BUTTON1Click(Sender: TObject);
VAR AUX,AUX1:STRING;
begin
   IF  SGORDEN1.Row <> 0 THEN
   BEGIN
      AUX1 := SGORDEN1.Cells[0,SGORDEN1.Row];
      AUX  := SGORDEN1.Cells[0,SGORDEN1.Row-1];
      SGORDEN1.Cells[0,SGORDEN1.Row]:= AUX;
      SGORDEN1.Cells[0,SGORDEN1.Row-1] := AUX1;
      SGORDEN1.Row := SGORDEN1.ROW - 1;
   END;
end;

procedure TACTUALIZARTARIFAS.Button2Click(Sender: TObject);
VAR AUX,AUX1:STRING;
begin
   IF SGORDEN1.Row <> (SGORDEN1.RowCount -1) THEN
   BEGIN
      AUX1 := SGORDEN1.Cells[0,SGORDEN1.Row];
      AUX  := SGORDEN1.Cells[0,SGORDEN1.Row+1];
      SGORDEN1.Cells[0,SGORDEN1.Row]:= AUX;
      SGORDEN1.Cells[0,SGORDEN1.Row+1] := AUX1;
      SGORDEN1.Row := SGORDEN1.ROW + 1;
   END;
end;

procedure TACTUALIZARTARIFAS.Button3Click(Sender: TObject);
VAR I:INTEGER;
    AUX :STRING;
begin
{   IF (SGORDEN1.RowCOUNT > 0) AND (SGORDEN1.CELLS[0,0] <> '') THEN
   BEGIN
     I := SGORDEN1.ROW;
     AUX :=SGORDEN1.Cells[0,SGORDEN1.ROW];
     WHILE I < SGORDEN1.RowCount-1 DO
     BEGIN
       SGORDEN1.Cells[0,SGORDEN1.ROW] := SGORDEN1.CELLS[0,SGORDEN1.Row+1];
       SGORDEN1.ROW := SGORDEN1.ROW +1;
       I:= I+1;
     END;
     SGORDEN1.CELLS[0,SGORDEN1.ROW] := '';
     SGORDEN1.Row:=0;
     SGORDEN1.RowCount := SGORDEN1.RowCount -1 ;
   I:=0;
   IF (SGORDEN.CELLS[0,0] <> '') THEN
      SGORDEN.ROWCOUNT := SGORDEN.ROWCOUNT +1;
   WHILE I < SGORDEN.ROWCOUNT DO
   BEGIN
      IF SGORDEN.Cells[0,I]<>'' THEN
         I:=I+1
      ELSE
      BEGIN
         SGORDEN.Cells[0,I]:= AUX;
         I:= SGORDEN.ROWCOUNT + 1;
      END;
   END;
 END;
}
end;

procedure TACTUALIZARTARIFAS.Button4Click(Sender: TObject);
VAR I:INTEGER;
    AUX :STRING;
begin
{   IF (SGORDEN.RowCOUNT > 0) AND (SGORDEN.CELLS[0,0] <> '')  THEN
   BEGIN
     I := SGORDEN.ROW;
     AUX :=SGORDEN.Cells[0,SGORDEN.ROW];
     WHILE I < SGORDEN.RowCount-1 DO
     BEGIN
       SGORDEN.Cells[0,SGORDEN.ROW] := SGORDEN.CELLS[0,SGORDEN.Row+1];
       SGORDEN.ROW := SGORDEN.ROW +1;
       I:= I+1;
     END;
     SGORDEN.CELLS[0,SGORDEN.ROW] := '';
     SGORDEN.Row:=0;
     SGORDEN.RowCount := SGORDEN.RowCount -1 ;
   I:=0;
   IF (SGORDEN1.CELLS[0,0] <> '') THEN
      SGORDEN1.ROWCOUNT := SGORDEN1.ROWCOUNT +1;
   WHILE I < SGORDEN1.ROWCOUNT DO
   BEGIN
      IF SGORDEN1.Cells[0,I]<>'' THEN
         I:=I+1
      ELSE
      BEGIN
         SGORDEN1.Cells[0,I]:= AUX;
         I:= SGORDEN1.ROWCOUNT + 1;
      END;
   END;
  END;
}
end;

procedure TACTUALIZARTARIFAS.FormShow(Sender: TObject);
  var AUX1:string;
    i:integer;
begin
  i:= 0;// PARA NO COGER ID_PROVEEDOR
  CDS := DMGS.CDSQ_TARIFAS;
  NOMBRE := 'CDSQ_TARIFAS';
  SGORDEN.RowCount := CDS.Fields.COUNT;
  while i < CDS.FIELDS.Count-1   do
  begin
    AUX1:=CDS.Fields[i+1].Name;
    SGORDEN.Cells[0,I] := (rightstr(AUX1,LENGTH(AUX1)-LENGTH(nombre)));
    i:= i+1;
  end;
  IF TABLE1.TableName <> '' THEN
  BEGIN
    table1.Open;
    TABLE1.First;
    SGORDEN1.RowCount := TABLE1.Fielddefs.COUNT;
    I:=0;
    while i < TABLE1.Fielddefs.COUNT   do
    begin
      AUX1:=TABLE1.Fielddefs[i].Name ;
      SGORDEN1.Cells[0,I] := aux1;//(rightstr(AUX1,LENGTH(AUX1)-LENGTH('TABLE1')));
      i:= i+1;
    end;
    table1.Close;
  END;


end;

procedure TACTUALIZARTARIFAS.FormCreate(Sender: TObject);
begin
   ANCHO := Width ;
   SORDEN:='';
   nombre:='';
   ENTRAF1:=FALSE;
   BITBTN1.Enabled := FALSE;
   opendialog1.InitialDir := dmgs.pathLOCAL + 'TARIFAS';
   opendialog2.InitialDir := dmgs.pathLOCAL + 'CONFIGURACION';
   SAVEDIALOG1.InitialDir := DMGS.PATHLOCAL + 'CONFIGURACION';
   TABLE1.DatabaseName := DMGS.PATHLOCAL + 'TARIFAS';
end;

procedure TACTUALIZARTARIFAS.BitBtn1Click(Sender: TObject);
VAR I,J,h:INTEGER;
VAR CAMPOS,CAMPOSORIGEN:ARRAY OF INTEGER;
   aux,AUX1,VALORCAMPO:string;
   ANTERIOR:BOOLEAN;
   FECHA:TDATETIME;
   Save_Cursor:TCursor;
   CAMPO:STRING;
   CAMPOOR,CAMPODES,UCAMPO,PRECIO:STRING;
   FECHAAUX:STRING;
begin
   IF (TRIM(EDIT1.Text) = '')
   OR (TABLE1.TableName ='')
   THEN
   BEGIN
     MessageDlg('SELECCIONE UN PROVEEDOR Y SELECCIONE UNA TARIFA.', mtWarning,[mbOK], 0);
     EXIT;
   END;
   fmenu.CERRARHIJA(ttarifas);
   ESPERA:= TESPERA.CREATE(NIL);
   Save_Cursor := Screen.Cursor;
   Screen.Cursor := crHourGlass;

 TRY
 BEGIN
   ANTERIOR:=FALSE;
   SetLength(CAMPOS, SGORDEN1.RowCount);
   SETLENGTH(CAMPOSORIGEN,SGORDEN1.ROWCOUNT);
   I:=0;
   table1.close;
   table1.open;
   WHILE (I < SGORDEN1.RowCOUNT)
   AND (I<SGORDEN.ROWCOUNT)
   DO
   BEGIN
//     CAMPOS[I]:= TABLE1.Fields.FieldByName (SGORDEN1.Cells[0,I]).Index;
     CAMPOS[I]:= TABLE1.Fielddefs.IndexOf  (SGORDEN1.Cells[0,I]);
     CAMPOSORIGEN [I]:= CDS.Fields.FIELDBYNAME (SGORDEN.CELLS[0,I]).Index;
     I := I + 1;
   END;
//   table1.close;
//   TABLE1.Open;
   TABLE1.Last;
   TABLE1.First;
   ESPERA.LONGITUD(TABLE1.RecordCount);
   ESPERA.SHOW;
   ESPERA.Repaint;
   WHILE NOT TABLE1.Eof DO
   BEGIN
     J:=0;
     ESPERA.INCREMENTARBARRA(FALSE);
     WHILE J < LENGTH (CAMPOSORIGEN) DO
     BEGIN
       IF CAMPOSORIGEN[J] = CDS.Fields.FIELDBYNAME ('ART_PROVEEDOR').Index then
       begin
          h:=j;
          j:= LENGTH(CAMPOSORIGEN)
       end
       ELSE
          J:= J+1;
     END;

     WITH DMGS.CDSQ_TARIFAS DO
     BEGIN
       CLOSE;
       DMGS.VTARIFAS.ID := ' WHERE ID_PROVEEDOR='+EDIT1.Text+' AND ART_PROVEEDOR=''' +TABLE1.Fields [campos[h]].AsString+''' ';
       dmgs.VTARIFAS.TIPO := '2';
       open;
       j:=0;
       aux:='';
       ANTERIOR:=FALSE;
//**********************************************************************//
       if recordcount > 0 then
       begin
       //*** INICIAR LA ACTUALIZACION PARA EN EL CASO DE QUE EXISTA
       //*** UN ARTICULO DEL PROVEEDOR CON EL CODIGO
       // --->
          WHILE (J < SGORDEN1.RowCOUNT)
          AND (J<SGORDEN.ROWCOUNT)
          DO
          BEGIN
            IF (cds.Fields[camposorigen[h]].DataType IN [FTDATE,ftTimeStamp]) THEN
             BEGIN
              VALORCAMPO :=   TABLE1.Fields [campos[h]].ASSTRING;
              VALORCAMPO := TRIM(VALORCAMPO);
              if pos(' ',valorcampo)<> 0 then
                 VALORCAMPO :=COPY(VALORCAMPO,1,POS(' ',VALORCAMPO)-1);
              VALORCAMPO := STRINGREPLACE(VALORCAMPO,'-','/',[RFREPLACEALL,RFIGNORECASE]);
//              FECHA := STRTODATE(VALORCAMPO);
//              VALORCAMPO := inttostr(yearof(fecha))+'/'+inttostr(monthof(fecha))+'/'+inttostr(dayof(fecha));
              VALORCAMPO := OBTENERFECHA(VALORCAMPO);
              FECHAAUX := VALORCAMPO;
             END
            ELSE
              VALORCAMPO := TABLE1.Fields [campos[h]].AsString;
            if cds.fields[camposorigen[h]].datatype in [ftfloat,ftfmtbcd,ftbcd] then
              if pos(',',valorcampo) = 0 then
                 valorcampo := valorcampo +',00';
//              valorcampo := Format('%8.2f', [strtofloat(valorcampo)]);
// REMPLAZA LA , POR EL .
            VALORCAMPO := STRINGREPLACE(VALORCAMPO,',','.',[RFREPLACEALL,RFIGNORECASE]);
// REMPLAZA EL '' (APOSTROFE) POR UN -
            VALORCAMPO := STRINGREPLACE(VALORCAMPO,'''','-',[RFREPLACEALL,RFIGNORECASE]);
            VALORCAMPO:=UPPERCASE(VALORCAMPO);

            if (cds.Fields[camposorigen[h]].DataType = ftstring)
            OR (cds.Fields[camposorigen[h]].DataType IN [FTDATE,ftTimeStamp])
            then
            BEGIN
             if aux = '' then
                aux := rightstr( cds.fields [camposorigen[h]].Name,LENGTH(cds.fields [camposorigen[h]].Name)-LENGTH(nombre))+'='''+VALORCAMPO+''' '
             else
               aux:= aux + ' , ' + rightstr( cds.fields [camposorigen[h]].Name,LENGTH(cds.fields [camposorigen[h]].Name)-LENGTH(nombre))+'='''+VALORCAMPO+''' ';
            end
            else
            begin
            if aux = '' then
                aux := rightstr( cds.fields [camposorigen[h]].Name,LENGTH(cds.fields [camposorigen[h]].Name)-LENGTH(nombre))+'='+VALORCAMPO
            else
               aux:= aux + ' , ' + rightstr( cds.fields [camposorigen[h]].Name,LENGTH(cds.fields [camposorigen[h]].Name)-LENGTH(nombre))+'='+VALORCAMPO;
            end;
            J:= J+1;H:=H+1;
          end;
          if trim(aux)<>'' then
          begin

          dmgs.TRANSACTIONACTUALIZAR :=10;
          WITH dmgs.CDSQ_ACTUALIZAR DO
          BEGIN
// CONTROLAR SI HAY STOCK DEL PRODUCTO O NO LO HAY A LA HORA
// DE BAJAR EL PRECIO.
// CONTROLAR  lA POSIBILIDAD DE PONER ARTICULOS DESCATALOGADOS.
                COMMANDTEXT := 'UPDATE TARIFAS_PROVEEDORES SET '+ AUX+DMGS.VTARIFAS.ID;
                commandtext := StringReplace(commandtext, ':', '::', [rfReplaceAll, rfIgnoreCase]);
                try
                  Execute;
                except
                  showmessage('Error No se ha podido actualizar en TARIFAS.');
                  DMGS.transactionACTUALIZAR:=-1; // CON ESTO HAGO QUE EL SERVER
                   // HAGA UN ROLLBACK Y EJECUTO COMMIT, PARA QUE SEA
                   // TODO VALIDO, PODRIA EJECUTAR UN ROLLBACK, PERO NO SE, NO ME FIO.
                  COMMANDTEXT := 'COMMIT';
                  EXECUTE
                end;
           END;

         end;
         //  < ---
       end
//*****************************************************************************//
       else
       begin
       //*** INICIAR LA INSERCION PARA EN EL CASO DE QUE NO EXISTA
       //*** EL ARTICULO DEL PROVEEDOR CON EL CODIGO
       // --->
          WHILE (H < SGORDEN1.RowCOUNT)
          AND (H<SGORDEN.ROWCOUNT)
          DO
          BEGIN
            IF (cds.Fields[camposorigen[h]].DataType IN [FTDATE,ftTimeStamp]) THEN
             BEGIN
              VALORCAMPO :=   TABLE1.Fields [campos[h]].ASSTRING;
              VALORCAMPO := TRIM(VALORCAMPO);
              if pos(' ',valorcampo)<> 0 then
                 VALORCAMPO :=COPY(VALORCAMPO,1,POS(' ',VALORCAMPO)-1);
              VALORCAMPO := STRINGREPLACE(VALORCAMPO,'-','/',[RFREPLACEALL,RFIGNORECASE]);
//              FECHA := STRTODATE(VALORCAMPO);
//              VALORCAMPO := inttostr(yearof(fecha))+'/'+inttostr(monthof(fecha))+'/'+inttostr(dayof(fecha));
              VALORCAMPO := OBTENERFECHA(VALORCAMPO);
              FECHAAUX := VALORCAMPO;
             END
            ELSE
              VALORCAMPO := TABLE1.Fields [campos[h]].AsString;
            if cds.fields[camposorigen[h]].datatype in [ftfloat,ftfmtbcd,ftbcd] then
            begin
              if pos(',',valorcampo) = 0 then
                 valorcampo := valorcampo +',00';
//              valorcampo := Format('%8.2f', [valorcampo]);
            end;
            VALORCAMPO := STRINGREPLACE(VALORCAMPO,',','.',[RFREPLACEALL,RFIGNORECASE]);
            VALORCAMPO := STRINGREPLACE(VALORCAMPO,'''','-',[RFREPLACEALL,RFIGNORECASE]);
            VALORCAMPO:= UPPERCASE(VALORCAMPO);
            if (cds.Fields[camposorigen[h]].DataType = ftstring)
            OR (cds.Fields[camposorigen[h]].DataType IN [FTDATE,ftTimeStamp])
            then
            begin
            if aux = '' then
              BEGIN
                aux := rightstr( cds.fields [camposorigen[h]].Name,LENGTH(cds.fields [camposorigen[h]].Name)-LENGTH(nombre));
                AUX1 := ''''+VALORCAMPO+'';
              END
            else
              BEGIN
               aux:= aux + ',' + rightstr( cds.fields [camposorigen[h]].Name,LENGTH(cds.fields [camposorigen[h]].Name)-LENGTH(nombre));
               IF ANTERIOR THEN
                  AUX1:= AUX1 + ''','''+VALORCAMPO+''
               ELSE
                  AUX1:= AUX1 + ','''+VALORCAMPO+''
              END;
              ANTERIOR := TRUE;
            end
            else
            begin
            if aux = '' then
              BEGIN
                aux := rightstr( cds.fields [camposorigen[h]].Name,LENGTH(cds.fields [camposorigen[h]].Name)-LENGTH(nombre));
                AUX1 := VALORCAMPO;
              END
            else
              BEGIN
               aux:= aux + ',' + rightstr( cds.fields [camposorigen[h]].Name,LENGTH(cds.fields [camposorigen[h]].Name)-LENGTH(nombre));
               IF NOT ANTERIOR THEN
                  AUX1:= AUX1 + ','+VALORCAMPO
               ELSE
                  AUX1:= AUX1 + ''','+VALORCAMPO;
              END;
               ANTERIOR:=FALSE;
            end;
            J:= J+1;H:=H+1;
          end;
          IF ANTERIOR THEN
             AUX1 := AUX1 +'''';
          if trim(aux)<>'' then
          begin
           dmgs.TRANSACTIONACTUALIZAR :=10;
          WITH dmgs.CDSQ_ACTUALIZAR DO
          BEGIN
                COMMANDTEXT := 'INSERT INTO TARIFAS_PROVEEDORES(ID_PROVEEDOR,'+AUX+') VALUES ('+EDIT1.TEXT+','+AUX1+') ';
                commandtext := StringReplace(commandtext, ':', '::', [rfReplaceAll, rfIgnoreCase]);
                try
                  Execute;
                except
                  showmessage('Error No se ha podido actualizar en TARIFAS.');
                  DMGS.transactionACTUALIZAR:=-1; // CON ESTO HAGO QUE EL SERVER
                   // HAGA UN ROLLBACK Y EJECUTO COMMIT, PARA QUE SEA
                   // TODO VALIDO, PODRIA EJECUTAR UN ROLLBACK, PERO NO SE, NO ME FIO.
                  COMMANDTEXT := 'COMMIT';
                  EXECUTE
                end;
           END;
         end;
         //  < ---
       end;
     END;
     TABLE1.Next;ANTERIOR:=FALSE;
   END;

   CLOSE;
   table1.close;
   ESPERA.INCREMENTARBARRA(TRUE);
   ESPERA.Free;
   ESPERA := NIL;
  END
  FINALLY
   Screen.Cursor := Save_Cursor;  { Always restore to normal }
  END;
  with dmgs.cdsq_procedure do
  begin
     Close;
     commandtext := ' CALL actualizar('+EDIT1.Text+','+FMENU.ID_EMPRESA +','''+FECHAAUX+''')';
     EXECUTE;
     close;
     commandtext := 'commit';
     execute;
     close;
  end;

end;

procedure TACTUALIZARTARIFAS.ABRIRClick(Sender: TObject);
VAR DIR,AUX,AUX1:STRING;
    I:INTEGER;
begin
  IF OPENDIALOG1.Execute THEN
  BEGIN
    table1.close;
    DIR := RIGHTSTR(OPENDIALOG1.FileName,(LENGTH(OPENDIALOG1.FileName)-POS('\',OPENDIALOG1.FileName)-0));
    WHILE POS('\',DIR) <> 0 DO
         DIR := RIGHTSTR(DIR,(LENGTH(DIR)-POS('\',DIR)-0));
//    TABLE1.Database := COPY(OPENDIALOG1.FileName,1,POS(DIR,OPENDIALOG1.FileName)-1);
    TABLE1.TableName := DIR;
    bitbtn1.Enabled := true;
    IF TRIM(SGORDEN1.Cells[0,0]) = '' THEN
    BEGIN
       table1.open;
       SGORDEN1.RowCount := TABLE1.Fielddefs.COUNT;
       I:=0;
       while i < TABLE1.Fielddefs.COUNT   do
       begin
          AUX1:=TABLE1.Fielddefs[i].Name;
          SGORDEN1.Cells[0,I] := aux1;//(rightstr(AUX1,LENGTH(AUX1)-LENGTH('TABLE1')));
          i:= i+1;
       end;
       table1.close;
    END;
  END
  else
    table1.TableName := '';
end;

procedure TACTUALIZARTARIFAS.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  ACTION := CAFREE;
end;

procedure TACTUALIZARTARIFAS.BBORRARClick(Sender: TObject);
VAR I,J:INTEGER;
    AUX :STRING;
begin
IF (SGORDEN.RowCOUNT > 0) AND (SGORDEN.CELLS[0,0] <> '')  THEN
   BEGIN
     I := SGORDEN.ROW; J:=I;
     AUX :=SGORDEN.Cells[0,SGORDEN.ROW];
     WHILE I < SGORDEN.RowCount-1 DO
     BEGIN
       SGORDEN.Cells[0,SGORDEN.ROW] := SGORDEN.CELLS[0,SGORDEN.Row+1];
       SGORDEN.ROW := SGORDEN.ROW +1;
       I:= I+1;
     END;
     SGORDEN.CELLS[0,SGORDEN.ROW] := '';
     SGORDEN.Row:=0;
     SGORDEN.RowCount := SGORDEN.RowCount -1 ;
     SGORDEN.Cells[0,J];
     IF J <> 0 THEN
        SGORDEN.Row := J-1;
   END;
end;

procedure TACTUALIZARTARIFAS.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if key=112 then
   BEGIN
    ENTRAF1:= TRUE;
    DMGS.cdsq_PROVEEDOR_ACREEDORaux.Close;
    dlgPROVEEDORAUX := tdlgPROVEEDORAUX.Create(NIL);
    if dlgPROVEEDORAUX.Showmodal=mrok then
    begin
       EDIT1.Text := dlgPROVEEDORaux.codigo;
       LABEL4.Caption := DMGS.CDSQ_PROVEEDOR_ACREEDORAUXNOMBRE.AsString;
       Perform(WM_NextDLGCtl, 0, 0);
    end;
    dlgPROVEEDORaux.Free;
    dlgPROVEEDORaux := nil;
   END;

end;

procedure TACTUALIZARTARIFAS.Edit1Exit(Sender: TObject);
VAR I:INTEGER;
begin
  TRY
     I:=STRTOINT(EDIT1.Text);
     BITBTN1.Enabled := TRUE;
  EXCEPT
     SHOWMESSAGE(' EL IDENTIFICADOR DEL PROVEEDOR DEBE SER UN NÚMERO');
     EDIT1.SETFOCUS;
     BITBTN1.Enabled := FALSE;
     EXIT;
  END;
  IF NOT ENTRAF1 THEN
  BEGIN
   with DMGS.cdsq_proveedor_acreedoraux do
   BEGIN
    Close;
    DMGS.VPROVEEDORACAUX.ID :=INTTOSTR(I);
    DMGS.VPROVEEDORACAUX.BORRADO := '0';
    DMGS.VPROVEEDORACAUX.TIPO := '2';
    Open;
    IF DMGS.cdsq_proveedor_acreedoraux.RecordCount = 0 THEN
    BEGIN
     SHOWMESSAGE(' NO EXISTE UN PROVEEDOR CON ESE NÚMERO ');
     EDIT1.SETFOCUS;
     CLOSE;
     BITBTN1.Enabled := FALSE;
     EXIT;
    END;
    LABEL4.Caption := DMGS.CDSQ_PROVEEDOR_ACREEDORAUXNOMBRE.AsString;
    CLOSE;
   END;
  END;
  ENTRAF1:=FALSE;
end;

procedure TACTUALIZARTARIFAS.Edit1DblClick(Sender: TObject);
begin
    ENTRAF1:= TRUE;
    DMGS.cdsq_PROVEEDOR_ACREEDORaux.Close;
    dlgPROVEEDORAUX := tdlgPROVEEDORAUX.Create(NIL);
    if dlgPROVEEDORAUX.Showmodal=mrok then
    begin
       EDIT1.Text := dlgPROVEEDORaux.codigo;
       LABEL4.Caption := DMGS.CDSQ_PROVEEDOR_ACREEDORAUXNOMBRE.AsString;
       Perform(WM_NextDLGCtl, 0, 0);
    end;
    dlgPROVEEDORaux.Free;
    dlgPROVEEDORaux := nil;
end;

procedure TACTUALIZARTARIFAS.BitBtn2Click(Sender: TObject);
begin
   CLOSE;
end;

procedure Tactualizartarifas.guardar;
 var  configuracion:file of Fichero;
      registro:array of Fichero;
      registro2:fichero;
      numorigen,numdestino:integer;
      i,j,h:smallint;
      AUX:STRING;
begin
 IF SaveDialog1.Execute THEN
 BEGIN
  numorigen := sgorden1.RowCount;
  numdestino := sgorden.RowCount ;
  if numdestino >= numorigen then
  begin
     j := sizeof(fichero)*numdestino;
     h := numdestino;
  end
  else
  begin
     j:= sizeof(fichero)*numorigen;
     h:= numorigen;
  end;
  SetLength(registro, j);
  i:=0;
  while i<h do
  begin
    registro[i].BASEDEDATOS := table1.TableName;
    registro[i].origen := inttostr(numorigen);
    registro[i].destino := inttostr(numdestino);
    if trim(edit1.text) <> '' then
       registro[i].id_proveedor := edit1.Text
    else
       registro[i].id_proveedor :='';
    if ((i<sgorden1.RowCount) and
    (sgorden1.cells[0,i] <> ''))
    then
    begin
      registro[i].camposorigen := inttostr(TABLE1.Fielddefs.IndexOf  (SGORDEN1.Cells[0,I]));
//      tABLE1.Fields.FieldByName (SGORDEN1.Cells[0,I]).Index);
      registro[i].fieldorigen:=SGORDEN1.Cells[0,I];
//      registro[i].fieldorigen.fieldkind := tABLE1.Fields[strtoint(registro[i].camposorigen)].fieldkind;
//      registro[i].fieldorigen.datatype :=tABLE1.Fields[strtoint(registro[i].camposorigen)].DataType;
//      registro[i].fieldorigen.displaywidth :=tABLE1.Fields[strtoint(registro[i].camposorigen)].displaywidth;
     end
    else
      registro[i].camposorigen := '-1';
    if ((i< sgorden.RowCount) and
    (sgorden.cells[0,i]<> ''))
    then
    begin
      registro[i].camposdestino := inttostr(cds.Fields.FieldByName (SGORDEN.Cells[0,I]).Index);
      registro[i].fielddestino:=SGORDEN.Cells[0,I];
    end
    else
      registro[i].camposdestino := '-1';
    registro[i].indice := inttostr(i);
    i:=i +1;
  end;
  AUX := COPY(TABLE1.TableName,1,POS('.',TABLE1.TableName)-1);
  ASSIGNFILE (CONFIGURACION,SAVEDIALOG1.FileName);
    try
      Reset(CONFIGURACION);
    except ON EXCEPTION DO
     TRY
     REWRITE(CONFIGURACION);
     EXCEPT ON EXCEPTION DO
//     BEGIN
//       SHOWMESSAGE('NO ES POSIBLE ABRIR EL ARCHIVO DE CONFIGURACIONES');
//     END;
     END;
    END;
    I:=0;
  WHILE I<=h DO       // HACE FALTA PONER <= O NO GRABA EL ULTIMO BIEN
  BEGIN
   TRY
    WRITE(CONFIGURACION,registro[i]);
   EXCEPT ON EXCEPTION DO
    BEGIN
     SHOWMESSAGE('FALLO EN LA ESCRITURA DEL ARCHIVO DE CONFIGURACIONES');
     CLOSEFILE(CONFIGURACION);
     EXIT;
    END;
   END;
   I:=I+1;
  END;
  CLOSEFILE(CONFIGURACION);
 END;
end;

procedure TACTUALIZARTARIFAS.BGUARDARClick(Sender: TObject);
begin
 GUARDAR;
end;

procedure TACTUALIZARTARIFAS.BCABRIRClick(Sender: TObject);
  VAR CONFIGURACION:FILE OF FICHERO;
      REGISTRO:FICHERO;
      TABLA:STRING;
      I,J,A,B:INTEGER;
      campoa:tfield;
      campos:tfields;
begin
 IF OPENDIALOG2.EXECUTE THEN
   BEGIN
      ASSIGNFILE ( CONFIGURACION,OPENDIALOG2.FILENAME);
      RESET(CONFIGURACION);
      IF NOT EOF(CONFIGURACION) THEN
      TRY
      BEGIN
        READ(CONFIGURACION,REGISTRO);
        TABLA:= REGISTRO.BASEDEDATOS ;
      END;
      EXCEPT ON EXCEPTION DO
         SHOWMESSAGE('FALLO EN LA LECTURA DEL ARCHIVO DE CONFIGURACIÓN.');
      END;
     TABLE1.Close;
 //    TABLE1.TableName := TABLA;
 //    TABLE1.FIELDS.Clear;
     SGORDEN.RowCount := strtoint(registro.origen);
     SGORDEN1.RowCount := strtoint(registro.destino);
     if registro.id_proveedor <> '' then
     begin
        edit1.text := registro.id_proveedor;
        edit1exit(sender);
     end;
     I:=0;
     IF REGISTRO.origen >= REGISTRO.DESTINO THEN
       J:= STRTOINT(REGISTRO.ORIGEN)
     ELSE
       J:= STRTOINT(REGISTRO.DESTINO);
     WHILE (I< J) AND
     (NOT EOF(CONFIGURACION))
      DO
     BEGIN
       IF REGISTRO.camposorigen <> '-1' THEN
       begin
          SGORDEN1.Cells[0,I] := registro.fieldorigen;//campoa.name;
       end;
       IF REGISTRO.CAMPOSDESTINO <> '-1' THEN
          SGORDEN.Cells[0,I] := registro.fielddestino;
       I:= I+1;
       READ(CONFIGURACION,REGISTRO);
     END;
     CLOSEFILE(CONFIGURACION);
     bitbtn1.Enabled:=false;
   END;

end;

PROCEDURE TACTUALIZARTARIFAS.INICIALIZAR;
begin
END;

procedure TACTUALIZARTARIFAS.BINICIALIZARClick(Sender: TObject);
 var AUX1:string;
    i:integer;
begin
  SGORDEN.RowCount := 0;
  SGORDEN.CELLS[0,0] := '';
  i:= 0;// PARA NO COGER ID_PROVEEDOR
  CDS := DMGS.CDSQ_TARIFAS;
  NOMBRE := 'CDSQ_TARIFAS';
  SGORDEN.RowCount := CDS.Fields.COUNT;
  while i < CDS.FIELDS.Count-1   do
  begin
    AUX1:=CDS.Fields[i+1].Name;
    SGORDEN.Cells[0,I] := (rightstr(AUX1,LENGTH(AUX1)-LENGTH(nombre)));
    i:= i+1;
  end;
  bitbtn1.Enabled := false;
end;

procedure TACTUALIZARTARIFAS.BINICIALIZAR2Click(Sender: TObject);
begin
  SGORDEN1.RowCount := 0;
  SGORDEN1.CELLS[0,0] := '';
  bitbtn1.Enabled := false;
end;

procedure TACTUALIZARTARIFAS.FormResize(Sender: TObject);
begin
  PANEL1.Left := 10 + (ClientWidth - ancho ) div 2 ;
end;

procedure TACTUALIZARTARIFAS.FormPaint(Sender: TObject);
begin
  PANEL1.Left := 10 + (ClientWidth - ancho ) div 2 ;
end;

procedure TACTUALIZARTARIFAS.Button5Click(Sender: TObject);
begin
{  with dmgs.cdsq_procedure do
  begin
     Close;
     commandtext := ' CALL actualizar('+EDIT1.Text+','+FMENU.ID_EMPRESA +','''+FECHAAUX+''')';
     EXECUTE;
  end;
}
End;

end.
