// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// Reporte:     Resumen de Operaciones de Venta Detallada por Cliente   (Resprov)
//              Resumen de Operaciones de Compra Detallada por Proveedor
//
// Sistema:     ADMINPAQ  Versión v1.0 Windows
//
// Descripcion: 
//
// Consideraciones :
// Creación  :  Luis Palau Castañeda.  25/Agosto/2001
// Revisiones : 
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// Historia de modificaciones
//  Fecha      Nombre   IDLotus                     Descripcion
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// 17/05/2007   JAAM    N.C.147     Esquema de adicion de unidades de compra y venta  
// 23/05/2007		ELVS		N.C.146			Se agrega documento modelo cotización del proveedor.	 	
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

// *************************************************************************************************
// INCLUSION DE ARCHIVOS
// *************************************************************************************************
   Incluye LibAdminPaq.rpt

// *************************************************************************************************
// INICIO PARAMETROS
// *************************************************************************************************
    Parametro pEjercicio        = 0
    Parametro pMes              = 0   //enero,feb,...oct, nov,dic
    Parametro pClienteInicial   = '(Ninguno)'
    Parametro pClienteFinal     = 'z'
    Parametro pProductoInicial  = '(Ninguno)' 
    Parametro pProductoFinal    = 'z'
    Parametro pUnidad           = 0	//0 = Unidad Base·	1 = Unidad No Equivalente·	
                                    //2 = Seleccionar Unidad  3 = Unidad de Compra
                                    //4 = Unidad de Venta
    Parametro pIdUnidad         = 1 //base de datos de unidades (id)
    Parametro pIdMoneda         = 1 // 1 = ID moneda Peso mexicano    
    Parametro pTipoReporte      = 1 // 1     Resumen de Operaciones de Venta Detallada por Cliente
                                    // 2     Resumen de Operaciones de Compra Detallada por Proveedor
    Parametro pFechaInicial     = ' '
    Parametro pFechaFinal       = ' '
    
// *************************************************************************************************
// INICIO APERTURA TABLAS
// *************************************************************************************************
  UsaEmpresa tEmpresa;'AdminpaqW'

   // Parametros de la empresa
  UsaTabla tParametros = tEmpresa['mgw10000']     

  // Productos
  UsaTabla tProductos = tEmpresa['mgw10005']
  tProductos.Usaindice['cIdProducto']

  //Clientes
  UsaTabla tClientes = tEmpresa['mgw10002']
  tClientes.Usaindice['iCodigoTipo']

  // Movimientos
  UsaTabla tMovimientos = tEmpresa['mgw10010']
  tMovimientos.Usaindice['iDoctoNumeroMovto']

  // tMovimientosOcultos
  UsaTabla tMovimientosOcultos = tEmpresa['mgw10010'] Alias 'tMovtosOcultos' 
  tMovimientosOcultos.Usaindice['iMovtoOwnerMovto']

  //documentosDe
  UsaTabla tDocumentosDe = tEmpresa['mgw10007']
  tDocumentosDe.Usaindice['']

  //documentos
  UsaTabla tDocumentos = tEmpresa['mgw10008']
  tDocumentos.Usaindice['iClienteProveedorFecha']

  //conceptosdocumentos
  UsaTabla tconceptosDocumentos = tEmpresa['mgw10006']
  tconceptosDocumentos.Usaindice['']

  //unidades peso y med
  UsaTabla tUnidadesPM = tEmpresa['mgw10026']
  tUnidadesPM.Usaindice['']

  //EquivalenciasUnidades peso y med
  UsaTabla tEquivaleUnidadesPM = tEmpresa['mgw10027']
  tEquivaleUnidadesPM.Usaindice['']

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

  //ejercicio-mes
  UsaTabla tEjercicioPeriodo = tEmpresa['mgw10031']          
  tEjercicioPeriodo.Usaindice['']                     

  // TiposCambio 
  Usatabla tTiposCambio = tEmpresa['mgw10035']
  tTiposCambio.Usaindice['iMonedaFecha']                                 

// *************************************************************************************************
  tParametros.Busca Primero   
  // Esta función se debe ejecutar antes del cuerpo del reporte, para inicializar algunas valores
  // Globales para la biblioteca LibAdminPAQ.rpt
  tEjercicioPeriodo.Usaindice['cNumeroEjercicio']                     
  fIniFechasHistoria(tEjercicioPeriodo)
  tEjercicioPeriodo.Usaindice['']                     

// *************************************************************************************************
//DEFINICION DE COLUMNAS 
// *************************************************************************************************
  Columnas 20;1.95,0.15,1.80,0.15,1.5,0.15,3.9,0.15,0.75,0.15,2.4,0.15,1.95,0.15,2.4,0.15,2.4,0.15,0
//  Si pTipoReporte = 2 // Compras lleva una columna menos
//    Columnas 20;1.95,0.15,1.80,0.15,1.5,0.15,3.9,0.15,0.75,0.15,2.4,0.15,1.95,0.15,2.4,0.15,0 
//  FinSi

  UsaLetra 'Arial'
  Altura 9 
  [C0..C9].Decimales 0
  [C0..C9].Blanco ' '
  tMonedas.Busca[@str(pIdMoneda;0)]
  gDecimales = tMonedas(cDecimalesMoneda)
  [C10..C16].Coma
  [C10..C16].Decimales tParametros(cDecimalesUnidades) // Decimales para unidades
  [C10..C16].Blanco '0.00'
//  Si pTipoReporte = 1
    [C11,C13,C15,C17..C19].Blanco ''
//  Sino
//    [C11,C13,C15..C19].Blanco ''
//  Finsi

// *************************************************************************************************
//VARIABLES GLOBALES 
// *************************************************************************************************
  gDelaFecha = ''
  gAlaFecha  = ''
  vFechaFin = ''
  vFechaIni = ''
  gRenglon = '' 
  gTotalProd = ''
  gTotalClien = ''
  gTotaltotal = ''
  gTotalPaquetes = ''
  gTotalClientePaquetes = ''
  //gUnidad = pUnidad
  //gIdUnidad = pIdUnidad
  vTipoAcumulado = 0
  vImporteModelo  =  0
  vIdEjercicio = 0
  vDocumento = 0
  idRenglonIni = 5  //inicio de la hoja
  idRenglonFin = 5  //fin de la hoja (inicializacion)
  gNombreMoneda = tMonedas(cNombreMoneda)
 
  kMeses = 'Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic'[C0]
  //fecha de
  gDelaFecha = @str(pMes;0) 
  Mientras @len(gDelaFecha)<2
     gDelaFecha   = '0' & gDelaFecha 
  FinMientras
  gDelaFecha = @str(pEjercicio;0) &   gDelaFecha & '01'


