// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//	Reporte : ExpPdVP.rpt.
//	
//	Proceso : Exporta los datos del catálogo de cajas y de todos los documentos junto con sus 
//    movimientos (normales, ocultos, de series y capas) y detalles de las series 
//    y capas relacionadas que tienen que ver con el punto de venta.
//
//	Creacion: Daniel Robles de Alba.
//
//	Fecha   : 10 de marzo de 2003.
//
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//  Historia de Revisiones
//  Fecha       ID-Lotus        Descripcion
//  ---------------------------------------------------------------------------
//  22/05/2003                  Se agregaron nuevos campos a la tabla de cobros
//                              Se activo la exportascion de la factura asociada (FG)       
//  08/12/2004 N.D.3019        En los movimientos-capa exportar la unidad de captura (LAP)
//                              - Cuerpo del reporte
//                              - fImprimirMovtosCapas
// *****************************************************************************
//	Parámetros del reporte:

Parametro pCatalogoCajas = 1     // Incluir el catálogo de cajas:
                                 // 1 = Sí
                                 // 0 = No
Parametro pFechaCajaIni = '20030101'  // Límite inferior del rango de cajas.
Parametro pFechaCajaFin = '20031231'  // Límite superior del rango de cajas.
Parametro pNotasDeVenta = 1      // Incluir las notas y devoluciones (sobre nota) de venta:
                                 // 1 = Sí
                                 // 0 = No
Parametro pFacturasDevNV = 1     // Incluir las facturas y devoluciones (de factura) relacionadas 
                                 // con las notas y de devol. de venta:
                                 // 1 = Sí
                                 // 0 = No
Parametro pFechaDocumentoIni = '20030101'  // Límite inferior del rango de documentos.
Parametro pFechaDocumentoFin = '20031231'  // Límite superior del rango de documentos.

// **********************************************************************************************
//	Tablas a utilizar:		
//
// cac10000 = Usuarios
// mgw00001 = Empresas.
// mgw10001 = Agentes.
// 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.
// mgw10041 = Catálogo de cajas.
// mgw10042 = Aperturas de cajas.
// mgw10043 = Cobros de las notas y devoluciones de venta.
// **********************************************************************************************

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

Si pNotasDeVenta = 1
  // ND-327 Cuando traía una \ la ruta al final y se le concatenaba otra
  // junto con los directorios tronaba la aplicación y el sistema
  // Si la ruta ya tiene \ al final solo le concatena el directorio final
  Si @SubStr(tEmpresa->SysDirDatos;@len(tEmpresa->SysDirDatos)-1;1) = '\\'
    gRuta[0] = tEmpresa->SysDirDatos & 'cacdd\adminpaq'
  Sino
    gRuta[0] = tEmpresa->SysDirDatos & '\cacdd\adminpaq'
  FinSi
  UsaEmpresa tEmpresa3;'';gRuta
  UsaTabla tUsuarios = tEmpresa3['cac10000']
FinSi

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']
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 tCajas = tEmpresa['mgw10041']
UsaTabla tAperturas = tEmpresa['mgw10042']
UsaTabla tCobros = tEmpresa['mgw10043']
// N.D.2774 Inicio
// Los registros de la tabla de Cobros están formados por el Id de la Apertura, 
//  el Id de la Nota de Venta y el Id de la Devolución de Nota de Venta.
// El indice APERTDOC primero muestra las Devoluciones de Nota de Venta, así que se
//  cambia por el indice APERTDEV para que primero se muestren las Notas de Venta y
//  a continuación las Devoluciones de Nota de Venta
//tCobros.Usaindice['APERTDOC']
tCobros.Usaindice['APERTDEV']
// N.D.2774 Fin

UsaTabla tParametros  = tEmpresa2['mgw00001']

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

UsaLetra 'Arial'
Altura 10

// **********************************************************************************************
//	fFechaSiguiente
//
//	Esta función recibe una fecha AAAAMMDD y devuelve el dia siguiente en AAAAMMDD
// **********************************************************************************************
DefFunc fFechaSiguiente(aFecha)
Local lMes, lDia, lAnio
Local lRegreso

	// Obtiene el día, mes y año
	lDia = @SubStr(aFecha;6;2)
	lMes = @SubStr(aFecha;4;2)
	lAnio = @SubStr(aFecha;0;4)

	// verifica los meses de 31 días
	Si lMes = 1 o lMes = 3 o lMes = 5 o lMes = 7 o lMes = 8 o lMes = 10 o lMes = 12
		Si lDia = 31 // se llego a fin de mes
			// entonces el siguiente dia es primero
			lDia = 1[C0]
			// incrementa el mes siempre que no sea diciembre
			Si lMes != 12
				lMes = lMes + 1[C0]
			SiNo
				// Si es Diciembre incrementa el año y pone el mes en Enero
				lMes = 1[C0]
				lAnio = lAnio + 1[C0]
			FinSi
		SiNo
			// Si no es fin de mes simplemente incrementa el dia
			lDia = lDia + 1[C0]
		FinSi
   Sino
   	// verifica los meses de 30 días
	   Si lMes = 4 o lMes = 6 o lMes = 9 o lMes = 11
   		Si lDia = 30 // se llego a fin de mes
	   		// entonces el siguiente dia es primero
		   	lDia = 1[C0]
			   lMes = lMes + 1[C0]
   		SiNo
	   		// Si no es fin de mes simplemente incrementa el dia
		   	lDia = lDia + 1[C0]
   		FinSi
	   Sino
   	   // verifica el caso especial de Febrero
      	// Verifica la condición de año bisiesto
    		Si lAnio % 4 = 0 // Ojo: Esta condición solo funciona hasta el año 2099
	      	// Si es bisiesto entonces verificar la condicion con 29 dias
     			Si lDia = 29 // se llego a fin de mes?
	      		// entonces el siguiente dia es primero
     				lDia = 1[C0]
	      		lMes = lMes + 1[C0]
     			SiNo
     				// Si no es fin de mes simplemente incrementa el dia
	      		lDia = lDia + 1[C0]
     			FinSi
     		SiNo
	      	// No es bisiesto entonces verificar la condicion con 28 dias
     			Si lDia = 28 // se llego a fin de mes?
	      		// entonces el siguiente dia es primero
     				lDia = 1[C0]
	      		lMes = lMes + 1[C0]
     			SiNo
	      		// Si no es fin de mes simplemente incrementa el dia
     				lDia = lDia + 1[C0]
	      	FinSi
     		FinSi // Año bisiesto
   	FinSi // Condición meses de 30 días
   Finsi // Condición meses de 31 días

	// arma la nueva fecha
   lMes = @Val(lMes)[C0]
   lDia = @Val(lDia)[C0]
	lRegreso = lAnio & (lMes <= 9? '0' & lMes : lMes) & (lDia <= 9? '0' & lDia : lDia)[C0]

  Retorna lRegreso
FinFunc

// **********************************************************************************************
//	fConvierteFecha
//
//	Esta función recibe una fecha MM/DD/AAAA HH:MM:SS:sss y la devuelve en AAAAMMDD
// **********************************************************************************************
DefFunc fConvierteFecha(aFechaHora)
  Local lMes, lDia, lAnio
  Local lRegreso

  // Obtiene el mes, día y año
  lMes = @SubStr(aFechaHora;0;2)
  lDia = @SubStr(aFechaHora;3;2)
  lAnio = @SubStr(aFechaHora;6;4)

  lRegreso = lAnio & lMes & lDia[C0]

  Retorna lRegreso
FinFunc

