// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//	Nombre del reporte en el sistema: Análisis de Origen de Documentos
//              			                Análisis de Destino de Documentos
//
//  Sistema: AdminPAQ v1.1
// 
//	Este reporte perteneciente al módulo de ventas y al modulo de compras.
//
//	Consideraciones especiales:
//  
//	Elaboró:    Leonardo Aguilar Pizano
//	Fecha: 	    26 de Septiembre de 2002
//
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// Historia de modificaciones
//  Fecha      Nombre   IDLotus                     Descripcion
//  26/06/2009 ELVS     5880                        ERROR NO SE CONSIDERA LA OPCION SIN SURTIR O 
//                                                  PARCIALMENTE SURTIDO EN EL FILTRO STATUS EN EL 
//                                                  REPORTE ANALISIS DE DESTINO DE DOCUMENTOS YA QUE
//                                                  DE CUALQUIER MANERA ENVIA LOS MISMOS DOCUMENTOS.
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

// *************************************************************************************************
// Funciones de librería
// *************************************************************************************************
Incluye LibAdminPAQ.Rpt


// *************************************************************************************************
// P A R A M E T R O S
// *************************************************************************************************
Parametro pTipoReporte 	    = 0  				// Tipo del reporte
																		    // 0 - Origen de documentos
																		    // 1 - Destino de documentos
																		    // 2 - Origen y Destino de documentos
Parametro pClienteProveedor	= 0		      // Reporte de cliente o proveedor
						        								    // 0 - Cliente
																		    // 1 - Proveedor
Parametro pSerie		        = '    '	  // Serie del documento
Parametro pFolioInicial		  = 1				  // Folio Inicial del documento
Parametro pFolioFinal		    = 99999		  // Folio Final del documento
Parametro pCteProvInicial   = ' '
Parametro pCteProvFinal     = ' '
Parametro pConcepto		      = '4'					// Concepto del documento
Parametro pFechaInicial     = '20020501'
Parametro pFechaFinal       = '20020501'
Parametro pStatus           = 0           // 0 = Todos· 
                                          // 1 = Surtidos· 
                                          // 2 = Parcialmente Surtidos / Sin Surtir 
Parametro pMostrarTodos		  = 0			      // Mostrar todas las relaciones
                      			  				    // 0 - No
                      				  			    // 1 - Si


// *************************************************************************************************
//	Tablas a utilizar e Indices de búsqueda por omisión
// *************************************************************************************************
UsaEmpresa tEmpresa;'ADMINPAQW'                   // Parámetros

UsaTabla tParametros = tEmpresa['MGW10000']       // Parámetros de la empresa
tParametros.Usaindice['']

UsaTabla tCliente = tEmpresa['MGW10002']	// Clientes / proveedores
tCliente.Usaindice['iCodigoTipo']

UsaTabla tProducto = tEmpresa['MGW10005']         // Productos
tProducto.Usaindice['']

UsaTabla tConceptoDocto = tEmpresa['MGW10006'] 	// Conceptos de documentos
tConceptoDocto.Usaindice['']

UsaTabla tDoctoModelo = tEmpresa['MGW10007']	// Documentos modelos
tDoctoModelo.Usaindice['']

UsaTabla tDocumento = tEmpresa['MGW10008']        // Documentos
tDocumento.Usaindice['iDoctoDeSerieFolio']

UsaTabla tDocumento2 = tEmpresa['MGW10008'] Alias 'DoctosRango'       // Documentos
tDocumento.Usaindice['iDoctoDeSerieFolio']

UsaTabla tMovimiento = tEmpresa['MGW10010']   Alias 'Movtos'    // Movimientos
tMovimiento.Usaindice['iDoctoNumeroMovto']     

UsaTabla tMovtosRelacionados = tEmpresa['MGW10010'] 	Alias 'MovtosRelacionados'  // Movimientos
tMovtosRelacionados.Usaindice['cIdMovtoOrigen']


