// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//	Reporte : ExpDocP.rpt.
//	
//	Proceso : Exporta los datos de todos los documentos junto con sus 
//    movimientos (normales, ocultos, de series y capas) y detalles de las series 
//    y capas relacionadas.
//
//	Creacion: Nicolás Acosta Ramírez.
//
//	Fecha   : 18 de Julio de 2001
//
//	Ult.Mod :
//
//	Fecha   :
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//  Historia de Revisiones
//  Fecha       ID-Lotus        Descripcion
//  ---------------------------------------------------------------------------
//  09/05/2002			Cambio para exportar series/capas en productos
//				con características (GTP)
//  13/05/2002			Arreglo en los tipos de documentos de 2 movtos (GTP)
//  08/07/2002  N.D.834	        Al exportar las asociaciones entre documentos
//				(Cargo / Abono) adicionar los siguientes campos:
//				cCodigoCteProv y cIdMonedaAbono.
//				Esto a fin de que al importar las asociaciones se
//				pueda realizar una validación del cliente y del
//				importe (LAP)
//  09/07/2002	N.D.855		En los documentos de devolución de remisión, al
//				exportar el movimiento de la capa se debe de
//				exportar la capa destino (Capa del movimiento de
//				salida de la devolución) y no la capa origen ya
//				que al importar esta restando unidades a la capa
//				destino y sumando a la origen (LAP)
//				- fImprimirMovtosCapas
//  10/07/2002	N.D.871		Exportar las observaciones del documento así como
//				la bandera de Observaciones. Las observaciones al
//				ser campo memo se exportarán entre llaves para
//				delimitar su inicio y final. (LAP)
//  19/07/2002	N.D.878		Al exportar la información del movimiento origen
//				de un movimiento oculto se imprimia "0,0,0,"; lo
//				cuan indica "Numero_movimiento,Codigo_concepto_
//				documento,Folio_documento,Serie_documento" esto
//				no sirve para asociar el movimiento.
//				Ahora en lugar de "Numero_movimiento" se imprime
//				la posición que ocupa el movimiento cuando se
//				realiza un rango de los movimientos cuyo cIdMovtoOwner
//				es igual al ID del movto origen; es decir un rango de
//				todos los movtos ocultos del mismo movto al que
//				pertenece el movto_origen que deseamos imprimir.
//				Así al importar este movimiento oculto y como se puede
//				conocer el Id del movimiento origen del movto visible
//				podemos determinar con cual movimiento oculto se debe
//				de asociar
//				- fImprimeLlaveMovOrigen
//   03/06/2004 N.C. 44         Se modificaron los parametros para poder exportar en
//                              base a serie y folio (FG)
//   08/07/2004 N.D.2870        En caso de indicar una serie tomar los cuatro primeros
//                              caracteres de la misma (LAP)
//                              - fSePuedeExportarDocumento
//   08/12/2004 N.D.3019        En los movimientos-capa exportar la unidad de captura (LAP)
//                              - Cuerpo del reporte
//                              - fImprimirMovtosCapas
//   01/03/2005 N.D.3150        Incluir un rango de fechas en la exportación de
//                              documentos (LAP)
//                              - Parametros del reporte
//                              -     
//   11/05/2005 N.D.3154        Solamente exportar las relaciones cargo-abono de los 
//                              documentos que se han exportados (LAP)
//                              - fExportarRelacionCargoAbono
//                              - Exportación de las relaciones Cargo-Abono
//   04/06/2008 N.D.5215        Se agrega en la exportación el campo CMUNICIPIO de la
//                              tabla MGW10011. (MMEV)
// 																-fImprimeDirecciones.
//                              	-Cuerpo del reporte.
//   17/03/2009 N.D.5720        Se agrega la exportación del campo CNUMADUANA de las 
//                              tablas MGW10032 y MGW10025. (IYPZ)
//                                 - fImprimirMovtosSeries
//                                 - fImprimirCapas
//                                 - Cuerpo del reporte
//   04/09/2009 N.D.5987        Se omite la exportación de documentos CFD. (IYPZ)
//                                 - fSePuedeExportarDocumento   
// *****************************************************************************
//	Parámetros del reporte:
Incluye LibAdminPAQ.Rpt
Parametro pEspecificarSerie = 0         // Indica si se va a solicitar una serie específica
Parametro pSerie            = ''        // Serie del documento (única)
Parametro pFolioInicial     = 1         // Folio inicial del rango
Parametro pFolioFinal       = 999999    // Folio final del rango
Parametro pFechaInicial     = '20010101'// N.D.3150 Rango de fechas
Parametro pFechaFinal       = '20011231'// N.D.3150
Parametro pConceptosDocs    = '*'       // Conceptos a exportar.

// **********************************************************************************************
//	Tablas a utilizar:
//
// mgw00001 = Empresas.
// mgw10002 = Clientes/Proveedores.
// mgw10003 = Almacenes.
// mgw10004 = Identificador de productos y detalles.
// mgw10005 = Productos.
// mgw10006 = Conceptos de Documentos.
// mgw10007 = Documentos Soportados.
// mgw10008 = Documentos.
// mgw10009 = Abonos y Cargos.
// mgw10010 = Movimientos.
// mgw10011 = Direcciones.
// mgw10019 = Clasificaciones.
// mgw10020 = Valores de Clasificación.
// mgw10022 = Valores de características.
// mgw10025 = Capas de Producto.
// mgw10026 = Unidades.
// mgw10028 = Movimientos de Capas.
// mgw10032 = Números de Serie.
// mgw10036 = Movimientos de Series.
// **********************************************************************************************

UsaEmpresa tEmpresa;'ADMINPAQW'
UsaEmpresa tEmpresa2;'';tEmpresa->SysDirDatos

UsaTabla tAgente = tEmpresa['mgw10001']
UsaTabla tCliProv = tEmpresa['mgw10002']
UsaTabla tAlmacenes = tEmpresa['mgw10003']
UsaTabla tIdProdDetalles = tEmpresa['mgw10004']
UsaTabla tProductos = tEmpresa['mgw10005']
UsaTabla tConceptosDoc = tEmpresa['mgw10006']
UsaTabla tDocSoportados = tEmpresa['mgw10007']
UsaTabla tDocumentos = tEmpresa['mgw10008']
UsaTabla tDocOrigen = tEmpresa['mgw10008']
tDocOrigen.Usaindice['']
UsaTabla tAbonosYCargos = tEmpresa['mgw10009']
UsaTabla tMovimientos = tEmpresa['mgw10010']
UsaTabla tMovtosOcultos = tEmpresa['mgw10010']
UsaTabla tMovtosOrigen = tEmpresa['mgw10010']
UsaTabla tDirecciones = tEmpresa['mgw10011']
UsaTabla tClasificaciones = tEmpresa['mgw10019']
UsaTabla tValClasificacion = tEmpresa['mgw10020']
UsaTabla tValCaracteristicas = tEmpresa['mgw10022']
UsaTabla tCapas = tEmpresa['mgw10025']
UsaTabla tUnidades = tEmpresa['mgw10026']
UsaTabla tMovtosCapas = tEmpresa['mgw10028']
UsaTabla tNumerosSerie = tEmpresa['mgw10032']
UsaTabla tMovtosSeries = tEmpresa['mgw10036']

UsaTabla tParametros  = tEmpresa2['mgw00001']

// **********************************************************************************************
// Definiciones y asumidos globales para el reporte
// *********************************************************************************************
Columnas 1;60.0

UsaLetra 'Arial'
Altura 10

// *****************************************************************************
//  fImprimeFecha
//
//	Imprime una fecha con formato de la base de datos de
//  AdminPaq (CAC000.DLL)
//
//  Parámetros
//    - vFecha : cadena con la fecha en formato reporteador.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeFecha(vFecha)
Local vCadena1
  vCadena1 = @SUBSTR(vFecha;4;2) & '/' & @SUBSTR(vFecha;6;2) & '/' & @SUBSTR(vFecha;0;4)
  imprime vCadena1
FinFunc

