{
===============================================================================
  Copyright (©) 2001. 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: 04-10-2004
  Versión actual: 1.0.0
  Fecha versión actual: 04-10-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit TablaAlbaranesProveedor;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  BaseDatos, Ibdatabase, dxDBGrid, Contadores;

type
  TDatosAlbaranProveedor = class(TPersistent)
  public
    CodigoEmpresa : integer;
    Codigo : string;
    FechaAlta : string;
    Usuario : string;
    CodigoProveedor : string;
    NIFCIF : string;
    Nombre : string;
    Calle : string;
    Numero : string;
    Piso : string;
    CodigoPostal : string;
    Poblacion : string;
    Provincia : string;
    PersonaContacto : string;
    Telefono : string;
    Fax : string;
    BaseImponible : string;
    Descuento : string;
    IVA : string;
    ImporteTotal : string;
    Descripcion : string;
  end;

  TdmTablaAlbaranesProveedor = class(TDataModule)
  private
    procedure IniciarSQLAlbaran;
    procedure IniciarSQLDetalles;
    procedure IniciarSQLGrids;
  public
    sqlInsertarAlbaran : TStrings;
    sqlModificarAlbaran : TStrings;
    sqlConsultarAlbaran : TStrings;
    sqlEliminarAlbaran : TStrings;
    sqlConsultarGridAlbaranes : TStrings;
    sqlConsultarGridAlbaranesPro : TStrings;
    sqlInsertarDetalles : TStrings;
    sqlModificarDetalles : TStrings;
    sqlConsultarDetalles : TStrings;
    sqlEliminarDetalles : TStrings;
    sqlConsultarGridDetalles : TStrings;

    //Metodos que llamaran a contador
    function DarNuevoCodigo : String;
    function IncrementarCodigo: boolean;
    function InsertarContador: boolean;
    function ValidarCodigo(Codigo : String) : Boolean;
    function FormatearCodigo(Codigo : String) : String;

    function DarDatosAlbaran(Albaran : TDatosAlbaranProveedor): Boolean;
    function ExisteCodigo(CodigoEmpresa: Integer; Codigo : String) : Boolean;
    procedure InicializarGridDetalles(var Grid: TdxDBGrid);
    procedure InicializarGridAlbaranes(var Grid: TdxDBGrid);
    procedure InicializarTablaAlbaranes(Tabla: TPTabla);
    procedure InicializarTablaDetalles(Tabla: TPTabla);
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
    function DarListaAnos(CodigoEmpresa: Integer): TStringList;
  end;

var
  dmTablaAlbaranesProveedor: TdmTablaAlbaranesProveedor;

implementation

{$R *.DFM}

uses
  IBSQL, Mensajes, StrFunc, IB, DB, Excepciones,
  TablaUnidadesMedida, dxDBCtrl, dxDBTLCL, IBCustomDataSet, dxTL, Constantes,
  Literales, RdxGestorContadores;

{ TdmTablaAlbaranesCliente }

constructor TdmTablaAlbaranesProveedor.Create(AOwner: TComponent);
begin
  inherited;
  { Cabecera }
  sqlInsertarAlbaran := TStringList.Create;
  sqlModificarAlbaran := TStringList.Create;
  sqlConsultarAlbaran := TStringList.Create;
  sqlEliminarAlbaran := TStringList.Create;

  { Detalles }
  sqlInsertarDetalles := TStringList.Create;
  sqlModificarDetalles := TStringList.Create;
  sqlConsultarDetalles := TStringList.Create;
  sqlEliminarDetalles := TStringList.Create;
  sqlConsultarGridDetalles := TStringList.Create;

  { Grids }
  sqlConsultarGridAlbaranes := TStringList.Create;
  sqlConsultarGridAlbaranesPro := TStringList.Create;

  IniciarSQLAlbaran;
  IniciarSQLDetalles;
  IniciarSQLGrids;
end;

destructor TdmTablaAlbaranesProveedor.Destroy;
begin
  { Cabecera }
  sqlInsertarAlbaran.Free;
  sqlModificarAlbaran.Free;
  sqlConsultarAlbaran.Free;
  sqlEliminarAlbaran.Free;

  { Detalles }
  sqlInsertarDetalles.Free;
  sqlModificarDetalles.Free;
  sqlConsultarDetalles.Free;
  sqlEliminarDetalles.Free;
  sqlConsultarGridDetalles.Free;

  { Grids }
  sqlConsultarGridAlbaranes.Free;
  sqlConsultarGridAlbaranesPro.Free;
  inherited;
end;

function TdmTablaAlbaranesProveedor.DarDatosAlbaran(
  Albaran: TDatosAlbaranProveedor): Boolean;
var
  oSQL : TIBSQL;
begin
  Result := False;
  if EsCadenaVacia(Albaran.Codigo) then
    Exit;

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select * from ALBARANESPROVEEDOR ');
    SQL.Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA)');
    ParamByName('CODIGOEMPRESA').AsInteger := Albaran.CodigoEmpresa;
    ParamByName('CODIGO').AsString := Albaran.Codigo;
    try
      Prepare;
      ExecQuery;
      //Compruebo que el codigo de albarán existe. Si no existe, devuelvo false
      if (RecordCount > 0) then
      begin
        with Albaran do
        begin
          FechaAlta := FieldByName('FECHAALTA').AsString;
          Usuario:= FieldByName('USUARIO').AsString;
          CodigoProveedor := FieldByName('CODIGOPROVEEDOR').AsString;
          NifCif := FieldByName('NIFCIF').AsString;
          Nombre := FieldByName('NOMBRE').AsString;
          Calle := FieldByName('CALLE').AsString;
          Numero := FieldByName('NUMERO').AsString;
          Piso := FieldByName('PISO').AsString;
          CodigoPostal := FieldByName('CODIGOPOSTAL').AsString;
          Poblacion := FieldByName('POBLACION').AsString;
          Provincia := FieldByName('PROVINCIA').AsString;
          PersonaContacto := FieldByName('PERSONACONTACTO').AsString;
          Telefono := FieldByName('TELEFONO').AsString;
          Fax := FieldByName('FAX').AsString;
          BaseImponible := FieldByName('BASEIMPONIBLE').AsString;
          Descuento := FieldByName('DESCUENTO').AsString;
          IVA := FieldByName('IVA').AsString;
          ImporteTotal := FieldByName('IMPORTETOTAL').AsString;
          Descripcion := FieldByName('DESCRIPCION').AsString;
          Result := True;
        end;
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