// *************************************************************************************************
// Definiciones y asumidos globales para el reporte
// *************************************************************************************************
// Ancho de columnas = caracteres / 17 * 2.54
// Se consideran columnas intermedias de un espacio
// C0 (Fecha) 					= 12 caracteres		1.80
// C2 (Serie) 					=  4 caracteres		0.60
// C4 (Folio) 					= 12 caracteres		1.80
// C6 (Concepto) 				= 20 caracteres		3.75
// C8 (Fecha) 					= 12 caracteres		1.80
// C10 (Serie) 					=  4 caracteres		0.60
// C12 (Folio) 					= 12 caracteres		1.80
// C14 (Concepto) 			= 20 caracteres		3.75
// C16 (Unidades)				= 10 caracteres		1.50
// C18 (Unidades)				= 10 caracteres		1.50
// C20 (Unidades)				= 10 caracteres		1.50
Columnas 21;1.80,0.15,0.60,0.10,1.80,0.15,3.00,0.15,1.80,0.15,0.60,0.10,1.80,0.15,3.00,0.15,1.50,0.10,1.50,0.10,1.70,0
// Las columnas de folios no manejan decimales
[C4,C12].Coma
[C4,C12].Decimales 0

Usaletra 'Arial'
Altura 9


// *************************************************************************************************
//	Variables de ámbito global:
// *************************************************************************************************
gIdioma = 0               // Idioma del reporte
                          // 0 = Español
                          // 1 = Inglés
// Las siguientes variables se utilizan en el cuerpo principal del reporte
gMascarillaCliente 	= ''  // Mascarilla para el código del cliente / proveedor
gMascarillaProducto = ''  // Mascarilla para el código del producto


// *************************************************************************************************
// F U N C I O N E S
// *************************************************************************************************
// *************************************************************************************************
// Descripción:	Configura las variables globales del reporte, Configura el número de decimales de 
//              las columnas de unidades, basado en los parámetros de la empresa.
//							Obtención de la mascara de los códigos del clientes y productos
//  Parámetros 
//  Salidas 
// *************************************************************************************************
DefFunc fConfiguraReporte()

	// Obtención de la mascarilla
	tParametros.Busca Primero
	gMascarillaCliente 	= tParametros(cMascarillaClientes)
	gMascarillaProducto = tParametros(cMascarillaProducto)
	// Coma en las columnas de unidades
	[C16,C18,C20].Coma
	[C16].Decimales tParametros(cDecimalesUnidades)
 	[C18].Decimales tParametros(cDecimalesUnidades)
 	[C20].Decimales tParametros(cDecimalesUnidades)
FinFunc

// *************************************************************************************************
// Descripción:	Esta función imprime los datos del documento que selecciono el usuario
// Diseño: Imprime Concepto del Documento, Documentos(cSerie), Documentos(cFolio), Documentos(cFecha)		
// Parámetros 	atDocumento	: Registro del documento
//		          atConceptoDocto	: Registro del concepto del documento
// Salidas 
// *************************************************************************************************
DefFunc fImprimeDocumento(atDocumento:Tabla; atConceptoDocto:Tabla)
Local	lImprime

	Columnas 2;4.00,0

	NEGRITAS TRUE
	Texto C0; 'Documento Inicial'
	Imprime
	NEGRITAS FALSE

	// Impresión de los titulos
	Columnas 7;2.00,0.15,0.75,0.15,1.80,0.15,4.00,0
	Texto C0; 'Fecha'
	Texto C2; 'Serie'
	Texto C4; 'Folio'
	Texto C6; 'Concepto'
	Imprime 

	// Impresión de los datos
	lImprime	=  @Col(fFormateaFecha(atDocumento(cFecha); gIdioma);0)[C0]
	lImprime	=  @Col(atDocumento(cSerieDocumento);0)[C2]
	lImprime	=  @Col(atDocumento(cFolio);0)[C4]
  // Utilizamos gNombreConcepto para guardar el nombre del concepto de los documentos ya que al
  //  imprimir los movimientos del asociados del reporte se cambia la posición de tConceptoDocto
	lImprime	=  @Col(gNombreConcepto;0)[C6]
	Lista lImprime

	Columnas 21;1.80,0.15,0.60,0.10,1.80,0.15,3.00,0.15,1.80,0.15,0.60,0.10,1.80,0.15,3.00,0.15,1.50,0.10,1.50,0.10,1.70,0	
FinFunc

