// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// Reporte:     Resumen de Operaciones de Venta Detallada por Producto
//              Resumen de Operaciones de Compra Detallada por Producto
//
// 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 pProductoInicial  = '(Ninguno)' 
    Parametro pProductoFinal    = 'z'
    Parametro pUnidad           = 0	  //0 = Unidad Base·	1 = Unidad No Equivalente·	2 = Seleccionar Unidad
    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 Producto
                                      // 2     Resumen de Operaciones de Compra Detallada por Producto
    Parametro pFechaInicial     = ' '
    Parametro pFechaFinal       = ' '
    Parametro pDoctoModelo      = 0

// *************************************************************************************************
// INICIO APERTURA TABLAS
// *************************************************************************************************
  UsaEmpresa tEmpresa;'AdminpaqW'

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

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

  // Movimientos
  UsaTabla tMovimientos = tEmpresa['mgw10010']
  tMovimientos.Usaindice['iProductoFechaAfecta']//el indice no  esta por inventario ,pero se puede utilizar

  // Movimientos 
  UsaTabla tMovimientoOwner = tEmpresa['mgw10010'] alias 'MovimientoOwner'
  tMovimientoOwner.Usaindice['']

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

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

  //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.8,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.8,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,C17..C19].Blanco ''
  Finsi

// *************************************************************************************************
//VARIABLES GLOBALES 
// *************************************************************************************************
  gUnidad = pUnidad
  gIdUnidad = pIdUnidad
  gDelaFecha = ''
  gAlaFecha  = ''
  vFechaFin = ''
  vFechaIni = ''
  gRenglon = '' 
  gTotalProd = ''
  gTotaltotal = ''
  gTotalPaquetes = ''
  vTipoAcumulado = 0
  vImporteModelo  =  0
  vIdEjercicio = 0
  vDocumento = 0
  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,@Escoge(aValor;2),@Escoge(aValor;3),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(aTipoProducto)
local LTotalLinea

  LTotalLinea = '==========================='[c0]
  Si PrimVez = 1
    Texto c10; @col(LTotalLinea;0)
    Texto c12; @col(LTotalLinea;0)
    Texto c14; @col(LTotalLinea;0)
//		Si pTipoReporte = 1
	    Texto c16; @col(LTotalLinea;0)
//		FinSi
    imprime
    Si aTipoProducto = 2
      gTotalPaquetes =  gTotalPaquetes + gTotalProd
    Sino
      gTotaltotal =  gTotaltotal + gTotalProd
    FinSi
    gTotalProd = ''[c0..c6]
    Si aTipoProducto = 2
      gTotalProd[6] = 'Total Paquete'
    Sino
      gTotalProd[6] = 'Total Producto'
    FinSi
//		Si pTipoReporte = 2
//	    gTotalProd = ''[c16]
//		FinSi
  	imprime gTotalProd
  Finsi
  gTotalProd = ''
Finfunc

// *************************************************************************************************
// Descripcion: imprime un total general
// Entradas :  
// Salida :    
// *************************************************************************************************
deffunc fTotaltotal()
local LTotalLinea

  LTotalLinea = '==========================='[c0]
  Saltalin
  
  Si PrimVezGT = 1
    Texto c10; @col(LTotalLinea;0)
    Texto c12; @col(LTotalLinea;0)
    Texto c14; @col(LTotalLinea;0)
//		Si pTipoReporte = 1
	    Texto c16; @col(LTotalLinea;0)
//		FinSi
    imprime
    gTotaltotal = ''[c0..c6]
//		Si pTipoReporte = 2
//	    gTotalTotal = ''[c16]
//		FinSi
    gTotaltotal[6] = 'Total Productos'
    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
  Finsi
  gTotaltotal = ''
