// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// Reporte:     AUXILIAR DE MOVIMIENTOS DE CLIENTES/PROVEDORES     AuxMovto.rpt 
//
// Sistema:     ADMINPAQ  Versión v1.0 Windows
//
// Descripcion: EL auxiliar de movimientos imprime todos los documentos registrados para un 
//              cliente de acuerdo al rango de fechas seleccionado.
//              Este reporte se imprime por el orden de la fecha del docto.
//              Imprime doctos de cargo y de abono sin diferenciar si están saldados o no.
//
// Consideraciones :
// Creación  :  Felix de la Cruz S.   10/Julio/2001
// Revisiones : 
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// Historia de modificaciones
//  Fecha      Nombre   IDLotus                     Descripcion
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// 28/07/2003   CILA    N.D.2335    Se cambio el numero de decimales de 2 a 4
//                                  para la columna de tipo de cambio.
// 16/03/2005   HVA     3023 Saldos bimonedas
// 20/04/2005   LAP     N.D.3023    Incluir los documentos de utilidad / perdida
//                                  cambiaria siempre y cuando correspondan a la
//                                  moneda del reporte.
//                                  - fDiscriminaDocto cambia a fDiscriminaDocumento
//                                  Expresar los importes de los documentos en la moneda 
//                                  del reporte. Considerando que los documentos en moneda 
//                                  base tienen el tipo de cambio de la moneda del cliente 
//                                  a la moneda base. Utilizar fCambiarMonedaDoctoAReporte de
//                                  LibAdminPAQ.rpt
//                                  - fImprimeDocumento
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// INCLUSION DE ARCHIVOS 
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      Incluye LibAdminPaq.rpt
      Incluye LibCliProv.rpt

// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// INICIO PARAMETROS
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    Parametro pDeLaFecha    = '20010101'
		Parametro pAlaFecha     = '20011220'
    Parametro pDelCliente   = ' '             // clave del primer cliente en el rango
		Parametro pAlCliente    = ' '             // clave del ultimo cliente en el rango
    Parametro pSoloConDoctos  =  0            // 1 = Si, 0 = No
    Parametro pCualesClientes =  0            // 0 =todos, 1= Activos, 2= InActivos
    Parametro pIdMoneda       =  1            // 1 = ID moneda Peso mexicano

    Parametro pQueTipo        =  1   // 0 = Clientes, 1 = Proveedores
    
    Parametro pIdClase1   = 0    // por omisión deben recibir 0 =  ninguna
    Parametro pIdClase2   = 0    
    Parametro pIdClase3   = 0   
    Parametro pIdClase4   = 0    // deben ser el ID de la clasificacion
    Parametro pIdClase5   = 0
    Parametro pIdClase6   = 0    // por omisión deben recibir 0 =  ninguna

// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// INICIO APERTURA TABLAS
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// Nombres terminados en Lib, indican que la tabla fue abierta explicitamente para alguna Fx de libreria
  UsaEmpresa tEmpresa;'AdminpaqW'               

   // Periodos
  UsaTabla tPeriodos = tEmpresa['mgw10031']            // Usa el indice primario, cIDEjercicio
  tPeriodos.UsaIndice['cNumeroEjercicio']

   // Parametros de la empresa
  UsaTabla tParametros = tEmpresa['mgw10000']                        // Usa el indice primario

  // TiposCambio 
  Usatabla tTiposCambioLib = tEmpresa['mgw10035']
  tTiposCambioLib.Usaindice['iMonedaFecha']                                  //  cIdMoneda + cFecha

  // Documentos
  UsaTabla tDocumentos = tEmpresa['mgw10008'] Alias 'tDoctos1'  
  tDocumentos.Usaindice['iClienteProveedorFecha']   //IdClienteProveedor+cFecha+cSerie+cFolio
  UsaTabla tDoctoslib = tEmpresa['mgw10008']  Alias 'tDoctos2'               
  tDoctosLib.UsaIndice['iClienteProveedorFecha']             //IdClienteProveedor+cFecha+cSerie+cFolio

  // Clientes y Provedores
  UsaTabla tClientes = tEmpresa['mgw10002']
  tClientes.Usaindice['iCodigoTipo']                            // cCodigoCliente + cTipoCliente

  // Acumulados por periodo
  UsaTabla tAcumuladosLib = tEmpresa['mgw10018']      // cIdTipoAcumulado + Importe modelo+ cIdOwner1 + cIdOwner2 
  tAcumuladosLib.Usaindice['iAcumImpteOwnerEjerMoneda']                     // + cIdEjercicio + cIdMoneda

  UsaTabla tConceptos = tEmpresa['mgw10006']     
  tConceptos.UsaIndice['cIdConceptoDocumento']

  UsaTabla tMonedas = tEmpresa['mgw10034']          
  tMonedas.Usaindice['']                     // Usa el índice primario, por cIdMoneda

  UsaTabla tValoresDeClasif = tEmpresa['mgw10020']
  tValoresDeClasif.UsaIndice['']

// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//DEFINICION DE COLUMNAS 
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
            // C0       C2        C4       C6        C8       C10      C12      C14       C16 
  Columnas 17;1.65,0.15,0.75,0.15,1.2,0.15,3.75,0.15,2.1,0.15,2.1,0.15,2.1,0.15,1.95,0.15,1.2  
  UsaLetra 'Arial'
  Altura 9
  [C0..C5].Coma
  [C0..C5].Decimales 0
  [C0..C5].Blanco ' '
  [C6..C16].Coma
  tMonedas.Busca[@Str(pIdMoneda;0)]
  gDecimales = tMonedas(cDecimalesMoneda)
  [C6..C14].Decimales gDecimales
  [C6..C14].Blanco '0.00'
  [C16].Decimales 4
  [C16].Blanco '0.0000'
  [C6..C16].Corchete True

// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// VARIABLES GLOBALES 
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
  gHoy = fFormateaFecha(@Hoy();0)
  gDelaFecha = ''
  gAlaFecha  = '' 
  gPeriodo   = 0
  gIdEjercicio = 0 

  gSaldoCliente   = 0.0              // se actualiza al imprimir cada documento del cliente
  gTotalCargosCliente = 0.0
  gTotalAbonosCliente = 0.0

  gGranTotalCargos = 0.0
  gGranTotalAbonos = 0.0 

  gNombreMoneda = tMonedas(cNombreMoneda)

// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// FUNCIONES <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// ==========================================================================================
// fColumnas (Procedimiento)
// Descripcion : Establece uno de los dos tipos de columnas que se utilizan en el reporte
// Entrada :     atipo : El tipode de columnas
// ==========================================================================================
Deffunc fColumnas(atipo)
  Si atipo = 1
               // C0       C2        C4       C6       C8       C10      C12      C14       C16 
    Columnas 17;1.65,0.15,0.75,0.15,1.2,0.15,3.75,0.15,2.1,0.15,2.1,0.15,2.1,0.15,1.95,0.15,1.2  
  Sino 
    Si pQueTipo = 0
               // C0  C1   C2 
      Columnas 5;1.2,0.15,6.45
    Sino
               // C0  C1   C2 
      Columnas 5;1.5,0.15,6.45      
    Finsi
  Finsi
Finfunc

// ==========================================================================================
// fImpDatosCliente (Procedimiento)
// Descripcion : Imprime los datos del cliente, como encabezado para despues imprimir el detalle
//               Obtiene el saldo inicial ya que es parte de los datos del cliente
// Entrada : La tabla de clientes, con el cliente a imprimir abierto
// Salida  : No regresa valor,
//           pero imprime los renglones de 1.- Datos del cliente;  1.- Saldo inicial el cliente
// ==========================================================================================
DefFunc fImpDatosCliente(aTblCliente:TABLA;aSaldo)
  local lRenglon   

  NEGRITAS TRUE       
  fColumnas(2) 

  lRenglon = ''
  Si pQueTipo = 0
    lRenglon[0] = 'Cliente:'
  Sino
    lRenglon[0] = 'Proveedor:'
  Finsi
  lRenglon[2] = fMascarilla(aTblCliente(cCodigoCliente);tParametros(cMascarillaClientes))
  Imprime lRenglon
  lRenglon[0] = 'Nombre:'
  lrenglon = aTblCliente(cRazonSocial)[C2]
  Imprime lrenglon

  NEGRITAS FALSE    

  fColumnas(1)
  lRenglon = ''
  lRenglon[6] = 'Saldo Inicial'
  lRenglon[12] = aSaldo
  Imprime lRenglon