// *************************************************************************************************
// Descripción:	Esta función imprime los datos del movimiento que pertenece al documento que selecciono el usuario
// Diseño:	Imprime Movimientos(cCodigoProducto), Nombre del Producto, Movimientos (cUnidades)
// Parámetros 	atMovimiento	: Registro del movimiento del cual se tomará el producto a imprimir
// Salidas 
// *************************************************************************************************
DefFunc fImprimeMovimiento(atMovimiento:Tabla)
Local	lImprime

	Columnas 4;2.00,0.15,6.00,0
	Saltalin

	// Busquéda del producto
	tProducto.Busca[@Str(atMovimiento(cIdProducto);0)]
	// Impresión del Codigo producto
	lImprime = 'Producto: '[C0]
	lImprime = @Col(fMascarilla(tProducto(cCodigoProducto); gMascarillaProducto);0)[C2]
	Lista lImprime
	// Impresión del Nombre Producto
	lImprime = 'Nombre: '[C0]
	lImprime = @Col(tProducto(cNombreProducto);0)[C2]
	Lista lImprime
	// Impresión de las Unidades del movimiento
	Columnas 4;2.00,0.15,2.00,0
	[C2].Coma
	[C2].Decimales tParametros(cDecimalesUnidades)
	lImprime = 'Unidades: '[C0]
	lImprime[2] = @Col(atMovimiento(cUnidades);0)
	Lista lImprime

	Columnas 21;1.80,0.15,0.60,0.10,1.80,0.15,3.00,0.15,1.80,0.15,0.60,0.10,1.80,0.15,3.00,0.15,1.50,0.10,1.50,0.10,1.70,0
FinFunc

// *************************************************************************************************
// Descripción:	Imprime los titulos para mostrar la información de la relación entre dos movimientos
// Parámetros 
// Salidas 
// *************************************************************************************************
DefFunc fImprimeTituloMovtos()
Local	lImprime

	// Impresión de una linea divisoria
	Texto '@TC{0,0,0}@L{-1}'
	Imprime 

	Si pTipoReporte = 0		
	  // El reporte es de Analisis de Origen, primero se imprime el documento	destino y después el documento origen
	  Texto C0; 'Destino'
	  Texto C8; 'Origen'
	Sino									
 	  // El reporte es de Analisis de Destino, primero se imprime el documento origen y después el documento destino
	  Texto C0; 'Origen'
	  Texto C8; 'Destino'
	FinSi
	Imprime

	// Impresión de los titulos de las columnas
	Texto C0; 'Fecha'
	Texto C2; 'Serie'
	Texto C4; 'Folio'
	Texto C6; 'Concepto'
	Texto C8; 'Fecha'
	Texto C10; 'Serie'
	Texto C12; 'Folio'
	Texto C14; 'Concepto'
	Texto C16; 'Unidades en'
	Texto C18; 'Unidades'
	Texto C20; 'Unidades'
	Imprime
	Si pTipoReporte = 0
	  Texto C16; 'el origen'
	Sino				
	  Texto C16; 'el destino'
	FinSi
	Texto C18; 'relacionadas'
	Texto C20; 'no relacionadas'
	Imprime
	// Impresión de una línea divisoria
	Texto '@TC{0,0,0}@L{-1}'
	Imprime
FinFunc

// *************************************************************************************************
// Descripción:	Imprime la información de dos documentos relacionados
// Diseño:			
//	Imprimir aFecha, aConcepto, aSerie, aFolio, Documento(cFecha), Concepto de Documentos, 
//	Documento(cSerie), Documentos(cFolio), Movimientos(cUnidades)
//	Movimientos(cUnidadesOrigen), Movimientos(cUnidades) - Movimientos(cUnidadesOrigen)
// Parámetros 
// Salidas 
// *************************************************************************************************
DefFunc fImprimeMovtoRelacion(aFechaOrigen; aSerieOrigen; aFolioOrigen; aConceptoOrigen; aFechaDestino; aSerieDestino; aFolioDestino; aConceptoDestino; aUnidades; aUnidadesOrigen; aUnidadesRestantes; aNumConsolidaciones)
Local	lImprime

	// Impresión del Primer documento
	lImprime	=  @Col(fFormateaFecha(aFechaOrigen; gIdioma);0)[C0]
	lImprime	=  @Col(aSerieOrigen;0)[C2]
	lImprime	=  @Col(aFolioOrigen;0)[C4]
	lImprime	=  @Col(aConceptoOrigen;0)[C6]
	// Impresión del Segundo documento
	lImprime	=  @Col(fFormateaFecha(aFechaDestino; gIdioma);0)[C8]
	lImprime	=  @Col(aSerieDestino;0)[C10]
	lImprime	=  @Col(aFolioDestino;0)[C12]
	lImprime	=  @Col(aConceptoDestino;0)[C14]
	// Impresión de las unidades relacionadas
	lImprime	=  @Col(aUnidades;0)[C16]
	// N.D.5710 Indicar si el movimiento proviene de una consolidación
	Si aNumConsolidaciones > 1
	  gHayMovtosConsolidados = 1
	  lImprime	=  '*'[C17]
	FinSi
	lImprime	=  @Col(aUnidadesOrigen;0)[C18]
	lImprime	=  @Col(aUnidadesRestantes;0)[C20]
	Lista lImprime
