unit UBajas;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB, Vcl.StdCtrls, System.DateUtils,
  Vcl.Buttons, system.StrUtils;

type
  TFBajas = class(TForm)
    BitBtn1: TBitBtn;
    OpenDialog1: TOpenDialog;
    ADOConnection1: TADOConnection;
    TNodos: TADOTable;
    Timporta: TADOTable;
    BitBtn2: TBitBtn;
    TEncabezado: TADOTable;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FBajas: TFBajas;

implementation

{$R *.dfm}

uses UElegirBaja, Udm;

function formatear_fecha(fecha: Tdatetime): string;
  var
    texto: string;
begin
  texto := datetostr(fecha);
  result:=  AnsiRightStr(texto, 4) + copy(texto, 4, 2) + AnsiLeftStr(texto,2);
end;

function AgregarEspacios(cadena: string; conta: integer): string ;
var
 i, long: byte;
 cadi: string;
begin
 cadi := '';
 long := conta - length(trim(cadena));
 for i := 1 to long do
  begin
   cadi:= cadi + ' ';
  end;
  result:= trim(cadena) + cadi;
end;

Function AgregarCar(cadena: string; conta: integer; carac: string) : string;
var
 i, long: byte;
 cad: string;
begin
 cad := '';
 long := conta - length(trim(cadena));
 for i := 1 to long do
  begin
   cad:= carac + cad;
  end;
  Result:= cad + trim(cadena);
end;

Procedure Crear_encabezado_Ext(cabeza: TAdoTable; numreg:integer; fecha: Tdate; var enca: AnsiString);
    var
      linea, canti: AnsiString;
      sumato: real;
   begin
     canti:= '';
     linea:= '01099606' + cabeza.FieldByName('ClaveEntOr').AsString;  //clave entidad origen
     linea:= linea + cabeza.FieldByName('TipoEntDes').AsString; //Tipo entidad destino
     linea:= linea + cabeza.FieldByName('ClaveEntDes').AsString; //Clave entidad destino
     linea:= linea + formatear_fecha(fecha); //fecha de transmision
     //linea:= linea + cabeza.FieldByName('TipoPago').AsString; //Tipo de Pago
    // linea:= linea + periodo; //Período de pago
     linea:= linea + cabeza.FieldByName('RFCDep').AsString; //RFC Dependencia
     linea:= linea + AgregarEspacios(cabeza.FieldByName('NomDep').AsString, 130); //Nombre Dependencia
     linea:= linea + cabeza.FieldByName('IdcenPagSAR').AsString; //Identificador de centro de pago
     linea:= linea + cabeza.FieldByName('ClaveRamo').AsString; //clave de ramo
     linea:= linea + cabeza.FieldByName('ClavePag').AsString; //clave de pagaduría
     linea:= linea + AgregarEspacios(cabeza.FieldByName('CalleDep').AsAnsiString, 40); //Calle y Número, domicilio dependencia
     linea:= linea + AgregarEspacios(cabeza.FieldByName('ColoniaDep').AsString, 25); //Colonia Dependencia
     linea:= linea + AgregarEspacios(cabeza.FieldByName('MunicipioDep').AsString, 25); //Municipio Dependencia
     linea:= linea + cabeza.FieldByName('CodPos').AsString; //Código postal
     linea:= linea + AgregarEspacios(cabeza.FieldByName('Entidad').AsString, 23); //Entidad Federativa
     linea:= linea + cabeza.FieldByName('TelDep').AsString; //Teléfono Dependencia
     //linea:= linea + formatear_fecha(fecha); //fecha de Aportación
     canti:= inttostr(numreg);
     canti := AgregarCar(canti, 9, '0');
     linea:= linea + '000000000'; // Número de registros con movimientos de alta
     linea:= linea + '000000000';  //Número de registros con movimientos de modificaciones
     linea:= linea + canti;  // Número de registros con movimientos de bajas
     linea:= linea + canti; //total de registros en detalle
     linea:= linea + AgregarEspacios('',264); //Filler
     linea:= linea + AgregarEspacios('',11); //Motivos de rechazo
     enca:= linea;
   end;

procedure TFBajas.BitBtn1Click(Sender: TObject);
var
   Llave, bd: string;
 begin
if OpenDialog1.Execute then
  begin
     bd:= OpenDialog1.FileName;
      if bd <> '' then
      begin
        ADOConnection1.Connected := false;
        Llave:= 'Provider=Microsoft.ACE.OLEDB.12.0; User ID=Admin;Data Source=';
        Llave := Llave + bd + ';Mode=Share Deny None;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"';
        ADOConnection1.ConnectionString:= Llave;
        ADOConnection1.Connected:= true;
        ADOConnection1.GetTableNames(FElegirBaja.Combobox1.Items,false);
        FElegirBaja.Combobox1.Text := FElegirBaja.Combobox1.Items[0];
        FElegirBaja.Showmodal;
      end
      else
        messagedlg('El usuario canceló la operación',mtinformation,[mbok],0);

 end;
  // FElegirBaja.Showmodal;
end;

end.