// *************************************************************************************************
// FUNCIONES <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// *************************************************************************************************
// Función área sensible al contexto
// =================================================================================================
DefFunc ContextoDetalleDoctoProducto(aNumeroColumna; aValor)
    EJECUTA tEmpresa->SysDirDatos & '\Reportes\AdminPAQ\SegOpera.rtw';vFechaIni,vFechaFin,-1,pIdMoneda,pUnidad,pIdUnidad,pTipoReporte-1,1,@Escoge(aValor;0),@Escoge(aValor;1);tEmpresa->Directorio
FinFunc

// *************************************************************************************************
// Descripcion: Esta función recibe una fecha con formato ddmmaaaa y la convierte a formato	dd/mmm/aaaa
// Entradas :  Fecha : contiene la fecha AAAAMMDD
// Salida :    regresa una cadena con la fecha en formato DD/MMM/AAAA
// *************************************************************************************************
DefFunc fEditaFecha(aFecha)
Local lMes
Local lRegreso

  lMes = @INT(@SubStr(aFecha;4;2))
  lRegreso[0] = @SubStr(aFecha;6;2) & '/' & @Escoge(kMeses;lMes-1) & '/' & @SubStr(aFecha;0;4)
  Retorna lRegreso
FinFunc

// *************************************************************************************************
// Descripcion: imprime los totales generales de las variables gTotalProd
// Entradas :  
// Salida :    
// *************************************************************************************************
DefFunc  fTotalProd()
  Si PrimVez = 1
    Texto '@L{10,12,14,16}'
    imprime
    gTotalProd = ''[c0..c6]
    imprime gTotalProd
  Finsi
  gTotalProd = ''
Finfunc

// *************************************************************************************************
// Descripcion: imprime los totales  de las variable gRenglon y suma los totales 
// Entradas :  
// Salida :    
// *************************************************************************************************
DefFunc fRenglon(aTipoProducto; aIdDocumentoActual; aIdProducto)
  DEFREGION ContextoDetalleDoctoProducto
  [C4].REGIONINFO aIdDocumentoActual & ',' & aIdProducto
  imprime gRenglon
  gTotalProd  = gTotalProd + gRenglon
  Si aTipoProducto = 2
    gTotalClientePaquetes = gTotalClientePaquetes + gRenglon
  Sino
    gTotalClien = gTotalClien + gRenglon
  FinSI
  gRenglon = '' 
Finfunc

// *************************************************************************************************
// Descripcion: imprime los totales del cliente y del proveedor
// Entradas :  
// Salida :    
// *************************************************************************************************
DefFunc  fTotalCP()
  Si PrimVez = 1
    Texto '@L{10,12,14,16}'
    imprime
    gTotaltotal = gTotaltotal + gTotalClien
    gTotalPaquetes = gTotalPaquetes + gTotalClientePaquetes
    gTotalClien = ''[c0..c6]
    Si pTipoReporte = 1
      gTotalClien[6] = 'Total Cliente'
    Sino
      gTotalClien[6] = 'Total Proveedor'
    FinSi    
    imprime gTotalClien
    // Impresion del Total de Paquetes. Solo aplica para ventas
    Si pTipoReporte = 1
      Si (@Col(gTotalClientePaquetes;10) > 0) O (@Col(gTotalClientePaquetes;12) > 0) O (@Col(gTotalClientePaquetes;14) > 0) O (@Col(gTotalClientePaquetes;16) > 0)
        gTotalClientePaquetes = ''[c0..c6]
        gTotalClientePaquetes[6] = 'Total Cantidad de Paquetes'
        Imprime gTotalClientePaquetes        
      FinSi
    FinSi
  Finsi
  gTotalClien = '' 
  gTotalClientePaquetes =''
Finfunc

// *************************************************************************************************
// Descripcion: imprime los totales generales fin del reporte
// Entradas :  
// Salida :    
// *************************************************************************************************
DefFunc fTotalTotal()

  LTotalLinea = '==========================='[c0]
  Saltalin
  
  Texto c10; @col(LTotalLinea;0)
  Texto c12; @col(LTotalLinea;0)
  Texto c14; @col(LTotalLinea;0)
  Texto c16; @col(LTotalLinea;0)
  imprime
  gTotaltotal = ''[c0..c6]
  Si pTipoReporte = 1
    gTotalTotal[6] = 'Total Clientes'
  Sino
    gTotalTotal[6] = 'Total Proveedores'
  FinSi    
  imprime gTotaltotal

  // Impresion del Total de Paquetes. Solo aplica para ventas
  Si pTipoReporte = 1
    Si (@Col(gTotalPaquetes;10) > 0) O (@Col(gTotalPaquetes;12) > 0) O (@Col(gTotalPaquetes;14) > 0) O (@Col(gTotalPaquetes;16) > 0)
      gTotalPaquetes = ''[c0..c6]
      gTotalPaquetes[6] = 'Total Cantidad de Paquetes'
      Imprime gTotalPaquetes        
    FinSi
  FinSi
Finfunc

// *************************************************************************************************
// Descripcion: imprime los datos del Cliente
// Entradas :  
// Salida :    
// *************************************************************************************************
Deffunc ImprimeCP()
local vimprime
   Columnas 20;1.5,0.15,6.6,0.15,1.5,0.15,0.9,0.15,1.65,0.15,1.65,0.15,1.65,0.15,2.25,1.15,0
   texto ' '
   imprime 

   Negritas True
   Si pTipoReporte = 1
     vimprime = 'Cliente:' [c0]
   Sino
     vimprime = 'Proveedor:' [c0]
   Finsi
   vimprime = fMascarilla(tClientes(cCodigoCliente);tParametros(cMascarillaClientes))[c2]
   imprime vimprime

   vimprime = 'Nombre:' [c0]
   vimprime = tClientes(cRazonSocial) [c2]
   imprime vimprime
   Negritas False

   Columnas 20;1.95,0.15,1.80,0.15,1.5,0.15,3.9,0.15,0.75,0.15,2.4,0.15,1.95,0.15,2.4,0.15,2.4,0.15,0   
//   Si pTipoReporte = 2 // Compras lleva una columna menos
//     Columnas 20;1.95,0.15,1.80,0.15,1.5,0.15,3.9,0.15,0.75,0.15,2.4,0.15,1.95,0.15,2.4,0.15,0
//   FinSi
   aAnterior =''[c0]
Finfunc