function TdmTablaAlbaranesProveedor.DarNuevoCodigo: String;
begin
  Result := GestorContadores.DarNuevoCodigo(contAlbaranesProveedor);
end;

function TdmTablaAlbaranesProveedor.ExisteCodigo(CodigoEmpresa: Integer; Codigo: String): Boolean;
var
  oSQL : TIBSQL;
  Contador : String;
begin
  Result := False;
  oSQL := TIBSQL.Create(Self);
  oSQL.Database := dmBaseDatos.BD;
  oSQL.Transaction := dmBaseDatos.Transaccion;
  oSQL.SQL.Add('select CODIGO ');
  oSQL.SQL.Add('from ALBARANESPROVEEDOR ');
  oSQL.SQL.Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA)');

  try
    with oSQL do
    begin
      ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
      ParamByName('CODIGO').AsString := Codigo;
      Prepare;
      ExecQuery;
      Contador := Fields[0].AsString;
      Result := (Codigo = Contador);
    end;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
  oSQL.Close;
  oSQL.Transaction := NIL;
  oSQL.Free;
end;

function TdmTablaAlbaranesProveedor.FormatearCodigo(Codigo: String): String;
begin
  Result := GestorContadores.FormatearCodigo(contAlbaranesProveedor, Codigo);
end;

function TdmTablaAlbaranesProveedor.IncrementarCodigo: boolean;
begin
  Result := GestorContadores.IncrementarValor(contAlbaranesProveedor);
end;

procedure TdmTablaAlbaranesProveedor.InicializarGridAlbaranes(var Grid: TdxDBGrid);
var
  Columna : TdxDBTreeListColumn;
begin
  with Grid do begin
    DestroyColumns;
    ShowSummaryFooter := True;
    {Columna CODIGO}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.FieldName := 'CODIGO';
    Columna.Caption := 'Código';
    Columna.Width := tamColCodigo;
    Columna.Sorted := csDown;
    Columna.SummaryFooterType := cstCount;
    Columna.SummaryFooterFormat := 'Total: 0 albaranes';

    {Columna ANO}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.FieldName := 'ANO';
    Columna.Caption := 'Año';
    Columna.Width := tamColFecha;
    Columna.Visible := False;
    
    {Columna FECHAALTA}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.FieldName := 'FECHAALTA';
    Columna.Caption := 'Fecha alta';
    Columna.Width := tamColFecha;
    {Columna CODIGOPROVEEDOR}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.FieldName := 'CODIGOPROVEEDOR';
    Columna.Caption := 'Cód. proveedor';
    Columna.Width := tamColCodigo;
    {Columna NIFCIF}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.FieldName := 'NIFCIF';
    Columna.Caption := 'NIF/CIF';
    Columna.Width := tamColNIFCIF;
    {Columna NOMBRE}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.FieldName := 'NOMBRE';
    Columna.Caption := 'Nombre';
    Columna.Width := tamColNombre;
    {Columna IMPORTETOTAL}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.FieldName := 'IMPORTETOTAL';
    Columna.Caption := 'Importe total';
    Columna.Width := tamColPrecio;
  end;