// *****************************************************************************
//  fImprimeFecha
//
//	Imprime una fecha con formato de la base de datos de
//  AdminPaq (CAC000.DLL)
//
//  Parámetros
//    - aFecha : cadena con la fecha en formato reporteador.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeFecha(aFecha)
  Local lCadena1

  lCadena1 = @SUBSTR(aFecha;4;2) & '/' & @SUBSTR(aFecha;6;2) & '/' & @SUBSTR(aFecha;0;4)
  imprime lCadena1
FinFunc

// *****************************************************************************
//  fImprimeClaveUsuario
//
//	 Busca el usuario con id dado y si lo encuentra imprime su clave.
//
//  Parámetros 
//    - aIdUsuario : id del usuario.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeClaveUsuario(aIdUsuario)
  Local lCadena1

  // Asume escribir nulo
  lCadena1 = ''
  Si aIdUsuario != '0' Y aIdUsuario != ''
    tUsuarios.Busca[aIdUsuario]
    Si tUsuarios->Encontro
      lCadena1 = tUsuarios(CLAVE)
    FinSi
  FinSi
  imprime lCadena1
FinFunc

// *****************************************************************************
//  fImprimeCodigoCliProv
//
//	Busca el cliente/proveedor con id dado y si lo encuentra 
//  imprime el código.
//
//  Parámetros 
//    - aIdCliProv : id de cliente/proveedor.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeCodigoCliProv(aIdCliProv)
  Local lCadena1

  // Asume escribir nulo
  lCadena1 = ''
  Si aIdCliProv != '0' Y aIdCliProv != ''
    tCliProv.Busca[aIdCliProv]
    Si tCliProv->Encontro
      lCadena1 = tCliProv(CCodigoCliente)
    FinSi
  FinSi
  imprime lCadena1
FinFunc

// *****************************************************************************
//  fImprimeCodigoAgente
//
//	Busca el agente con id dado y si lo encuentra imprime el código.
//
//  Parámetros 
//    - aIdAgente : id del agente.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeCodigoAgente(aIdAgente)
  Local lCadena1

  // Asume escribir nulo
  lCadena1 = ''
  Si aIdAgente != '0' Y aIdAgente != ''
    tAgente.Busca[aIdAgente]
    Si tAgente->Encontro
      lCadena1 = tAgente(cCodigoAgente)
    FinSi
  FinSi
  imprime lCadena1
FinFunc

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

  // Asume escribir nulo
  lCadena1 = ''
  Si aIdValorClasificacion != '0' Y aIdValorClasificacion != ''
    tValClasificacion.Busca[aIdValorClasificacion]
    Si tValClasificacion->Encontro
      lCadena1 = tValClasificacion(cCodigoValorClasificacion)
    FinSi
  FinSi
  imprime lCadena1
FinFunc

// *****************************************************************************
//  fImprimeNombreUnidad
//
//	Busca la unidad con id dado y si la encuentra imprime su nombre.
//
//  Parámetros 
//    - aIdUnidad : id de la unidad.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeNombreUnidad(aIdUnidad)
  Local lCadena1

  // Asume escribir nulo
  lCadena1 = ''
  Si aIdUnidad != '0' Y aIdUnidad != ''
    tUnidades.Busca[aIdUnidad]
    Si tUnidades->Encontro
      lCadena1 = tUnidades(CNOMBREUNIDAD)
    FinSi
  FinSi
  imprime lCadena1
FinFunc

// *****************************************************************************
//  fImprimeCodigoCaja
//
//	Busca el almacen con id dado y si lo encuentra imprime su código.
//
//  Parámetros 
//    - aIdCaja : id de la caja.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeCodigoCaja(aIdCaja)
Local lCadena1

  // Asume escribir nulo
  lCadena1 = ''
  Si aIdCaja != '0' Y aIdCaja != ''
    tCajas.Busca[aIdCaja]
    Si tCajas->Encontro
      lCadena1 = tCajas(CCODIGOC01)
    FinSi
  FinSi
  imprime lCadena1
FinFunc

// *****************************************************************************
//  fImprimeCodigoProducto
//
//	Busca el producto con id dado y si lo encuentra imprime su código y tipo.
//
//  Parámetros 
//    - aIdProducto : 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(aIdProducto)
Local lCadena1
Local lEsUnPaquete

  // Asume que no es un paquete
  lEsUnPaquete = 0
  // Asume escribir nulo
  lCadena1 = ''
  Si aIdProducto != '0' Y aIdProducto != ''
    tProductos.Busca[aIdProducto]
    Si tProductos->Encontro
      Si tProductos(CTIPOPRODUCTO) = 2
        //Si es un paquete
        lEsUnPaquete = 1
      FinSi //Fin de si es un paquete
      lCadena1 = tProductos(CCODIGOPRODUCTO)
    FinSi //Fin de si encontró el producto
  FinSi //Fin de si tiene Id
  imprime lCadena1
  Retorna lEsUnPaquete
FinFunc //Fin de fImprimeCodigoProducto

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

  // Asume escribir nulo
  lCadena1 = ''
  Si aIdAlmacen != '0' Y aIdAlmacen != ''
    tAlmacenes.Busca[aIdAlmacen]
    Si tAlmacenes->Encontro
      lCadena1 = tAlmacenes(CCODIGOALMACEN)
    FinSi
  FinSi
  imprime lCadena1
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(aIdDocOrigen)
  Local lCadena1

  // Asume escribir nulo
  lCadena1 = ''
  Si aIdDocOrigen != '0' Y aIdDocOrigen != ''
    // Asume escribir un código por defecto
    lCadena1 = '0,0,'
    tDocOrigen.Busca[aIdDocOrigen]
    Si tDocOrigen->Encontro
      tConceptosDoc.Busca[@Str(tDocOrigen(CIDCONCEPTODOCUMENTO);0)]
    	Si tConceptosDoc->Encontro
      	lCadena1 = tConceptosDoc(CCODIGOCONCEPTO) & ',' & tDocOrigen(CFOLIO) & ',' & @Str(tDocOrigen(CSERIEDOCUMENTO);0)
      FinSi
    FinSi
  FinSi
  imprime lCadena1
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.
//    - aIdMovtoOrigen : 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(aIdMovtoOrigen)
  Local lCadena1

  // Asume escribir nulo
  lCadena1 = ''
  Si aIdMovtoOrigen != '0' Y aIdMovtoOrigen != ''
    // Asume escribir un código por defecto
    lCadena1 = '0,0,0,'
    tMovtosOrigen.Busca[aIdMovtoOrigen]
    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 (aIdMovtoOrigen)
        //	cuando se realiza un rango de todos los movimientos ocultos del movimiento al que
        // 	pertenece el movimiento origen que se desea imprimir (aIdMovtoOrigen)
        // Obtención del movimiento padre del movto_origen
        lCadena1 = @Str(tMovtosOrigen(cIdMovtoOwner);0)
        tMovtosOrigen.Usaindice['iMovtoOwnerMovto']
        lNumMovto = 1
        // Generamos el rango de todos los movimientos ocultos
        tMovtosOrigen.Busca[lCadena1 & '..' & lCadena1]
        Si tMovtosOrigen->Encontro
          tMovtosOrigen.Busca Primero
          // Buscamos la posición que ocupa el movto_origen (aIdMovtoOrigen) que deseamos
          // imprimir
          Mientras tMovtosOrigen->Encontro Y tMovtosOrigen(CIDMOVIMIENTO) != aIdMovtoOrigen
           lNumMovto = lNumMovto + 1
           tMovtosOrigen.SaltaReg[1]
          FinMientras
        FinSi
        tMovtosOrigen.Usaindice['']
        // Imprimimos la información del movto
        lCadena1 = @Str(lNumMovto;0) & ',0,0,'
      SiNo
        // El movimiento es visible, así que imprimimos como información del origen
        // "Numero_movimiento, Codigo_concepto_docto,Folio_docto,Serie_docto"
        lCadena1 = @Str(tMovtosOrigen(CIDDOCUMENTO);0)
        tDocOrigen.Busca[lCadena1]
        // Asume escribir un código por defecto
        lCadena1 = '0,0,0,'
        Si tDocOrigen->Encontro
          tConceptosDoc.Busca[@Str(tDocOrigen(CIDCONCEPTODOCUMENTO);0)]
          Si tConceptosDoc->Encontro
            lCadena1 = @Str(tMovtosOrigen(CNUMEROMOVIMIENTO);0) & ',' & tConceptosDoc(CCODIGOCONCEPTO) & ',' & tDocOrigen(CFOLIO) & ',' & @Str(tDocOrigen(CSERIEDOCUMENTO);0)
          FinSi
        FinSi
      FinSi
      // N.D.878 Fin
    FinSi
  FinSi
  imprime lCadena1