FinFunc

// *************************************************************************************************
// Descripción:	Recorre los movimientos relacionados (Origen /destino) de un movimiento en particular. 
//              Además puede recorrer los movimientos relacionados al movimiento relacionado actual.
// Parámetros 	
//   atMovtosRelacionados	: Tabla de movimientos para realizar las busquédas de los movimientos relacionados
//		aIdMovimiento	: Id del movimiento al cual se desea procesar sus movimientos relacionados
//		aUnidadesOrigen	:	Unidades origen de aIdMovimiento
//		aFecha		:	Fecha del documento al cual pertenece	aIdMovimiento
//		aSerie		:	Serie del documento al cual pertenece	aIdMovimiento
//		aFolio		:	Folio del documento al cual pertenece	aIdMovimiento
//		aConcepto	:	Concepto del documento al cual pertenece aIdMovimiento
// Salidas 
// *************************************************************************************************
DefFunc fProcesaMovtosRelacionados (atMovtosRelacionados:Tabla; aIdMovimiento; aNumConsolidaciones; aIdMovtoDestino; aUnidadesMovto; aUnidadesOrigen; aFecha; aSerie; aFolio; aConcepto)
Local	lConceptoRelacion
Local lLlaveBusqueda
Local lUnidadesRelacionadas

  // N.D.5710 Ajustar la busqueda de movimientos origen/destino considerando consolidaciones
  lLlaveBusqueda = aIdMovimiento
	Si pTipoReporte = 0	
	  Si aNumConsolidaciones = 0
	    // Busca el movimiento origen recibido en aIdMovimiento 
  	  atMovtosRelacionados.UsaIndice['']  	 
  	Sino
  	  atMovtosRelacionados.UsaIndice['cIdMovDest']
  	  lLlaveBusqueda = aIdMovtoDestino
  	FinSi
	Sino
	  Si aIdMovtoDestino = 0
      // Cambiar el índice a Movimientos a cIdMovtoOrigen		
      atMovtosRelacionados.UsaIndice['cIdMovtoOrigen']  	 	
    Sino
      atMovtosRelacionados.UsaIndice['']  	 	
      lLlaveBusqueda = aIdMovtoDestino
    FinSi
	FinSi

	// Recorrido de todos los movimientos relacionados
	Mientras[atMovtosRelacionados.Busca[@Str(lLlaveBusqueda;0)]; atMovtosRelacionados->Encontro; atMovtosRelacionados.Busca Siguiente[1]]
	  // Busqúeda del documento al que pertenece
	  tDocumento.Busca[@Str(atMovtosRelacionados(cIdDocumento);0)]
	  Si !tDocumento->Encontro
  	    Continua
	  FinSi

	  // Busquéda del Concepto
	  tConceptoDocto.Busca[@Str(tDocumento(cIdConceptoDocumento);0)]
	  lConceptoRelacion = tConceptoDocto(cNombreConcepto)

    // N.D.5710 Ajustar las unidades relacionadas en casos de consolidaciones
	  // Impresión del movimiento relacionado
	  Si pTipoReporte = 0
	    lUnidadesRelacionadas = aUnidadesOrigen
      Si aNumConsolidaciones > 0
        lUnidadesRelacionadas = atMovtosRelacionados(cUnidades)
      FinSi
	    fImprimeMovtoRelacion(aFecha; aSerie; aFolio; aConcepto; tDocumento(cFecha); tDocumento(cSerieDocumento); tDocumento(cFolio); lConceptoRelacion; atMovtosRelacionados(cUnidades); lUnidadesRelacionadas; atMovtosRelacionados(cUnidades)-lUnidadesRelacionadas; atMovtosRelacionados(cNumConsol))
	  Sino
      lUnidadesRelacionadas = atMovtosRelacionados(cUnidadesOrigen)
      Si aIdMovtoDestino != 0
        lUnidadesRelacionadas = aUnidadesMovto
      FinSi
      fImprimeMovtoRelacion(aFecha; aSerie; aFolio; aConcepto; tDocumento(cFecha); tDocumento(cSerieDocumento); tDocumento(cFolio); lConceptoRelacion; atMovtosRelacionados(cUnidades); lUnidadesRelacionadas; atMovtosRelacionados(cUnidades)-atMovtosRelacionados(cUnidadesOrigen); atMovtosRelacionados(cNumConsol))
	  FinSi
		
	  // En caso de que se deseen todas las relaciones, mostrar las relaciones de este movimiento
	  // N.D.5710 Enviar el numero de consolidaciones, movimiento destino y las unidades originales
	  Si pMostrarTodos = 1
	    Si pTipoReporte = 0
	      fProcesaMovtosRelacionados(atMovtosRelacionados; atMovtosRelacionados(cIdMovtoOrigen); atMovtosRelacionados(cNumConsol); atMovtosRelacionados(cIdMovDest); atMovtosRelacionados(cUnidades); atMovtosRelacionados(cUnidadesOrigen); tDocumento(cFecha); tDocumento(cSerieDocumento); tDocumento(cFolio); lConceptoRelacion)
      Sino
	      fProcesaMovtosRelacionados(atMovtosRelacionados; atMovtosRelacionados(cIdMovimiento);  atMovtosRelacionados(cNumConsol); atMovtosRelacionados(cIdMovDest); atMovtosRelacionados(cUnidades); atMovtosRelacionados(cUnidadesOrigen); tDocumento(cFecha); tDocumento(cSerieDocumento); tDocumento(cFolio); lConceptoRelacion)
	    FinSi
	  FinSi
	FinMientras
	Retorna