// *************************************************************************************************
// Descripcion: imprime los datos del producto
// Entradas :  
// Salida :    
// *************************************************************************************************
Deffunc ImprimeP(aCodigo;aProducto;aidUnidadNoConvertible;aIdUnidadBase)

  Si @col(aCodigo;0) != @col(aAnterior;0)
   vimprime = ''[c4]
   Negritas True
   Columnas 20;1.5,0.15,6.6,0.15,0.75,0.15,0.9,0.15,1.65,0.15,1.65,0.15,1.65,0.15,0,0,0
   vimprime = 'Producto:' [c0]
   vimprime = fMascarilla( @col(aCodigo;0);tParametros(cMascarillaProducto))[c2]
   imprime vimprime
   vimprime = 'Nombre:' [c0]
   vimprime = @col(aProducto;0) [c2]
  
   //busca unidad base
   //SI el Producto tiene Unidad de Medida NO Equivalente  "Y" pUnidad = 1
   Si  pUnidad = 1 y @col(aidUnidadNoConvertible;0) != 0
     tUnidadesPM.busca[@str(@col(acidUnidadNoConvertible;0);0)]
   Sino
     Si pUnidad = 2 
       tUnidadesPM.busca[@str(@col(pIdUnidad;0);0)]
     Sino
       tUnidadesPM.busca[@str(@col(aIdUnidadBase;0);0)]
     Finsi
   Finsi

   si tUnidadesPM->encontro
     vimprime  =tUnidadesPM(cDespliegue)[c4]
     Si @col(vimprime;4)='(N)'
        vimprime = ''[c4]
     Finsi
   finsi
   
   imprime vimprime
   Negritas False

   Columnas 20;1.95,0.15,1.80,0.15,1.5,0.15,3.9,0.15,0.75,0.15,2.4,0.15,1.95,0.15,2.4,0.15,2.4,0.15,0   
//   Si pTipoReporte = 2 // Compras lleva una columna menos
//     Columnas 20;1.95,0.15,1.80,0.15,1.5,0.15,3.9,0.15,0.75,0.15,2.4,0.15,1.95,0.15,2.4,0.15,0
//   FinSi
  Finsi 
  aAnterior = @col(aCodigo;0)[c0]
Finfunc

// *************************************************************************************************
// Descripcion: imprime los datos del proveedor
// Entradas :  
// Salida :    
// *************************************************************************************************
Deffunc ImprimeA()
Local vimprime

   Si PrimVez = 0
     ImprimeCP()
     PrimVez = 1
   Finsi
Finfunc

// *************************************************************************************************
// Descripcion: despues de buscar el id del peirodo se extrae las fechas correspondientres
//              a los mese 1,2,3,4..10,11,12 
// Entradas :   mes en formato numerico
// Salida :   fecha del mes
// *************************************************************************************************
DefFunc fFechaEjercicioPeriodo(aMes) 
  Local lRegreso
  Escoge   aMes
    caso 1
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo1)
    fincaso
    caso 2
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo2)
    fincaso
    caso 3
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo3)
    fincaso
    caso 4
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo4)
    fincaso
    caso 5
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo5)
    fincaso
    caso 6
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo6)
    fincaso
    caso 7
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo7)
    fincaso
    caso 8
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo8)
    fincaso
    caso 9
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo9)
    fincaso
    caso 10
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo10)
    fincaso
    caso 11
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo11)
    fincaso
    caso 12
      lRegreso = tEjercicioPeriodo(cFecIniPeriodo12)
    fincaso
  FinEscoge
  Retorna lRegreso
Finfunc

// *************************************************************************************************
// Descripcion: lista la hoja de trabajo
// Entradas :  rango de renglones
// Salida :   
// *************************************************************************************************
DefFunc Imprimehoja()//(idRenglonIni ;idRenglonFin )
local idtemp
  idtemp = idRenglonIni

  Mientras  @col(idtemp;0) <@col(idRenglonFin;0)
    //imprimimos el titulo del producto
    Si pUnidad = 3 O pUnidad = 4
      tEquivaleUnidadesPM.busca[@col({idtemp};13) & ':' & @col({idtemp};14)]
      Si tEquivaleUnidadesPM->encontro
        {idtemp}[5] = @col({idtemp};5) * tEquivaleUnidadesPM(cFactorConversion)
        {idtemp}[6] = @col({idtemp};6) * tEquivaleUnidadesPM(cFactorConversion)
        {idtemp}[7] = @col({idtemp};7) * tEquivaleUnidadesPM(cFactorConversion)
        {idtemp}[8] = @col({idtemp};8) * tEquivaleUnidadesPM(cFactorConversion)
      FinSi
    FinSi   
    ImprimeP(@col({idtemp};10);@col({idtemp};12);@col({idtemp};13);@col({idtemp};14))
    gRenglon [0]= @col({idtemp};11)//fecha   
    gRenglon[0] = fEditaFecha(@col(gRenglon;0))
    gRenglon [2]= @col({idtemp};2)
    gRenglon [4]= @col({idtemp};3)
    gRenglon [6]= @col({idtemp};4)
    gRenglon [10]= @col({idtemp};5)
    gRenglon [12]= @col({idtemp};6)
    gRenglon [14]= @col({idtemp};7)
    gRenglon [16]= @col({idtemp};8)

    Si pTipoReporte = 1
      Si @col(gRenglon;10)=0 y @col(gRenglon;12)=0 y @col(gRenglon;14)=0 y @col(gRenglon;16)=0
        gRenglon= ''
      Sino 
        fRenglon(@col({idtemp};15); @col({idtemp};16); @col({idtemp};17))
      Finsi
    Sino
      //Si @col(gRenglon;10)=0 y @col(gRenglon;12)=0 y @col(gRenglon;14)=0 
      Si @col(gRenglon;10)=0 y @col(gRenglon;12)=0 y @col(gRenglon;14)=0 y @col(gRenglon;16)=0
        gRenglon= ''
      Sino 
        fRenglon(@col({idtemp};15); @col({idtemp};16); @col({idtemp};17))
      Finsi
    Finsi
    {idtemp} = ''[c0..c17]
    idtemp [0] = @col(idtemp;0) +1
  finmientras
  idRenglonFin = idRenglonIni
FinFunc

// *************************************************************************************************
// Descripcion:  busca en la hoja de calculo si el producto ya existe y si no lo inserta
// Entradas :   el producto
// Salida :   id del renglon
// *************************************************************************************************
DefFunc fAgregaProducto(cProducto)  
local idtemp
  vRegreso = 0
  idtemp = idRenglonIni 
  Mientras  @col(idtemp;0)<@col(idRenglonFin;0)
    Si @col(cProducto;0) = @col({idtemp};1)
      vRegreso = idtemp
      FinCiclo
    finsi
    idtemp = @col(idtemp;0) +1[c0]
  Finmientras

  Si vRegreso = 0  
    {idtemp}[1] = @col(cProducto;0)
    vRegreso = idtemp
    idRenglonFin = vRegreso + 1
  Finsi
FinFunc