FinFunc

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

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

      tNumerosSerie.Busca[@Str(tMovtosSeries(CIDSERIE);0)]
      Si tNumerosSerie->Encontro
        Texto C0;'MGW10032'
        imprime
        fImprimeCodigoProducto(@Str(tNumerosSerie(CIDPRODUCTO);0))
        lCadena1 = tNumerosSerie(CNUMEROSERIE)
        imprime lCadena1
        // 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
          fImprimeCodigoAlmacen(@Str(tMovtosOcultos(CIDALMACEN);0))
        Sino
          fImprimeCodigoAlmacen(@Str(tMovimientos(CIDALMACEN);0))
        FinSi
        // N.D.1515 Fin
        lCadena1 = tNumerosSerie(CNUMEROLOTE)
        imprime lCadena1
        lCadena1 = tNumerosSerie(CFECHACADUCIDAD)
        fImprimeFecha(lCadena1)
        lCadena1 = tNumerosSerie(CFECHAFABRICACION)
        fImprimeFecha(lCadena1)
        lCadena1 = tNumerosSerie(CPEDIMENTO)
        imprime lCadena1
        lCadena1 = tNumerosSerie(CADUANA)
        imprime lCadena1
        lCadena1 = tNumerosSerie(CFECHAPEDIMENTO)
        fImprimeFecha(lCadena1)
        lNumero1 = @Str(tNumerosSerie(CTIPOCAMBIO);5)
        imprime lNumero1
        lNumero1 = @Str(tNumerosSerie(CCOSTO);5)
        imprime lNumero1
      FinSi

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

      //Si tNumerosSerie->Encontro
      //  tProductos.Busca[@Str(tNumerosSerie(CIDPRODUCTO);0)]
      //  Si tProductos->Encontro
      //    lCadena1 = tNumerosSerie(CNUMEROSERIE) & ',' & tProductos(CCODIGOPRODUCTO)
      //    imprime lCadena1
      //  SiNo
      //    lCadena1 = ''
      //    imprime lCadena1
      //  FinSi
      //SiNo
      //  lCadena1 = ''
      //  imprime lCadena1
      //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.
//    - aIdCapaOrigen : id de la capa origen.
//
//  Salidas
// *****************************************************************************
DefFunc fImprimeCapaOrigen(tCap: Tabla; aIdCapaOrigen)
Local lCadena1, lNumero1

  // Asume escribir un código por defecto
  lCadena1 = ''
  Si aIdCapaOrigen != '0' Y aIdCapaOrigen != ''
    tCap.Busca[aIdCapaOrigen]
    Si tCap->Encontro
      lNumero1 = @Str(tCap(CIDPRODUCTO);0)
      tProductos.Busca[lNumero1]
      lNumero1 = @Str(tCap(CIDALMACEN);0)
      tAlmacenes.Busca[lNumero1]
      Si tProductos->Encontro Y tAlmacenes->Encontro
        lCadena1 = tProductos(CCODIGOPRODUCTO) & ',' & tAlmacenes(CCODIGOALMACEN) & ',' & tCap(CPEDIMENTO) & ',' & tCap(CNUMEROLOTE)
      FinSi
    FinSi
  FinSi
  imprime lCadena1
FinFunc

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

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

      tMovtosCapas.SaltaReg[1]
    FinMientras
  FinSi
FinFunc

// *****************************************************************************
//  fImprimirMovtosCapas
//
//	Imprime todos los movimientos de capas asociados a un movimiento
//  de documento normal.
//
//  Parámetros 
//    - aIdMovimiento : 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(aIdMovimiento)
Local lCadena1, lNumero1

  //Se prepara el rango con base en el identificador de movimiento.
  lCadena1 = @Str(aIdMovimiento;0)
  tMovtosCapas.Busca[lCadena1 & '..' & lCadena1]
  Si tMovtosCapas->Encontro
    tMovtosCapas.Busca Primero
    Mientras tMovtosCapas->Encontro Y tMovtosCapas(CIDMOVIMIENTO) = aIdMovimiento
      Si tMovtosCapas(CTIPOCAPA) = 5
        tMovtosCapas.SaltaReg[1]
        Continua
      FinSi
      
      tCapas.Busca[@Str(tMovtosCapas(CIDCAPA);0)]
      Si tCapas->Encontro
        lNumero1 = @Str(tCapas(CIDPRODUCTO);0)
        tProductos.Busca[lNumero1]
        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
	       lCadena1 = tProductos(CCODIGOPRODUCTO) & ',' & tAlmacenes(CCODIGOALMACEN) & ',' & tCapas(CPEDIMENTO) & ',' & tCapas(CNUMEROLOTE)
          imprime lCadena1
          lCadena1 = tMovtosCapas(CFECHA)
          fImprimeFecha(lCadena1)
          lNumero1 = @Str(tMovtosCapas(CUNIDADES);5)
          imprime lNumero1
          lNumero1 = @Str(tMovtosCapas(CTIPOCAPA);0)
          imprime lNumero1
          // N.D.3019 Inicio
          // Exportación de la unidad de captura
          // CNOMBREUNIDADCAPTURA
          vNumero1 = @Str(tMovtosCapas(CIDUNIDAD);0)
          fImprimeNombreUnidad(vNumero1)
          // 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
//    - aIdValCarac1 : Identificador de valor de caracterisica.
//    - aIdValCarac2 : Identificador de valor de caracterisica.
//    - aIdValCarac3 : Identificador de valor de caracterisica.
//
//  Salidas
// *****************************************************************************
DefFunc fImprimeNemosCaracteristicas(aIdValCarac1; aIdValCarac2; aIdValCarac3;aIdProducto)
Local lCadena1, lNemo1, lNemo2, lNemo3, lCodigoProducto

  // Asume escribir nulo
  lNemo1 = ''
  lNemo2 = ''
  lNemo3 = ''
  lCodigoProducto = ''

  tValCaracteristicas.Busca[@Str(aIdValCarac1;0)]
  Si tValCaracteristicas->Encontro Y tValCaracteristicas(CIDVALORCARACTERISTICA) != 0
    lNemo1 = tValCaracteristicas(CNEMOCARACTERISTICA)
  FinSi
  
  tValCaracteristicas.Busca[@Str(aIdValCarac2;0)]
  Si tValCaracteristicas->Encontro Y tValCaracteristicas(CIDVALORCARACTERISTICA) != 0
    lNemo2 = tValCaracteristicas(CNEMOCARACTERISTICA)
  FinSi
  
  tValCaracteristicas.Busca[@Str(aIdValCarac3;0)]
  Si tValCaracteristicas->Encontro Y tValCaracteristicas(CIDVALORCARACTERISTICA) != 0
    lNemo3 = tValCaracteristicas(CNEMOCARACTERISTICA)
  FinSi
  
  Si aIdProducto != '0' Y aIdProducto != ''
    tProductos.Busca[aIdProducto]
    Si tProductos->Encontro
      lCodigoProducto = tProductos(CCODIGOPRODUCTO)
    FinSi
  FinSi
  
  lCadena1 = lCodigoProducto & ',' & lNemo1 & ',' & lNemo2 & ',' & lNemo3
  imprime lCadena1