end;

procedure TdmTablaAlbaranesProveedor.InicializarGridDetalles(var Grid: TdxDBGrid);
var
  Columna : TdxDBTreeListColumn;
begin
  with Grid do begin
    DestroyColumns;
    {Columna CODIGOALBARAN}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.Visible := False;
    Columna.FieldName := 'CODIGOALBARAN';
    {Columna NUMCONCEPTO}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.Visible := False;
    Columna.FieldName := 'NUMCONCEPTO';
    {Columna CODIGOARTICULO}
    Columna := CreateColumn(TdxDBTreeListButtonColumn);
    Columna.FieldName := 'CODIGOARTICULO';
    Columna.Caption := 'Cód. material';
    Columna.Width := tamColCodigo;
    {Columna DESCRIPCION}
    Columna := CreateColumn(TdxDBTreeListButtonColumn);
    Columna.FieldName := 'DESCRIPCION';
    Columna.Caption := 'Descripción';
    Columna.Width := tamColDescripcion;
    {Columna CANTIDAD}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.FieldName := 'CANTIDAD';
    Columna.Caption := 'Cantidad';
    Columna.Width := tamColCantidad;
    {Columna UNIDADESMEDIDA}
    Columna := CreateColumn(TdxDBTreeListPickColumn);
    Columna.FieldName := 'UNIDADESMEDIDA';
    Columna.Caption := 'Unid. medida';
    (Columna as TdxDBTreeListPickColumn).Items := dmTablaUnidadesMedida.DarUnidadesMedida;
    Columna.Width := tamColUnidadesMedida;
    {Columna PRECIOUNIDAD}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.FieldName := 'PRECIOUNIDAD';
    Columna.Caption := 'Precio unidad';
    Columna.Width := tamColPrecio;
    {Columna TOTAL}
    Columna := CreateColumn(TdxDBTreeListColumn);
    Columna.FieldName := 'TOTAL';
    Columna.ReadOnly := True;
    Columna.Caption := 'Precio total';
    Columna.Width := tamColPrecio;    
  end;
end;

procedure TdmTablaAlbaranesProveedor.InicializarTablaAlbaranes(
  Tabla: TPTabla);
begin
  with Tabla^.Fields do
  begin
    if FindField('FECHAALTA') <> NIL then
      with (FieldByName('FECHAALTA') as TDateField) do begin
        EditMask := MASK_FECHA;
      end;

    if FindField('BASEIMPONIBLE') <> NIL then
      //with (FieldByName('BASEIMPONIBLE') as TFloatField) do begin
      with (FieldByName('BASEIMPONIBLE') as TIBBCDField) do begin
        DisplayFormat := DISPLAY_EUROS2;
        EditFormat := EDIT_EUROS2;
      end;

    if FindField('DESCUENTO') <> NIL then
      with (FieldByName('DESCUENTO') as TFloatField) do begin
        DisplayFormat := DISPLAY_DTO;
        EditFormat := EDIT_DTO;
      end;

    if FindField('IMPORTEDESCUENTO') <> NIL then
      //with (FieldByName('IMPORTEDESCUENTO') as TFloatField) do begin
      with (FieldByName('IMPORTEDESCUENTO') as TIBBCDField) do begin
        DisplayFormat := DISPLAY_EUROS2;
        EditFormat := EDIT_EUROS2;
      end;

    if FindField('IVA') <> NIL then
      with (FieldByName('IVA') as TFloatField) do begin
        DisplayFormat := DISPLAY_DTO;
        EditFormat := EDIT_DTO;
      end;

    if FindField('IMPORTEIVA') <> NIL then
      //with (FieldByName('IMPORTEIVA') as TFloatField) do begin
      with (FieldByName('IMPORTEIVA') as TIBBCDField) do begin
        DisplayFormat := DISPLAY_EUROS2;
        EditFormat := EDIT_EUROS2;
      end;

    if FindField('IMPORTETOTAL') <> NIL then
      //with (FieldByName('IMPORTETOTAL') as TFloatField) do begin
      with (FieldByName('IMPORTETOTAL') as TIBBCDField) do begin
        DisplayFormat := DISPLAY_EUROS2;
        EditFormat := EDIT_EUROS2;
      end;
  end;