// *****************************************************************************
//  fImprimeCodigoCliProv
//
//	Busca el cliente/proveedor con id dado y si lo encuentra 
//  imprime el código.
//
//  Parámetros 
//    - vIdCliProv : id de cliente/proveedor.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeCodigoCliProv(vIdCliProv)
Local vCadena1
  Si vIdCliProv = '0' O vIdCliProv = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tCliProv.Busca[vIdCliProv]
    Si tCliProv->Encontro
      vCadena1 = tCliProv(CCodigoCliente)
      imprime vCadena1
    SiNo
      vCadena1 = ''
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImprimeCodigoAgente
//
//	Busca el agente con id dado y si lo encuentra imprime el código.
//
//  Parámetros 
//    - vIdAgente : id del agente.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeCodigoAgente(vIdAgente)
Local vCadena1
  Si vIdAgente = '0' O vIdAgente = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tAgente.Busca[vIdAgente]
    Si tAgente->Encontro
      vCadena1 = tAgente(cCodigoAgente)
      imprime vCadena1
    SiNo
      vCadena1 = ''
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImpriemeClasificacion
//
//	Busca el valor de clasificación con id dado y si lo encuentra 
//  imprime el código.
//
//  Parámetros 
//    - vIdValorClasificacion : id del valor de clasificación.
//
//  Salidas 
// *****************************************************************************
DefFunc fImpriemeClasificacion(vIdValorClasificacion)
Local vCadena1

  Si vIdValorClasificacion = '0' O vIdValorClasificacion = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tValClasificacion.Busca[vIdValorClasificacion]
    Si tValClasificacion->Encontro
      vCadena1 = tValClasificacion(cCodigoValorClasificacion)
      imprime vCadena1
    SiNo
      vCadena1 = ''
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImprimeNombreUnidad
//
//	Busca la unidad con id dado y si la encuentra imprime su nombre.
//
//  Parámetros 
//    - vIdUnidad : id de la unidad.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeNombreUnidad(vIdUnidad)
Local vCadena1
  Si vIdUnidad = '0' O vIdUnidad = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tUnidades.Busca[vIdUnidad]
    Si tUnidades->Encontro
      vCadena1 = tUnidades(CNOMBREUNIDAD)
      imprime vCadena1
    SiNo
      vCadena1 = ''
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImprimeCodigoProducto
//
//	Busca el producto con id dado y si lo encuentra imprime su código y tipo.
//
//  Parámetros 
//    - vIdProducto : id de producto.
//
//  Salidas 
//
//  Historia de Revisiones
//  Fecha       ID-Lotus        Descripcion
//  ---------------------------------------------------------------------------
//	13/05/2002		Se imprime código nulo si no se encuentra (GTP)
// *****************************************************************************
DefFunc fImprimeCodigoProducto(vIdProducto)
Local vCadena1
Local lEsUnPaquete

  lEsUnPaquete = 0
  Si vIdProducto = '0' O vIdProducto = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tProductos.Busca[vIdProducto]
    Si tProductos->Encontro
      Si tProductos(CTIPOPRODUCTO) = 2
        //Si es un paquete
        lEsUnPaquete = 1
      FinSi //Fin de si es un paquete
      vCadena1 = tProductos(CCODIGOPRODUCTO)
      imprime vCadena1
    SiNo
	    //Escribir nulo
	    vCadena1 = ''
	    imprime vCadena1
    FinSi //Fin de si encontró el producto
  FinSi //Fin de si tiene Id
  Retorna lEsUnPaquete
FinFunc //Fin de fImprimeCodigoProducto

// *****************************************************************************
//  fImpriemeCodigoAlmacen
//
//	Busca el almacen con id dado y si lo encuentra imprime su código.
//
//  Parámetros 
//    - vIdAlmacen : id de almacen.
//
//  Salidas 
// *****************************************************************************
DefFunc fImpriemeCodigoAlmacen(vIdAlmacen)
Local vCadena1

  Si vIdAlmacen = '0' O vIdAlmacen = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tAlmacenes.Busca[vIdAlmacen]
    Si tAlmacenes->Encontro
      vCadena1 = tAlmacenes(CCODIGOALMACEN)
      imprime vCadena1
    SiNo
      vCadena1 = ''
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImprimeLlaveDoc
//
//	Busca el documento con id dado y si lo encuentra imprime la llave
//  que lo identifica (CIDCONCEPTO,CSERIEDOCUMENTO,CFOLIO)
//
//  Parámetros 
//    - tDoc : tabla de documentos por valor para recuperar la posición 
//  anterior al llamado de esta función.
//    - vIdDocOrigen : id de documento.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeLlaveDoc(vIdDocOrigen)
Local vCadena1

  Si vIdDocOrigen = '0' O vIdDocOrigen = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tDocOrigen.Busca[vIdDocOrigen]
    Si tDocOrigen->Encontro
      tConceptosDoc.Busca[@Str(tDocOrigen(CIDCONCEPTODOCUMENTO);0)]
    	Si tConceptosDoc->Encontro
      	vCadena1 = tConceptosDoc(CCODIGOCONCEPTO) & ',' & tDocOrigen(CFOLIO) & ',' & @Str(tDocOrigen(CSERIEDOCUMENTO);0)
      SiNo
      	//Escribir un código por defecto
      	vCadena1 = '0,0,'
      FinSi
      imprime vCadena1
    SiNo
    	//Se mueve al último documento
    	tDocOrigen.Busca Ultimo
    	//Escribir un codigo por defecto
      vCadena1 = '0,0,'
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImprimeLlaveMovOrigen
//
//	Busca el movimiento con id dado y si lo encuentra imprime la llave
//  que lo identifica (CIDDOCUMENTODE,CSERIEDOCUMENTO,CFOLIO,CNUMEROMOVIMIENTO)
//
//  Parámetros 
//    - tDoc : tabla de documentos por valor para recuperar la posición 
//  anterior al llamado de esta función.
//    - vIdMovtoOrigen : id de movimiento.
//
//  Salidas 
//
// Historial
//19/07/2002  N.D.878	Al exportar la información del movimiento origen
//			de un movimiento oculto se imprimia "0,0,0,"; lo
//			cuan indica "Numero_movimiento,Codigo_concepto_
//			documento,Folio_documento,Serie_documento" esto
//			no sirve para asociar el movimiento.
//			Ahora en lugar de "Numero_movimiento" se imprime
//			la posición que ocupa el movimiento cuando se
//			realiza un rango de los movimientos cuyo cIdMovtoOwner
//			es igual al ID del movto origen; es decir un rango de
//			todos los movtos ocultos del mismo movto al que 
//			pertenece el movto_origen que deseamos imprimir. 
//			Así al importar este movimiento oculto y como se puede
//			conocer el Id del movimiento origen del movto visible 
//			podemos determinar con cual movimiento oculto se debe 
//			de asociar
// *****************************************************************************
DefFunc fImprimeLlaveMovOrigen(vIdMovtoOrigen)
Local vCadena1

  Si vIdMovtoOrigen = '0' O vIdMovtoOrigen = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tMovtosOrigen.Busca[vIdMovtoOrigen]
    Si tMovtosOrigen->Encontro
			// N.D.878 Inicio
			Si tMovtosOrigen(CIDDOCUMENTO) = 0
			// Si el movimiento es oculto; es decir no tiene cIdDocumento imprimimos
			// como información del documento:
			// "Posicion,0,0,"
			// Donde Posicion indica la posición que ocupa el movimiento origen (vIdMovtoOrigen) 
			//	cuando se realiza un rango de todos los movimientos ocultos del movimiento al que
			// 	pertenece el movimiento origen que se desea imprimir (vIdMovtoOrigen)
				// Obtención del movimiento padre del movto_origen
				vCadena1 = @Str(tMovtosOrigen(cIdMovtoOwner);0)
				tMovtosOrigen.Usaindice['iMovtoOwnerMovto']
				lNumMovto = 1
				// Generamos el rango de todos los movimientos ocultos
			  tMovtosOrigen.Busca[vCadena1 & '..' & vCadena1]
			  Si tMovtosOrigen->Encontro
			    tMovtosOrigen.Busca Primero
					// Buscamos la posición que ocupa el movto_origen (vIdMovtoOrigen) que deseamos
					// imprimir
    			Mientras tMovtosOrigen->Encontro Y tMovtosOrigen(CIDMOVIMIENTO) != vIdMovtoOrigen
						lNumMovto = lNumMovto + 1
		      	tMovtosOrigen.SaltaReg[1]
	    		FinMientras
				FinSi
				tMovtosOrigen.Usaindice['']
				// Imprimimos la información del movto
				vCadena1 = @Str(lNumMovto;0) & ',0,0,'
				imprime vCadena1
			SiNo
			// El movimiento es visible, así que imprimimos como información del origen
			// "Numero_movimiento, Codigo_concepto_docto,Folio_docto,Serie_docto"
      	vCadena1 = @Str(tMovtosOrigen(CIDDOCUMENTO);0)
	      tDocOrigen.Busca[vCadena1]
  	    Si tDocOrigen->Encontro
    	    tConceptosDoc.Busca[@Str(tDocOrigen(CIDCONCEPTODOCUMENTO);0)]
      		Si tConceptosDoc->Encontro
      			vCadena1 = @Str(tMovtosOrigen(CNUMEROMOVIMIENTO);0) & ',' & tConceptosDoc(CCODIGOCONCEPTO) & ',' & tDocOrigen(CFOLIO) & ',' & @Str(tDocOrigen(CSERIEDOCUMENTO);0)
	      	SiNo
  	    		//Escribir un código por defecto
	      		vCadena1 = '0,0,0,'
  	    	FinSi
    	    imprime vCadena1
      	SiNo
      		//Escribir un código por defecto
	        vCadena1 = '0,0,0,'
  	      imprime vCadena1
    	  FinSi
			FinSi
			// N.D.878 Fin
    SiNo
    	//Escribir un código por defecto
      vCadena1 = '0,0,0,'
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImprimirMovtosSeries
//
//	Imprime todos los movimientos de números de serie asociados 
//  a un movimiento de documento (normal u oculto).
//
//  Parámetros 
//    - vIdMovimiento : id de movimiento.
//
//  Salidas
// *****************************************************************************
DefFunc fImprimirMovtosSeries(vIdMovimiento)
Local vCadena1, vNumero1

  //Se prepara el rango con base en el identificador de movimiento.
  vCadena1 = @Str(vIdMovimiento;0)
  tMovtosSeries.Busca[vCadena1 & '..' & vCadena1]
  Si tMovtosSeries->Encontro
    tMovtosSeries.Busca Primero
    Mientras tMovtosSeries->Encontro Y tMovtosSeries(CIDMOVIMIENTO) = vIdMovimiento

      tNumerosSerie.Busca[@Str(tMovtosSeries(CIDSERIE);0)]
      Si tNumerosSerie->Encontro
        Texto C0;'MGW10032'
        imprime
        fImprimeCodigoProducto(@Str(tNumerosSerie(CIDPRODUCTO);0))
        vCadena1 = tNumerosSerie(CNUMEROSERIE)
        imprime vCadena1
        // N.D.1515 Inicio
        //El código del almacen se hereda del movimiento.
        // NOTA: en caso de movimientos de devolución de remisión el almacén 
        //  se debe de tomar del movimiento oculto
        Si tMovimientos(CIDDOCUMENTODE) = 6
          fImpriemeCodigoAlmacen(@Str(tMovtosOcultos(CIDALMACEN);0))
        Sino
          fImpriemeCodigoAlmacen(@Str(tMovimientos(CIDALMACEN);0))
        FinSi
        // N.D.1515 Fin
        vCadena1 = tNumerosSerie(CNUMEROLOTE)
        imprime vCadena1
        vCadena1 = tNumerosSerie(CFECHACADUCIDAD)
        fImprimeFecha(vCadena1)
        vCadena1 = tNumerosSerie(CFECHAFABRICACION)
        fImprimeFecha(vCadena1)
        vCadena1 = tNumerosSerie(CPEDIMENTO)
        imprime vCadena1
        vCadena1 = tNumerosSerie(CADUANA)
        imprime vCadena1
        vCadena1 = tNumerosSerie(CFECHAPEDIMENTO)
        fImprimeFecha(vCadena1)
        vNumero1 = @Str(tNumerosSerie(CTIPOCAMBIO);5)
        imprime vNumero1
        vNumero1 = @Str(tNumerosSerie(CCOSTO);5)
        imprime vNumero1
        vNumero1 = @Str(tNumerosSerie(CNUMADUANA);0) //N.D.5720
        imprime vNumero1
        vCadena1 = tNumerosSerie(CCLAVESAT)
        imprime vCadena1
      FinSi

      //Texto C0;'MGW10036'
      //imprime
      //vNumero1 = @Str(tMovtosSeries(CIDMOVIMIENTO);0)
      //imprime vNumero1

      //Si tNumerosSerie->Encontro
      //  tProductos.Busca[@Str(tNumerosSerie(CIDPRODUCTO);0)]
      //  Si tProductos->Encontro
      //    vCadena1 = tNumerosSerie(CNUMEROSERIE) & ',' & tProductos(CCODIGOPRODUCTO)
      //    imprime vCadena1
      //  SiNo
      //    vCadena1 = ''
      //    imprime vCadena1
      //  FinSi
      //SiNo
      //  vCadena1 = ''
      //  imprime vCadena1
      //FinSi

      tMovtosSeries.SaltaReg[1]
    FinMientras
  FinSi