FinFunc

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

  Texto C0;'MGW10011'
  imprime

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

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

// *****************************************************************************
//  fImprimeApertura
//
//  Impresión de valores de los campos de la tabla de aperturas (MGW10042)
//
//  Parámetros
//
//  Salidas
// *****************************************************************************
DefFunc fImprimeApertura()
  Local lCadena, lNumero

  Texto C0;'MGW10042'
  imprime

  lNumero = @Str(tAperturas(cIdCaja);0)
  fImprimeCodigoCaja(lNumero)
  lCadena = tAperturas(cFecHoraAp)
  imprime lCadena
  lNumero = @Str(tAperturas(cIdUsuario);0)
  fImprimeClaveUsuario(lNumero)
  lCadena = tAperturas(cNomTerm)
  imprime lCadena
  lNumero = @Str(tAperturas(cIdAgente);0)
  fImprimeCodigoAgente(lNumero)
  lNumero = @Str(tAperturas(cEstadoApe);0)
  imprime lNumero
  lCadena = tAperturas(cFecHoraCo)
  imprime lCadena
  lNumero = @Str(tAperturas(cFacturada);0)
  imprime lNumero
  // No es necesario exportar las llaves ya que se asocian por posición en el 
  // archivo txt de exportación, estos doctos van antes del registro de apertura
//!  lNumero = @Str(tAperturas(cIdDocum01);0)
//!  fImprimeLlaveDoc(lNumero)
//!  lNumero = @Str(tAperturas(cIdDocum02);0)
//!  fImprimeLlaveDoc(lNumero)
  lNumero = @Str(tAperturas(cApEfectiv);5)
  imprime lNumero
  lNumero = @Str(tAperturas(cApCheques);5)
  imprime lNumero
  lNumero = @Str(tAperturas(cApVales);5)
  imprime lNumero
  lNumero = @Str(tAperturas(cApTCVISA);5)
  imprime lNumero
  lNumero = @Str(tAperturas(cApTCMstCr);5)
  imprime lNumero
  lNumero = @Str(tAperturas(cApTCAmEx);5)
  imprime lNumero
  lNumero = @Str(tAperturas(cApOtros);5)
  imprime lNumero
  lNumero = @Str(tAperturas(cApImport1);5)
  imprime lNumero
  lNumero = @Str(tAperturas(cApImport2);5)
  imprime lNumero
  lNumero = @Str(tAperturas(cApImport3);5)
  imprime lNumero
FinFunc

// *****************************************************************************
//  fImprimeCobro
//
//  Impresión de valores de los campos de la tabla de cobros (MGW10043)
//
//  Parámetros
//
//  Salidas
// *****************************************************************************
DefFunc fImprimeCobro()
  Local lCadena, lNumero

  Texto C0;'MGW10043'
  imprime

  // No es necesario exportar las llaves ya que se asocian por posición en el 
  // archivo txt de exportación, estos doctos van antes del registro de cobro
//!  lNumero = @Str(tCobros(cIdDocum01);0)
//!  fImprimeLlaveDoc(lNumero)
//!  lNumero = @Str(tCobros(cIdDocum02);0)
//!  fImprimeLlaveDoc(lNumero)
//!  lNumero = @Str(tCobros(cIdDocum03);0)
//!  fImprimeLlaveDoc(lNumero)
  lNumero = @Str(tCobros(cPendiente);0)
  imprime lNumero
  lNumero = @Str(tCobros(cCobEfecMN);5)
  imprime lNumero
  lNumero = @Str(tCobros(cCobEfecME);5)
  imprime lNumero
  lNumero = @Str(tCobros(cTipCambio);5)
  imprime lNumero
  lNumero = @Str(tCobros(cCobCheque);5)
  imprime lNumero
  lNumero = @Str(tCobros(cCobVales);5)
  imprime lNumero
  lCadena = tCobros(cRefVales)
  imprime lCadena
  lNumero = @Str(tCobros(cCobTCVISA);5)
  imprime lNumero
  lCadena = tCobros(cRefTCVISA)
  imprime lCadena
  lNumero = @Str(tCobros(cCobTCMsCr);5)
  imprime lNumero
  lCadena = tCobros(cRefTCMsCr)
  imprime lCadena
  lNumero = @Str(tCobros(cCobTCAmEx);5)
  imprime lNumero
  lCadena = tCobros(cRefTCAmEx)
  imprime lCadena
  lNumero = @Str(tCobros(cCobOtros);5)
  imprime lNumero
  lCadena = tCobros(cRefOtros)
  imprime lCadena
  lNumero = @Str(tCobros(cImporte01);5)
  imprime lNumero
  lCadena = tCobros(cRefImp01)
  imprime lCadena
  lNumero = @Str(tCobros(cImporte02);5)
  imprime lNumero
  lCadena = tCobros(cRefImp02)
  imprime lCadena
  lNumero = @Str(tCobros(cImporte03);5)
  imprime lNumero
  lCadena = tCobros(cRefImp03)
  imprime lCadena
  lNumero = @Str(tCobros(cCambio);5)
  imprime lNumero
  lNumero = @Str(tCobros(cvtatasa15);5)
  imprime lNumero
  lNumero = @Str(tCobros(cvtatasa10);5)
  imprime lNumero
  lNumero = @Str(tCobros(cvtatasa0);5)
  imprime lNumero
  lNumero = @Str(tCobros(cvtatasaex);5)
  imprime lNumero
  lNumero = @Str(tCobros(cvtatasaot);5)
  imprime lNumero
  lNumero = @Str(tCobros(ctivavtaot);5)
  imprime lNumero

FinFunc