FinFunc

// ==========================================================================================
// fImprimeDocumento (Procedimiento)
// Descripcion : 
// Entrada :
//          aTblDocto  = Documento que se va a imprimir 
//          aSaldoCliente = Saldo del cliente, es por referencia y se actualiza despues de 
//                        imprimir el documento. + Cargo - Abonos
//          pIdMoneda = ID de la moneda en que se pide el reporte
//          aTipo = (0 = Cliente; 1 = Proveedor)
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// Historia de modificaciones
//  Fecha      Nombre   IDLotus                     Descripcion
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// 20/04/2005  LAP      N.D.3023    Expresar los importes de los documentos en la moneda 
//                                  del reporte. Considerando que los documentos en moneda 
//                                  base tienen el tipo de cambio de la moneda del cliente 
//                                  a la moneda base. Utilizar fCambiarMonedaDoctoAReporte de
//                                  LibAdminPAQ.rpt
// ==========================================================================================
DefFunc fImprimeDocumento(aTblDocto:TABLA; aSaldoCliente; aIdMoneda; aTipo)
Local lRenglon, lNaturaleza, lImporteDoctoMonedaRpt

  lImporteDoctoMonedaRpt = fCambiarMonedaDoctoAReporte(aTblDocto; tTiposCambioLib; aTblDocto(cTotal); pIdMoneda; tClientes(cIdMoneda))
  
	// Si el documento es un cargo imprime en la columna Cargo, de lo contrario
	// imprime en la columna Abono.
	// Los cargos incrementan el saldo del cliente, los abonos lo decrementan
  // Los cargos decrementan el saldo del proveedor, los abonos lo incrementan
  lRenglon = ''[C0..C16]

  lRenglon = aTblDocto(cSerieDocumento)[C2]
  lRenglon = aTblDocto(cFolio)[C4]
  lrenglon[0] = fFormateaFecha(aTblDocto(cFecha);0)

  tConceptos.Busca[@Str(aTblDocto(cIDConceptoDocumento);0)] 
  Si tConceptos->Encontro
    lRenglon = tConceptos(cNombreConcepto)[C6]
  Finsi
  // Se verifica la naturaleza por aquellos doctos de Utilidad O perdida Cambiaria
  lNaturaleza = aTblDocto(cNaturaleza)
    // 28. Utilidad Cambiaria Cliente (cargo)
    // 29. Perdida Cambiaria  Cliente (abono)
    // 30. Utilidad Cambiaria Provedor(cargo)
    // 31. Perdida Cambiaria Proveedor(abono)
  Si aTblDocto(cIdDocumentoDe) = 28 O aTblDocto(cIdDocumentoDe)= 30
    // Cargos
    lNaturaleza = 0 
  Finsi
  Si aTblDocto(cIdDocumentoDe) = 29 O aTblDocto(cIdDocumentoDe)= 31
    // Abonos
    lNaturaleza = 1 
  Finsi
  // 
  Si lNaturaleza = 0 
    gTotalCargosCliente = gTotalCargosCliente + lImporteDoctoMonedaRpt
    // Caso Clientes-Proveedores : Si Se imprimen clientes y el documento es para clientes 
    Si aTipo = 1     // es para un proveedor, el signo del cargo se invierte
      lImporteDoctoMonedaRpt = -lImporteDoctoMonedaRpt
    Sino            // Es un cliente el docto tiene fecha de vencimiento
      lRenglon[14]= fFormateaFecha(aTblDocto(cFechaVencimiento);0)
    Finsi
    lRenglon[8] = lImporteDoctoMonedaRpt
    // solo los cargos usados por clientes tienen fecha de vencimiento
  Sino              // se trata de un abono 
    gTotalAbonosCliente = gTotalAbonosCliente + lImporteDoctoMonedaRpt
    Si aTipo = 0    // es para clientes, el signo del abono se invierte
      lImporteDoctoMonedaRpt = -lImporteDoctoMonedaRpt
    Sino
      lRenglon[14]= fFormateaFecha(aTblDocto(cFechaVencimiento);0)      
    Finsi
    lRenglon[10] = lImporteDoctoMonedaRpt
    // Caso Cliente-Proveedor : solo los abonos usados por proveedores tiene vencimiento
  Finsi

  // se suma el Importe del docto, dado que ya se le cambio el signo cuando se requiere
  aSaldoCliente = aSaldoCliente + lImporteDoctoMonedaRpt
  lRenglon[12] =  aSaldoCliente

  lRenglon = aTblDocto(cTipoCambio)[C16]
  Imprime lRenglon