FinFunc

// *****************************************************************************
//  fImprimeCapaOrigen
//
//	Busca una capa con id dado y si lo encuetra imprime su llave formada
//  por los campos:CCODIGOPRODUCTO,CCODIGOALMACEN,CPEDIMENTO,CNUMEROLOTE;
//  obteniendo los códigos a partir de los id's.
//
//  Parámetros
//    - tCap : tabla de capas.
//    - vIdCapaOrigen : id de la capa origen.
//
//  Salidas
// *****************************************************************************
DefFunc fImprimeCapaOrigen(tCap: Tabla; vIdCapaOrigen)
Local vCadena1, vNumero1

  Si vIdCapaOrigen = '0' O vIdCapaOrigen = ''
    //Escribir un código por defecto
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tCap.Busca[vIdCapaOrigen]
    Si tCap->Encontro
      vNumero1 = @Str(tCap(CIDPRODUCTO);0)
      tProductos.Busca[vNumero1]
      vNumero1 = @Str(tCap(CIDALMACEN);0)
      tAlmacenes.Busca[vNumero1]
      Si tProductos->Encontro Y tAlmacenes->Encontro
        vCadena1 = tProductos(CCODIGOPRODUCTO) & ',' & tAlmacenes(CCODIGOALMACEN) & ',' & tCap(CPEDIMENTO) & ',' & tCap(CNUMEROLOTE)
        imprime vCadena1
      SiNo
        vCadena1 = ''
        imprime vCadena1
      FinSi
    SiNo
      vCadena1 = ''
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImprimirCapas
//
//	Imprime todas las capas asociados a un movimiento de documento normal.
//
//  Parámetros 
//    - vIdMovimiento : id de movimiento.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimirCapas(vIdMovimiento)
Local vCadena1, vNumero1

  //Se prepara el rango con base en el identificador de movimiento.
  vCadena1 = @Str(vIdMovimiento;0)
  tMovtosCapas.Busca[vCadena1 & '..' & vCadena1]
  Si tMovtosCapas->Encontro
    tMovtosCapas.Busca Primero
    Mientras tMovtosCapas->Encontro Y tMovtosCapas(CIDMOVIMIENTO) = vIdMovimiento
      
      Si tMovtosCapas(CTIPOCAPA) = 5
        tMovtosCapas.SaltaReg[1]
        Continua
      FinSi
      
      tCapas.Busca[@Str(tMovtosCapas(CIDCAPA);0)]
      Si tCapas->Encontro
        Texto C0;'MGW10025'
        imprime
        fImpriemeCodigoAlmacen(@Str(tCapas(CIDALMACEN);0))
        fImprimeCodigoProducto(@Str(tCapas(CIDPRODUCTO);0))
        vCadena1 = tCapas(CFECHA)
        fImprimeFecha(vCadena1)
        vNumero1 = @Str(tCapas(CTIPOCAPA);0)
        imprime vNumero1
        vCadena1 = tCapas(CNUMEROLOTE)
        imprime vCadena1
        vCadena1 = tCapas(CFECHACADUCIDAD)
        fImprimeFecha(vCadena1)
        vCadena1 = tCapas(CFECHAFABRICACION)
        fImprimeFecha(vCadena1)
        vCadena1 = tCapas(CPEDIMENTO)
        imprime vCadena1
        vCadena1 = tCapas(CADUANA)
        imprime vCadena1
        vCadena1 = tCapas(CFECHAPEDIMENTO)
        fImprimeFecha(vCadena1)
        vNumero1 = @Str(tCapas(CTIPOCAMBIO);5)
        imprime vNumero1
        //Se intercambia el valor de tCapas(CEXISTENCIA) por tMovtosCapas(CUNIDADES)
        //porque deben de coincidir con los datos del movimiento
        vNumero1 = @Str(tMovtosCapas(CUNIDADES);5)
        imprime vNumero1
        vNumero1 = @Str(tCapas(CCOSTO);5)
        imprime vNumero1
        vCadena1 = @Str(tCapas(CIDCAPAORIGEN);0)
        fImprimeCapaOrigen(tCapas;vCadena1)
        vNumero1 = @Str(tCapas(CNUMADUANA);0) //N.D.5720
        imprime vNumero1
        vCadena1 = tCapas(CCLAVESAT)
        imprime vCadena1
      FinSi

      tMovtosCapas.SaltaReg[1]
    FinMientras
  FinSi
FinFunc