// *****************************************************************************
//  fImprimeDocumento
//
//	 Imprime un documento.
//
//  Parámetros
//    - aIdDocumento : Identificador del docto a imprimir.
//
//  Salidas
// *****************************************************************************
DefFunc fImprimeDocumento(aIdDocumento)
  Local lCadena, lNumero

  Si aIdDocumento != '0' Y aIdDocumento != ''
    tDocumentos.Busca[aIdDocumento]
    Si tDocumentos->Encontro
      Texto C0;'MGW10008'
      imprime
      tConceptosDoc.Busca[@Str(tDocumentos(CIDCONCEPTODOCUMENTO);0)]
      Si tConceptosDoc->Encontro
        lCadena = tConceptosDoc(CCODIGOCONCEPTO)
        imprime lCadena
      SiNo
        lCadena = ''
        imprime lCadena
      FinSi

      lCadena = tDocumentos(CSERIEDOCUMENTO)
      imprime lCadena
      lNumero = @Str(tDocumentos(CFOLIO);0)
      imprime lNumero
      lCadena = tDocumentos(CFECHA)
      fImprimeFecha(lCadena)
      lNumero = @Str(tDocumentos(CIDCLIENTEPROVEEDOR);0)
      fImprimeCodigoCliProv(lNumero)
      lCadena = tDocumentos(CRAZONSOCIAL)
      imprime lCadena
      lCadena = tDocumentos(CRFC)
      imprime lCadena
      lNumero = @Str(tDocumentos(CIDAGENTE);0)
      fImprimeCodigoAgente(lNumero)
      lCadena = tDocumentos(CFECHAVENCIMIENTO)
      fImprimeFecha(lCadena)
      lCadena = tDocumentos(CFECHAPRONTOPAGO)
      fImprimeFecha(lCadena)
      lCadena = tDocumentos(CFECHAENTREGARECEPCION)
      fImprimeFecha(lCadena)
      lCadena = tDocumentos(CFECHAULTIMOINTERES)
      fImprimeFecha(lCadena)
      lNumero = @Str(tDocumentos(CIDMONEDA);0)
      imprime lNumero
      lNumero = @Str(tDocumentos(CTIPOCAMBIO);5)
      imprime lNumero
      lCadena = tDocumentos(CREFERENCIA)
      imprime lCadena
      //Buscar llave del documento origen
      lNumero = @Str(tDocumentos(CIDDOCUMENTOORIGEN);0)
      fImprimeLlaveDoc(lNumero)
      lNumero = @Str(tDocumentos(CAFECTADO);0)
      imprime lNumero
      lNumero = @Str(tDocumentos(CIMPRESO);0)
      imprime lNumero
      lNumero = @Str(tDocumentos(CCANCELADO);0)
      imprime lNumero
      lNumero = @Str(tDocumentos(CDEVUELTO);0)
      imprime lNumero
      lNumero = @Str(tDocumentos(CIDPREPOLIZA);0)
      imprime lNumero
      lNumero = @Str(tDocumentos(CIDPREPOLIZACANCELACION);0)
      imprime lNumero
      lNumero = @Str(tDocumentos(CESTADOCONTABLE);0)
      imprime lNumero
      //lNumero = @Str(tDocumentos(CIMPUESTO1);5)
      //imprime lNumero
      //lNumero = @Str(tDocumentos(CIMPUESTO2);5)
      //imprime lNumero
      //lNumero = @Str(tDocumentos(CIMPUESTO3);5)
      //imprime lNumero
      //lNumero = @Str(tDocumentos(CRETENCION1);5)
      //imprime lNumero
      //lNumero = @Str(tDocumentos(CRETENCION2);5)
      //imprime lNumero
      //lNumero = @Str(tDocumentos(CDESCUENTOMOV);5)
      //imprime lNumero
      //lNumero = @Str(tDocumentos(CDESCUENTODOC1);5)
      //imprime lNumero
      //lNumero = @Str(tDocumentos(CDESCUENTODOC2);5)
      //imprime lNumero
      lNumero = @Str(tDocumentos(CGASTO1);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CGASTO2);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CGASTO3);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CDESCUENTOPRONTOPAGO);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CPORCENTAJEIMPUESTO1);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CPORCENTAJEIMPUESTO2);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CPORCENTAJEIMPUESTO3);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CPORCENTAJERETENCION1);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CPORCENTAJERETENCION2);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CPORCENTAJEINTERES);5)
      imprime lNumero
      lCadena = tDocumentos(CTEXTOEXTRA1)
      imprime lCadena
      lCadena = tDocumentos(CTEXTOEXTRA2)
      imprime lCadena
      lCadena = tDocumentos(CTEXTOEXTRA3)
      imprime lCadena
      lCadena = tDocumentos(CFECHAEXTRA)
      fImprimeFecha(lCadena)
      lNumero = @Str(tDocumentos(CIMPORTEEXTRA1);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CIMPORTEEXTRA2);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CIMPORTEEXTRA3);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CIMPORTEEXTRA4);5)
      imprime lNumero
      lCadena = tDocumentos(CDESTINATARIO)
      imprime lCadena
      lCadena = tDocumentos(CNUMEROGUIA)
      imprime lCadena
      lCadena = tDocumentos(CMENSAJERIA)
      imprime lCadena
      lCadena = tDocumentos(CCUENTAMENSAJERIA)
      imprime lCadena
      lNumero = @Str(tDocumentos(CNUMEROCAJAS);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CPESO);5)
      imprime lNumero
      // N.D.871 Incio
      // Exportación de las observaciones del documento, así como de la
      // bandera de observaciones
      Texto C0;'{'
      imprime
      lCadena = tDocumentos(COBSERVACIONES)
      imprime lCadena
      Texto C0;'}'
      imprime
      //CBANOBSERVACIONES se exporta en cero porque no se exportó cObservaciones
      //lNumero = '0'
      lNumero = @Str(tDocumentos(CBANOBSERVACIONES);0)
      // N.D.871 Fin
      imprime lNumero
      lNumero = @Str(tDocumentos(CBANDATOSENVIO);0)
      imprime lNumero
      lNumero = @Str(tDocumentos(CBANCONDICIONESCREDITO);0)
      imprime lNumero
      lNumero = @Str(tDocumentos(CBANGASTOS);0)
      imprime lNumero
      lNumero = @Str(tDocumentos(CIMPCHEQPAQ);5)
      imprime lNumero
      lNumero = @Str(tDocumentos(CSISTORIG);0)
      imprime lNumero
// Inicia PdV DRdA
      Si tDocumentos(CIDDOCUMENTODE) = 35 O tDocumentos(CIDDOCUMENTODE) = 36
        lNumero = @Str(-tDocumentos(CTOTAL);5)
      SiNo
        lNumero = @Str(0;5)
      FinSi
      imprime lNumero