FinFunc

// *************************************************************************************************
// Descripción:	Recorre los movimientos relacionados (Origen /destino) de un movimiento en particular. 
//              Además puede recorrer los movimientos	relacionados al movimiento relacionado actual.
// Salidas 
// *************************************************************************************************
DefFunc fImprimeDoctoOrigenDestino ()
Local lSerie, lFecha, lFolio, lConcepto, lIdDocumento, lIdMovtoDestino

  // Imprime el documento
  fImprimeDocumento(tDocumento2; tConceptoDocto)

  // Respalda los valores del documento
  lIdDocumento 	= tDocumento2(cIdDocumento)
  lSerie 	= tDocumento2(cSerieDocumento)
  lFolio 	= tDocumento2(cFolio)
  lFecha	= tDocumento2(cFecha)
  // Utilizamos gNombreConcepto para guardar el nombre del concepto de los documentos ya que al
  //  imprimir los movimientos del asociados del reporte se cambia la posición de tConceptoDocto
  lConcepto	= gNombreConcepto

  // Cambiar el indice a Documentos por cIdDocumento
  tDocumento.UsaIndice['']
  // Recorre todos los movimientos del documento
  Mientras[tMovimiento.Busca[@Str(lIdDocumento;0)]; tMovimiento->Encontro; tMovimiento.Busca Siguiente[1]]