// *************************************************************************************************
//	Esta función ordena los elemantos de la hoja de trabajo basados en el código
// Utiliza el algoritmo de Buble Sort
DefFunc OrdenaHoja(vInicio; vCuantos)
Local vTmp, vj, vi, vc1, vc2

  vi = 0[C0]
  Mientras vi < vCuantos - 1
     vj = 0[C0]
     Mientras vj < vCuantos - vi - 1
        vc1 = vInicio + vj
        vc2 = vInicio + vj + 1
        // verifica la columna a comparar
        Si @Col({vc1};1) > @Col({vc2};1)
            vTmp = {vc1}[C1..C17]
            {vc1} = {vc2}[C1..C17]
            {vc2} = vTmp[C1..C17]
        Finsi
        vj = vj + 1[C0]
     FinMientras
     vi = vi + 1[C0]
  FinMientras   
FinFunc

// *************************************************************************************************
//ENCABEZADO 
// *************************************************************************************************
  Encab
    Texto '@TC{255,0,0}@S{8}AdminPAQ' 
    Hoja '"@TC{0,0,0}@S{8}Página: '
    Imprime

    Texto '@TC{0,0,0}@S{8}Moneda: '& gNombreMoneda
    Texto '^@TC{0,0,0}@S{22}' & tEmpresa->Nombre
    Texto '"@TC{0,0,0}@S{8}Fecha: ' & fEditaFecha(@Hoy())
    Imprime

    Si pTipoReporte = 1
      Texto '^@TC{0,0,0}@S{16}' & 'Resumen de Operaciones de Venta Detallada por Cliente'
    Sino
      Texto '^@TC{0,0,0}@S{16}' & 'Resumen de Operaciones de Compra Detallada por Proveedor'
    Finsi

    Texto '"@TC{0,0,0}@S{8}Hora: ' & @Hora()
    Imprime

    Si pEjercicio = 0 Y pMes = 0
      Texto '^@TC{0,0,0}@S{16}'& 'Del: ' & fEditaFecha(pFechaInicial) & ' al: ' & fEditaFecha(pFechaFinal)
    Sino
      Texto '^@TC{0,0,0}@S{16}'& 'Periodo: ' & @substr(fEditaFecha(gDelaFecha);3;20)
    FinSi
    Imprime 
    NEGRITAS TRUE
    Altura 10
    // Fecha       Serie Folio    Concepto                        Cotizado       Pedido      Remisiondo     Facturado         
    // Fecha       Serie Folio    Concepto                        Cotizado			 Ordenado    Consignado     Comprado
    Columnas 20;1.95,0.15,1.80,0.15,1.5,0.15,3.9,0.15,0.75,0.15,2.4,0.15,1.95,0.15,2.4,0.15,2.4,0.15,0   
    // Inicia N.D.0903 y 0905
//    Si pTipoReporte = 2 // Compras lleva una columna menos
//      Columnas 20;1.95,0.15,1.80,0.15,1.5,0.15,3.9,0.15,0.75,0.15,2.4,0.15,1.95,0.15,2.4,0.15,0
//    FinSi
    // Fin N.D.0903 y 0905

    Texto '@TC{0,0,0}@L{-1}'
    Imprime 

    Texto C0;'Fecha'
    Texto C2;'Serie'
    Texto c4;'Folio' 
    Texto c6;'Concepto' 
    Si pTipoReporte = 1
      Texto c10;'^Cotizado' 
      Texto c12;'^Pedido'
      Texto c14;'^Remisionado'
      Texto c16;'^Facturado'
    Sino
			//N.C.146
			Texto c10;'^Cotizado' 
      Texto c12;'^Ordenado' 
      Texto c14;'^Consignado'
      Texto c16;'^Comprado'
//      Texto c16;''
    Finsi

    Imprime

    Texto '@TC{0,0,0}@L{-1}'
    Imprime 
    NEGRITAS FALSE
    Altura 10
  FinEncab