Finfunc

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

	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
  Negritas True
  vimprime = 'Producto:' [c0]
  vimprime = fMascarilla(tProductos(cCodigoProducto);tParametros(cMascarillaProducto))[c2]
  imprime vimprime
  vimprime = 'Nombre:' [c0]
  vimprime = tproductos(cNombreProducto) [c2]

	// Determina si el producto utiliza características a través de restar los demas controles de existencia
	lControlExistencia = tproductos(cControlExistencia)
	// Eliminación del control de existencia por: Unidades de entrada
	//																						kProdControlExistUnidadesEntrada 32
	Si ( lControlExistencia > 31 )
		lControlExistencia = lControlExistencia - 32
	FinSi
	// Eliminación del control de existencia por: Lotes
	//																						kProdControlExistLotes           16
	Si ( lControlExistencia > 15 )
		lControlExistencia = lControlExistencia - 16
	FinSi
	// Eliminación del control de existencia por: Pedimentos
	//																						kProdControlExistPedimentos       8
	Si ( lControlExistencia > 7 )
		lControlExistencia = lControlExistencia - 8
	FinSi
	// Eliminación del control de existencia por: Series
	//																						kProdControlExistSeries           4
	Si ( lControlExistencia > 3 )
		lControlExistencia = lControlExistencia - 4
	FinSi
	// Eliminación del control de existencia por: Caracteristicas
	//																						kProdControlExistCarac	          2
	Si ( lControlExistencia > 1 )
		lControlExistencia = lControlExistencia - 2
	FinSi

  //busca unidad base
  //SI el Producto tiene Unidad de Medida NO Equivalente  "Y" pUnidad = 1
  Si  pUnidad = 1 y tProductos(cidUnidadNoConvertible) != 0
    tUnidadesPM.busca[@str(tProductos(cidUnidadNoConvertible);0)]
  Sino
		// En caso de que se desee una Unidad en particular, revisar que el producto maneje	unidades
    Si pUnidad = 2 y lControlExistencia = 1			
      tUnidadesPM.busca[@str(@col(pIdUnidad;0);0)]
    Sino
      tUnidadesPM.busca[@str(tProductos(cIdUnidadBase);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.8,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.8,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
Finfunc

// *************************************************************************************************
// Entradas :  
// Salida :    
// *************************************************************************************************
DefFunc fRenglon( aIdDocumentoActual; aIdProducto )
  Si PrimVez = 0
    ImprimeA()   
    PrimVez = 1
    PrimVezGT = 1
  Finsi
  DEFREGION ContextoDetalleDoctoProducto
  [C4].REGIONINFO aIdDocumentoActual & ',' & aIdProducto & ',' & pUnidad & ',' & pIdUnidad
  imprime gRenglon
  gTotalProd  = gTotalProd + gRenglon
  gRenglon = '' 
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


// *************************************************************************************************
// 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 Producto'
    Sino
      Texto '^@TC{0,0,0}@S{16}' & 'Resumen de Operaciones de Compra Detallada por Producto'
    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     Pendiente         
    Columnas 20;1.95,0.15,1.8,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.8,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
    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 = ''

  //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(pProductoInicial;0) = ' '
    tProductos.Busca Primero
  Sino
    tProductos.Busca [@str(pProductoInicial;0) & ':']
  Finsi

  PrimVezGT = 0
  Mientras tProductos->encontro
    si @str(pProductoInicial;0) != ' '
      Si tProductos(cCodigoProducto) < @str(pProductoInicial;0) 
        tProductos.saltareg[1]            
      Finsi 
    finsi
    si @str(pProductoFinal;0) != ' '
      Si tProductos(cCodigoProducto)> @str(pProductoFinal;0)
        Finciclo            
      Finsi 
    finsi

    Si pTipoReporte = 2
      Si tProductos(cTipoProducto) = 2
        tProductos.Saltareg[1]                     
        continua
      Finsi
    Finsi

    // Si es uno de los servicios para facturar notas de venta no incluirlo
    Si tProductos(cIdProducto) = tParametros(cIdProdu01)
      tProductos.Saltareg[1]
      Continua
    FinSi
    Si tProductos(cIdProducto) = tParametros(cIdProdu02)
      tProductos.Saltareg[1]
      Continua
    FinSi
    Si tProductos(cIdProducto) = tParametros(cIdProdu03)
      tProductos.Saltareg[1]
      Continua
    FinSi
    Si tProductos(cIdProducto) = tParametros(cIdProdu04)
      tProductos.Saltareg[1]
      Continua
    FinSi
    Si tProductos(cIdProducto) = tParametros(cIdProdu05)
      tProductos.Saltareg[1]
      Continua
    FinSi

    vCotizaciones = 0
    vPedidos = 0
    vRemisiones = 0
    vfacturas = 0
    vOrdenesCompra = 0
    vConsignaciones = 0
    vCompras = 0
		//N.C.146
		vCotizacionesProv = 0

    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
    tMovimientos.Usaindice['iProductoFechaAfecta']
    tMovimientos.Busca[tProductos(cidProducto) & ':' & gFechaBusqueda]
    Si !tMovimientos->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 tProductos(cidProducto) = @Val(@SUBSTR(tMovimientos->Llave;0;11))
        Si @SUBSTR(tMovimientos->Llave;11;8) >= vFechaIni Y @SUBSTR(tMovimientos->Llave;11;8) <= vFechaFin
          // Realizar nuevamente la búsqueda a fin de posicionarnos en el registro y activar la propiedad Encontro
          gFechaBusqueda = @SUBSTR(tMovimientos->Llave;11;8)
          tMovimientos.Busca[tProductos(cidProducto) & ':' & gFechaBusqueda]
        FinSi
      FinSi        
    FinSi

    Mientras tMovimientos->Encontro Y (tMovimientos(cFecha) <= vFechaFin)
      Si pDoctoModelo = 4 Y (tMovimientos(cIdDocumentoDe) != 4 Y tMovimientos(cIdDocumentoDe) != 35)
        tMovimientos.BUSCA SIGUIENTE[1]
        Continua
      FinSi
      Si pDoctoModelo != 0 Y pDoctoModelo != 4 Y pDoctoModelo != tMovimientos(cIdDocumentoDe)
        tMovimientos.BUSCA SIGUIENTE[1]
        Continua
      FinSi
      Si pTipoReporte = 1 // Solo ventas , descarta si no es factura y no es Nota de venta FBCS
        Si tMovimientos(cIdDocumentoDe) > 4 Y tMovimientos(cIdDocumentoDe) != 35
          tMovimientos.BUSCA SIGUIENTE[1]
          Continua
        FinSi
      SiNo // Solo compras
				//N.C.146
        Si tMovimientos(cIdDocumentoDe) < 17 o (tMovimientos(cIdDocumentoDe) > 19 y tMovimientos(cIdDocumentoDe)< 38)
          tMovimientos.BUSCA SIGUIENTE[1]     
          Continua
        FinSi
      FinSi
        
      //si el producto es oculto no se toma en cuenta para cuadrar los reportes de cliente/prov agente
      Si tMovimientos(cMovtoOculto) =1 y tMovimientos(cidMovtoOwner) !=0
        Si tMovimientos(cTipoTraspaso) =3
          tMovimientos.BUSCA SIGUIENTE[1]
          Continua
        Finsi
      Finsi
        
      //fact  //FBCS
      Si  (tMovimientos(cIdDocumentoDe) = 4 O tMovimientos(cIdDocumentoDe)=35 ) y (tMovimientos(cTipoTraspaso)=4)
        tMovimientos.BUSCA SIGUIENTE[1]
        Continua                 
      Finsi                                
      //ped. cot
      Si (tMovimientos(cIdDocumentoDe) = 1 o tMovimientos(cIdDocumentoDe) = 2) y (tMovimientos(cTipoTraspaso)=4)
        tMovimientos.BUSCA SIGUIENTE[1]
	      Continua                 
      Finsi                                
      //remisiones
      Si (tMovimientos(cIdDocumentoDe) = 3 ) y (tMovimientos(cTipoTraspaso)!=2)
        tMovimientos.BUSCA SIGUIENTE[1]
 	      Continua                 
      Finsi                                
      //ord. compra ,consig, cotizaciones
      Si (tMovimientos(cIdDocumentoDe) = 17 o tMovimientos(cIdDocumentoDe) = 18) y (tMovimientos(cTipoTraspaso)=4)
        tMovimientos.BUSCA SIGUIENTE[1]
 	      Continua                 
      Finsi                        

      Si pTipoReporte = 1
        Si tMovimientos(cIdDocumentoDe) > 5 Y tMovimientos(cIdDocumentoDe) != 35
          tMovimientos.BUSCA SIGUIENTE[1]
          Continua
        Finsi
      Sino
				//N.C.146
        Si tMovimientos(cIdDocumentoDe) < 17 o (tMovimientos(cIdDocumentoDe) > 19 y tMovimientos(cIdDocumentoDe) < 38)
          tMovimientos.BUSCA SIGUIENTE[1]
          Continua
        Finsi
      Finsi

      Si (tMovimientos(cIdDocumento)!= 0)
        tDocumentos.busca[@str(tMovimientos(cIdDocumento);0)]
      sino
        tMovimientoOwner.busca[@str(tMovimientos(cIdMovtoOwner);0)]  
        Si tMovimientoOwner->encontro  
          tDocumentos.busca[@str(tMovimientoOwner(cIdDocumento);0)]
        sino  
          tDocumentos.busca[@str(tMovimientos(cIdDocumento);0)]
        Finsi           
      Finsi  
      Si tDocumentos->encontro
        Si tDocumentos(cCancelado) != 0 // CANCELADOS
           tMovimientos.BUSCA SIGUIENTE[1]
           Continua
         FinSi
         gRenglon[2] = tDocumentos(cSerieDocumento)
         gRenglon[4] = tDocumentos(cFolio)
           
         tDocumentosDe.busca[@str(tdocumentos(cIdDocumentoDe);0)]
         Si tDocumentosDe->encontro
           gRenglon[6] = tDocumentosDe(cDescripcion)
         Finsi
      Finsi

      fVerificaUnidad(tProductos)  
  
      //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 )
          vfacturas  = 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         
				//N.C.146
		    Si tMovimientos(cIdDocumentoDe) = 38
		      vCotizacionProv = 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)
          vfacturas  = 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      
				//N.C.146
			  Si tMovimientos(cIdDocumentoDe) = 38
				  vCotizacionProv = 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
            vPedidos = vPedidos *  tEquivaleUnidadesPM(cFactorConversion)
          Finsi
          Si tMovimientos(cIdDocumentoDe) = 2
            vRemisiones = vRemisiones * tEquivaleUnidadesPM(cFactorConversion)
          Finsi
          Si tMovimientos(cIdDocumentoDe) = 3
            vCotizaciones = vCotizaciones * tEquivaleUnidadesPM(cFactorConversion)
          Finsi
          Si (tMovimientos(cIdDocumentoDe) = 4 O tMovimientos(cIdDocumentoDe) = 35)
            vfacturas  = vfacturas  * 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
					//N.C.146           
          Si tMovimientos(cIdDocumentoDe) = 38
            vCotizacionProv = vCotizacionProv* tEquivaleUnidadesPM(cFactorConversion) 
          Finsi
  	    Finsi
      Finsi
        
      gRenglon[0] =  fEditaFecha(tMovimientos(cFecha))     
      Si pTipoReporte = 1
        gRenglon[10] = @col(vCotizaciones;0)
        gRenglon[12] = @col(vPedidos;0)
        gRenglon[14] = @col(vRemisiones;0)
        gRenglon[16] = @col(vfacturas ;0)         
        Si @col(gRenglon;10) !=0 o @col(gRenglon;12) !=0 o @col(gRenglon;14) !=0 o @col(gRenglon;16) !=0 
          fRenglon( tDocumentos(cIdDocumento); tProductos(cIdProducto) )
        Finsi
        vCotizaciones = 0
        vPedidos = 0
        vRemisiones = 0
        vfacturas = 0
      Sino
				//N.C.146
        gRenglon[10] = @col(vCotizacionProv;0)
        gRenglon[12] = @col(vOrdenesCompra;0)
        gRenglon[14] = @col(vConsignaciones;0)
        gRenglon[16] = @col(vCompras;0)
        //gRenglon[16] = ''          
        Si @col(gRenglon;10) !=0 o @col(gRenglon;12) !=0 o @col(gRenglon;14) !=0 o @col(gRenglon;16) !=0 
          fRenglon( tDocumentos(cIdDocumento); tProductos(cIdProducto) )
        Finsi
        vOrdenesCompra = 0
        vConsignaciones = 0
        vCompras = 0
				//N.C.146
				vCotizacionProv = 0
      Finsi        
      tMovimientos.BUSCA SIGUIENTE[1]
    Finmientras
    fTotalProd(tProductos(cTipoProducto))    
    tProductos.saltareg[1]
  Finmientras
 fTotaltotal()