//N.D.5880 Se quitó código, en donde se validaba el parámetro pStatus en base a los movimientos
//se movio dicha validación para que se haga en base al documento.
//		Si pStatus != 0 
//      Si pStatus = 1 Y tMovimiento(cUnidadesPendientes)
//        Continua
//      FinSi
//      Si pStatus = 2 Y tMovimiento(cUnidadesPendientes) = 0
//        Continua
//      FinSi
//    FinSi
			
    // Impresión del movimiento
    fImprimeMovimiento(tMovimiento)

    // Imprime los titulos para los movimientos
    fImprimeTituloMovtos()

    // Procesa los movimientos relacionados 
    // N.D.5710 Enviar el numero de consolidaciones, movimiento destino y las unidades originales
    lIdMovtoDestino = tMovimiento(cIdMovDest)    
    Si pTipoReporte = 0
      Si tMovimiento(cNumConsol) > 0
        lIdMovtoDestino = tMovimiento(cIdMovimiento)
      FinSi
      fProcesaMovtosRelacionados(tMovtosRelacionados; tMovimiento(cIdMovtoOrigen); tMovimiento(cNumConsol); lIdMovtoDestino; tMovimiento(cUnidades); tMovimiento(cUnidadesOrigen); lFecha; lSerie; lFolio; lConcepto)
    Sino
      fProcesaMovtosRelacionados(tMovtosRelacionados; tMovimiento(cIdMovimiento);  tMovimiento(cNumConsol); lIdMovtoDestino; tMovimiento(cUnidades); tMovimiento(cUnidadesOrigen); lFecha; lSerie; lFolio; lConcepto)
   FinSi
  FinMientras
FinFunc


// *************************************************************************************************
// E N C A B E Z A D O
// *************************************************************************************************
Encab
	Texto '@TC{255,0,0}@S{8}AdminPAQ'
	Hoja '"@TC{0,0,0}@S{8}Hoja: '
	Imprime
  Texto '"@TC{0,0,0}@S{8}Fecha: ' & fFormateaFecha(@Hoy();gIdioma)
 	Imprime
	Texto '^@TC{0,0,0}@S{22}' & tEmpresa->Nombre
	Imprime
	Si pTipoReporte = 0
	  Texto '^@TC{0,0,0}@S{16}ANALISIS DE ORIGEN DE DOCUMENTOS'
	Sino
    Texto '^@TC{0,0,0}@S{16}ANALISIS DE DESTINO DE DOCUMENTOS'
	FinSi
	Imprime
  Saltalin
	Si pStatus = 1
		Texto '^@TC{0,0,0}@S{12}Analisis de documentos surtidos'
		Imprime
	FinSi
	Si pStatus = 2
		Texto '^@TC{0,0,0}@S{12}Analisis de documentos sin surtir o parcialmente surtidos'
		Imprime
	FinSi
	NEGRITAS FALSE
	Color @RGB(0;0;0)
	Altura 9
	Columnas 21;1.80,0.15,0.60,0.10,1.80,0.15,3.00,0.15,1.80,0.15,0.60,0.10,1.80,0.15,3.00,0.15,1.50,0.10,1.50,0.10,1.70,0
FinEncab