Finfunc

// ==========================================================================================
// fImprimeResumen (Procedimiento)
// Descripcion : Imprime los totales por Cliente/Proveedor
// Comentarios : asume la misma distribucion de columnas que el cuerpo principal del reporte
// ==========================================================================================
Deffunc fImprimeResumen()
Local lRenglon

  [C8,C10].Subrayacol '-'
  lRenglon[8]  = (pQueTipo = 0 ?  gTotalCargosCliente : -gTotalCargosCliente)
  lRenglon[10] = (pQueTipo = 0 ? -gTotalAbonosCliente :  gTotalAbonosCliente)
  Imprime lRenglon 

  gGranTotalCargos = gGranTotalCargos + gTotalCargosCliente
  gGranTotalAbonos = gGranTotalAbonos + gTotalAbonosCliente
FinFunc
// ==========================================================================================
// fGranTotal (Procedimiento)
// Descripcion : Imprime los totales generales del reporte
// ==========================================================================================
Deffunc fImprimeGranTotal()
Local lRenglon, lSubRaya
 
  lSubRaya = ''
  lRenglon[8]  = (pQueTipo = 0?  gGranTotalCargos :-gGranTotalCargos)
  lRenglon[10] = (pQueTipo = 0? -gGranTotalAbonos : gGranTotalAbonos)   
  Saltalin 1
  lSubRaya = '================'[C8,C10]
  Imprime lSubRaya
  Imprime lRenglon
FinFunc

// ==========================================================================================
// fDiscriminaCliente()
// Salidas:  1 = indica que el cliente no aplica, debe descartarse
//           0 = indica que el cliente no debe descartarse.
// ==========================================================================================
DefFunc fDiscriminaCliente(aCliente:TABLA)
  Local lRegresa
    
  lRegresa = 0

  // Se salta el Cliente NINGUNO
  Si aCliente(cIdClienteProveedor) = 0
    lRegresa = 1
  Finsi
  // Si se requieren los clientes y no se trata de un cliente:(1=cliente,2=cliente/provedor,3= proveedor)
  Si  pQueTipo = 0 Y (aCliente(cTipoCliente) > 2) 
    lRegresa = 1
  Finsi
  // Si se requieren los Proveedores y no se trata de un Proveedor
  Si  pQueTipo = 1 Y (aCliente(cTipoCliente) < 2) 
    lRegresa = 1
  Finsi
  // Si Estado solicitado no es Todos y No Coincide el tipo de cliente con el parametro 
  // pCualesClientes = 2(inactivos) aplicando %2 = 0, 0 = inactivos en la tabla de clientes
  Si (pCualesClientes != 0) Y (aCliente(cEstatus) != pCualesClientes%2)
    lRegresa = 1
  Finsi
  // Se Revisan las CLASIFICACIONES, solo en el caso de haber seleccionado al menos una 
  Si gNumDeClases > 0
    Si !fMiembroDeUnaClase(aCliente;gNumDeClases;gListIdDeClases;pQueTipo)
     // Sa salta el cliente actual, por no pertenecer a alguna de las clasificaciones
      lRegresa = 1
    Finsi
  Finsi
  Retorna lRegresa

FinFunc