// *****************************************************************************
//  fImprimirMovtosCapas
//
//	Imprime todos los movimientos de capas asociados a un movimiento
//  de documento normal.
//
//  Parámetros 
//    - vIdMovimiento : id de movimiento.
//
//  Salidas 
//  Historial de cambios
//  08/12/2004 N.D.3019        En los movimientos-capa exportar la unidad de captura (LAP)
// *****************************************************************************
DefFunc fImprimirMovtosCapas(vIdMovimiento)
Local vCadena1, vNumero1

  //Se prepara el rango con base en el identificador de movimiento.
  vCadena1 = @Str(vIdMovimiento;0)
  tMovtosCapas.Busca[vCadena1 & '..' & vCadena1]
  Si tMovtosCapas->Encontro
    tMovtosCapas.Busca Primero
    Mientras tMovtosCapas->Encontro Y tMovtosCapas(CIDMOVIMIENTO) = vIdMovimiento

      Si tMovtosCapas(CTIPOCAPA) = 5
        tMovtosCapas.SaltaReg[1]
        Continua
      FinSi
      
      tCapas.Busca[@Str(tMovtosCapas(CIDCAPA);0)]
      Si tCapas->Encontro
        vNumero1 = @Str(tCapas(CIDPRODUCTO);0)
        tProductos.Busca[vNumero1]
        vNumero1 = @Str(tCapas(CIDALMACEN);0)
				// N.D.855 Inicio
				// En caso de ser una Devolución de Remisión se debe de tomar el almacén 
				//	del movimiento que corresponde a la capa origen; es decir el movimiento 
				// 	de salida
				Si aEsVisible = 0 Y tMovimientos(CIDDOCUMENTODE) = 6 Y tMovimientos(CAFECTAEXISTENCIA) = 1
					// No es necesario realizar busqueda del almacén ya que al
					// imprimir el movimiento oculto nos posicionamos en su almacén
				Sino
					// Ubica el almacén del movimiento visible
	        tAlmacenes.Busca[vNumero1]
				FinSi
				// N.D.855 Fin
        Si tProductos->Encontro Y tAlmacenes->Encontro
          Texto C0;'MGW10028'
          imprime
	        vCadena1 = tProductos(CCODIGOPRODUCTO) & ',' & tAlmacenes(CCODIGOALMACEN) & ',' & tCapas(CPEDIMENTO) & ',' & tCapas(CNUMEROLOTE)
          imprime vCadena1
          vCadena1 = tMovtosCapas(CFECHA)
          fImprimeFecha(vCadena1)
          vNumero1 = @Str(tMovtosCapas(CUNIDADES);5)
          imprime vNumero1
          vNumero1 = @Str(tMovtosCapas(CTIPOCAPA);0)
          imprime vNumero1
          // N.D.3019 Inicio
          // Exportación de la unidad de captura
          // CNOMBREUNIDADCAPTURA
          vNumero = @Str(tMovtosCapas(CIDUNIDAD);0)
          fImprimeNombreUnidad(vNumero)
          // N.D.3019 Fin
        FinSi
      FinSi

      tMovtosCapas.SaltaReg[1]
    FinMientras
  FinSi
FinFunc

// *****************************************************************************
//  fImprimeNemosCaracteristicas
//
//	Busca los valor de característica con id dado y si los encuentra
//  imprime sus nemos en el siguiente formato:
//    cNemoCaracteristica1,cNemoCaracteristica2,cNemoCaracteristica3
//
//  Parámetros
//    - vIdValCarac1 : Identificador de valor de caracterisica.
//    - vIdValCarac2 : Identificador de valor de caracterisica.
//    - vIdValCarac3 : Identificador de valor de caracterisica.
//
//  Salidas
// *****************************************************************************
DefFunc fImprimeNemosCaracteristicas(vIdValCarac1; vIdValCarac2; vIdValCarac3;vIdProducto)
Local vCadena1, vNemo1, vNemo2, vNemo3, vCodigoProducto

  tValCaracteristicas.Busca[@Str(vIdValCarac1;0)]
  Si tValCaracteristicas->Encontro Y tValCaracteristicas(CIDVALORCARACTERISTICA) != 0
    vNemo1 = tValCaracteristicas(CNEMOCARACTERISTICA)
  SiNo
    vNemo1 = ''
  FinSi
  
  tValCaracteristicas.Busca[@Str(vIdValCarac2;0)]
  Si tValCaracteristicas->Encontro Y tValCaracteristicas(CIDVALORCARACTERISTICA) != 0
    vNemo2 = tValCaracteristicas(CNEMOCARACTERISTICA)
  SiNo
    vNemo2 = ''
  FinSi
  
  tValCaracteristicas.Busca[@Str(vIdValCarac3;0)]
  Si tValCaracteristicas->Encontro Y tValCaracteristicas(CIDVALORCARACTERISTICA) != 0
    vNemo3 = tValCaracteristicas(CNEMOCARACTERISTICA)
  SiNo
    vNemo3 = ''
  FinSi
  
  Si vIdProducto = '0' O vIdProducto = ''
    //Escribir nulo
    vCodigoProducto = ''
  SiNo
    tProductos.Busca[vIdProducto]
    Si tProductos->Encontro
      vCodigoProducto = tProductos(CCODIGOPRODUCTO)
    FinSi
  FinSi
  
  vCadena1 = vCodigoProducto & ',' & vNemo1 & ',' & vNemo2 & ',' & vNemo3
  imprime vCadena1
FinFunc

// *****************************************************************************
//  fImprimeDireccion
//
//	Imprime una dirección.
//
//  Parámetros
//
//  Salidas
// *****************************************************************************
DefFunc fImprimeDireccion()
Local vCadenaDir, vNumeroDir

  Texto C0;'MGW10011'
  imprime

  vNumeroDir = @Str(tDirecciones(CTIPOCATALOGO);0)
  imprime vNumeroDir
  vNumeroDir = @Str(tDirecciones(CTIPODIRECCION);0)
  imprime vNumeroDir

  vCadenaDir = tDirecciones(CNOMBRECALLE)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CNUMEROEXTERIOR)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CNUMEROINTERIOR)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CCOLONIA)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CCODIGOPOSTAL)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CTELEFONO1)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CTELEFONO2)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CTELEFONO3)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CTELEFONO4)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CEMAIL)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CDIRECCIONWEB)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CPAIS)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CESTADO)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CCIUDAD)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CTEXTOEXTRA)
  imprime vCadenaDir
  vCadenaDir = tDirecciones(CMUNICIPIO)
  imprime vCadenaDir
FinFunc

// *****************************************************************************
// Nombre:      fSePuedeExportarDocumento
// Descripción: 
// Entradas:	  Determina si el documento actual se puede o no exportar al TXT
// Salidas:     0 - No se exporta
//              1 - Exportar la relacion  
// Hitorial
// *****************************************************************************
DefFunc fSePuedeExportarDocumento()
Local lSeExporta
Local lSerie

  lSeExporta = 1

  //Si el documento no tiene folio o el CIDDOCUMENTO = 0 se ignora.
  Si tDocumentos(CIDDOCUMENTO) = 0 //O tDocumentos(CFOLIO) = 0
    lSeExporta = 0
  FinSi

  //Los documentos de pérdida y utilidad cambiaria no se exportan.
  Si tDocumentos(CIDDOCUMENTODE) = 28 O tDocumentos(CIDDOCUMENTODE) = 29 O tDocumentos(CIDDOCUMENTODE) = 30 O tDocumentos(CIDDOCUMENTODE) = 31
    lSeExporta = 0
  FinSi
  
  // S.C.264 Discriminar los Ajustes de IVA con documento origen
  Si tDocumentos(cIdConceptoDocumento) = gIdConceptoAjusteCliente O tDocumentos(cIdConceptoDocumento) = gIdConceptoAjusteProveedor
    Si tDocumentos(cIdDocumentoOrigen) > 0
      lSeExporta = 0
    FinSi
  FinSi

  //N.D.5987 Si el documento es CFD no se exporta.
  Si tDocumentos(CESCFD) = 1
    lSeExporta = 0
  FinSi

  //Validar si el tipo de documento forma parte de la selección (pConceptosDocs)
  Si pConceptosDocs != '*'
    //Se busca la descripción del documento.
    tDocSoportados.Busca[@Str(tDocumentos(CIDDOCUMENTODE);0)]
    Si tDocSoportados->Encontro
      vAuxiliar = @Pos(pConceptosDocs;tDocSoportados(CDESCRIPCION)) +1
    SiNo
      vAuxiliar = 0
    FinSi
  Sino
    vAuxiliar = 1 
  FinSi
  
  Si pEspecificarSerie = 0
    lTamano = @Len(tDocumentos(CSERIEDOCUMENTO))
    Si lTamano != 4
      Si lTamano > 4
        lSerie = @SubStr(tDocumentos(CSERIEDOCUMENTO); 1; 4)
      Sino
        vCadena = '      '
        lSerie = tDocumentos(CSERIEDOCUMENTO) & @SubStr(vCadena; 1; 4 - lTamano)
      FinSi
    FinSi

    Si pSerie = lSerie
      lSerieCorrecta = 1
    Sino
      lSerieCorrecta = 0
    FinSi
  sino
    lSerieCorrecta = 1
  FinSi
  
  Si tDocumentos(cFolio) >= pFolioInicial Y tDocumentos(cFolio) <= pFolioFinal
    lFolioCorrecto = 1
  Sino
    lFolioCorrecto = 0
  FinSi  

  lSeExporta = lSeExporta * vAuxiliar * lSerieCorrecta * lFolioCorrecto
  Si lSeExporta > 1
    lSeExporta = 1
  FinSi
  Retorna lSeExporta 
FinFunc


// *****************************************************************************
// Nombre:      fExportarRelacionCargoAbono
// Descripción: Revisa si alguno de los documentos de la relación cargo-abono se
//              ha exportado al TXT a fin de exportar la relación
// Entradas:	  
// Salidas:     0 - No se exporta
//              1 - Exportar la relacion  
// Hitorial
// Fecha      SitePruebas Autor Descripcion
// 11/05/2005 N.D.3154    LAP   Implementación Inicial
// *****************************************************************************
DefFunc fExportarRelacionCargoAbono()

  // Validar si el documento de abono se exporto
  tDocumentos.Busca[@Str(tAbonosYCargos(CIDDOCUMENTOABONO);0)]
  Si tDocumentos->Encontro
    Si fSePuedeExportarDocumento(  ) = 1
      Retorna 1
    FinSi
  FinSi
  
  // Validar si el documento de cargo se exporto
  tDocumentos.Busca[@Str(tAbonosYCargos(CIDDOCUMENTOCARGO);0)]
  Si tDocumentos->Encontro
    Si fSePuedeExportarDocumento(  ) = 1
      Retorna 1
    FinSi
  FinSi

  Retorna 0  