// *************************************************************************************************
// PRINCIPAL
// *************************************************************************************************
  gRenglon = '' 
  gTotalProd = ''
  gTotalClien = ''

  //buscamos el id del ejericio-mes
  tEjercicioPeriodo.busca primero
  Mientras tEjercicioPeriodo->encontro
    Si gDelaFecha >= tEjercicioPeriodo(cFecIniPeriodo1) y gDelaFecha <= tEjercicioPeriodo(cFechaFinal)
      vIdEjercicio = tEjercicioPeriodo(cIdEjercicio)
      vFechaIni = fFechaEjercicioPeriodo(pMes) 
      si Pmes = 12
        vFechaFin = tEjercicioPeriodo(cFechafinal)
      sino
        vFechaFin = fFechaEjercicioPeriodo(pMes+1) 
        vFechaFin = fFechaAnterior(vFechaFin)
      finsi
    Finsi
    tEjercicioPeriodo.Saltareg[1]
  FinMientras

  Si pEjercicio = 0 Y pMes = 0
    vFechaIni = pFechaInicial
    vFechaFin = pFechaFinal
  FinSi

  Si @str(pClienteInicial;0) = ' '
    tClientes.busca Primero
  Sino
    tClientes.busca[@str(pClienteInicial;0) & ':']
  Finsi

  Mientras tClientes->Encontro
    Si @str(pClienteFinal;0) != ' '
      Si tClientes(cCodigoCliente)> @str(pClienteFinal;0)
        Finciclo
      Finsi 
    FinSi
    // Se salta el Cliente NINGUNO
    Si tClientes(cIdClienteProveedor) = 0
      tClientes.Saltareg[1]
      Continua  
    Finsi

    // Si se requieren los clientes y no se trata de un cliente:(1=cliente,2=cliente/provedor,3= proveedor)
    Si  (pTipoReporte = 1 )  Y (tClientes(cTipoCliente) > 2) 
      tClientes.saltareg[1]
      Continua
    Finsi
    // Si se requieren los Proveedores y no se trata de un Proveedor
    Si (pTipoReporte = 2 )  Y (tClientes(cTipoCliente) < 2) 
      tClientes.saltareg[1]
      Continua
    Finsi

    PrimVez = 0

    // N.D.4048 Búsqueda de un movimiento del producto a la fecha inicial del reporte
    gFechaBusqueda = vFechaIni
    // NOTA: Es obligatorio volver a fijar el índice a fin de que las búsquedas parciales funcionen correctamente
    tDocumentos.Usaindice['iClienteProveedorFecha']
    tDocumentos.Busca[tClientes(cIdClienteProveedor) & ':' & gFechaBusqueda]
    Si !tDocumentos->ENCONTRO
      // Busquedas parciales: Cursor en el registro más cercano que cumple con la llave
      // NOTA: La propiedad Llave de la tabla nos regresa la llave más cercana que cumple con el criterio de la búsqueda
      //       La llave está en formato cadena y no tiene ningún separador entre los campos, por lo que es necesario revisar
      //      en FoxPro la definición del índice para descomponer los elementos de la Llave
      // Revisar si la llave actual corresponde al Producto / Almacén y al Rango de Fechas.
      Si tClientes(cIdClienteProveedor) = @Val(@SUBSTR(tDocumentos->Llave;0;11))
        Si @SUBSTR(tDocumentos->Llave;11;8) >= vFechaIni Y @SUBSTR(tDocumentos->Llave;11;8) <= vFechaFin
          // Realizar nuevamente la búsqueda a fin de posicionarnos en el registro y activar la propiedad Encontro
          gFechaBusqueda = @SUBSTR(tDocumentos->Llave;11;8)
          tDocumentos.Busca[tClientes(cIdClienteProveedor) & ':' & gFechaBusqueda]
        FinSi
      FinSi        
    FinSi

    Mientras tDocumentos->Encontro Y (tDocumentos(cFecha) <= vFechaFin)
      Si tDocumentos(cAfectado) != 1// NO AFECTADO
        tDocumentos.BUSCA SIGUIENTE[1]
        Continua
      FinSi
      Si tDocumentos(cCancelado) != 0// CANCELADOS
        tDocumentos.BUSCA SIGUIENTE[1]
        Continua
      FinSi

      tMovimientos.busca[@str(tDocumentos(cIdDocumento);0)]
      Mientras tMovimientos->encontro
        Si tMovimientos(cIdDocumento) != tDocumentos(cIdDocumento)
          Finciclo
        FinSi
        Si pTipoReporte = 1 // FBCD descarta los que no son de venta, incluso las notas de venta
          Si tMovimientos(cIdDocumentoDe) > 5 Y tMovimientos(cIdDocumentoDe)!= 35
            tMovimientos.saltareg[1]
            Continua
          Finsi
        SiNo
          Si tMovimientos(cIdDocumentoDe) < 17 o (tMovimientos(cIdDocumentoDe) > 19 y tMovimientos(cIdDocumentoDe) != 38)
            tMovimientos.saltareg[1]
            Continua
          Finsi
        Finsi

        tProductos.busca[@str(tMovimientos(cIdProducto);0)]
        Si tProductos->encontro y (tProductos(cCodigoProducto) >= @str(pProductoInicial;0)o @str(pProductoInicial;0)=' ') y (tProductos(cCodigoProducto) <= @str(pProductoFinal;0)o @str(pProductoFinal;0)=' ')
          // Si es uno de los servicios para facturar notas de venta no incluirlo
          Si tProductos(cIdProducto) = tParametros(cIdProdu01)
            tMovimientos.saltareg[1]
            Continua
          FinSi
          Si tProductos(cIdProducto) = tParametros(cIdProdu02)
            tMovimientos.saltareg[1]
            Continua
          FinSi
          Si tProductos(cIdProducto) = tParametros(cIdProdu03)
            tMovimientos.saltareg[1]
            Continua
          FinSi
          Si tProductos(cIdProducto) = tParametros(cIdProdu04)
            tMovimientos.saltareg[1]
            Continua
          FinSi
          Si tProductos(cIdProducto) = tParametros(cIdProdu05)
            tMovimientos.saltareg[1]
            Continua
          FinSi

          //imprime el producto
          Si  pUnidad = 1 y tProductos(cidUnidadNoConvertible) != 0
            Si pTipoReporte = 1 y tMovimientos(cUnidadesNC)!=0 y ( tMovimientos(cIdDocumentoDe) < 5 o tMovimientos(cIdDocumentoDe) = 35 )
              ImprimeA()
            Sino
              Si pTipoReporte = 2 y tMovimientos(cUnidadesNC)!=0 y ( tMovimientos(cIdDocumentoDe) = 38 o tMovimientos(cIdDocumentoDe) = 17 o tMovimientos(cIdDocumentoDe) = 18 o tMovimientos(cIdDocumentoDe) = 19) 
                ImprimeA()
              Finsi
            Finsi
          Sino
            Si pTipoReporte = 1 y tMovimientos(cUnidades)!=0 y ( tMovimientos(cIdDocumentoDe) < 5 o tMovimientos(cIdDocumentoDe) = 35 )             
              ImprimeA()
            Sino
              Si pTipoReporte = 2 y tMovimientos(cUnidades)!=0 y ( tMovimientos(cIdDocumentoDe) = 38 o tMovimientos(cIdDocumentoDe) = 17 o tMovimientos(cIdDocumentoDe) = 18 o tMovimientos(cIdDocumentoDe) = 19)
                ImprimeA()
              FinSi
            Finsi
          Finsi

          // Se agregó el IdDoctoDe para hacer única la llave y que no se mezclen los importes
          // de movtos de diferentes tipos de doctos. (DRdA)
          fAgregaProducto(tProductos(cCodigoProducto) &'..'& tMovimientos(cFecha) &'..'& tDocumentos(cFolio) &'..'& tMovimientos(cIdDocumentoDe))
          //regresa el renglon del susodicho producto
          //Movimiento (Fecha, Serie, Folio, Concepto)
          idRenglon = vRegreso

          //SI el Producto tiene Unidad de Medida y Peso NO Equivalente "Y" pUnidad = 1
          Si  pUnidad = 1 y tProductos(cidUnidadNoConvertible) != 0
            Si tMovimientos(cIdDocumentoDe) = 1  
              vCotizaciones = tMovimientos(cUnidadesNC)
            Finsi
            Si tMovimientos(cIdDocumentoDe) = 2
              vPedidos = tMovimientos(cUnidadesNC)
            Finsi
            Si tMovimientos(cIdDocumentoDe) = 3
              vRemisiones = tMovimientos(cUnidadesNC)
            Finsi
            Si tMovimientos(cIdDocumentoDe) = 4 O tMovimientos(cIdDocumentoDe) = 35 // FBCS POS
              vFacturas = tMovimientos(cUnidadesNC)
            Finsi
						//N.C.146
            Si tMovimientos(cIdDocumentoDe) = 38
              vCotizacionesProv = tMovimientos(cUnidadesNC)
            Finsi
            Si tMovimientos(cIdDocumentoDe) = 17
              vOrdenesCompra = tMovimientos(cUnidadesNC)
            Finsi
            Si tMovimientos(cIdDocumentoDe) = 18
              vConsignaciones = tMovimientos(cUnidadesNC)
            Finsi
            Si tMovimientos(cIdDocumentoDe) = 19
              vCompras = tMovimientos(cUnidadesNC)
            Finsi
          SiNo
            Si tMovimientos(cIdDocumentoDe) = 1  
              vCotizaciones = tMovimientos(cUnidades)
            Finsi
            Si tMovimientos(cIdDocumentoDe) = 2
              vPedidos = tMovimientos(cUnidades)
            Finsi
            Si tMovimientos(cIdDocumentoDe) = 3
              vRemisiones = tMovimientos(cUnidades)
            Finsi
            Si (tMovimientos(cIdDocumentoDe) = 4 O tMovimientos(cIdDocumentoDe) = 35) //FBCS POS
              vFacturas = tMovimientos(cUnidades)
            Finsi
						//N.C.146
            Si tMovimientos(cIdDocumentoDe) = 38
              vCotizacionesProv = tMovimientos(cUnidades)
            Finsi
            Si tMovimientos(cIdDocumentoDe) = 17
              vOrdenesCompra = tMovimientos(cUnidades)
            Finsi
            Si tMovimientos(cIdDocumentoDe) = 18
              vConsignaciones = tMovimientos(cUnidades)
            Finsi
            Si tMovimientos(cIdDocumentoDe) = 19
              vCompras = tMovimientos(cUnidades)
            Finsi						
          Finsi
          //Convertir Importes en la Moneda del Reporte
          Si pUnidad = 2  Y tProductos(cidUnidadBase) != 0
            //el Producto tiene Unidad de Medida y Peso
            // Unificar vCantidad de acuerdo a la unidad deseada en el reporte.
            tEquivaleUnidadesPM.busca[@str(tProductos(cIdUnidadBase);0) &':'& @str(pIdUnidad;0)]
            Si tEquivaleUnidadesPM->encontro
              Si tMovimientos(cIdDocumentoDe) = 1
                vCotizaciones = vCotizaciones * tEquivaleUnidadesPM(cFactorConversion)
              Finsi
              Si tMovimientos(cIdDocumentoDe) = 2
                vPedidos = vPedidos *  tEquivaleUnidadesPM(cFactorConversion)
              Finsi
              Si tMovimientos(cIdDocumentoDe) = 3
                vRemisiones = vRemisiones * tEquivaleUnidadesPM(cFactorConversion)
              Finsi
              Si tMovimientos(cIdDocumentoDe) = 4 o tMovimientos(cIdDocumentoDe)=35 // FBCS POS
                vFacturas = vFacturas * tEquivaleUnidadesPM(cFactorConversion)
              Finsi
							//N.C.146
              Si tMovimientos(cIdDocumentoDe) = 38
                vCotizacionesProv = vCotizacionesProv * tEquivaleUnidadesPM(cFactorConversion) 
              Finsi
              Si tMovimientos(cIdDocumentoDe) = 17
                vOrdenesCompra = vOrdenesCompra* tEquivaleUnidadesPM(cFactorConversion) 
              Finsi
              Si tMovimientos(cIdDocumentoDe) = 18
                vConsignaciones = vConsignaciones * tEquivaleUnidadesPM(cFactorConversion) 
              Finsi
              Si tMovimientos(cIdDocumentoDe) = 19
                vCompras = vCompras * tEquivaleUnidadesPM(cFactorConversion) 
              Finsi
            Finsi
          Finsi  

          {idRenglon}[2] = tDocumentos(cSerieDocumento)
          {idRenglon}[3] = tDocumentos(cFolio)

          tDocumentosDe.busca[@str(tdocumentos(cIdDocumentoDe);0)]
          Si tDocumentosDe->encontro
            {idRenglon}[4] = tDocumentosDe(cDescripcion)
          Finsi
          
          Si pTipoReporte = 1
            {idRenglon}[5] = @col({idRenglon};5) + @col(vCotizaciones;0)
            {idRenglon}[6] = @col({idRenglon};6) + @col(vPedidos;0)
            {idRenglon}[7] = @col({idRenglon};7) + @col(vRemisiones;0)
            {idRenglon}[8] = @col({idRenglon};8) + @col(vfacturas;0)
            //duplicar información para agilizar el reporte.
            {idRenglon}[10]= tProductos(cCodigoProducto)
            {idRenglon}[11]= tMovimientos(cFecha)
            {idRenglon}[12]= tproductos(cNombreProducto)
            {idRenglon}[13]= tProductos(cidUnidadNoConvertible)
            {idRenglon}[14]= tProductos(cIdUnidadBase)
            Si pUnidad = 3 Y tProductos(cIdUnidadCompra) != 0
              {idRenglon}[13]= tProductos(cIdUnidadBase)
              {idRenglon}[14]= tProductos(cIdUnidadCompra)
            FinSi
            Si pUnidad = 4 Y tProductos(cIdUnidadVenta) != 0
              {idRenglon}[13]= tProductos(cIdUnidadBase)
              {idRenglon}[14]= tProductos(cIdUnidadVenta)
            FinSi
            {idRenglon}[15]= tProductos(cTipoProducto)
            {idRenglon}[16]= tDocumentos(cIdDocumento)
            {idRenglon}[17]= tProductos(cIdProducto)
            vCotizaciones = 0
            vPedidos = 0
            vRemisiones = 0
            vfacturas = 0
          SiNo
						//N.C.146
            {idRenglon}[5] = @col({idRenglon};5) + @col(vCotizacionesProv;0)
            {idRenglon}[6] = @col({idRenglon};6) + @col(vOrdenesCompra;0)
            {idRenglon}[7] = @col({idRenglon};7) + @col(vConsignaciones;0)
            {idRenglon}[8] = @col({idRenglon};8) + @col(vCompras;0)
            //duplicar información para agilizar el reporte.
            {idRenglon}[10]= tProductos(cCodigoProducto)
            {idRenglon}[11]= tMovimientos(cFecha)
            {idRenglon}[12]= tproductos(cNombreProducto)
            {idRenglon}[13]= tProductos(cidUnidadNoConvertible)
            {idRenglon}[14]= tProductos(cIdUnidadBase)
            Si pUnidad = 3 Y tProductos(cIdUnidadCompra) != 0
              {idRenglon}[13]= tProductos(cIdUnidadBase)
              {idRenglon}[14]= tProductos(cIdUnidadCompra)
            FinSi
            Si pUnidad = 4 Y tProductos(cIdUnidadVenta) != 0
              {idRenglon}[13]= tProductos(cIdUnidadBase)
              {idRenglon}[14]= tProductos(cIdUnidadVenta)
            FinSi
            {idRenglon}[15]= tProductos(cTipoProducto)
            {idRenglon}[16]= tDocumentos(cIdDocumento)
            {idRenglon}[17]= tProductos(cIdProducto)
            vOrdenesCompra = 0
            vConsignaciones = 0
            vCompras = 0
            vPendientes = 0
						//N.C.146
						vCotizacionesProv = 0 
          Finsi
        Finsi  // Si el producto del movimiento real pertenece al rango

        // Recorrer los movtos ocultos 
        tMovimientosOcultos.busca[@str(tMovimientos(cidMovimiento);0)]
        Mientras tMovimientosOcultos->encontro
          Si tMovimientosOcultos(cIdMovtoOwner)!=tMovimientos(cidMovimiento)
            Finciclo
          Finsi 

          Si pTipoReporte = 1     // FBCS POS
            Si (tMovimientos(cIdDocumentoDe) > 5 Y tMovimientos(cIdDocumentoDe) != 35)
              tMovimientos.saltareg[1]
              Continua
            Finsi
          Sino
            Si tMovimientos(cIdDocumentoDe) < 17 o (tMovimientos(cIdDocumentoDe) > 19 Y tMovimientos(cIdDocumentoDe) != 38)
              tMovimientos.saltareg[1]
              Continua
            Finsi
          Finsi

          //fact             // FBCS POS
          Si  (tMovimientosOcultos(cIdDocumentoDe) = 4 O tMovimientosOcultos(cIdDocumentoDe)= 35 ) y (tMovimientosOcultos(cTipoTraspaso)=4)
            tMovimientosOcultos.Saltareg[1]  
            Continua
          Finsi
          //ped. cot
          Si (tMovimientosOcultos(cIdDocumentoDe) = 1 o tMovimientosOcultos(cIdDocumentoDe) = 2) y (tMovimientosOcultos(cTipoTraspaso)=4)
            tMovimientosOcultos.Saltareg[1]  
            Continua
          Finsi
          //remisiones
          Si (tMovimientosOcultos(cIdDocumentoDe) = 3 ) y (tMovimientosOcultos(cTipoTraspaso)!=2)
            tMovimientosOcultos.Saltareg[1]  
            Continua
          Finsi
          //ord. compra ,consig, cotizaciones del prov
          Si (tMovimientosOcultos(cIdDocumentoDe) = 17 o tMovimientosOcultos(cIdDocumentoDe) = 18 o tMovimientosOcultos(cIdDocumentoDe) = 38) y (tMovimientosOcultos(cTipoTraspaso)=4)
            tMovimientosOcultos.Saltareg[1]  
            Continua
          Finsi

          tProductos.busca[@str(tMovimientosOcultos(cIdProducto);0)]
          Si tProductos->encontro y (tProductos(cCodigoProducto) >= @str(pProductoInicial;0)o @str(pProductoInicial;0)=' ') y (tProductos(cCodigoProducto) <= @str(pProductoFinal;0)o @str(pProductoFinal;0)=' ')
            // Si es uno de los servicios para facturar notas de venta no incluirlo
            Si tProductos(cIdProducto) = tParametros(cIdProdu01)
              tMovimientosOcultos.saltareg[1]
              Continua
            FinSi
            Si tProductos(cIdProducto) = tParametros(cIdProdu02)
              tMovimientosOcultos.saltareg[1]
              Continua
            FinSi
            Si tProductos(cIdProducto) = tParametros(cIdProdu03)
              tMovimientosOcultos.saltareg[1]
              Continua
            FinSi
            Si tProductos(cIdProducto) = tParametros(cIdProdu04)
              tMovimientosOcultos.saltareg[1]
              Continua
            FinSi
            Si tProductos(cIdProducto) = tParametros(cIdProdu05)
              tMovimientosOcultos.saltareg[1]
              Continua
            FinSi

            //imprime el producto
            Si  pUnidad = 1 y tProductos(cidUnidadNoConvertible) != 0
              Si pTipoReporte = 1 y tMovimientosOcultos(cUnidadesNC)!=0 y (tMovimientosOcultos(cIdDocumentoDe)<5 O tMovimientosOcultos(cIdDocumentoDe)=35) // FBCS POS
                ImprimeA()
              Sino
                Si pTipoReporte = 2 y tMovimientosOcultos(cUnidadesNC)!=0 y (tMovimientosOcultos(cIdDocumentoDe) = 38 o tMovimientosOcultos(cIdDocumentoDe) = 17 O tMovimientosOcultos(cIdDocumentoDe) = 18 o tMovimientosOcultos(cIdDocumentoDe) = 19) 
                  ImprimeA()
                Finsi
              Finsi
            Sino
              Si pTipoReporte = 1 y tMovimientosOcultos(cUnidades)!=0 Y (tMovimientosOcultos(cIdDocumentoDe)<5 O tMovimientosOcultos(cIdDocumentoDe)=35) // FBCS POS
                ImprimeA()
              Sino
                Si pTipoReporte = 2 y tMovimientosOcultos(cUnidades)!=0 y(tMovimientosOcultos(cIdDocumentoDe) = 38 o tMovimientosOcultos(cIdDocumentoDe) = 17 o tMovimientosOcultos(cIdDocumentoDe) = 18 o tMovimientosOcultos(cIdDocumentoDe) = 19 )
                  ImprimeA()
                Finsi
              Finsi
            Finsi

            // Se agregó el IdDoctoDe para hacer única la llave y que no se mezclen los importes
            // de movtos de diferentes tipos de doctos. (DRdA)
            fAgregaProducto(tProductos(cCodigoProducto) &'..'& tMovimientosOcultos(cFecha) &'..'& tDocumentos(cFolio) &'..'& tMovimientosOcultos(cIdDocumentoDe))
            //regresa el renglon del susodicho producto
            //Movimiento (Fecha, Serie, Folio, Concepto)
            idRenglon = vRegreso
    
            // SI el Producto tiene Unidad de Medida y Peso NO Equivalente "Y" pUnidad = 1
            Si pUnidad = 1 y tProductos(cidUnidadNoConvertible) != 0
              Si tMovimientosOcultos(cIdDocumentoDe) = 1  
                vCotizaciones = tMovimientosOcultos(cUnidadesNC)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 2
                vPedidos = tMovimientosOcultos(cUnidadesNC)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 3
                vRemisiones = tMovimientosOcultos(cUnidadesNC)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 4 O tMovimientosOcultos(cIdDocumentoDe) = 35 // FBCS POS
                vFacturas = tMovimientosOcultos(cUnidadesNC)
              Finsi
							//N.C.146
              Si tMovimientosOcultos(cIdDocumentoDe) = 38
                vCotizacionesProv = tMovimientosOcultos(cUnidadesNC)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 17
                vOrdenesCompra = tMovimientosOcultos(cUnidadesNC)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 18
                vConsignaciones = tMovimientosOcultos(cUnidadesNC)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 19
                vCompras = tMovimientosOcultos(cUnidadesNC)
              Finsi
            Sino
              Si tMovimientosOcultos(cIdDocumentoDe) = 1  
                vCotizaciones = tMovimientosOcultos(cUnidades)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 2
                vPedidos = tMovimientosOcultos(cUnidades)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 3
                vRemisiones = tMovimientosOcultos(cUnidades)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 4 O tMovimientosOcultos(cIdDocumentoDe) = 35 // FBCS POS
                vFacturas = tMovimientosOcultos(cUnidades)
              Finsi
							//N.C.146
              Si tMovimientosOcultos(cIdDocumentoDe) = 38
                vCotizacionesProv = tMovimientosOcultos(cUnidades)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 17
                vOrdenesCompra = tMovimientosOcultos(cUnidades)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 18
                vConsignaciones = tMovimientosOcultos(cUnidades)
              Finsi
              Si tMovimientosOcultos(cIdDocumentoDe) = 19
                vCompras = tMovimientosOcultos(cUnidades)
              Finsi
            Finsi

              //Convertir Importes en la Moneda del Reporte
            Si pUnidad = 2  Y tProductos(cidUnidadBase) != 0
              //el Producto tiene Unidad de Medida y Peso
              // Unificar vCantidad de acuerdo a la unidad deseada en el reporte.
              // EquivalenciaUnidadMedidayPeso.BUSCA[Productos(cIdUnidadBase)+cIdUnidad]	
              tEquivaleUnidadesPM.busca[@str(tProductos(cIdUnidadBase);0) &':'& @str(pIdUnidad;0)]
              Si tEquivaleUnidadesPM->encontro
                Si tMovimientosOcultos(cIdDocumentoDe) = 1
                  vCotizaciones = vCotizaciones * tEquivaleUnidadesPM(cFactorConversion)
                Finsi
                Si tMovimientosOcultos(cIdDocumentoDe) = 2
                  vPedidos = vPedidos *  tEquivaleUnidadesPM(cFactorConversion)
                Finsi
                Si tMovimientosOcultos(cIdDocumentoDe) = 3
                  vRemisiones = vRemisiones * tEquivaleUnidadesPM(cFactorConversion)
                FinSi
                Si (tMovimientosOcultos(cIdDocumentoDe) = 4 O tMovimientosOcultos(cIdDocumentoDe) = 35) // FBCS POS
                  vFacturas = vFacturas * tEquivaleUnidadesPM(cFactorConversion)
                Finsi
								//N.C.146
                Si tMovimientosOcultos(cIdDocumentoDe) = 38
                  vCotizacionesProv = vCotizacionesProv * tEquivaleUnidadesPM(cFactorConversion) 
                Finsi
                Si tMovimientosOcultos(cIdDocumentoDe) = 17
                  vOrdenesCompra = vOrdenesCompra* tEquivaleUnidadesPM(cFactorConversion) 
                Finsi
                Si tMovimientosOcultos(cIdDocumentoDe) = 18
                  vConsignaciones = vConsignaciones * tEquivaleUnidadesPM(cFactorConversion) 
                Finsi
                Si tMovimientosOcultos(cIdDocumentoDe) = 19
                  vCompras = vCompras * tEquivaleUnidadesPM(cFactorConversion) 
                Finsi
              Finsi
            Finsi

            {idRenglon}[2] = tDocumentos(cSerieDocumento)
            {idRenglon}[3] = tDocumentos(cFolio)

            tDocumentosDe.busca[@str(tdocumentos(cIdDocumentoDe);0)]
            Si tDocumentosDe->encontro
              {idRenglon}[4] = tDocumentosDe(cDescripcion)
            Finsi

            Si pTipoReporte = 1
              {idRenglon}[5] = @col({idRenglon};5) + @col(vCotizaciones;0)
              {idRenglon}[6] = @col({idRenglon};6) + @col(vPedidos;0)
              {idRenglon}[7] = @col({idRenglon};7) + @col(vRemisiones;0)
              {idRenglon}[8] = @col({idRenglon};8) + @col(vfacturas;0)
              //duplicar información para agilizar el reporte.
              {idRenglon}[10]= tProductos(cCodigoProducto)
              {idRenglon}[11]= tMovimientosOcultos(cFecha)
              {idRenglon}[12]= tproductos(cNombreProducto)
              {idRenglon}[13]= tProductos(cidUnidadNoConvertible)
              {idRenglon}[14]= tProductos(cIdUnidadBase)
              Si pUnidad = 3 Y tProductos(cIdUnidadCompra) != 0
                {idRenglon}[13]= tProductos(cIdUnidadBase)
                {idRenglon}[14]= tProductos(cIdUnidadCompra)
              FinSi
              Si pUnidad = 4 Y tProductos(cIdUnidadVenta) != 0
                {idRenglon}[13]= tProductos(cIdUnidadBase)
                {idRenglon}[14]= tProductos(cIdUnidadVenta)
              FinSi
              {idRenglon}[15]= tProductos(cTipoProducto)
              vCotizaciones = 0
              vPedidos = 0
              vRemisiones = 0
              vfacturas = 0
            Sino
							//N.C.146
              {idRenglon}[5] = @col({idRenglon};5) + @col(vCotizacionesProv;0)	
              {idRenglon}[6] = @col({idRenglon};6) + @col(vOrdenesCompra;0)
              {idRenglon}[7] = @col({idRenglon};7) + @col(vConsignaciones;0)
              {idRenglon}[8] = @col({idRenglon};8) + @col(vCompras;0)
              //duplicar información para agilizar el reporte.
              {idRenglon}[10]= tProductos(cCodigoProducto)
              {idRenglon}[11]= tMovimientosOcultos(cFecha)
              {idRenglon}[12]= tproductos(cNombreProducto)
              {idRenglon}[13]= tProductos(cidUnidadNoConvertible)
              {idRenglon}[14]= tProductos(cIdUnidadBase)
              Si pUnidad = 3 Y tProductos(cIdUnidadCompra) != 0
                {idRenglon}[13]= tProductos(cIdUnidadBase)
                {idRenglon}[14]= tProductos(cIdUnidadCompra)
              FinSi
              Si pUnidad = 4 Y tProductos(cIdUnidadVenta) != 0
                {idRenglon}[13]= tProductos(cIdUnidadBase)
                {idRenglon}[14]= tProductos(cIdUnidadVenta)
              FinSi
              {idRenglon}[15]= tProductos(cTipoProducto)
              vOrdenesCompra = 0
              vConsignaciones = 0
              vCompras = 0
              vPendientes = 0
							//N.C.146
							vCotizacionesProv = 0
            Finsi
          Finsi  // Si el producto del movimiento oculto pertenece al rango
          tMovimientosOcultos.saltareg[1]
        Finmientras  // Mientras hay movimientos ocultos del movimiento
        tMovimientos.saltareg[1]
      Finmientras  // Minetras hay movimientos del documento
      tDocumentos.BUSCA SIGUIENTE[1]
    Finmientras  // Minetras hay días del rango

    //Ordena la Hoja de trabajo de acuerdo ala fecha del Producto (movto)
    Ordenahoja(idRenglonIni ;idRenglonFin - idRenglonIni )
    //Imprime Datos de la Hoja de trabajo y limpia la hoja
    Imprimehoja()//(idRenglonIni ;idRenglonFin )

    fTotalCP()
    tClientes.saltareg[1]
  Finmientras  // Mientras hay clientes o proveedores
  fTotalTotal()