end;

procedure TdmTablaAlbaranesProveedor.InicializarTablaDetalles(
  Tabla: TPTabla);
begin
  with Tabla^.Fields do
  begin
    with (FieldByName('PRECIOUNIDAD') as TFloatField) do begin
      DisplayFormat := DISPLAY_EUROS2;
      EditFormat := EDIT_EUROS2;
    end;
    with (FieldByName('TOTAL') as TFloatField) do begin
      DisplayFormat := DISPLAY_EUROS2;
      EditFormat := EDIT_EUROS2;
    end;
  end;
end;

procedure TdmTablaAlbaranesProveedor.IniciarSQLAlbaran;
begin
  with sqlInsertarAlbaran do
  begin
    Add('insert into ALBARANESPROVEEDOR ');
    Add('(CODIGOEMPRESA, CODIGO, FECHAALTA, USUARIO, DESCRIPCION, ');
    Add('CODIGOPROVEEDOR, NIFCIF, NOMBRE, CALLE, NUMERO, PISO, CODIGOPOSTAL, ');
    Add('POBLACION, PROVINCIA, PERSONACONTACTO, TELEFONO, FAX, ');
    Add('BASEIMPONIBLE, DESCUENTO, IVA, IMPORTETOTAL, IMPORTEDESCUENTO, ');
    Add('IMPORTEIVA)' );
    Add('values (:CODIGOEMPRESA, :CODIGO, :FECHAALTA, :USUARIO, ');
    Add(':DESCRIPCION, :CODIGOPROVEEDOR, :NIFCIF, :NOMBRE, :CALLE, :NUMERO, ');
    Add(':PISO, :CODIGOPOSTAL, :POBLACION, :PROVINCIA, ');
    Add(':PERSONACONTACTO, :TELEFONO, :FAX, :BASEIMPONIBLE, ');
    Add(':DESCUENTO, :IVA, :IMPORTETOTAL, :IMPORTEDESCUENTO, :IMPORTEIVA)');
  end;

  with sqlModificarAlbaran do
  begin
    Add('update ALBARANESPROVEEDOR set ');
    Add('FECHAALTA = :FECHAALTA, ');
    Add('USUARIO = :USUARIO, ');
    Add('DESCRIPCION = :DESCRIPCION, ');
    Add('CODIGOPROVEEDOR = :CODIGOPROVEEDOR, ');
    Add('NIFCIF = :NIFCIF, ');
    Add('NOMBRE = :NOMBRE, ');
    Add('CALLE = :CALLE, ');
    Add('NUMERO = :NUMERO, ');
    Add('PISO = :PISO, ');
    Add('CODIGOPOSTAL = :CODIGOPOSTAL, ');
    Add('POBLACION = :POBLACION, ');
    Add('PROVINCIA = :PROVINCIA, ');
    Add('PERSONACONTACTO = :PERSONACONTACTO, ');
    Add('TELEFONO = :TELEFONO, ');
    Add('FAX = :FAX, ');
    Add('BASEIMPONIBLE = :BASEIMPONIBLE, ');
    Add('DESCUENTO = :DESCUENTO, ');
    Add('IMPORTEDESCUENTO = :IMPORTEDESCUENTO, ');
    Add('IVA = :IVA, ');
    Add('IMPORTEIVA = :IMPORTEIVA, ');
    Add('IMPORTETOTAL = :IMPORTETOTAL ');
    Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA)');
  end;

  with sqlEliminarAlbaran do
  begin
    Add('delete from ALBARANESPROVEEDOR ');
    Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA)');
  end;

  with sqlConsultarAlbaran do
  begin
    Add('select * from ALBARANESPROVEEDOR ');
    Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA)');
  end;
end;