FinFunc

// **********************************************************************************************
// Cuerpo del reporte
// **********************************************************************************************
// N.D.2870 Inicio
lTamano = @Len(pSerie)
Si lTamano != 4
  Si lTamano > 4
    pSerie = @SubStr(pSerie; 1; 4)
  Sino
    vCadena = '     '
    pSerie = pSerie & @SubStr(vCadena; 1; 4 - lTamano)
  FinSi
FinSi
// N.D.2870 Fin
//Tipo de exportación.
Texto C0;'DOCUMENTOS'
imprime
Texto C0;'MGW10008'
imprime
Texto C0;'cCodigoConcepto'
imprime
Texto C0;'CSERIEDOCUMENTO'
imprime
Texto C0;'CFOLIO'
imprime
Texto C0;'CFECHA'
imprime
Texto C0;'cCodigoCteProv'
imprime
Texto C0;'CRAZONSOCIAL'
imprime
Texto C0;'CRFC'
imprime
Texto C0;'cCodigoAgente'
imprime
Texto C0;'CFECHAVENCIMIENTO'
imprime
Texto C0;'CFECHAPRONTOPAGO'
imprime
Texto C0;'CFECHAENTREGARECEPCION'
imprime
Texto C0;'CFECHAULTIMOINTERES'
imprime
Texto C0;'CIDMONEDA'
imprime
Texto C0;'CTIPOCAMBIO'
imprime
Texto C0;'CREFERENCIA'
imprime
Texto C0;'cCodigoDocumentoOrigen'
imprime
Texto C0;'CAFECTADO'
imprime
Texto C0;'CIMPRESO'
imprime
Texto C0;'CCANCELADO'
imprime
Texto C0;'CDEVUELTO'
imprime
Texto C0;'CIDPREPOLIZA'
imprime
Texto C0;'CIDPREPOLIZACANCELACION'
imprime
Texto C0;'CESTADOCONTABLE'
imprime
Texto C0;'CGASTO1'
imprime
Texto C0;'CGASTO2'
imprime
Texto C0;'CGASTO3'
imprime
Texto C0;'CDESCUENTOPRONTOPAGO'
imprime
Texto C0;'CPORCENTAJEIMPUESTO1'
imprime
Texto C0;'CPORCENTAJEIMPUESTO2'
imprime
Texto C0;'CPORCENTAJEIMPUESTO3'
imprime
Texto C0;'CPORCENTAJERETENCION1'
imprime
Texto C0;'CPORCENTAJERETENCION2'
imprime
Texto C0;'CPORCENTAJEINTERES'
imprime
Texto C0;'CTEXTOEXTRA1'
imprime
Texto C0;'CTEXTOEXTRA2'
imprime
Texto C0;'CTEXTOEXTRA3'
imprime
Texto C0;'CFECHAEXTRA'
imprime
Texto C0;'CIMPORTEEXTRA1'
imprime
Texto C0;'CIMPORTEEXTRA2'
imprime
Texto C0;'CIMPORTEEXTRA3'
imprime
Texto C0;'CIMPORTEEXTRA4'
imprime
Texto C0;'CDESTINATARIO'
imprime
Texto C0;'CNUMEROGUIA'
imprime
Texto C0;'CMENSAJERIA'
imprime
Texto C0;'CCUENTAMENSAJERIA'
imprime
Texto C0;'CNUMEROCAJAS'
imprime
Texto C0;'CPESO'
imprime
// N.D.871 Inicio
// Impresión del campo de Observaciones del Documento
Texto C0;'COBSERVACIONES'
Imprime
// N.D.871 Fin
Texto C0;'CBANOBSERVACIONES'
imprime
Texto C0;'CBANDATOSENVIO'
imprime
Texto C0;'CBANCONDICIONESCREDITO'
imprime
Texto C0;'CBANGASTOS'
imprime
Texto C0;'CIMPCHEQPAQ'
imprime
Texto C0;'CSISTORIG'
imprime
Texto C0;'CIDMONEDCA'
imprime
Texto C0;'CTIPOCAMCA'
imprime
Texto C0;'/MGW10008'
imprime
Texto C0;'MGW10011'
imprime
Texto C0;'CTIPOCATALOGO'
imprime
Texto C0;'CTIPODIRECCION'
imprime
Texto C0;'CNOMBRECALLE'
imprime
Texto C0;'CNUMEROEXTERIOR'
imprime
Texto C0;'CNUMEROINTERIOR'
imprime
Texto C0;'CCOLONIA'
imprime
Texto C0;'CCODIGOPOSTAL'
imprime
Texto C0;'CTELEFONO1'
imprime
Texto C0;'CTELEFONO2'
imprime
Texto C0;'CTELEFONO3'
imprime
Texto C0;'CTELEFONO4'
imprime
Texto C0;'CEMAIL'
imprime
Texto C0;'CDIRECCIONWEB'
imprime
Texto C0;'CPAIS'
imprime
Texto C0;'CESTADO'
imprime
Texto C0;'CCIUDAD'
imprime
Texto C0;'CTEXTOEXTRA'
imprime
Texto C0;'CMUNICIPIO'
imprime
Texto C0;'/MGW10011'
imprime
Texto C0;'MGW10010'
imprime
Texto C0;'CNUMEROMOVIMIENTO'
imprime
Texto C0;'cCodigoProducto'
imprime
Texto C0;'cCodigoAlmacen'
imprime
Texto C0;'CUNIDADES'
imprime
Texto C0;'CUNIDADESNC'
imprime
Texto C0;'CUNIDADESCAPTURADAS'
imprime
Texto C0;'cNombreUnidad'
imprime
Texto C0;'cNombreUnidadNC'
imprime
Texto C0;'CPRECIO'
imprime
Texto C0;'CPRECIOCAPTURADO'
imprime
Texto C0;'CCOSTOCAPTURADO'
imprime
Texto C0;'CCOSTOESPECIFICO'
imprime
Texto C0;'CNETO'
imprime
Texto C0;'CIMPUESTO1'
imprime
Texto C0;'CPORCENTAJEIMPUESTO1'
imprime
Texto C0;'CIMPUESTO2'
imprime
Texto C0;'CPORCENTAJEIMPUESTO2'
imprime
Texto C0;'CIMPUESTO3'
imprime
Texto C0;'CPORCENTAJEIMPUESTO3'
imprime
Texto C0;'CRETENCION1'
imprime
Texto C0;'CPORCENTAJERETENCION1'
imprime
Texto C0;'CRETENCION2'
imprime
Texto C0;'CPORCENTAJERETENCION2'
imprime
Texto C0;'CDESCUENTO1'
imprime
Texto C0;'CPORCENTAJEDESCUENTO1'
imprime
Texto C0;'CDESCUENTO2'
imprime
Texto C0;'CPORCENTAJEDESCUENTO2'
imprime
Texto C0;'CDESCUENTO3'
imprime
Texto C0;'CPORCENTAJEDESCUENTO3'
imprime
Texto C0;'CDESCUENTO4'
imprime
Texto C0;'CPORCENTAJEDESCUENTO4'
imprime
Texto C0;'CDESCUENTO5'
imprime
Texto C0;'CPORCENTAJEDESCUENTO5'
imprime
Texto C0;'CTOTAL'
imprime
Texto C0;'CPORCENTAJECOMISION'
imprime
Texto C0;'CREFERENCIA'
imprime
Texto C0;'CAFECTAEXISTENCIA'
imprime
Texto C0;'CAFECTADOSALDOS'
imprime
Texto C0;'CAFECTADOINVENTARIO'
imprime
Texto C0;'CFECHA'
imprime
Texto C0;'CMOVTOOCULTO'
imprime
Texto C0;'cCodigoMovtoOrigen'
imprime
Texto C0;'CUNIDADESPENDIENTES'
imprime
Texto C0;'CUNIDADESNCPENDIENTES'
imprime
Texto C0;'CUNIDADESORIGEN'
imprime
Texto C0;'CUNIDADESNCORIGEN'
imprime
Texto C0;'CTIPOTRASPASO'
imprime
Texto C0;'cCodigoValorClasificacion'
imprime
Texto C0;'CTEXTOEXTRA1'
imprime
Texto C0;'CTEXTOEXTRA2'
imprime
Texto C0;'CTEXTOEXTRA3'
imprime
Texto C0;'CFECHAEXTRA'
imprime
Texto C0;'CIMPORTEEXTRA1'
imprime
Texto C0;'CIMPORTEEXTRA2'
imprime
Texto C0;'CIMPORTEEXTRA3'
imprime
Texto C0;'CIMPORTEEXTRA4'
imprime
Texto C0;'CGTOMOVTO'
imprime
// Ini N.D.2576 DRdA
Texto C0;'COBSERVAMOV'
imprime
// Fin N.D.2576
Texto C0;'CCOMVENTA'
imprime
// N.D.4232 Exportar el Segmento Contable del Movimiento
Texto C0;'CSCMOVTO'
imprime
Texto C0;'/MGW10010'
imprime
Texto C0;'MGW10025'
imprime
Texto C0;'cCodigoAlmacen'
imprime
Texto C0;'cCodigoProducto'
imprime
Texto C0;'CFECHA'
imprime
Texto C0;'CTIPOCAPA'
imprime
Texto C0;'CNUMEROLOTE'
imprime
Texto C0;'CFECHACADUCIDAD'
imprime
Texto C0;'CFECHAFABRICACION'
imprime
Texto C0;'CPEDIMENTO'
imprime
Texto C0;'CADUANA'
imprime
Texto C0;'CFECHAPEDIMENTO'
imprime
Texto C0;'CTIPOCAMBIO'
imprime
Texto C0;'CEXISTENCIA'
imprime
Texto C0;'CCOSTO'
imprime
Texto C0;'CCODIGOCAPAORIGEN'
imprime
Texto C0;'CNUMADUANA' //N.D.5720
imprime
Texto C0;'CCLAVESAT' //N.D.5720
imprime
Texto C0;'/MGW10025'
imprime
Texto C0;'MGW10028'
imprime
Texto C0;'cCodigoCapa'
imprime
Texto C0;'CFECHA'
imprime
Texto C0;'CUNIDADES'
imprime
Texto C0;'CTIPOCAPA'
imprime
// N.D.3019 Inicio
// Exportación de la unidad de captura
Texto C0;'CNOMBREUNIDADCAPTURA'
imprime
// N.D.3019 Fin
Texto C0;'/MGW10028'
imprime
Texto C0;'MGW10032'
imprime
Texto C0;'cCodigoProducto'
imprime
Texto C0;'CNUMEROSERIE'
imprime
Texto C0;'cCodigoAlmacen'
imprime
Texto C0;'CNUMEROLOTE'
imprime
Texto C0;'CFECHACADUCIDAD'
imprime
Texto C0;'CFECHAFABRICACION'
imprime
Texto C0;'CPEDIMENTO'
imprime
Texto C0;'CADUANA'
imprime
Texto C0;'CFECHAPEDIMENTO'
imprime
Texto C0;'CTIPOCAMBIO'
imprime
Texto C0;'CCOSTO'
imprime
Texto C0;'CNUMADUANA' //N.D.5720
imprime
Texto C0;'CCLAVESAT' //N.D.5720
imprime
Texto C0;'/MGW10032'
imprime
Texto C0;'MGW10009'
imprime
Texto C0;'CLLAVEABONO'
imprime
Texto C0;'cMonedaAbono'
imprime
Texto C0;'CLLAVECARGO'
imprime
Texto C0;'CIDMONEDA'
imprime
Texto C0;'CIMPORTEABONO'
imprime
Texto C0;'CIMPORTECARGO'
imprime
Texto C0;'CFECHAABONOCARGO'
imprime
Texto C0;'CLLAVEDESCUENTO'
imprime
Texto C0;'cCodigoCteProv'
imprime
Texto C0;'/MGW10009'
imprime 1

