unit FLISTADOOOPCIONESARITCULOS;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, Buttons,dateutils, Grids, ExtCtrls;

type
  TLISTADOOPCIONESARTICULOS = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Label2: TLabel;
    MaskEdit1: TMaskEdit;
    Label3: TLabel;
    MaskEdit2: TMaskEdit;
    Label1: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Label9: TLabel;
    Edit3: TEdit;
    Label10: TLabel;
    Label11: TLabel;
    Edit4: TEdit;
    Label12: TLabel;
    Edit5: TEdit;
    SGORDEN1: TStringGrid;
    BitBtn5: TBitBtn;
    BitBtn6: TBitBtn;
    ORDEN: TLabel;
    Edit8: TEdit;
    Label13: TLabel;
    Panel1: TPanel;
    CBALBARANES: TCheckBox;
    CBFACTURAS: TCheckBox;
    CBTODOS: TCheckBox;
    CBTICKETS: TCheckBox;
    Label4: TLabel;
    GroupBox1: TGroupBox;
    DTOTAL: TRadioButton;
    DDETALLE: TRadioButton;
    Label5: TLabel;
    Label6: TLabel;
    Edit6: TEdit;
    Label14: TLabel;
    Edit7: TEdit;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
    procedure MaskEdit1Exit(Sender: TObject);
    procedure MaskEdit2Exit(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edit1DblClick(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit3DblClick(Sender: TObject);
    procedure Edit4DblClick(Sender: TObject);
    procedure Edit3KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit4KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit5DblClick(Sender: TObject);
    procedure Edit5KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit1Exit(Sender: TObject);
    procedure Edit2Exit(Sender: TObject);
    procedure Edit5Exit(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure BitBtn6Click(Sender: TObject);
    procedure CBTODOSClick(Sender: TObject);
    procedure CBALBARANESClick(Sender: TObject);
    procedure CBFACTURASClick(Sender: TObject);
    procedure CBTICKETSClick(Sender: TObject);
    procedure Edit7DblClick(Sender: TObject);
    procedure Edit7KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit6DblClick(Sender: TObject);
    procedure Edit6KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    procedure cliente;
    FUNCTION ARTICULO:STRING;
    FUNCTION FPAGO:STRING;
    PROCEDURE EMPRESA;
    FUNCTION ESENTERO(AUX:STRING):BOOLEAN;
    FUNCTION ESFLOAT(AUX:STRING):BOOLEAN;
    FUNCTION OBTENERCADENA(AUX,AUX2:STRING):STRING;
    FUNCTION OBTENERORDEN(AUX,AUX2,AUX3:STRING):STRING;
  public
    { Public declarations }
    FECHAINICIO,FECHAFINAL: tdatetime;
    FECHAINICIOA,FECHAFINALA: tdatetime;
    CALBARANES,CTODOS,CFACTURAS,CTICKETS:STRING;
    GALBARANES,GTODOS,GFACTURAS,GTICKETS:STRING;
    OALBARANES,OTODOS,OFACTURAS,OTICKETS:STRING;    
    sfechainicio,sfechafinal:string;
    sfechainicioA,sfechafinalA:string;
    cadena :string;
    IMPRESO,COBRADO,TItodo,TCTODO,TOTAL,DETALLE :boolean;
  end;

var
  LISTADOOPCIONESARTICULOS: TLISTADOOPCIONESARTICULOS;

implementation

uses UDMGS, FDLGCLIENTEAUX, FDLGTICKETAUX, FDLGEMPRESAAUX, menu,
  FDLGARTICULOSaux, DLGFORMAPAGOAUX;

{$R *.dfm}

procedure TLISTADOOPCIONESARTICULOS.BitBtn1Click(Sender: TObject);
VAR EMPRESA,ANYO,CLIENTE,ORDEN,GRUPO,CAMPOS:STRING;
    I:SMALLINT;
begin


    if DTOTAL.Checked then
    begin
       TOTAL := true;
       DETALLE := false;
    end;
    if DDETALLE.Checked then
    begin
       TOTAL := false;
       DETALLE := TRUE;
    end;


    CTICKETS := '';
    GTICKETS := '';
    OTICKETS := OBTENERORDEN ('LT','ID_TICKET','TI');
    IF CBTICKETS.Checked
    AND DETALLE THEN
//       CTICKETS := ' SELECT TI.FORMAPAGO AS ID_FORMA,LT.ID_ARTICULO,LT.CANTIDAD,LT.PRECIO,LT.IMPORTE,TI.ID_TICKET AS NUMERO,TI.ANYO,TI.ID_EMPRESA,TI.ID_SERIE,TI.TOTALDESCUENTO,'+
//       ' (SELECT DESCRIPCION FROM ARTICULOS AR WHERE AR.ID_ARTICULO=LT.ID_ARTICULO) AS DESCRIPCION,PRECIO_COSTE FROM LINEA_TICKET LT,TICKET TI '+
// PARA QUE SALGA LA DESCRIPCION DE LA LINEA DE TICKET.
{       CTICKETS := ' SELECT TI.FORMAPAGO AS ID_FORMA,LT.ID_ARTICULO,LT.CANTIDAD,LT.PRECIO,LT.IMPORTE,TI.ID_TICKET AS NUMERO,TI.ANYO,TI.ID_EMPRESA,TI.ID_SERIE,((LT.PRECIO * LT.CANTIDAD)- LT.IMPORTE ) AS TOTALDESCUENTO,'+
       ' LT.DESCRIPCION,PRECIO_COSTE FROM LINEA_TICKET LT,TICKET TI '+
       ' WHERE TI.ID_TICKET=LT.ID_TICKET AND TI.ID_EMPRESA=LT.ID_EMPRESA AND TI.ID_SERIE=LT.ID_SERIE AND TI.ANYO=LT.ANYO AND '+OBTENERCADENA('LT','TI')+
              ' AND TI.ID_TICKET NOT IN (SELECT FA.ID_ALBARAN FROM FACTURASALBARANES FA WHERE '+

              // SI ESTA FACTURADO LO SACO CON LA FACTURA, SINO SALDRIA 2 VECES

       ' TI.ID_TICKET=FA.ID_ALBARAN AND ALBID_EMPRESA= FA.ID_EMPRESA AND ALBANYO=FA.ANYO  AND ALBID_SERIE=FA.ID_SERIE AND TIPO=''TI'') ';
}
       CTICKETS := ' SELECT LT.IVA,TI.FORMAPAGO AS ID_FORMA,LT.ID_ARTICULO,LT.CANTIDAD,LT.PRECIO,LT.IMPORTE,TI.ID_TICKET AS NUMERO,TI.ANYO,TI.ID_EMPRESA,TI.ID_SERIE, '+
       ' (((LT.PRECIO * CANTIDAD) - IMPORTE) + (LT.IMPORTE *  (TOTALDESCUENTO / (ESCERO(TI.BASE_TICKET,TI.TOTALDESCUENTO))))) AS TOTALDESCUENTO, '+
       ' (((LT.PRECIO* CANTIDAD))-(((LT.PRECIO * CANTIDAD) - IMPORTE) + (LT.IMPORTE *  (TI.TOTALDESCUENTO / (ESCERO (TI.BASE_TICKET,TI.TOTALDESCUENTO)))))) AS IMPORTEDES,'+
       ' LT.DESCRIPCION,PRECIO_COSTE FROM LINEA_TICKET LT,TICKET TI '+
       ' WHERE TI.ID_TICKET=LT.ID_TICKET AND TI.ID_EMPRESA=LT.ID_EMPRESA AND TI.ID_SERIE=LT.ID_SERIE AND TI.ANYO=LT.ANYO AND '+OBTENERCADENA('LT','TI')+
                    ' AND TI.ID_TICKET NOT IN (SELECT FA.ID_ALBARAN FROM FACTURASALBARANES FA WHERE '+
        // SI ESTA FACTURADO LO SACO CON LA FACTURA, SINO SALDRIA 2 VECES
       ' TI.ID_TICKET=FA.ID_ALBARAN AND ALBID_EMPRESA= TI.ID_EMPRESA AND ALBANYO=TI.ANYO  AND ALBID_SERIE=TI.ID_SERIE AND TIPO=''TI'') ';
                                                       //FA                      //FA                     //FA
    IF CBTICKETS.Checked
    AND TOTAL THEN
    BEGIN

//       CTICKETS := ' SELECT TI.FORMAPAGO AS ID_FORMA,LT.ID_ARTICULO,SUM(LT.CANTIDAD) AS CANTIDAD,LT.PRECIO,SUM(LT.IMPORTE) AS IMPORTE,TI.ANYO,TI.ID_EMPRESA,TI.ID_SERIE,TI.TOTALDESCUENTO,'+
//       ' (SELECT DESCRIPCION FROM ARTICULOS AR WHERE AR.ID_ARTICULO=LT.ID_ARTICULO) AS DESCRIPCION,PRECIO_COSTE FROM LINEA_TICKET LT,TICKET TI '+
//       SUM((LT.PRECIO * LT.CANTIDAD)- LT.IMPORTE ) AS TOTALDESCUENTO,'+
       CTICKETS := ' SELECT LT.IVA,TI.FORMAPAGO AS ID_FORMA,LT.ID_ARTICULO,SUM(LT.CANTIDAD) AS CANTIDAD,LT.PRECIO,SUM(LT.IMPORTE) AS IMPORTE,TI.ANYO,TI.ID_EMPRESA,TI.ID_SERIE, '+
       ' SUM(((LT.PRECIO * CANTIDAD) - IMPORTE) + (LT.IMPORTE *  (TOTALDESCUENTO / (ESCERO (TI.BASE_TICKET,TI.TOTALDESCUENTO))))) AS TOTALDESCUENTO, '+
       ' (SUM((LT.PRECIO* CANTIDAD))-SUM(((LT.PRECIO * CANTIDAD) - IMPORTE) + (LT.IMPORTE *  (TI.TOTALDESCUENTO / (ESCERO (TI.BASE_TICKET,TI.TOTALDESCUENTO)))))) AS IMPORTEDES,'+
       ' LT.DESCRIPCION,PRECIO_COSTE FROM LINEA_TICKET LT,TICKET TI '+
       ' WHERE TI.ID_TICKET=LT.ID_TICKET AND TI.ID_EMPRESA=LT.ID_EMPRESA AND TI.ID_SERIE=LT.ID_SERIE AND TI.ANYO=LT.ANYO AND '+OBTENERCADENA('LT','TI')+
                    ' AND TI.ID_TICKET NOT IN (SELECT FA.ID_ALBARAN FROM FACTURASALBARANES FA WHERE '+
        // SI ESTA FACTURADO LO SACO CON LA FACTURA, SINO SALDRIA 2 VECES
       ' TI.ID_TICKET=FA.ID_ALBARAN AND ALBID_EMPRESA= FA.ID_EMPRESA AND ALBANYO=FA.ANYO  AND ALBID_SERIE=FA.ID_SERIE AND TIPO=''TI'') ';
//       GTICKETS := ' GROUP BY TI.FORMAPAGO,TI.ID_EMPRESA,TI.ANYO,TI.ID_SERIE,LT.ID_ARTICULO,LT.PRECIO,PRECIO_COSTE,TOTALDESCUENTO,DESCRIPCION ';
       GTICKETS := ' GROUP BY LT.IVA,TI.FORMAPAGO,TI.ID_EMPRESA,TI.ANYO,TI.ID_SERIE,LT.ID_ARTICULO,LT.PRECIO,PRECIO_COSTE,DESCRIPCION ';
       OTICKETS := ' ORDER BY ID_ARTICULO';
    END;


    CALBARANES := '';
    GALBARANES := '';
    OALBARANES := OBTENERORDEN ('LA','ID_ALBARAN','AL');
    IF CBALBARANES.Checked
    AND DETALLE THEN
//       CALBARANES := ' SELECT AL.ID_FORMA,LA.ID_ARTICULO,LA.CANTIDAD,LA.PRECIO,LA.IMPORTE,AL.ID_ALBARAN AS NUMERO,AL.ANYO,AL.ID_EMPRESA,AL.ID_SERIE,AL.TOTALDESCUENTO, '+
//       ' (SELECT DESCRIPCION FROM ARTICULOS AR WHERE AR.ID_ARTICULO=LA.ID_ARTICULO) AS DESCRIPCION,PRECIO_COSTE FROM LIN_ALBARAN LA,ALBARANES AL '+
{       CALBARANES := ' SELECT AL.ID_FORMA,LA.ID_ARTICULO,LA.CANTIDAD,LA.PRECIO,LA.IMPORTE,AL.ID_ALBARAN AS NUMERO,AL.ANYO,AL.ID_EMPRESA,AL.ID_SERIE,((LA.PRECIO * LA.CANTIDAD) - LA.IMPORTE ) AS TOTALDESCUENTO, '+
       ' LA.DESCRIPCION,PRECIO_COSTE FROM LIN_ALBARAN LA,ALBARANES AL '+
       ' WHERE AL.ID_ALBARAN=LA.ID_ALBARAN AND AL.ID_EMPRESA=LA.ID_EMPRESA AND AL.ID_SERIE=LA.ID_SERIE AND AL.ANYO=LA.ANYO AND '+OBTENERCADENA('LA','AL')+
       ' AND AL.ID_ALBARAN NOT IN (SELECT FA.ID_ALBARAN FROM FACTURASALBARANES FA WHERE '+

       // SI ESTA FACTURADO LO SACO CON LA FACTURA, SINO SALDRIA 2 VECES

       ' AL.ID_ALBARAN=FA.ID_ALBARAN AND ALBID_EMPRESA= FA.ID_EMPRESA AND ALBANYO=FA.ANYO  AND ALBID_SERIE=FA.ID_SERIE AND TIPO=''AL'') ';
}
       CALBARANES := ' SELECT LA.IVA,AL.ID_FORMA,LA.ID_ARTICULO,LA.CANTIDAD,LA.PRECIO,LA.IMPORTE,AL.ID_ALBARAN AS NUMERO,AL.ANYO,AL.ID_EMPRESA,AL.ID_SERIE, ' +
       ' ((LA.PRECIO * CANTIDAD) - IMPORTE) + (LA.IMPORTE *  (AL.TOTALDESCUENTO / (ESCERO (AL.BASE_ALBARAN,AL.TOTALDESCUENTO)))) AS TOTALDESCUENTO, '+
       // CALCULA EL IMPORTE DE LA LINEA
       ' ((LA.PRECIO* CANTIDAD)-((LA.PRECIO * CANTIDAD) - IMPORTE + (LA.IMPORTE *  (AL.TOTALDESCUENTO / (ESCERO (AL.BASE_ALBARAN,AL.TOTALDESCUENTO)))))) AS IMPORTEDES,'+
       ' LA.DESCRIPCION,PRECIO_COSTE FROM LIN_ALBARAN LA,ALBARANES AL '+
       ' WHERE AL.ID_ALBARAN=LA.ID_ALBARAN AND AL.ID_EMPRESA=LA.ID_EMPRESA AND AL.ID_SERIE=LA.ID_SERIE AND AL.ANYO=LA.ANYO AND '+OBTENERCADENA('LA','AL')+
              ' AND AL.ID_ALBARAN NOT IN (SELECT FA.ID_ALBARAN FROM FACTURASALBARANES FA WHERE '+
         // SI ESTA FACTURADO LO SACO CON LA FACTURA, SINO SALDRIA 2 VECES
       ' AL.ID_ALBARAN=FA.ID_ALBARAN AND ALBID_EMPRESA= FA.ID_EMPRESA AND ALBANYO=FA.ANYO  AND ALBID_SERIE=FA.ID_SERIE AND TIPO=''AL'') ';


    IF CBALBARANES.Checked
    AND TOTAL THEN
    BEGIN
//       CALBARANES := ' SELECT AL.ID_FORMA,LA.ID_ARTICULO,SUM(LA.CANTIDAD) AS CANTIDAD,LA.PRECIO,SUM(LA.IMPORTE) AS IMPORTE,AL.ANYO,AL.ID_EMPRESA,AL.ID_SERIE,AL.TOTALDESCUENTO,'+
//       ' (SELECT DESCRIPCION FROM ARTICULOS AR WHERE AR.ID_ARTICULO=LA.ID_ARTICULO) AS DESCRIPCION,PRECIO_COSTE FROM LIN_ALBARAN LA,ALBARANES AL '+
//        SUM((LA.PRECIO * LA.CANTIDAD) - LA.IMPORTE ) AS TOTALDESCUENTO,'+
       CALBARANES := ' SELECT LA.IVA,AL.ID_FORMA,LA.ID_ARTICULO,SUM(LA.CANTIDAD) AS CANTIDAD,LA.PRECIO,SUM(LA.IMPORTE) AS IMPORTE,AL.ANYO,AL.ID_EMPRESA,AL.ID_SERIE, ' +
       ' SUM(((LA.PRECIO * CANTIDAD) - IMPORTE) + (LA.IMPORTE *  (AL.TOTALDESCUENTO / (ESCERO (AL.BASE_ALBARAN,AL.TOTALDESCUENTO))))) AS TOTALDESCUENTO, '+
       // CALCULA EL IMPORTE DE LA LINEA
       ' (SUM((LA.PRECIO* CANTIDAD))-SUM(((LA.PRECIO * CANTIDAD) - IMPORTE) + (LA.IMPORTE *  (AL.TOTALDESCUENTO /(ESCERO (AL.BASE_ALBARAN,AL.TOTALDESCUENTO)))))) AS IMPORTEDES,'+
       ' LA.DESCRIPCION,PRECIO_COSTE FROM LIN_ALBARAN LA,ALBARANES AL '+
       ' WHERE AL.ID_ALBARAN=LA.ID_ALBARAN AND AL.ID_EMPRESA=LA.ID_EMPRESA AND AL.ID_SERIE=LA.ID_SERIE AND AL.ANYO=LA.ANYO AND '+OBTENERCADENA('LA','AL')+
              ' AND AL.ID_ALBARAN NOT IN (SELECT FA.ID_ALBARAN FROM FACTURASALBARANES FA WHERE '+
         // SI ESTA FACTURADO LO SACO CON LA FACTURA, SINO SALDRIA 2 VECES
       ' AL.ID_ALBARAN=FA.ID_ALBARAN AND ALBID_EMPRESA= FA.ID_EMPRESA AND ALBANYO=FA.ANYO  AND ALBID_SERIE=FA.ID_SERIE AND TIPO=''AL'') ';
//       GALBARANES := ' GROUP BY AL.ID_FORMA,AL.ID_EMPRESA,AL.ANYO,AL.ID_SERIE,LA.ID_ARTICULO,LA.PRECIO,PRECIO_COSTE,TOTALDESCUENTO,DESCRIPCION ';
       GALBARANES := ' GROUP BY LA.IVA,AL.ID_FORMA,AL.ID_EMPRESA,AL.ANYO,AL.ID_SERIE,LA.ID_ARTICULO,LA.PRECIO,PRECIO_COSTE,DESCRIPCION ';
       OALBARANES :=' ORDER BY ID_ARTICULO';
    END;

    CFACTURAS := '';
    GFACTURAS := '';
    OFACTURAS := OBTENERORDEN ('LF','ID_FACTURA','FA');
    IF CBFACTURAS.Checked
    AND DETALLE THEN
//       CFACTURAS := ' SELECT FA.ID_FORMA,LF.ID_ARTICULO,LF.CANTIDAD,LF.PRECIO,LF.IMPORTE,FA.ID_FACTURA AS NUMERO,FA.ANYO,FA.ID_EMPRESA,FA.ID_SERIE,FA.TOTALDESCUENTO, '+
//       ' (SELECT DESCRIPCION FROM ARTICULOS AR WHERE AR.ID_ARTICULO=LF.ID_ARTICULO) AS DESCRIPCION,PRECIO_COSTE FROM LINEAS_FACTURA LF, FACTURAS FA '+
{       CFACTURAS := ' SELECT FA.ID_FORMA,LF.ID_ARTICULO,LF.CANTIDAD,LF.PRECIO,LF.IMPORTE,FA.ID_FACTURA AS NUMERO,FA.ANYO,LF.ID_EMPRESA,FA.ID_SERIE,    ((LF.PRECIO * LF.CANTIDAD) - LF.IMPORTE ) AS TOTALDESCUENTO, '+
       '  LF.DESCRIPCION,PRECIO_COSTE FROM LINEAS_FACTURA LF, FACTURAS FA '+                                            //FA.ID_EMPRESA
       ' WHERE FA.ID_FACTURA=LF.ID_FACTURA AND FA.ID_EMPRESA=LF.ID_EMPRESA AND FA.ID_SERIE=LF.ID_SERIE AND FA.ANYO=LF.ANYO AND '+OBTENERCADENA('LF','FA');
}
       CFACTURAS := ' SELECT LF.IVA,FA.ID_FORMA,LF.ID_ARTICULO,LF.CANTIDAD,LF.PRECIO,LF.IMPORTE,FA.ID_FACTURA AS NUMERO,FA.ANYO,LF.ID_EMPRESA,FA.ID_SERIE, ' +
          ' (((LF.PRECIO * CANTIDAD) - IMPORTE) + (LF.IMPORTE *  (TOTALDESCUENTO / (ESCERO (FA.BASE_FACTURA,FA.TOTALDESCUENTO))))) AS TOTALDESCUENTO, '+
          ' ((((LF.PRECIO* CANTIDAD))-(((LF.PRECIO * CANTIDAD) - IMPORTE) + (LF.IMPORTE *  (FA.TOTALDESCUENTO / (ESCERO (FA.BASE_FACTURA,FA.TOTALDESCUENTO))))))) AS IMPORTEDES,'+
       ' LF.DESCRIPCION,PRECIO_COSTE FROM LINEAS_FACTURA LF,FACTURAS FA '+                                                        // FA.ID_EMPRESA
       ' WHERE FA.ID_FACTURA=LF.ID_FACTURA AND FA.ID_EMPRESA=LF.ID_EMPRESA AND FA.ID_SERIE=LF.ID_SERIE AND FA.ANYO=LF.ANYO AND '+OBTENERCADENA('LF','FA');


    IF CBFACTURAS.Checked
    AND TOTAL THEN
    BEGIN
//       CFACTURAS := ' SELECT FA.ID_FORMA,LF.ID_ARTICULO,SUM(LF.CANTIDAD) AS CANTIDAD,LF.PRECIO,SUM(LF.IMPORTE) AS IMPORTE,FA.ANYO,FA.ID_EMPRESA,FA.ID_SERIE,FA.TOTALDESCUENTO,'+
//       ' (SELECT DESCRIPCION FROM ARTICULOS AR WHERE AR.ID_ARTICULO=LF.ID_ARTICULO) AS DESCRIPCION,PRECIO_COSTE FROM LINEAS_FACTURA LF,FACTURAS FA '+
       //SUM((LF.PRECIO * LF.CANTIDAD) - LF.IMPORTE ) AS TOTALDESCUENTO,'+
       CFACTURAS := ' SELECT LF.IVA,FA.ID_FORMA,LF.ID_ARTICULO,SUM(LF.CANTIDAD) AS CANTIDAD,LF.PRECIO,SUM(LF.IMPORTE) AS IMPORTE,FA.ANYO,LF.ID_EMPRESA,FA.ID_SERIE, ' +
          ' SUM(((LF.PRECIO * CANTIDAD) - IMPORTE) + (LF.IMPORTE *  (TOTALDESCUENTO / (ESCERO (FA.BASE_FACTURA,FA.TOTALDESCUENTO))))) AS TOTALDESCUENTO, '+
          ' ((SUM((LF.PRECIO* CANTIDAD))-SUM(((LF.PRECIO * CANTIDAD) - IMPORTE) + (LF.IMPORTE *  (FA.TOTALDESCUENTO / (ESCERO (FA.BASE_FACTURA,FA.TOTALDESCUENTO))))))) AS IMPORTEDES,'+
       ' LF.DESCRIPCION,PRECIO_COSTE FROM LINEAS_FACTURA LF,FACTURAS FA '+                                                        // FA.ID_EMPRESA
       ' WHERE FA.ID_FACTURA=LF.ID_FACTURA AND FA.ID_EMPRESA=LF.ID_EMPRESA AND FA.ID_SERIE=LF.ID_SERIE AND FA.ANYO=LF.ANYO AND '+OBTENERCADENA('LF','FA');
//       GFACTURAS := ' GROUP BY FA.ID_FORMA,FA.ID_EMPRESA,FA.ANYO,FA.ID_SERIE,LF.ID_ARTICULO,LF.PRECIO,PRECIO_COSTE,TOTALDESCUENTO,DESCRIPCION ';
       GFACTURAS := ' GROUP BY LF.IVA,FA.ID_FORMA,LF.ID_EMPRESA,FA.ANYO,FA.ID_SERIE,LF.ID_ARTICULO,LF.PRECIO,PRECIO_COSTE,DESCRIPCION ';
       OFACTURAS := ' ORDER BY ID_ARTICULO';
    END;


    modalresult:=mrok;


{    TItodo := true;
    if TIIMPRESO.Checked then
    begin
       IMPRESO := true;
       TItodo := false;
    end;
    if TINOIMPRESO.Checked then
    begin
       IMPRESO := false;
       TItodo := false;
    end;

    TCtodo := true;
    if TCCOBRADO.Checked then
    begin
       COBRADO := true;
       TCtodo := false;
    end;
    if TCNOCOBRADO.Checked then
    begin
       COBRADO := false;
       TCtodo := false;
    end;

    if DTOTFA.Checked then
    begin
       TOTAL := true;
       DETALLE := false;
    end;
    if DDETALLE.Checked then
    begin
       TOTAL := false;
       DETALLE := TRUE;
    end;
 }
{
    IF NOT TITODO THEN
      IF IMPRESO THEN
      BEGIN
        IF TRIM(CADENA) <> '' THEN
           CADENA := CADENA + ' AND IMPRESO=1 '
        ELSE
           CADENA := ' IMPRESO=1 ' ;
      END
      ELSE
      BEGIN
        IF TRIM(CADENA) <> '' THEN
           CADENA := CADENA + ' AND IMPRESO=0 '
        ELSE
           CADENA := ' IMPRESO=0 ' ;
      END;

    IF NOT TCTODO THEN
      IF COBRADO THEN
      BEGIN
        IF TRIM(CADENA) <> '' THEN
           CADENA := CADENA + ' AND COBRADO=1 '
        ELSE
           CADENA := ' COBRADO=1 ' ;
      END
      ELSE
      BEGIN
        IF TRIM(CADENA) <> '' THEN
           CADENA := CADENA + ' AND COBRADO=0 '
        ELSE
           CADENA := ' COBRADO=0 ' ;
      END;

    ORDEN :='';
    FOR I:=0 TO 3 DO
    BEGIN
       IF SGORDEN1.CELLS[0,I] ='AŅO' THEN
         ORDEN := ORDEN + 'ANYO,'
       ELSE
         ORDEN := ORDEN + SGORDEN1.CELLS[0,I]+',';
    END;
    IF SGORDEN1.CELLS[0,4] ='AŅO' THEN
       ORDEN:= ' ORDER BY ' + ORDEN + 'ANYO'
    ELSE
       ORDEN:= ' ORDER BY ' + ORDEN + SGORDEN1.CELLS[0,4] ;
}



end;

procedure TLISTADOOPCIONESARTICULOS.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if ActiveControl=nil then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;

    if (key = #13) and not (activecontrol is tbutton) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
end;

procedure TLISTADOOPCIONESARTICULOS.FormShow(Sender: TObject);
begin
 MASKEDIT1.TEXT := '';
 MASKEDIT2.TEXT := '';
 EDIT1.SETFOCUS;
end;

procedure TLISTADOOPCIONESARTICULOS.MaskEdit1Exit(Sender: TObject);
begin
  if trim(maskedit1.Text) <> '/  /' then
  begin
    try
        fechainicio:=strtodate(maskedit1.text);
    except
        on e:exception do
        begin
            messagedlg('LA FECHA INICIAL NO ES CORRECTA. INTRODUZCA dd/mm/aaaa.',mterror,[mbok],0);
            maskedit1.setfocus;
            abort;
        end;
    end;
//    sfechaINiCIO := inttostr(yearof(FECHAINICIO))+'/'+inttostr(monthof(FECHAINICIO))+'/'+inttostr(dayof(FECHAINICIO));
    sfechaINiCIO := inttostr(yearof(FECHAINICIO))+'-'+inttostr(monthof(FECHAINICIO))+'-'+inttostr(dayof(FECHAINICIO));
  end;

end;

procedure TLISTADOOPCIONESARTICULOS.MaskEdit2Exit(Sender: TObject);
begin
  if trim(maskedit2.Text) <> '/  /' then
  begin
    try
        fechafinal:=strtodate(maskedit2.text);
    except
        on e:exception do
        begin
            messagedlg('LA FECHA FINAL NO ES CORRECTA. INTRODUZCA dd/mm/aaaa.',mterror,[mbok],0);
            maskedit2.setfocus;
            abort;
        end;
    end;
//        sfechafinal := inttostr(yearof(fechafinal))+'/'+inttostr(monthof(fechafinal))+'/'+inttostr(dayof(fechafinal));
        sfechafinal := inttostr(yearof(fechafinal))+'-'+inttostr(monthof(fechafinal))+'-'+inttostr(dayof(fechafinal));
  end;
end;

procedure TLISTADOOPCIONESARTICULOS.FormCreate(Sender: TObject);
begin
 cadena := '';
 cobrado := false;
 IMPRESO:=FALSE;
 TCtodo := true;
 TITODO := TRUE;
 DETALLE := TRUE;
 TOTAL := FALSE;
 sfechainicio:='';
 sfechafinal:='';
 SGORDEN1.CELLS[0,0] := 'ID_CLIENTE';
 SGORDEN1.CELLS[0,1] := 'AŅO';
 SGORDEN1.CELLS[0,2] := 'FECHA';
 SGORDEN1.CELLS[0,3] := 'NUMERO';
// SGORDEN1.CELLS[0,4] := 'ID_ARTICULO';
 EDIT2.TEXT := FMENU.ANYO;
 EDIT5.TEXT := FMENU.ID_EMPRESA;
 EDIT8.TEXT := FMENU.ID_SERIE;
end;



procedure TLISTADOOPCIONESARTICULOS.Edit1DblClick(Sender: TObject);
begin
    CLIENTE;
end;
procedure TLISTADOOPCIONESARTICULOS.cliente;
begin
        DMGS.cdsq_clienteaux.Close;
        dlgclienteAUX := tdlgclienteAUX.Create(NIL);
        if dlgclienteAUX.Showmodal=mrok then
        begin
            EDIT1.TEXT := dlgclienteaux.codigo;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        dlgclienteaux.Free;
        dlgclienteaux := nil;
end;

procedure TLISTADOOPCIONESARTICULOS.Edit1KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
   if key=112 then
      cliente;
end;
FUNCTION TLISTADOOPCIONESARTICULOS.ARTICULO:STRING;
BEGIN
        RESULT := '';
        DMGS.CDSQ_ARTICULOSAUX.Close;
        dlgARTICULOSAUX := tdlgARTICULOSAUX.Create(NIL);
        if dlgARTICULOSAUX.Showmodal=mrok then
        begin
            RESULT := DMGS.CDSQ_ARTICULOSAUXID_ARTICULO.ASSTRING;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        dlgARTICULOSaux.Free;
        dlgARTICULOSaux := nil;
END;

procedure TLISTADOOPCIONESARTICULOS.Edit3DblClick(Sender: TObject);
begin
   EDIT3.Text := ARTICULO;
end;

procedure TLISTADOOPCIONESARTICULOS.Edit4DblClick(Sender: TObject);
begin
   EDIT4.TEXT := ARTICULO;
end;

procedure TLISTADOOPCIONESARTICULOS.Edit3KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  IF KEY=112 THEN
    EDIT3.TEXT := ARTICULO;
end;

procedure TLISTADOOPCIONESARTICULOS.Edit4KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  IF KEY=112 THEN
   EDIT4.TEXT := ARTICULO;
end;

procedure TLISTADOOPCIONESARTICULOS.Edit5DblClick(Sender: TObject);
begin
   EMPRESA;
end;

procedure TLISTADOOPCIONESARTICULOS.Edit5KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  IF KEY=112 THEN
     EMPRESA;
end;

PROCEDURE TLISTADOOPCIONESARTICULOS.EMPRESA;
BEGIN
        DLGEMPRESAAUX := TDLGEMPRESAAUX.Create(NIL);
        if DLGEMPRESAAUX.Showmodal=mrok then
        begin
            EDIT5.Text := DLGEMPRESAAUX.codigo;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        DLGEMPRESAAUX.Free;
        DLGEMPRESAAUX := nil;
END;
FUNCTION TLISTADOOPCIONESARTICULOS.ESENTERO(AUX:STRING):BOOLEAN;
VAR IAUX:INTEGER;
BEGIN
 RESULT := TRUE;
 IF TRIM(AUX)<>'' THEN
  TRY
    IAUX := STRTOINT(AUX);
  EXCEPT
    SHOWMESSAGE('EL NUMERO INTRODUCIDO NO ES CORRECTO ');
    RESULT := FALSE;
  END;
END;
FUNCTION TLISTADOOPCIONESARTICULOS.ESFLOAT(AUX:STRING):BOOLEAN;
VAR DAUX:DOUBLE;
BEGIN
 RESULT := TRUE;
 IF TRIM(AUX)<>'' THEN
  TRY
    DAUX := STRTOFLOAT(AUX);
  EXCEPT
    SHOWMESSAGE('EL NUMERO INTRODUCIDO NO ES CORRECTO ');
    RESULT := FALSE;    
  END;
END;


procedure TLISTADOOPCIONESARTICULOS.Edit1Exit(Sender: TObject);
begin
 IF  NOT ESENTERO(EDIT1.Text) THEN
    EDIT1.SetFocus;
end;

procedure TLISTADOOPCIONESARTICULOS.Edit2Exit(Sender: TObject);
begin
 IF  NOT ESENTERO(EDIT2.Text) THEN
    EDIT2.SetFocus;
end;

procedure TLISTADOOPCIONESARTICULOS.Edit5Exit(Sender: TObject);
begin
 IF  NOT ESENTERO(EDIT5.Text) THEN
    EDIT5.SetFocus;
end;

procedure TLISTADOOPCIONESARTICULOS.BitBtn5Click(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 TLISTADOOPCIONESARTICULOS.BitBtn6Click(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 TLISTADOOPCIONESARTICULOS.CBTODOSClick(Sender: TObject);
begin
 IF CBTODOS.Checked THEN
 BEGIN
   CBALBARANES.Checked := FALSE;
   CBFACTURAS.Checked := FALSE;
   CBTICKETS.Checked := FALSE;
 END;
end;

procedure TLISTADOOPCIONESARTICULOS.CBALBARANESClick(Sender: TObject);
begin
 IF CBALBARANES.Checked THEN
   CBTODOS.Checked := FALSE;
end;

procedure TLISTADOOPCIONESARTICULOS.CBFACTURASClick(Sender: TObject);
begin
 IF CBFACTURAS.Checked THEN
   CBTODOS.Checked := FALSE;
end;

procedure TLISTADOOPCIONESARTICULOS.CBTICKETSClick(Sender: TObject);
begin
 IF CBTICKETS.Checked THEN
    CBTODOS.Checked := FALSE;
end;

FUNCTION TLISTADOOPCIONESARTICULOS.OBTENERCADENA(AUX,AUX2:STRING):STRING;
VAR CADENA:STRING;
   AUXB:STRING;
BEGIN
  RESULT := '';
    if trim(maskedit1.Text) <> '/  /' then
  begin
    try
        fechainicio:=strtodate(maskedit1.text);
    except
        on e:exception do
        begin
            messagedlg('LA FECHA INICIAL NO ES CORRECTA. INTRODUZCA dd/mm/aaaa.',mterror,[mbok],0);
            maskedit1.setfocus;
            abort;
        end;
    end;
//    sfechaINiCIO := inttostr(yearof(FECHAINICIO))+'/'+inttostr(monthof(FECHAINICIO))+'/'+inttostr(dayof(FECHAINICIO));
    sfechaINiCIO := inttostr(yearof(FECHAINICIO))+'-'+inttostr(monthof(FECHAINICIO))+'-'+inttostr(dayof(FECHAINICIO));
  end;
  if trim(maskedit2.Text) <> '/  /' then
  begin
    try
        fechafinal:=strtodate(maskedit2.text);
    except
        on e:exception do
        begin
            messagedlg('LA FECHA FINAL NO ES CORRECTA. INTRODUZCA dd/mm/aaaa.',mterror,[mbok],0);
            maskedit2.setfocus;
            abort;
        end;
    end;
//    sfechafinal := inttostr(yearof(fechafinal))+'/'+inttostr(monthof(fechafinal))+'/'+inttostr(dayof(fechafinal));
    sfechafinal := inttostr(yearof(fechafinal))+'-'+inttostr(monthof(fechafinal))+'-'+inttostr(dayof(fechafinal));
 end;

    cadena := '';

    if sfechainicio <> '' then
      cadena := ' '+AUX2+'.fecha >= '''+sfechainicio+''' ';
    if sfechafinal <> '' then
     if cadena <> '' then
      cadena := cadena + ' and '+AUX2+'.fecha <= '''+sfechafinal+''' '
     else
      cadena := ' '+AUX2+'.fecha <= '''+sfechafinal+''' ';

  IF TRIM(EDIT1.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX2+'.ID_CLIENTE='+EDIT1.TEXT
       ELSE
          CADENA := AUX2+'.ID_CLIENTE='+EDIT1.TEXT  ;

    IF TRIM(EDIT2.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX+'.ANYO='+EDIT2.TEXT
       ELSE
          CADENA := ' '+AUX+'.ANYO='+EDIT2.TEXT;

    IF TRIM(EDIT5.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX+'.ID_EMPRESA='+EDIT5.TEXT
       ELSE
          CADENA := ' '+AUX+'.ID_EMPRESA='+EDIT5.TEXT;

    IF TRIM(EDIT8.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX+'.ID_SERIE='''+EDIT8.TEXT+''' '
       ELSE
          CADENA := ' '+AUX+'.ID_SERIE='''+EDIT8.TEXT+''' ';

    IF TRIM(EDIT3.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX+'.ID_ARTICULO>='''+EDIT3.TEXT+''' '
       ELSE
          CADENA := ' '+AUX+'.ID_ARTICULO>='''+EDIT3.TEXT+''' ';

    IF TRIM(EDIT4.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX+'.ID_ARTICULO<='''+EDIT4.TEXT+''' '
       ELSE
          CADENA := ' '+AUX+'.ID_ARTICULO<='''+EDIT4.TEXT+''' ';
    IF (AUX2='TI') THEN
       AUXB:= '.FORMAPAGO'
    ELSE
       AUXB:= '.ID_FORMA';
    IF TRIM(EDIT6.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX2+AUXB+'>='''+EDIT6.TEXT+''' '
       ELSE
          CADENA := ' '+AUX2+AUXB+'>='''+EDIT6.TEXT+''' ';

    IF TRIM(EDIT7.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX2+AUXB+'<='''+EDIT7.TEXT+''' '
       ELSE
          CADENA := ' '+AUX2+AUXB+'<='''+EDIT7.TEXT+''' ';


    RESULT:=CADENA;
END;
FUNCTION TLISTADOOPCIONESARTICULOS.OBTENERORDEN(AUX,AUX2,AUX3:STRING):STRING;
VAR ORDEN:STRING;
   I:SMALLINT;
BEGIN
    RESULT :='';
    ORDEN :='';
    FOR I:=0 TO 2 DO
    BEGIN
       IF SGORDEN1.CELLS[0,I] ='ID_ARTICULO' THEN
         ORDEN := ORDEN + AUX+'.ID_ARTICULO,'
       ELSE IF SGORDEN1.CELLS[0,I] ='AŅO' THEN
         ORDEN := ORDEN + AUX3+'.ANYO,'
       ELSE
       IF SGORDEN1.CELLS[0,I] ='NUMERO' THEN
         ORDEN := ORDEN + AUX3+'.'+AUX2+','
       ELSE IF (SGORDEN1.CELLS[0,I] ='ID_CLIENTE') OR
            (SGORDEN1.CELLS[0,I] ='FECHA')
       THEN
         ORDEN := ORDEN + AUX3+'.'+SGORDEN1.CELLS[0,I]+','
       ELSE
         ORDEN := ORDEN + AUX+'.'+SGORDEN1.CELLS[0,I]+',';
    END;
    IF SGORDEN1.CELLS[0,3] ='ID_ARTICULO' THEN
         ORDEN := ' ORDER BY '+ ORDEN + AUX+'.ID_ARTICULO'
    ELSE IF SGORDEN1.CELLS[0,3] ='AŅO' THEN
       ORDEN:= ' ORDER BY ' + ORDEN + AUX+'.ANYO'
    ELSE IF SGORDEN1.CELLS[0,3] ='NUMERO' THEN
       ORDEN:= ' ORDER BY ' + ORDEN + AUX3+'.'+AUX2
    ELSE IF (SGORDEN1.CELLS[0,3] ='ID_CLIENTE') OR
            (SGORDEN1.CELLS[0,3] ='FECHA') THEN
       ORDEN :=' ORDER BY '+ ORDEN + AUX3+'.'+SGORDEN1.CELLS[0,3]
    ELSE
       ORDEN:= ' ORDER BY ' + ORDEN + AUX+'.'+SGORDEN1.CELLS[0,3] ;

    RESULT := ORDEN;

END;

procedure TLISTADOOPCIONESARTICULOS.Edit7DblClick(Sender: TObject);
begin
 EDIT7.Text := FPAGO;
end;

procedure TLISTADOOPCIONESARTICULOS.Edit7KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
 IF KEY = 112 THEN
   EDIT7.Text := FPAGO;
end;

procedure TLISTADOOPCIONESARTICULOS.Edit6DblClick(Sender: TObject);
begin
 EDIT6.Text := FPAGO;
end;

procedure TLISTADOOPCIONESARTICULOS.Edit6KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
 IF KEY=112 THEN
  EDIT6.Text := FPAGO;
end;

FUNCTION TLISTADOOPCIONESARTICULOS.FPAGO:STRING;
BEGIN
        RESULT := '';
        DMGS.cdsq_formapagoaux.Close;
        fdlgformapagoAUX := tfdlgformapagoAUX.Create(NIL);
        if fdlgformapagoAUX.Showmodal=mrok then
        begin
            RESULT := dmgs.cdsq_formapagoauxid_forma.AsString ;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        fdlgformapagoaux.Free;
        fdlgformapagoaux := nil;
END;

end.