// Fin PdV DRdA

      // ***************************************************************************
      // 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
      // ***************************************************************************
      lCadena = @Str(tDocumentos(CIDDOCUMENTO);0) & '..' & @Str(tDocumentos(CIDDOCUMENTO);0)
      tMovimientos.Busca[lCadena]
      Si tMovimientos->Encontro
        tMovimientos.Busca Primero
        Mientras tMovimientos->Encontro Y tMovimientos(CIDDOCUMENTO) = tDocumentos(CIDDOCUMENTO)
          //Se establece el ídice para buscar el movimiento origen.

          Texto C0;'MGW10010'
          imprime

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

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

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

          // *************************************************************************
          // Movimientos ocultos del movimiento
          // *************************************************************************
          lCadena = @Str(tMovimientos(CIDMOVIMIENTO);0) & '..' & @Str(tMovimientos(CIDMOVIMIENTO);0)
          tMovtosOcultos.Busca[lCadena]
          //Contador de movimiemtos ocultos pares
          lNumeroMovtos = -1
          Si tMovtosOcultos->Encontro
            tMovtosOcultos.Busca Primero
            Mientras tMovtosOcultos->Encontro Y tMovimientos(CIDMOVIMIENTO) = tMovtosOcultos(CIDMOVTOOWNER)
              lNumeroMovtos = lNumeroMovtos + 1

              Texto C0;'MGW10010'
              imprime
              lNumero = @Str(tMovtosOcultos(CNUMEROMOVIMIENTO);0)
              imprime lNumero
              //Se sustituye el cIdProducto por sus nemos de característica.
              Si tMovtosOcultos(CIDPRODUCTO) = 0
                lCadena = ',,'
                imprime lCadena
              SiNo
                tIdProdDetalles.Busca[@Str(tMovtosOcultos(CIDPRODUCTO);0)]
                Si tIdProdDetalles->Encontro
                  lCadena = @Str(tIdProdDetalles(CIDPRODUCTOPADRE);0)
                  Si lCadena = '' O lCadena = '0'
                    fImprimeCodigoProducto(@Str(tMovtosOcultos(CIDPRODUCTO);0))
                  SiNo
                    fImprimeNemosCaracteristicas(tIdProdDetalles(CIDVALORCARACTERISTICA1);tIdProdDetalles(CIDVALORCARACTERISTICA2);tIdProdDetalles(CIDVALORCARACTERISTICA3);lCadena)
                  FinSi
                SiNo
                  lCadena = ',,'
                  imprime lCadena
                FinSi
              FinSi

              lNumero = @Str(tMovtosOcultos(CIDALMACEN);0)
              fImprimeCodigoAlmacen(lNumero)
              //lCadena = ''
              //imprime lCadena
              lNumero = @Str(tMovtosOcultos(CUNIDADES);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CUNIDADESNC);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CUNIDADESCAPTURADAS);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CIDUNIDAD);0)
              fImprimeNombreUnidad(lNumero)
              lNumero = @Str(tMovtosOcultos(CIDUNIDADNC);0)
              fImprimeNombreUnidad(lNumero)
              lNumero = @Str(tMovtosOcultos(CPRECIO);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPRECIOCAPTURADO);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CCOSTOCAPTURADO);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CCOSTOESPECIFICO);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CNETO);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CIMPUESTO1);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPORCENTAJEIMPUESTO1);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CIMPUESTO2);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPORCENTAJEIMPUESTO2);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CIMPUESTO3);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPORCENTAJEIMPUESTO3);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CRETENCION1);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPORCENTAJERETENCION1);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CRETENCION2);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPORCENTAJERETENCION2);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CDESCUENTO1);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPORCENTAJEDESCUENTO1);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CDESCUENTO2);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPORCENTAJEDESCUENTO2);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CDESCUENTO3);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPORCENTAJEDESCUENTO3);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CDESCUENTO4);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPORCENTAJEDESCUENTO4);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CDESCUENTO5);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPORCENTAJEDESCUENTO5);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CTOTAL);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CPORCENTAJECOMISION);5)
              imprime lNumero
              lCadena = tMovtosOcultos(CREFERENCIA)
              imprime lCadena
              lNumero = @Str(tMovtosOcultos(CAFECTAEXISTENCIA);0)
              imprime lNumero
              //CAFECTADOSALDOS se exporta como cero para que no cause problemas.
              lNumero = '0'
              imprime lNumero
              //CAFECTADOINVENTARIO se exporta como cero para que no cause problemas.
              lNumero = '0'
              imprime lNumero
              lCadena = tMovtosOcultos(CFECHA)
              fImprimeFecha(lCadena)
              lNumero = @Str(tMovtosOcultos(CMOVTOOCULTO);0)
              imprime lNumero
              fImprimeLlaveMovOrigen(@Str(tMovtosOcultos(CIDMOVTOORIGEN);0))
              lNumero = @Str(tMovtosOcultos(CUNIDADESPENDIENTES);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CUNIDADESNCPENDIENTES);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CUNIDADESORIGEN);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CUNIDADESNCORIGEN);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CTIPOTRASPASO);0)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CIDVALORCLASIFICACION);0)
              fImprimeClasificacion(lNumero)
              lCadena = tMovtosOcultos(CTEXTOEXTRA1)
              imprime lCadena
              lCadena = tMovtosOcultos(CTEXTOEXTRA2)
              imprime lCadena
              lCadena = tMovtosOcultos(CTEXTOEXTRA3)
              imprime lCadena
              lCadena = tMovtosOcultos(CFECHAEXTRA)
              fImprimeFecha(lCadena)
              lNumero = @Str(tMovtosOcultos(CIMPORTEEXTRA1);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CIMPORTEEXTRA2);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CIMPORTEEXTRA3);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CIMPORTEEXTRA4);5)
              imprime lNumero
              lNumero = @Str(tMovtosOcultos(CGTOMOVTO);5)
              imprime lNumero
              // Ini N.D.2576 DRdA
              // Exportación de las observaciones del movimiento
              Texto C0;'{'
              imprime
              vCadena = tMovtosOcultos(COBSERVAMOV)
              imprime vCadena
              Texto C0;'}'
              imprime
              // Fin N.D.2576
              // N.D.4232 Exportar la Comisión de Venta y el Segmento Contable del Movimiento
              lNumero = @Str(tMovtosOcultos(CCOMVENTA);5)
              imprime lNumero
              vCadena = tMovtosOcultos(CSCMOVTO)
              imprime vCadena

              Si vEsUnPaquete = 1
                Si tMovimientos(CIDDOCUMENTODE) = 3 O tMovimientos(CIDDOCUMENTODE) = 6
                  Si lNumeroMovtos != 0
                    vSegundoMovto = lNumeroMovtos % 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 = lNumeroMovtos % 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 (tMovimientos(CIDDOCUMENTODE) = 3 O tMovimientos(CIDDOCUMENTODE) = 6) Y vEsUnPaquete = 1 Y lNumeroMovtos != 0
              //  vSegundoMovto = lNumeroMovtos % 2
              //  Si vSegundoMovto = 0
              //    vExportarSeriesYCapas = 1
              //  SiNo
              //    vIdMovtoCorrecto = tMovtosOcultos(CIDMOVIMIENTO)
              //  FinSi
              //SiNo
              //  Si tMovimientos(CIDDOCUMENTODE) != 3 Y tMovimientos(CIDDOCUMENTODE) != 6 Y vEsUnPaquete = 1
              //    vExportarSeriesYCapas = 1
              //    vIdMovtoCorrecto = tMovtosOcultos(CIDMOVIMIENTO)
              //  FinSi
              //FinSi
              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

          // N.D.1515 Inicio
          Si tMovimientos(CIDDOCUMENTODE) = 6
            tMovtosOcultos.Busca[@Str(tMovimientos(CIDMOVIMIENTO);0)]
          FinSi
          // N.D.1515 Fin
          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
      // Si tiene asociación con cargos o abonos, baja el docto y el registro de asociación
      Si tDocumentos(CIDDOCUMENTODE) = 4 O tDocumentos(CIDDOCUMENTODE) = 5
        Si tDocumentos(CIDDOCUMENTODE) = 4
          // Como el documento es de factura la busca con el índice de cargos
          tAbonosYCargos.Usaindice['iDoctoCargoAbono'] // cIdDocumentoCargo+cIdDocumentoAbono
        SiNo // tDocumentos(CIDDOCUMENTODE) = 5
          // Como el documento es de devolución de vta. lo busca con el índice de abono
          tAbonosYCargos.Usaindice[''] // Llave primaria: cIdDocumentoAbono+cIdDocumentoCargo
        FinSi

        tAbonosYCargos.Busca[@Str(tDocumentos(CIDDOCUMENTO);0)]
        Si tAbonosYCargos->Encontro
          // Se manda exportar el documento de cargo o abono
          Si tDocumentos(CIDDOCUMENTODE) = 4 // Factura
            gNumero = @Str(tAbonosYCargos(CIDDOCUMENTOABONO);0)
          SiNo // Devolución sobre venta
            gNumero = @Str(tAbonosYCargos(CIDDOCUMENTOCARGO);0)
          FinSi
          fImprimeDocumento(gNumero)

          // Se manda exportar el registro de asociación
          Texto C0;'MGW10009'
          imprime
          fImprimeLlaveDoc(@Str(tAbonosYCargos(CIDDOCUMENTOABONO);0))
          // Impresión de la moneda del documento de abono
          lNumero = @Str(tDocOrigen(CIDMONEDA);0)
          imprime lNumero
          fImprimeLlaveDoc(@Str(tAbonosYCargos(CIDDOCUMENTOCARGO);0))
          lNumero = @Str(tDocOrigen(CIDMONEDA);0)
          imprime lNumero
          lNumero = @Str(tAbonosYCargos(CIMPORTEABONO);5)
          imprime lNumero
          lNumero = @Str(tAbonosYCargos(CIMPORTECARGO);5)
          imprime lNumero
          lCadena = tAbonosYCargos(CFECHAABONOCARGO)
          fImprimeFecha(lCadena)
          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
          lNumero = @Str(tDocOrigen(CIDCLIENTEPROVEEDOR);0)
          fImprimeCodigoCliProv(lNumero)
        FinSi
      FinSi
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImprimeTablasCampos
//
//	Imprime la estructura de las tablas con los nombres de campos.
//
//  Parámetros
//
//  Salidas
// *****************************************************************************
DefFunc fImprimeTablasCampos()
  Si pCatalogoCajas = 1
    Texto C0;'MGW10041'
    imprime
    Texto C0;'cCodigoC01'
    imprime
    Texto C0;'cNombreC01'
    imprime
    Texto C0;'cFechaAl01'
    imprime
    Texto C0;'cCodigoAlmacen'
    imprime
    Texto C0;'cImpresora'
    imprime
    Texto C0;'cPuertoImp'
    imprime
    Texto C0;'cNomCajon'
    imprime
    Texto C0;'cPuertoCaj'
    imprime
    Texto C0;'cTorreta'
    imprime
    Texto C0;'cPuertoTor'
    imprime
    Texto C0;'cTorTexto1'
    imprime
    Texto C0;'cTorTexto2'
    imprime
    Texto C0;'cConecImp'
    imprime
    Texto C0;'cCodCorPap'
    imprime
    Texto C0;'cCodAbrCaj'
    imprime
    Texto C0;'cCodIniTor'
    imprime
    Texto C0;'cTipoimpre'
    imprime
    Texto C0;'cTipocajon'
    imprime
    Texto C0;'cTipotorre'
    imprime
    Texto C0;'cBanImpr01'
    imprime
    Texto C0;'cBanCajon'
    imprime
    Texto C0;'cBanTorr01'
    imprime        
    // S.C.93 Inicio
    // Exportar la serie y folio de las Notas de Venta
    Texto C0;'cSerieNota'
    imprime        
    Texto C0;'cFolioNota'
    imprime        
    // Exportar la serie y folio de las Devoluciones de Notas de Venta
    Texto C0;'cSerieDevN'
    imprime        
    Texto C0;'cFolioDevN'
    imprime        
    // S.C.93 Fin
    Texto C0;'/MGW10041'
    Si pNotasDeVenta = 1 O pFacturasDevNV = 1
      imprime
    SiNo
      imprime 1
    FinSi
  FinSi

  Si pNotasDeVenta = 1 O pFacturasDevNV = 1
    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;'CIMPUESTO1'
    //imprime
    //Texto C0;'CIMPUESTO2'
    //imprime
    //Texto C0;'CIMPUESTO3'
    //imprime
    //Texto C0;'CRETENCION1'
    //imprime
    //Texto C0;'CRETENCION2'
    //imprime
    //Texto C0;'CDESCUENTOMOV'
    //imprime
    //Texto C0;'CDESCUENTODOC1'
    //imprime
    //Texto C0;'CDESCUENTODOC2'
    //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
    Texto C0;'COBSERVACIONES'
    Imprime
    Texto C0;'CBANOBSERVACIONES'
    imprime
    Texto C0;'CBANDATOSENVIO'
    imprime
    Texto C0;'CBANCONDICIONESCREDITO'
    imprime
    Texto C0;'CBANGASTOS'
    imprime
    Texto C0;'CIMPCHEQPAQ'
    imprime
    Texto C0;'CSISTORIG'
    imprime