//--------------------------------------------------------------------------------------------------
vContadorElementos = 1
Si pConceptosDocs != '*'
  //Antes de exportar algún dato hay que validar si el parámetro 'pConceptosDocs'
  //contiene todos los elementos posibles, y si es así hacer pConceptosDocs = '*'
  vContadorDocSoportados = 0
  tDocSoportados.Busca Primero
  Mientras tDocSoportados->Encontro
    vContadorDocSoportados = vContadorDocSoportados + 1
    tDocSoportados.SaltaReg[1]
  FinMientras

  vContadorElementos = 0
  vCadena = @Escoge(pConceptosDocs;vContadorElementos)
  Mientras vCadena != ''
    vContadorElementos = vContadorElementos + 1
    vCadena = @Escoge(pConceptosDocs;vContadorElementos)
  FinMientras
  vContadorElementos = vContadorElementos - 1

  Si vContadorElementos = vContadorDocSoportados
    //Se seleccionaron todos los elementos.
    pConceptosDocs = '*'
  FinSi
FinSi

//--------------------------------------------------------------------------------------------------
  // S.C.264 Recuperación del concepto de Ajuste al IVA
  tConceptosDoc.UsaIndice['CCODIGOC01']
  tConceptosDoc.Busca['AJUSTE_IVA_CTE_CARGO_2010']
  gIdConceptoAjusteCliente = tConceptosDoc(cIdConceptoDocumento)
  
  tConceptosDoc.Busca['AJUSTE_IVA_PRV_ABONO_2010']
  gIdConceptoAjusteProveedor = tConceptosDoc(cIdConceptoDocumento)

  tConceptosDoc.UsaIndice['']