// *************************************************************************************************
// Cuerpo del reporte
// *************************************************************************************************

  // Configura las variables globales del reporte
  fConfiguraReporte()
 
  gHayMovtosConsolidados = 0

  Si pFolioInicial = pFolioFinal
    // Utilización de tDocumento2 en lugar de tDocumento ya que este ultimo se utiliza para buscar 
    //  los documentos relacionados
    // Cambiar el indice a Documentos por iDoctoDeSerieFolio
    tDocumento2.UsaIndice['iDoctoDeSerieFolio']
    // Busquéda del Concepto
    tConceptoDocto.Busca[pConcepto]
    // Utilizamos gNombreConcepto para guardar el nombre del concepto de los documentos ya que al
    //  imprimir los movimientos del asociados del reporte se cambia la posición de tConceptoDocto
    gNombreConcepto = tConceptoDocto(cNombreConcepto)

    // Busquéda del Documento
    tDocumento2.Busca[@Str(tConceptoDocto(cIdDocumentoDe);0) & ':' & pSerie & ':' & @Str(pFolioInicial;0)]
    Si tDocumento2->Encontro y tDocumento2(cIdConceptoDocumento) = tConceptoDocto(cIdConceptoDocumento)
     //N.D.5880 Se hace validación del filtro pStatus en base a los documentos     					
     Si pStatus != 0
  	 	Si pStatus = 1 Y tDocumento2(CUNIDADESPENDIENTES) = 0
        Texto '@TC{0,0,0}@L{-1}'
      	Imprime							
        fImprimeDoctoOrigenDestino ()
	  	FinSi	
      Si pStatus = 2 Y tDocumento2(CUNIDADESPENDIENTES) > 0
      	Texto '@TC{0,0,0}@L{-1}'
        Imprime														
        fImprimeDoctoOrigenDestino ()
      FinSi													
     SiNo
     	Texto '@TC{0,0,0}@L{-1}'
  		Imprime												
      fImprimeDoctoOrigenDestino ()  
     FinSi						          
     //Fin N.D.5880
    Sino
     	Texto '@TC{0,0,0}@L{-1}'
     	Imprime
      Columnas 2;20.00,0
      Texto C0; 'El documento ' & tConceptoDocto(cNombreConcepto) & ' serie ' & pSerie & ' folio ' & pFolioInicial & ' no existe.'
      Imprime
    FinSi
    // Fin Busquéda del documento
  Sino
    //Cambiar el indice a Documentos por iClienteProvCptoFecha
    tDocumento2.UsaIndice['iClienteProvCptoFecha']

    Si pCteProvInicial = ' '
      tCliente.Busca Primero
      pCteProvInicial = tCliente(cCodigoCliente)
    Finsi

    Si pCteProvFinal = ' '
      tCliente.Busca Ultimo
      pCteProvFinal =  tCliente(cCodigoCliente)
    Finsi

    // Busquéda del Concepto
    tConceptoDocto.Busca[pConcepto]
    // Utilizamos gNombreConcepto para guardar el nombre del concepto de los documentos ya que al
    //  imprimir los movimientos del asociados del reporte se cambia la posición de tConceptoDocto
    gNombreConcepto = tConceptoDocto(cNombreConcepto)

    // Utilización de gSeImprimieronDoctos para saber si se imprimio algun documento
    gSeImprimieronDoctos = 0

    Mientras [tCliente.Busca[pCteProvInicial & '..'  & pCteProvFinal]; tCliente->Encontro; tCliente.Busca Siguiente[1]]
      Si tCliente(cIdClienteProveedor) = 0
        Continua
      FinSi 

      lFecha = pFechaInicial
      Mientras lFecha <= pFechaFinal  
        Mientras [tDocumento2.Busca[@Str(tCliente(cIdClienteProveedor);0) & ':' & pConcepto & ':' & lFecha]; tDocumento2->Encontro; tDocumento2.Busca Siguiente[3]]
          Si pSerie != ' ' 
            Si tDocumento2(cSerieDocumento) != pSerie
              Continua
            FinSi
          FinSi

          Si tDocumento2(cFolio) > pFolioFinal O tDocumento2(cFolio) < pFolioInicial 
            Continua
          FinSi

          // Utilización de gSeImprimieronDoctos para saber si se imprimio algun documento
          gSeImprimieronDoctos = 1

          //N.D.5880 Se hace validación del filtro pStatus en base a los documentos     					
          Si pStatus != 0						
            Si pStatus = 1 Y tDocumento2(CUNIDADESPENDIENTES) = 0
              Texto '@TC{0,0,0}@L{-1}'
              Imprime							
              fImprimeDoctoOrigenDestino ()
            FinSi	
            Si pStatus = 2 Y tDocumento2(CUNIDADESPENDIENTES) > 0
              Texto '@TC{0,0,0}@L{-1}'
              Imprime														
              fImprimeDoctoOrigenDestino ()
            FinSi													
          SiNo
            Texto '@TC{0,0,0}@L{-1}'
            Imprime												
            fImprimeDoctoOrigenDestino ()  
          FinSi		
          //Fin N.D.5880				
					
          Saltalin 3
        FinMientras
        // Fin busqueda de documentos a una fecha
        lFecha = fFechaSiguiente(lFecha)
      FinMientras
      // Fin recorrido de las fechas
    FinMientras
    // Fin recorrido de los clientes
  
    // Utilización de gSeImprimieronDoctos para saber si se imprimio algun documento
    // En caso de que no se impriman documentos indicarlo
    Si gSeImprimieronDoctos = 0
      Columnas 2;20.00,0
     	Texto '@TC{0,0,0}@L{-1}'
     	Imprime
      Texto C0; 'No existen documentos de ' & tConceptoDocto(cNombreConcepto) & ' con serie ' & pSerie & ' y con folio del ' & pFolioInicial & ' al ' & pFolioFinal & '.'
      Imprime      
    FinSi
  FinSi

  // N.D.5710 Indicar si existen movimientos consolidados
  Si gHayMovtosConsolidados = 1
    Texto '* - Movimientos consolidados'
    Imprime
  FinSi