// ==========================================================================================
// fDiscriminaDocumento()
// Salidas:  1 = indica que el Docto no aplica, debe descartarse
//           0 = indica que el Docto no debe descartarse.
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// Historia de modificaciones
//  Fecha      Nombre   IDLotus                     Descripcion
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// 20/04/2005   LAP     N.D.3023    Incluir los documentos de utilidad / perdida
//                                  cambiaria siempre y cuando correspondan a la
//                                  moneda del reporte. Esto debido a que ahora
//                                  existen documentos de este tipo en cualquier
//                                  moneda.
// ==========================================================================================
DefFunc fDiscriminaDocumento(atDocumento:TABLA)
Local lRegresa

  lRegresa = 0

  // N.D.3023 Inicio
  // Si no es cargo o abono y no es docto de utilidad o perdida cambiaria)
  Si atDocumento(cNaturaleza) = 2 Y !(atDocumento(cIDDocumentoDe) >= 28 Y atDocumento(cIDDocumentoDe) <= 31) 
    lRegresa =1
  Finsi

  // Si no esta afectado se lo brinca
  Si atDocumento(cAfectado) != 1
    lRegresa = 1
  Finsi

  // Los documentos de utilidad perdida cambiaria solo se incluyen si su moneda corresponde
  //  a la del reporte
  Si atDocumento(cIdDocumentoDe) >= 28 Y atDocumento(cIdDocumentoDe) <= 31 
    Si atDocumento(cIdMoneda) != pIdMoneda
      lRegresa = 1
    FinSi
  FinSi
  // N.D.3023 Fin

  // CASO Clientes/Proveedores : se descartan los cargos que no son de clientes y los abonos
  // que no son de proveedores, solo imprime los doctos de acuerdo a el tipo de reporte pedido
  Si pQueTipo = 0 y (atDocumento(cUsaCliente) = 0 O (atDocumento(cIdDocumentoDe) = 30 O atDocumento(cIdDocumentoDe) = 31) )
    lRegresa =1
  Finsi
  Si pQueTipo = 1 y (atDocumento(cUsaProveedor) = 0 O (atDocumento(cIdDocumentoDe) = 28 O atDocumento(cIdDocumentoDe) = 29) )
    lRegresa =1
  Finsi
  
  Retorna lRegresa
FinFunc

// ==========================================================================================
// fBuscaAlgunReg
// Descripcion : Busca algun registro que coincida con el campo aIDBuscado, y alguna de las 
//               fechas que sea menor o igual que aFechaFin.
// Salida : modifica el argumento aFechaIni, para regresar la fecha en que se encontro el 1er.
//          registro que coincide
// ==========================================================================================
Deffunc BuscaAlgunReg(aFechaIni;aFechaFin;aIdBuscado;aTblDeBusqueda:TABLA)
  Mientras aFechaIni <= aFechaFin Y !aTblDeBusqueda->ENCONTRO 
      aTblDeBusqueda.BUSCA[aIdBuscado &':'&aFechaIni]
      Si !aTblDeBusqueda->Encontro
        aFechaIni = fFechaSiguiente(aFechaIni)
      Finsi
    FinMientras
Finfunc

// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//ENCABEZADO 
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  Encab    
    Texto '@TC{0,0,0}@S{8}AdminPAQ' 
 	  Hoja '"@TC{0,0,0}@S{8}Hoja: ' 
    Imprime 
    Texto '@TC{0,0,0}@S{8}Moneda: ' & gNombreMoneda
    Texto '"@TC{0,0,0}@S{8}Fecha: ' & gHoy
    Imprime
    Texto '^@TC{0,0,0}@S{22}' & tEmpresa->Nombre
    Imprime
    Texto '^@TC{0,0,0}@S{16}' & 'AUXILIAR DE MOVIMIENTOS'
    Imprime

    gDelaFecha = fFormateaFecha(pDelaFecha;0)
    gAlaFecha  = fFormateaFecha(pAlaFecha;0)
    Texto '^@TC{0,0,0}@S{16}'& 'Del: ' & gDelaFecha & ' Al: ' & gAlaFecha 
    Imprime 

    // ===== Se Revisan las clasificaciones, para recuperarlas e imprimirlas en el encabezado
    fRevisaClases(tValoresDeClasif)
    // ===== Fin de la revision de clasificaciones

    NEGRITAS TRUE
    fColumnas(1)
    Altura 9
    Texto '@TC{0,0,0}@L{-1}'
    Imprime 
    Texto C12;'^Saldo'
    Texto C16;'Tipo'
    Imprime
    Texto C0;'Fecha'
    Texto C2;'Serie'
    Texto C4;'Folio'
    Texto C6;'Concepto'
    Texto C8;'^Cargos'
    Texto C10;'^Abonos'
    Si pQueTipo = 0
      Texto C12;'^Cliente'
    Sino
      Texto C12;'^Proveedor'
    Finsi
    Texto C14;'Vence'
    Texto C16;'Cambio'
    Imprime 1
    Texto '@TC{0,0,0}@L{-1}'
    Imprime 
    NEGRITAS FALSE

  FinEncab

// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// PRINCIPAL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Si pDelCliente = ' '
  tClientes.Busca Primero
  pDelCliente = tClientes(cCodigoCliente)
Finsi
  
Si pAlCliente = ' '
  tClientes.Busca Ultimo
  pAlCliente =  tClientes(cCodigoCliente)  
Finsi

tParametros.Busca Primero   

// Esta función se debe ejecutar antes del cuerpo del reporte, para inicializar algunas valores
// Globales para la biblioteca LibAdminPAQ.rpt
fIniFechasHistoria(tPeriodos)

// Obtener el Ejercicio y el Periodo que le corresponde a pFechaIni, para calcular saldo inicial  
// Se calculan al inicio y se pasan como parametros, para calcularlos solo una vez.
fEjercicioPeriodo(pDelaFecha;&gPeriodo;&gIdEjercicio;tPeriodos)  

Mientras [tClientes.Busca[pDelCliente & '..'  & pAlCliente ]; tClientes->Encontro ; tClientes.Busca Siguiente[1]]
  Si fDiscriminaCliente(tClientes) = 1
    Continua
  Finsi

  Si pIdMoneda != 1 Y pIdMoneda != tClientes(cIdMoneda)
    Continua
  FinSi

  // Se inicializan las variables de totales por cliente
  gTotalAbonosCliente = 0.0
  gTotalCargosCliente = 0.0    

  // Se inicializa la fecha con la que se realizaran las busquedas en el rango de fechas
  gFechaBusqueda = pDeLaFecha  

  // busca Algun docto , debe estar afectado y dentro del rango, Si Encontro algún registro
  // tDocumentos queda en el registro encontrado y gFechaBusqueda en la fecha en que se encontro
  BuscaAlgunReg(&gFechaBusqueda;pAlaFecha;tClientes(cIdClienteProveedor);&tDocumentos)

  // Todos aun sin Doctos o  el Cliente si tiene Doctos
  Si (pSoloConDoctos = 0) O ( tDocumentos->ENCONTRO  )          
    gSaldoCliente = fSaldoInicial(tClientes;gIdEjercicio;gPeriodo;pIdMoneda;pDelaFecha;pQueTipo;tAcumuladosLib;tDoctosLib;tTiposCambioLib)
    fImpDatosCliente(tClientes;gSaldoCliente)//  Imprime datos del cliente y su saldo inicial
      
    Mientras gFechaBusqueda <= pAlaFecha
      // Ahora si barre todos los movimientos a partir del primero que ya habia encontrado      
      Mientras [tDocumentos.BUSCA[@Str(tClientes(cIdClienteProveedor);0) &':'& gFechaBusqueda]; tDocumentos->ENCONTRO; tDocumentos.BUSCA SIGUIENTE[2]]  		
        Si fDiscriminaDocumento(tDocumentos) = 1
          Continua
        Finsi
        // Imprime el Documento 
        fImprimeDocumento(tDocumentos; &gSaldoCliente; pIdMoneda; pQueTipo)           
      FinMientras                      
      // Fin del mientras Documentos.busca
      gFechaBusqueda = fFechaSiguiente(gFechaBusqueda)
    FinMientras                         
    // mientras la fecha es menor      
    fImprimeResumen()
  Finsi                              
  // fin del tDocumentos->encontro
FinMientras                            
// Fin del mientras tClientes.busca

fImprimeGranTotal()

//  FIN DEL REPORTE