//--------------------------------------------------------------------------------------------------
Si vContadorElementos > 0
  //Si Se seleccionaron documentos se exportan.
  tDirecciones.Usaindice['iCatTipoCatTipoDir']
  tMovimientos.Usaindice['iDoctoNumeroMovto']
  tMovtosOrigen.Usaindice['']
  tMovtosOcultos.Usaindice['iMovtoOwnerMovto']
  tDocumentos.Usaindice['CFECHA']

  // En la exportación de documentos ahora se adiciono un filtro de rango de fechas
  // Los documentos que estén en el rango de folios deberán de cumplir también con el rango de fecha
  pFechaDocumentoIni = pFechaInicial
  pFechaDocumentoFin = pFechaFinal

  tDocumentos.Busca Primero

  gFechaBusqueda = pFechaDocumentoIni
  Mientras gFechaBusqueda <= pFechaDocumentoFin
    Mientras[tDocumentos.Busca[gFechaBusqueda]; tDocumentos->Encontro Y tDocumentos(CFECHA) = gFechaBusqueda;tDocumentos.Saltareg[1]]

      vSeDebeExportar = fSePuedeExportarDocumento()
      Si vSeDebeExportar = 1
        Texto C0;'MGW10008'
        imprime
        tConceptosDoc.Busca[@Str(tDocumentos(CIDCONCEPTODOCUMENTO);0)]
        Si tConceptosDoc->Encontro
          vCadena = tConceptosDoc(CCODIGOCONCEPTO)
          imprime vCadena
        SiNo
          vCadena = ''
          imprime vCadena
        FinSi

        vCadena = tDocumentos(CSERIEDOCUMENTO)
        imprime vCadena
        vNumero = @Str(tDocumentos(CFOLIO);0)
        imprime vNumero
        vCadena = tDocumentos(CFECHA)
        fImprimeFecha(vCadena)
        vNumero = @Str(tDocumentos(CIDCLIENTEPROVEEDOR);0)
        fImprimeCodigoCliProv(vNumero)
        vCadena = tDocumentos(CRAZONSOCIAL)
        imprime vCadena
        vCadena = tDocumentos(CRFC)
        imprime vCadena
        vNumero = @Str(tDocumentos(CIDAGENTE);0)
        fImprimeCodigoAgente(vNumero)
        vCadena = tDocumentos(CFECHAVENCIMIENTO)
        fImprimeFecha(vCadena)
        vCadena = tDocumentos(CFECHAPRONTOPAGO)
        fImprimeFecha(vCadena)
        vCadena = tDocumentos(CFECHAENTREGARECEPCION)
        fImprimeFecha(vCadena)
        vCadena = tDocumentos(CFECHAULTIMOINTERES)
        fImprimeFecha(vCadena)
        vNumero = @Str(tDocumentos(CIDMONEDA);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CTIPOCAMBIO);5)
        imprime vNumero
        vCadena = tDocumentos(CREFERENCIA)
        imprime vCadena
        //Buscar llave del documento origen
        vNumero = @Str(tDocumentos(CIDDOCUMENTOORIGEN);0)
        fImprimeLlaveDoc(vNumero)
        vNumero = @Str(tDocumentos(CAFECTADO);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CIMPRESO);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CCANCELADO);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CDEVUELTO);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CIDPREPOLIZA);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CIDPREPOLIZACANCELACION);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CESTADOCONTABLE);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CGASTO1);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CGASTO2);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CGASTO3);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CDESCUENTOPRONTOPAGO);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CPORCENTAJEIMPUESTO1);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CPORCENTAJEIMPUESTO2);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CPORCENTAJEIMPUESTO3);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CPORCENTAJERETENCION1);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CPORCENTAJERETENCION2);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CPORCENTAJEINTERES);5)
        imprime vNumero
        vCadena = tDocumentos(CTEXTOEXTRA1)
        imprime vCadena
        vCadena = tDocumentos(CTEXTOEXTRA2)
        imprime vCadena
        vCadena = tDocumentos(CTEXTOEXTRA3)
        imprime vCadena
        vCadena = tDocumentos(CFECHAEXTRA)
        fImprimeFecha(vCadena)
        vNumero = @Str(tDocumentos(CIMPORTEEXTRA1);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CIMPORTEEXTRA2);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CIMPORTEEXTRA3);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CIMPORTEEXTRA4);5)
        imprime vNumero
        vCadena = tDocumentos(CDESTINATARIO)
        imprime vCadena
        vCadena = tDocumentos(CNUMEROGUIA)
        imprime vCadena
        vCadena = tDocumentos(CMENSAJERIA)
        imprime vCadena
        vCadena = tDocumentos(CCUENTAMENSAJERIA)
        imprime vCadena
        vNumero = @Str(tDocumentos(CNUMEROCAJAS);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CPESO);5)
        imprime vNumero
				// Exportación de las observaciones del documento, así como de la bandera de observaciones
      	Texto C0;'{'
				imprime
      	vCadena = tDocumentos(COBSERVACIONES)
				imprime vCadena
				Texto C0;'}'
				imprime
				vNumero = @Str(tDocumentos(CBANOBSERVACIONES);0)
				// N.D.871 Fin
        imprime vNumero
        vNumero = @Str(tDocumentos(CBANDATOSENVIO);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CBANCONDICIONESCREDITO);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CBANGASTOS);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CIMPCHEQPAQ);5)
        imprime vNumero
        vNumero = @Str(tDocumentos(CSISTORIG);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CIDMONEDCA);0)
        imprime vNumero
        vNumero = @Str(tDocumentos(CTIPOCAMCA);5)
        imprime vNumero

        // ***************************************************************************
        // Dirección
        // ***************************************************************************
        //Dirección fiscal
        tDirecciones.Busca[@Str(tDocumentos(CIDDOCUMENTO);0) & ':3:0']
        Si tDirecciones->Encontro
          fImprimeDireccion()
        FinSi
        //Dirección de envío
        tDirecciones.Busca[@Str(tDocumentos(CIDDOCUMENTO);0) & ':3:1']
        Si tDirecciones->Encontro
          fImprimeDireccion()
        FinSi

        // ***************************************************************************
        // Movimientos del documento
        // ***************************************************************************
        vCadena = @Str(tDocumentos(CIDDOCUMENTO);0) & '..' & @Str(tDocumentos(CIDDOCUMENTO);0)
        tMovimientos.Busca[vCadena]
        Si tMovimientos->Encontro
          tMovimientos.Busca Primero
          Mientras tMovimientos->Encontro Y tMovimientos(CIDDOCUMENTO) = tDocumentos(CIDDOCUMENTO)
            Texto C0;'MGW10010'
            imprime

            vNumero = @Str(tMovimientos(CNUMEROMOVIMIENTO);0)
            imprime vNumero
            vNumero = @Str(tMovimientos(CIDPRODUCTO);0)
            vEsUnPaquete = fImprimeCodigoProducto(vNumero)
            vNumero = @Str(tMovimientos(CIDALMACEN);0)
            fImpriemeCodigoAlmacen(vNumero)
            vNumero = @Str(tMovimientos(CUNIDADES);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CUNIDADESNC);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CUNIDADESCAPTURADAS);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CIDUNIDAD);0)
            fImprimeNombreUnidad(vNumero)
            vNumero = @Str(tMovimientos(CIDUNIDADNC);0)
            fImprimeNombreUnidad(vNumero)
            vNumero = @Str(tMovimientos(CPRECIO);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPRECIOCAPTURADO);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CCOSTOCAPTURADO);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CCOSTOESPECIFICO);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CNETO);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CIMPUESTO1);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPORCENTAJEIMPUESTO1);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CIMPUESTO2);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPORCENTAJEIMPUESTO2);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CIMPUESTO3);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPORCENTAJEIMPUESTO3);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CRETENCION1);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPORCENTAJERETENCION1);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CRETENCION2);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPORCENTAJERETENCION2);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CDESCUENTO1);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPORCENTAJEDESCUENTO1);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CDESCUENTO2);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPORCENTAJEDESCUENTO2);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CDESCUENTO3);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPORCENTAJEDESCUENTO3);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CDESCUENTO4);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPORCENTAJEDESCUENTO4);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CDESCUENTO5);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPORCENTAJEDESCUENTO5);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CTOTAL);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CPORCENTAJECOMISION);5)
            imprime vNumero
            vCadena = tMovimientos(CREFERENCIA)
            imprime vCadena
            vNumero = @Str(tMovimientos(CAFECTAEXISTENCIA);0)
            imprime vNumero
            //CAFECTADOSALDOS se exporta como cero para que no cause problemas.
            vNumero = '0'
            imprime vNumero
            //CAFECTADOINVENTARIO se exporta como cero para que no cause problemas.
            vNumero = '0'
            imprime vNumero
            vCadena = tMovimientos(CFECHA)
            fImprimeFecha(vCadena)
            vNumero = @Str(tMovimientos(CMOVTOOCULTO);0)
            imprime vNumero

            fImprimeLlaveMovOrigen(@Str(tMovimientos(CIDMOVTOORIGEN);0))

            vNumero = @Str(tMovimientos(CUNIDADESPENDIENTES);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CUNIDADESNCPENDIENTES);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CUNIDADESORIGEN);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CUNIDADESNCORIGEN);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CTIPOTRASPASO);0)
            imprime vNumero
            vNumero = @Str(tMovimientos(CIDVALORCLASIFICACION);0)
            fImpriemeClasificacion(vNumero)
            vCadena = tMovimientos(CTEXTOEXTRA1)
            imprime vCadena
            vCadena = tMovimientos(CTEXTOEXTRA2)
            imprime vCadena
            vCadena = tMovimientos(CTEXTOEXTRA3)
            imprime vCadena
            vCadena = tMovimientos(CFECHAEXTRA)
            fImprimeFecha(vCadena)
            vNumero = @Str(tMovimientos(CIMPORTEEXTRA1);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CIMPORTEEXTRA2);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CIMPORTEEXTRA3);5)
            imprime vNumero
            vNumero = @Str(tMovimientos(CIMPORTEEXTRA4);5)
            imprime vNumero
            lNumero = @Str(tMovimientos(CGTOMOVTO);5)
            imprime lNumero
            // Exportación de las observaciones del movimiento
            Texto C0;'{'
            imprime
            vCadena = tMovimientos(COBSERVAMOV)
            imprime vCadena
            Texto C0;'}'
            imprime
            lNumero = @Str(tMovimientos(CCOMVENTA);5)
            imprime lNumero
            // N.D.4232 Exportar el Segmento Contable del Movimiento
            vCadena = tMovimientos(CSCMOVTO)
            imprime vCadena

            // *************************************************************************
            // Movimientos ocultos del movimiento
            // *************************************************************************
            vCadena = @Str(tMovimientos(CIDMOVIMIENTO);0) & '..' & @Str(tMovimientos(CIDMOVIMIENTO);0)
            tMovtosOcultos.Busca[vCadena]
            //Contador de movimiemtos ocultos pares
            vNumeroMovtos = -1
            Si tMovtosOcultos->Encontro
              tMovtosOcultos.Busca Primero
              Mientras tMovtosOcultos->Encontro Y tMovimientos(CIDMOVIMIENTO) = tMovtosOcultos(CIDMOVTOOWNER)
                vNumeroMovtos = vNumeroMovtos + 1
              
                Texto C0;'MGW10010'
                imprime
                vNumero = @Str(tMovtosOcultos(CNUMEROMOVIMIENTO);0)
                imprime vNumero
                //Se sustituye el cIdProducto por sus nemos de característica.
                Si tMovtosOcultos(CIDPRODUCTO) = 0
                  vCadena = ',,'
                  imprime vCadena
                SiNo                  
                  tIdProdDetalles.Busca[@Str(tMovtosOcultos(CIDPRODUCTO);0)]
                  Si tIdProdDetalles->Encontro
                    vCadena = @Str(tIdProdDetalles(CIDPRODUCTOPADRE);0)
                    Si vCadena = '' O vCadena = '0'
                      fImprimeCodigoProducto(@Str(tMovtosOcultos(CIDPRODUCTO);0))
                    SiNo
                      fImprimeNemosCaracteristicas(tIdProdDetalles(CIDVALORCARACTERISTICA1);tIdProdDetalles(CIDVALORCARACTERISTICA2);tIdProdDetalles(CIDVALORCARACTERISTICA3);vCadena)
                    FinSi
                  SiNo
                    vCadena = ',,'
                    imprime vCadena
                  FinSi
                FinSi
                
                vNumero = @Str(tMovtosOcultos(CIDALMACEN);0)
                fImpriemeCodigoAlmacen(vNumero)
                vNumero = @Str(tMovtosOcultos(CUNIDADES);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CUNIDADESNC);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CUNIDADESCAPTURADAS);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CIDUNIDAD);0)
                fImprimeNombreUnidad(vNumero)
                vNumero = @Str(tMovtosOcultos(CIDUNIDADNC);0)
                fImprimeNombreUnidad(vNumero)
                vNumero = @Str(tMovtosOcultos(CPRECIO);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPRECIOCAPTURADO);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CCOSTOCAPTURADO);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CCOSTOESPECIFICO);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CNETO);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CIMPUESTO1);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPORCENTAJEIMPUESTO1);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CIMPUESTO2);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPORCENTAJEIMPUESTO2);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CIMPUESTO3);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPORCENTAJEIMPUESTO3);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CRETENCION1);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPORCENTAJERETENCION1);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CRETENCION2);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPORCENTAJERETENCION2);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CDESCUENTO1);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPORCENTAJEDESCUENTO1);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CDESCUENTO2);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPORCENTAJEDESCUENTO2);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CDESCUENTO3);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPORCENTAJEDESCUENTO3);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CDESCUENTO4);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPORCENTAJEDESCUENTO4);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CDESCUENTO5);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPORCENTAJEDESCUENTO5);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CTOTAL);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CPORCENTAJECOMISION);5)
                imprime vNumero
                vCadena = tMovtosOcultos(CREFERENCIA)
                imprime vCadena
                vNumero = @Str(tMovtosOcultos(CAFECTAEXISTENCIA);0)
                imprime vNumero
                //CAFECTADOSALDOS se exporta como cero para que no cause problemas.
                vNumero = '0'
                imprime vNumero
                //CAFECTADOINVENTARIO se exporta como cero para que no cause problemas.
                vNumero = '0'
                imprime vNumero
                vCadena = tMovtosOcultos(CFECHA)
                fImprimeFecha(vCadena)
                vNumero = @Str(tMovtosOcultos(CMOVTOOCULTO);0)
                imprime vNumero
                fImprimeLlaveMovOrigen(@Str(tMovtosOcultos(CIDMOVTOORIGEN);0))
                vNumero = @Str(tMovtosOcultos(CUNIDADESPENDIENTES);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CUNIDADESNCPENDIENTES);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CUNIDADESORIGEN);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CUNIDADESNCORIGEN);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CTIPOTRASPASO);0)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CIDVALORCLASIFICACION);0)
                fImpriemeClasificacion(vNumero)
                vCadena = tMovtosOcultos(CTEXTOEXTRA1)
                imprime vCadena
                vCadena = tMovtosOcultos(CTEXTOEXTRA2)
                imprime vCadena
                vCadena = tMovtosOcultos(CTEXTOEXTRA3)
                imprime vCadena
                vCadena = tMovtosOcultos(CFECHAEXTRA)
                fImprimeFecha(vCadena)
                vNumero = @Str(tMovtosOcultos(CIMPORTEEXTRA1);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CIMPORTEEXTRA2);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CIMPORTEEXTRA3);5)
                imprime vNumero
                vNumero = @Str(tMovtosOcultos(CIMPORTEEXTRA4);5)
                imprime vNumero
                lNumero = @Str(tMovtosOcultos(CGTOMOVTO);5)
                imprime lNumero
                // Exportación de las observaciones del movimiento
                Texto C0;'{'
                imprime
                vCadena = tMovtosOcultos(COBSERVAMOV)
                imprime vCadena
                Texto C0;'}'
                imprime
                lNumero = @Str(tMovtosOcultos(CCOMVENTA);5)
                imprime lNumero
                // N.D.4232 Exportar el Segmento Contable del Movimiento
                vCadena = tMovtosOcultos(CSCMOVTO)
                imprime vCadena

                Si vEsUnPaquete = 1
                	Si tMovimientos(CIDDOCUMENTODE) = 3 O tMovimientos(CIDDOCUMENTODE) = 6
                		Si vNumeroMovtos != 0
		                  vSegundoMovto = vNumeroMovtos % 2
		                  Si vSegundoMovto = 0
		                    vExportarSeriesYCapas = 1
		                  SiNo
		                  	vExportarSeriesYCapas = 0
		                    vIdMovtoCorrecto = tMovtosOcultos(CIDMOVIMIENTO) //Guarda el ID del movimiento de salida
		                  FinSi //Fin de si hay que exportar
		                SiNo
		                	vExportarSeriesYCapas = 0
		                FinSi //Fin de si es el movimiento oculto del paquete
		              SiNo
		              	vExportarSeriesYCapas = 1
		              	vIdMovtoCorrecto = tMovtosOcultos(CIDMOVIMIENTO)
                	FinSi //Fin de si es un documento de traspaso
                SiNo //No es paquete
                	Si tMovimientos(CIDDOCUMENTODE) = 3 O tMovimientos(CIDDOCUMENTODE) = 6 O tMovimientos(CIDDOCUMENTODE) = 34
	                  vSegundoMovto = vNumeroMovtos % 2
	                  Si vSegundoMovto = 0
	                    vExportarSeriesYCapas = 1
	                  SiNo
	                  	vExportarSeriesYCapas = 0
	                    vIdMovtoCorrecto = tMovtosOcultos(CIDMOVIMIENTO) //Guarda el ID del movimiento de salida
	                  FinSi //Fin de si hay que exportar
		              SiNo
		              	vExportarSeriesYCapas = 1
		              	vIdMovtoCorrecto = tMovtosOcultos(CIDMOVIMIENTO)
                	FinSi //Fin de si es un documento de dos movimientos por movimiento
                FinSi //Fin de si es un paquete
                
                Si vExportarSeriesYCapas = 1
                  //Si es un paquete  y ya se exportoron los movimientos de entrada y de salida
                  //entosnces se exportan los movimientos de series y capas de sus componentes.
                  fImprimirMovtosSeries(vIdMovtoCorrecto)
                  Si tMovimientos(CIDDOCUMENTODE) = 18 O tMovimientos(CIDDOCUMENTODE) = 19 O tMovimientos(CIDDOCUMENTODE) = 32
                    fImprimirCapas(vIdMovtoCorrecto)
                  SiNo
                    fImprimirMovtosCapas(vIdMovtoCorrecto)
                  FinSi
                FinSi
                 
                tMovtosOcultos.SaltaReg[1]
              FinMientras
            FinSi

            Si tMovimientos(CIDDOCUMENTODE) = 6           
              tMovtosOcultos.Busca[@Str(tMovimientos(CIDMOVIMIENTO);0)]
            FinSi
            fImprimirMovtosSeries(tMovimientos(CIDMOVIMIENTO))
            Si tMovimientos(CIDDOCUMENTODE) = 18 O tMovimientos(CIDDOCUMENTODE) = 19 O tMovimientos(CIDDOCUMENTODE) = 32
              fImprimirCapas(tMovimientos(CIDMOVIMIENTO))
            SiNo
              fImprimirMovtosCapas(tMovimientos(CIDMOVIMIENTO))
            FinSi

            tMovimientos.SaltaReg[1]
          FinMientras
        FinSi
      FinSi
    FinMientras
    gFechaBusqueda = fFechaSiguiente(gFechaBusqueda)
  FinMientras