// Inicia PdV DRdA
    Texto C0;'CPENDIENTE'
    imprime
// Fin PdV DRdA
    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;'/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
    // N.D.4232 Exportar el la Comisión de Venta y el Segmento Contable del Movimiento
    Texto C0;'CCOMVENTA'
    imprime
    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;'/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;'/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'
    Si pNotasDeVenta = 1
      imprime
    SiNo
      imprime 1
    FinSi
  FinSi

  Si pNotasDeVenta = 1
    Texto C0;'MGW10042'
    imprime
    Texto C0;'cCodigoC01'
    imprime
    Texto C0;'cFecHoraAp'
    imprime
    // cIdUsuario CAC10000
    Texto C0;'Clave'
    imprime
    Texto C0;'cNomTerm'
    imprime
    Texto C0;'cCodigoAgente'
    imprime
    Texto C0;'cEstadoApe'
    imprime
    Texto C0;'cFecHoraCo'
    imprime
    Texto C0;'cFacturada'
    imprime
  // No es necesario exportar las llaves ya que se asocian por posición en el 
  // arcivo txt de exportación, estos doctos van antes del registro de apertura
//!    Texto C0;'cCodigoDocum01'
//!    imprime
//!    Texto C0;'cCodigoDocum02'
//!    imprime
    Texto C0;'cApEfectiv'
    imprime
    Texto C0;'cApCheques'
    imprime
    Texto C0;'cApVales'
    imprime
    Texto C0;'cApTCVISA'
    imprime
    Texto C0;'cApTCMstCr'
    imprime
    Texto C0;'cApTCAmEx'
    imprime
    Texto C0;'cApOtros'
    imprime
    Texto C0;'cApImport1'
    imprime
    Texto C0;'cApImport2'
    imprime
    Texto C0;'cApImport3'
    imprime
    // A partir de aquí no es necesario exportar los demás campos por que se
    // van ir acumulando en la importación conforme se carguen los registros
    // de cobros
//!    Texto C0;'cVtaEfect'
//!    imprime
//!    Texto C0;'cVtaCheque'
//!    imprime
//!    Texto C0;'cVtaVales'
//!    imprime
//!    Texto C0;'cVtaTCVISA'
//!    imprime
//!    Texto C0;'cVtaTCMsCr'
//!    imprime
//!    Texto C0;'cVtaTCAmEx'
//!    imprime
//!    Texto C0;'cVtaOtras'
//!    imprime
//!    Texto C0;'cVtaImpor1'
//!    imprime
//!    Texto C0;'cVtaImpor2'
//!    imprime
//!    Texto C0;'cVtaImpor3'
//!    imprime
//!    Texto C0;'cVtaTasa15'
//!    imprime
//!    Texto C0;'cVtaTasa10'
//!    imprime
//!    Texto C0;'cVtaTasa0'
//!    imprime
//!    Texto C0;'cVtaTasaEx'
//!    imprime
//!    Texto C0;'cVtaTasaOt'
//!    imprime
//!    Texto C0;'cTIVAVtaOt'
//!    imprime
//!    Texto C0;'cDevTasa15'
//!    imprime
//!    Texto C0;'cDevTasa10'
//!    imprime
//!    Texto C0;'cDevTasa0'
//!    imprime
//!    Texto C0;'cDevTasaEx'
//!    imprime
//!    Texto C0;'cVtaTasaOt'
//!    imprime
//!    Texto C0;'cTIVADevOt'
//!    imprime
    Texto C0;'/MGW10042'
    imprime

    Texto C0;'MGW10043'
    imprime
    // Los registros de cobros se van a ligar a la apertura recien dada de alta
    // durante la importación
//!    Texto C0;'cCodigoApertura'
//!    imprime
  // No es necesario exportar las llaves ya que se asocian por posición en el 
  // archivo txt de exportación, estos doctos van antes del registro de cobro