procedure TdmTablaAlbaranesProveedor.IniciarSQLDetalles;
begin
  with sqlInsertarDetalles do
  begin
    Add('insert into DETALLESALBARANESPROVEEDOR ');
    Add('(CODIGOEMPRESA, CODIGOALBARAN, NUMCONCEPTO, CODIGOARTICULO, DESCRIPCION, ');
    Add('CANTIDAD, UNIDADESMEDIDA, PRECIOUNIDAD, TOTAL) ');
    Add('values (:CODIGOEMPRESA, :CODIGOALBARAN, :NUMCONCEPTO, :CODIGOARTICULO, ');
    Add(':DESCRIPCION, :CANTIDAD, :UNIDADESMEDIDA, :PRECIOUNIDAD, :TOTAL)');
  end;

  with sqlModificarDetalles do
  begin
    Add('update DETALLESALBARANESPROVEEDOR set ');
    Add('NUMCONCEPTO = :NUMCONCEPTO, ');
    Add('CODIGOARTICULO = :CODIGOARTICULO, ');
    Add('DESCRIPCION = :DESCRIPCION, ');
    Add('CANTIDAD = :CANTIDAD, ');
    Add('UNIDADESMEDIDA = :UNIDADESMEDIDA, ');
    Add('PRECIOUNIDAD = :PRECIOUNIDAD, ');
    Add('TOTAL = :TOTAL ');
    Add('where (CODIGOALBARAN = :CODIGOALBARAN) ');
    Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
    Add('and (NUMCONCEPTO = :NUMCONCEPTO)');
  end;

  with sqlEliminarDetalles do
  begin
    Add('delete from DETALLESALBARANESPROVEEDOR ');
    Add('where (CODIGOALBARAN = :CODIGOALBARAN) ');
    Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
    Add('and (NUMCONCEPTO = :NUMCONCEPTO)');
  end;

  with sqlConsultarDetalles do
  begin
    Add('select CODIGOALBARAN, NUMCONCEPTO, CODIGOARTICULO, ');
    Add('DESCRIPCION, CANTIDAD, UNIDADESMEDIDA, PRECIOUNIDAD, TOTAL ');
    Add('from DETALLESALBARANESPROVEEDOR ');
    Add('where (CODIGOALBARAN = :CODIGOALBARAN) ');
    Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
    Add('and (NUMCONCEPTO = :NUMCONCEPTO)');
  end;
end;

procedure TdmTablaAlbaranesProveedor.IniciarSQLGrids;
begin
  with sqlConsultarGridAlbaranes do
  begin
    Add('select CODIGO, FECHAALTA, CODIGOPROVEEDOR, NIFCIF, ');
    Add('EXTRACT (YEAR FROM FECHAALTA) as ANO, ');
    Add('NOMBRE, IMPORTETOTAL');
    Add('from ALBARANESPROVEEDOR ');
    Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) ');
    Add('order by CODIGO');
  end;

  with sqlConsultarGridAlbaranesPro do
  begin
    Add('select CODIGO, FECHAALTA, CODIGOPROVEEDOR, NIFCIF, ');
    Add('EXTRACT (YEAR FROM FECHAALTA) as ANO, ');
    Add('NOMBRE, IMPORTETOTAL');
    Add('from ALBARANESPROVEEDOR ');
    Add('where (CODIGOPROVEEDOR = :CODIGOPROVEEDOR) ');
    Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
    Add('order by CODIGO');
  end;

  with sqlConsultarGridDetalles do
  begin
    Add('select CODIGOEMPRESA, CODIGOALBARAN, NUMCONCEPTO, ');
    Add('CODIGOARTICULO, DESCRIPCION, ');
    Add('CANTIDAD, UNIDADESMEDIDA, PRECIOUNIDAD, TOTAL ');
    Add('from DETALLESALBARANESPROVEEDOR ');
    Add('where (CODIGOALBARAN = :CODIGOALBARAN) ');
    Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
    Add('order by NUMCONCEPTO');
  end;

end;

function TdmTablaAlbaranesProveedor.InsertarContador: boolean;
begin
  Result := GestorContadores.InsertarContador(contAlbaranesProveedor);
end;

function TdmTablaAlbaranesProveedor.ValidarCodigo(Codigo: String): Boolean;
begin
  Result := GestorContadores.ValidarCodigo(contAlbaranesProveedor, Codigo);
end;

function TdmTablaAlbaranesProveedor.DarListaAnos(CodigoEmpresa: Integer): TStringList;
var
  oSQL : TIBSQL;
  Lista : TStringList;
begin
  Lista := TStringList.Create;
  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select distinct (EXTRACT (YEAR FROM FECHAALTA)) ANO ');
    SQL.Add('from ALBARANESPROVEEDOR ');
    SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) ');    
    SQL.Add('order by FECHAALTA desc');
    ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
    
  try
    Prepare;
    ExecQuery;
    Lista.Add(CTE_TODOS);
    while not EOF do begin
      Lista.Add(Fields[0].AsString);
      Next;
    end;
    result := Lista;
  finally
    Close;
    Transaction := NIL;
    Free;
  end;
  end;
end;

end.