FinSi
//Si vContadorElementos > 0 de la exportación de documentos y sus movimientos.


//--------------------------------------------------------------------------------------------------
tDocOrigen.Usaindice['']
//Ahora se exportan las asociaciones entre documentos
tAbonosYCargos.Usaindice['PorFechaAbonoCargo']
// Solo exportar la relaciones de los documentos que se han exportado
tDocumentos.Usaindice['']

gFechaBusqueda = pFechaDocumentoIni
Mientras gFechaBusqueda <= pFechaDocumentoFin
  Mientras[tAbonosYCargos.Busca[gFechaBusqueda]; tAbonosYCargos->Encontro Y tAbonosYCargos(CFECHAABONOCARGO) = gFechaBusqueda; tAbonosYCargos.Saltareg[1]]
  
    // No exportar las relaciones que no corresponden a documentos exportados
    Si fExportarRelacionCargoAbono( ) = 0
      Continua
    FinSi
    
    Texto C0;'MGW10009'
    imprime
    fImprimeLlaveDoc(@Str(tAbonosYCargos(CIDDOCUMENTOABONO);0))
    vNumero = @Str(tDocOrigen(CIDMONEDA);0)
    imprime vNumero
    fImprimeLlaveDoc(@Str(tAbonosYCargos(CIDDOCUMENTOCARGO);0))
    vNumero = @Str(tDocOrigen(CIDMONEDA);0)
    imprime vNumero
    vNumero = @Str(tAbonosYCargos(CIMPORTEABONO);5)
    imprime vNumero
    vNumero = @Str(tAbonosYCargos(CIMPORTECARGO);5)
    imprime vNumero
    vCadena = tAbonosYCargos(CFECHAABONOCARGO)
    fImprimeFecha(vCadena)
    fImprimeLlaveDoc(@Str(tAbonosYCargos(CIDDESCUENTOPRONTOPAGO);0))
		// Como en la función fImprimeLlaveDoc ya estamos posicionados en el
		//	documento de cargo tomamos el Id del cliente e imprimimos su
		//	codigo a través de fImprimeCodigoCliProv
		vNumero = @Str(tDocOrigen(CIDCLIENTEPROVEEDOR);0)
    fImprimeCodigoCliProv(vNumero)
  FinMientras
  gFechaBusqueda = fFechaSiguiente(gFechaBusqueda)
FinMientras