//!    Texto C0;'cCodigoDocum01'
//!    imprime
//!    Texto C0;'cCodigoDocum02'
//!    imprime
//!    Texto C0;'cCodigoDocum03'
//!    imprime
    Texto C0;'cPendiente'
    imprime
    Texto C0;'cCobEfecMN'
    imprime
    Texto C0;'cCobEfecME'
    imprime
    Texto C0;'cTipCambio'
    imprime
    Texto C0;'cCobCheque'
    imprime
    Texto C0;'cCobVales'
    imprime
    Texto C0;'cRefVales'
    imprime
    Texto C0;'cCobTCVISA'
    imprime
    Texto C0;'cRefTCVISA'
    imprime
    Texto C0;'cCobTCMsCr'
    imprime
    Texto C0;'cRefTCMsCr'
    imprime
    Texto C0;'cCobTCAmEx'
    imprime
    Texto C0;'cRefTCAmEx'
    imprime
    Texto C0;'cCobOtros'
    imprime
    Texto C0;'cRefOtros'
    imprime
    Texto C0;'cImporte01'
    imprime
    Texto C0;'cRefImp01'
    imprime
    Texto C0;'cImporte02'
    imprime
    Texto C0;'cRefImp02'
    imprime
    Texto C0;'cImporte03'
    imprime
    Texto C0;'cRefImp03'
    imprime
    Texto C0;'cCambio'
    imprime
    Texto C0;'cvtatasa15'
    imprime
    Texto C0;'cvtatasa10'
    imprime
    Texto C0;'cvtatasa0'
    imprime
    Texto C0;'cvtatasaex'
    imprime
    Texto C0;'cvtatasaot'
    imprime
    Texto C0;'ctivavtaot'
    imprime
    Texto C0;'/MGW10043'
    imprime 1
  FinSi
FinFunc

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

//Tipo de exportación.
Texto C0;'PUNTODEVENTA'
imprime

fImprimeTablasCampos()

gCadena = ''
gNumero = ''

Si pCatalogoCajas = 1
  // **********************************************************************************************
  // Cajas
  // **********************************************************************************************
  tCajas.Usaindice['CFECHAAL01']
  //lCadena =  & '..' & pFechaCajaFin
  gFechaBusqueda = pFechaCajaIni
  Mientras gFechaBusqueda <= pFechaCajaFin
    Mientras[tCajas.Busca[gFechaBusqueda]; tCajas->Encontro Y tCajas(CFECHAAL01) = gFechaBusqueda;tCajas.Saltareg[1]]
      Si tCajas(CIDCAJA) != 0
        Texto C0;'MGW10041'
        imprime
        gCadena = tCajas(CCODIGOC01)
        imprime gCadena
        gCadena = tCajas(CNOMBREC01)
        imprime gCadena
        gCadena = tCajas(CFECHAAL01)
        fImprimeFecha(gCadena)
        gNumero = @Str(tCajas(CIDALMACEN);0)
        fImprimeCodigoAlmacen(gNumero)
        gCadena = tCajas(CIMPRESORA)
        imprime gCadena
        gCadena = tCajas(CPUERTOIMP)
        imprime gCadena
        gCadena = tCajas(CNOMCAJON)
        imprime gCadena
        gCadena = tCajas(CPUERTOCAJ)
        imprime gCadena
        gCadena = tCajas(CTORRETA)
        imprime gCadena
        gCadena = tCajas(CPUERTOTOR)
        imprime gCadena
        gCadena = tCajas(CTORTEXTO1)
        imprime gCadena
        gCadena = tCajas(CTORTEXTO2)
        imprime gCadena
        lNumero = @Str(tCajas(CCONECIMP);0)
        imprime lNumero
        gCadena = tCajas(CCODCORPAP)
        imprime gCadena
        gCadena = tCajas(CCODABRCAJ)
        imprime gCadena
        gCadena = tCajas(CCODINITOR)
        imprime gCadena
        lNumero = @Str(tCajas(CTIPOIMPRE);0)
        imprime lNumero
        lNumero = @Str(tCajas(CTIPOCAJON);0)
        imprime lNumero
        lNumero = @Str(tCajas(CTIPOTORRE);0)
        imprime lNumero
        lNumero = @Str(tCajas(CBANIMPR01);0)
        imprime lNumero
        lNumero = @Str(tCajas(CBANCAJON);0)
        imprime lNumero
        lNumero = @Str(tCajas(CBANTORR01);0)
        imprime lNumero
        // S.C.93 Inicio
        // Exportar la serie y folio de las Notas de Venta
        lNumero = @Str(tCajas(cSerieNota);0)
        imprime lNumero
        lNumero = @Str(tCajas(cFolioNota);0)
        imprime lNumero
        // Exportar la serie y folio de las Devoluciones de Notas de Venta
        lNumero = @Str(tCajas(cSerieDevN);0)
        imprime lNumero
        lNumero = @Str(tCajas(cFolioDevN);0)
        imprime lNumero
        // S.C.93 Fin
      FinSi
    FinMientras
    gFechaBusqueda = fFechaSiguiente(gFechaBusqueda)
  FinMientras
  tCajas.Usaindice['']
FinSi

Si pNotasDeVenta = 1 O pFacturasDevNV = 1
  //Si Se seleccionaron documentos se exportan.
  tDirecciones.Usaindice['iCatTipoCatTipoDir']
  tMovimientos.Usaindice['iDoctoNumeroMovto']
  tMovtosOrigen.Usaindice['']
  tMovtosOcultos.Usaindice['iMovtoOwnerMovto']

  // Recorre secuencialmente la tabla de aperturas por falta de índice
  tAperturas.Busca Primero
  Mientras tAperturas->Encontro
    gFecha = fConvierteFecha(tAperturas(cFecHoraAp))
    Si gFecha >= pFechaDocumentoIni Y gFecha <= pFechaDocumentoFin
      Si (pNotasDeVenta = 1 Y tAperturas(cEstadoApe) = 1) O (pFacturasDevNV = 1)
        // Si tiene factura consolidada asociada la imprime
        gNumero = @Str(tAperturas(cIdDocum01);0)
        fImprimeDocumento(gNumero)
        // Si tiene dev. de factura consolidada asociada la imprime
        gNumero = @Str(tAperturas(cIdDocum02);0)
        fImprimeDocumento(gNumero)
      FinSi

      // Imprime el registro de la apertura solo si se pidió la exportación de
      // notas de venta y que la apertura esté en estado de corte
      Si pNotasDeVenta = 1 Y tAperturas(cEstadoApe) = 1
        // Impresión de valores de los campos de la tabla de aperturas (MGW10042)
        fImprimeApertura()
      FinSi

      // En base a los registros de cobro de la apertura es como se recorre e imprimen
      // las facturas y notas de venta relacionadas, así como las devoluciones de notas

      // ***************************************************************************
      // Cobros de la apertura
      // ***************************************************************************
      lCadena = @Str(tAperturas(cIdApertur);0) & '..' & @Str(tAperturas(cIdApertur);0)
      tCobros.Busca[lCadena]
      Si tCobros->Encontro
        tCobros.Busca Primero
        Mientras tCobros->Encontro Y tCobros(cIdApertur) = tAperturas(cIdApertur)
          Si (pNotasDeVenta = 1 Y tAperturas(cEstadoApe) = 1) O (pFacturasDevNV = 1)
            // Si tiene factura asociada a la nota de venta la imprime
            Si tCobros(cIdDocum01) > 0
              gNumero = @Str(tCobros(cIdDocum03);0)
              fImprimeDocumento(gNumero)
            FinSi
          FinSi

          // Imprime los registros de nota de venta o devol. de nota y del cobro
          // solo si se pidió la exportación de notas de venta y que la apertura
          // esté en estado de corte
          Si pNotasDeVenta = 1 Y tAperturas(cEstadoApe) = 1
            // Nota de venta
            gNumero = @Str(tCobros(cIdDocum01);0)
            fImprimeDocumento(gNumero)
            // Devol. de nota de venta
            gNumero = @Str(tCobros(cIdDocum02);0)
            fImprimeDocumento(gNumero)
            // Impresión de valores de los campos de la tabla de cobros (MGW10043)
            fImprimeCobro()
          FinSi

          tCobros.SaltaReg[1]
        FinMientras
      FinSi

    FinSi

    tAperturas.SaltaReg[1]
  FinMientras
FinSi


