// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//	Reporte : ExpCatalP.rpt
//
//	Proceso : Despliega los datos de los catálogos según parámetros y en el
//  siguiente orden:
//  1)Catálogos secundarios:
//    1.1)Monedas.
//    1.2)Clasificaciones y sus valores.
//    1.3)Características y sus valores.
//    1.4)Unidades de Medida y Peso.
//    1.5)Conversión de Unidades.
//  2)Catálogos primarios:
//    2.1)Almacenes.
//    2.2)Promociones.
//    2.3)Agentes.
//    2.4)Clientes/Proveedores y Direcciones.
//    2.5)Productos y Servicios.
//    2.6)Paquetes y sus Componentes.
//    2.7)Identificador de Productos y Detalles.
//    2.8)Existencia Máxima y Mínima.
//    2.9)Lista de Precios de Compra.
//
//	Creacion: Nicolás Acosta Ramírez.
//
//	Fecha   : 30 de Julio de 2001
//
//	Ult.Mod : Fernando
//
//	Fecha   : 08 de julio de 2004
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//  Historia de Revisiones
//  Fecha       ID-Lotus        Descripcion
//   14/07/2004 N.D.2836        Correcciones a la exportación cuando se utilizan clasificaciones
//                              (LAP)
//                              - fCumpleConClasificaciones (Nuevo)
//                              - Cuerpo del reporte  
//   01/03/2005 N.D.3119        Ahora se reciben los Id´s de las características a exportar a TXT
//                              a fin de permitir exportar características con comas (LAP)
//                              - Cuerpo del Reporte: Exportación Características
//   01/04/2005 N.D.3168        Exportación de la moneda secundaria del catalogo de clientes
//                              proveedores (LAP)
//                              - ImprimeClienteProveedor
//                              - Cuerpo del reporte: Exportación de nombres de campos
//   04/06/2008 N.D.5215        Se agrega en la exportación el campo CMUNICIPIO de la 
//                              tabla MGW10011. (MMEV)
//                              - fImprimeDirecciones
//                              - Cuerpo del Reporte
//   05/06/2008 S.C.193         Se agregó el nuevo campo csistOrig a la exportacion de almacenes. (IYPZ)
//															- Cuerpo del reporte
//   17/07/2008 N.D.5320        Se agregó el nuevo campo cTipoPaque a la exportacion de Productos 
//															de tipo Paquetes. (MAJU)
//															- Cuerpo del reporte
//   20/10/2008 N.D.4451        Se agregó el campo cEsExento a la exportacion de Productos (MAJU)
//															- Cuerpo del reporte
//   22/02/2010 N.D.6204        Exportación/Importación - ERROR EL VALOR NO CORRESPONDE AL TIPO DEL 
//                              CAMPO AL TRATAR DE IMPORTAR PAQUETES. (ELVS)
//                              - Paquetes y sus componentes
//   21/03/2014 N.D.8637        Exportación/Importación - ERROR CAMBIA EL METODO DE PAGO AL CAMPO 
//				CUENTA DE PAGO AL IMPORTAR LOS CLIENTES/PROVEEDORES. (ALRH)
//                              - Cuerpo del Reporte (MGW10002)
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Incluye LibAdminPAQ.Rpt
// *****************************************************************************
//	Parámetros del reporte:

Parametro pMonedas = '*'                 // Mondenas a exportar.
Parametro pClasificaciones = '*'         // Clasificaciones a exportar.
Parametro pCaracteristicas = '*'         // Características a exportar.
Parametro pUnidadesYConversiones = 1     // Incluir conversión de unidades:
                                         // 1 = Sí
                                         // 0 = No

Parametro pAlmacenInicial = ' '	         // Límite inferior del rango de almacenes
Parametro pAlmacenFinal = ' '		 // Límite superior del rango de almacenes
Parametro pIdClasifAlm1 = 0 		 // Clasificación 1 de almacenes
Parametro pIdClasifAlm2 = 0 		 // Clasificación 2 de almacenes
Parametro pIdClasifAlm3 = 0 		 // Clasificación 3 de almacenes
Parametro pIdClasifAlm4 = 0 		 // Clasificación 4 de almacenes
Parametro pIdClasifAlm5 = 0 		 // Clasificación 5 de almacenes
Parametro pIdClasifAlm6 = 0 		 // Clasificación 6 de almacenes

Parametro pIncluirPromociones = 1        // Incluir productos con estado:
                                         // 1 = Sí
                                         // 0 = No

Parametro pAlgenteInicial = ' '	         // Límite inferior del rango de agentes
Parametro pAlgenteFinal = ' '		 // Límite superior del rango de agentes
Parametro pIdClasifAgen1 = 0 		 // Clasificación 1 de agentes
Parametro pIdClasifAgen2 = 0 		 // Clasificación 2 de agentes
Parametro pIdClasifAgen3 = 0 		 // Clasificación 3 de agentes
Parametro pIdClasifAgen4 = 0 		 // Clasificación 4 de agentes
Parametro pIdClasifAgen5 = 0 		 // Clasificación 5 de agentes
Parametro pIdClasifAgen6 = 0 		 // Clasificación 6 de agentes


Parametro pCliInicial = ' '	         // Límite inferior del rango de clientes
Parametro pCliFinal = ' '		 // Límite superior del rango de clientes
Parametro pIdClasifCli1 = 0		 // Clasificación 1 de clientes 
Parametro pIdClasifCli2 = 0		 // Clasificación 2 de clientes 
Parametro pIdClasifCli3 = 0		 // Clasificación 3 de clientes 
Parametro pIdClasifCli4 = 0		 // Clasificación 4 de clientes 
Parametro pIdClasifCli5 = 0		 // Clasificación 5 de clientes 
Parametro pIdClasifCli6 = 0		 // Clasificación 6 de clientes 

Parametro pProdInicial = ' '	         // Límite inferior del rango de productos y servicios
Parametro pProdFinal = ' '		 // Límite superior del rango de productos y servicios
Parametro pIdClasifProd1= 0		 // Clasificación 1 de productos y servicios
Parametro pIdClasifProd2= 0		 // Clasificación 2 de productos y servicios
Parametro pIdClasifProd3= 0		 // Clasificación 3 de productos y servicios
Parametro pIdClasifProd4= 0		 // Clasificación 4 de productos y servicios
Parametro pIdClasifProd5= 0		 // Clasificación 5 de productos y servicios
Parametro pIdClasifProd6= 0		 // Clasificación 6 de productos y servicios

Parametro pPaqInicial = ' '	         // Límite inferior del rango de paquetes
Parametro pPaqFinal = ' '		 // Límite superior del rango de paquetes
Parametro pIdClasifPaq1 = 0		 // Clasificación 1 de paquetes
Parametro pIdClasifPaq2 = 0		 // Clasificación 2 de paquetes
Parametro pIdClasifPaq3 = 0		 // Clasificación 3 de paquetes
Parametro pIdClasifPaq4 = 0		 // Clasificación 4 de paquetes
Parametro pIdClasifPaq5 = 0		 // Clasificación 5 de paquetes
Parametro pIdClasifPaq6 = 0		 // Clasificación 6 de paquetes

Parametro pIncluirListaPrecios = 1       // Incluir lista de precio:
                                         // 1 = Sí
                                         // 0 = No
Parametro pIncluirExisMaxMin = 1         // Incluir lista de precio:
                                         // 1 = Sí
                                         // 0 = No

Parametro pTipoReporte = 1               //1  Exportación de catálogos generales
                                         //2  Exportación de almacenes
                                         //3  Exportación de agentes
                                         //4  Exportación de clientes y proveedores
                                         //5  Exportación de productos, servicios y paquetes

Parametro pProvInicial = ' '	         // Límite inferior del rango de proveedores
Parametro pProvFinal = ' '

Parametro pIdClasifProv1 = 0		 // Clasificación 1 de proveedores
Parametro pIdClasifProv2 = 0		 // Clasificación 2 de proveedores
Parametro pIdClasifProv3 = 0		 // Clasificación 3 de proveedores
Parametro pIdClasifProv4 = 0		 // Clasificación 4 de proveedores
Parametro pIdClasifProv5 = 0		 // Clasificación 5 de proveedores
Parametro pIdClasifProv6 = 0		 // Clasificación 6 de proveedores


// **********************************************************************************************
//	Tablas a utilizar:
//
// mgw00001 = Empresas.
// mgw10002 = Clientes/Proveedores.
// mgw10003 = Almacenes.
// mgw10004 = Identificador de productos y detalles.
// mgw10005 = Productos.
// mgw10011 = Direcciones.
// mgw10014 = Lista de precios de compra.
// mgw10015 = Componentes de Paquetes.
// mgw10016 = Existencias Máxima y Mínima.
// mgw10019 = Clasificaciones.
// mgw10020 = Valores de Clasificación.
// mgw10021 = Características.
// mgw10022 = Valores de características.
// mgw10026 = Unidades.
// mgw10027 = Conversion de Unidades.
// mgw10029 = Promociones.
// mgw10034 = Monedas.
// **********************************************************************************************

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

UsaTabla tAgente = tEmpresa['mgw10001']
tAgente.Usaindice['iCodigoTipo']
UsaTabla tAgentePorId = tEmpresa['mgw10001']
UsaTabla tCliProv = tEmpresa['mgw10002']
tCliProv.Usaindice['iCodigoTipo']
UsaTabla tCliProvPorId = tEmpresa['mgw10002']
UsaTabla tAlmacenes = tEmpresa['mgw10003']
tAlmacenes.Usaindice['cCodigoAlmacen']
UsaTabla tAlmacenesPorId = tEmpresa['mgw10003']
UsaTabla tIdProdDetalles = tEmpresa['mgw10004']
UsaTabla tProductos = tEmpresa['mgw10005']
tProductos.Usaindice['iCodigoTipo']   
UsaTabla tProductosPorId = tEmpresa['mgw10005']
UsaTabla tProductosDetalle = tEmpresa['mgw10005']
UsaTabla tDirecciones = tEmpresa['mgw10011']
tDirecciones.Usaindice['iCatTipoCatTipoDir']
UsaTabla tListaPrecios = tEmpresa['mgw10014']
UsaTabla tCompPaquetes = tEmpresa['mgw10015']
tCompPaquetes.Usaindice['iPaqProdValoresCarac']
UsaTabla tExistencias = tEmpresa['mgw10016']
UsaTabla tClasificaciones = tEmpresa['mgw10019']
UsaTabla tValClasificacion = tEmpresa['mgw10020']
UsaTabla tCaracteristicas = tEmpresa['mgw10021']
UsaTabla tValCaracteristicas = tEmpresa['mgw10022']
UsaTabla tUnidades = tEmpresa['mgw10026']
UsaTabla tConversiones = tEmpresa['mgw10027']
UsaTabla tPromociones = tEmpresa['mgw10029']
UsaTabla tMonedas = tEmpresa['mgw10034']

UsaTabla tParametros  = tEmpresa2['mgw00001']

// **********************************************************************************************
// Definiciones y asumidos globales para el reporte
// *********************************************************************************************

Columnas 1;60.0

UsaLetra 'Arial'
Altura 10

// ==========================================================================================
// fCumpleConClasificaciones  
//    Esta función que determina si el elemento que recibe pertenece a alguna de las clases 
// que seleccionadas para cada clasificación. Todas las clases, de todas las clasificaciones 
// estan en una lista aListaIDs, y el número de clases por cada clasificación está en aNum.
// gNumClasesPorTipo.
// Entrada:
//   aIdClasif1 =  Id del valor de la clasificación 1 del catalogo
//   aIdClasif2 =  Id del valor de la clasificación 2 del catalogo
//   aIdClasif3 =  Id del valor de la clasificación 3 del catalogo
//   aIdClasif4 =  Id del valor de la clasificación 4 del catalogo
//   aIdClasif5 =  Id del valor de la clasificación 5 del catalogo
//   aIdClasif6 =  Id del valor de la clasificación 6 del catalogo
//   aListaIDs  = Es una lista con los ID de las clases.
// Salida : En todos los casos, regresa un :
//      0 = cuando el elemento atTablaComparada NO pertenece a una de las clases seleccionadas
//          por cada clasificación.
//      1 = cuando el elemento atTablaComparada SI pertenece a una clase seleccionada por cada 
//          una de las clasificaciones.
//
//  Fecha       Id Lotus  Autor   Descripción
//  15/07/2004  N.D.2836  LAP     Implementación Inicial
// ==========================================================================================
Deffunc fCumpleConClasificaciones(aIdClasif1; aIdClasif2; aIdClasif3; aIdClasif4; aIdClasif5; aIdClasif6; aListaIdsClasif)
Local lNumClasificacion 
Local lTotalValores
Local lValorActual
Local lValorCatalogo
Local lOffsetClasificacion
Local lCumpleClasificacion

  lNumClasificacion = 1
  lOffsetClasificacion = 0
  lCumpleClasificacion = 1

  // Recorrido de las 6 clasificaciones por catalogo  
  Mientras (lNumClasificacion < 7) Y (lCumpleClasificacion = 1)
    // Obtención del valor de la clasificación actual del catalogo
    Escoge lNumClasificacion
      Caso 1
        lValorCatalogo = aIdClasif1
      FinCaso
      Caso 2
        lValorCatalogo = aIdClasif2
      FinCaso
      Caso 3
        lValorCatalogo = aIdClasif3
      FinCaso
      Caso 4
        lValorCatalogo = aIdClasif4
      FinCaso
      Caso 5
        lValorCatalogo = aIdClasif5
      FinCaso
      Caso 6
        lValorCatalogo = aIdClasif6
      FinCaso
    FinEscoge
    // Por omisión cumple con la clasificación
    lCumpleClasificacion = 1
    // Obtención del número de valores seleccionados por el usuario para la clasificación actual
    // En caso de no tener valor se considera que si cumple con la clasificación
    Si @Escoge(gNumClasesPorTipo; lNumClasificacion-1) != ''
      // Total de valores para la clasificación actual
      lTotalValores = @Val(@Escoge(gNumClasesPorTipo; lNumClasificacion-1))
      // Por omisión no cumple con la clasificación
      lCumpleClasificacion = 0
      // Valor de clasificación actual
      lValorActual = 0      
      Mientras (lValorActual < lTotalValores) Y (lCumpleClasificacion = 0) Y (lValorCatalogo != 0)
        Si lValorCatalogo = @Val(@Escoge(aListaIdsClasif; lOffsetClasificacion+lValorActual))
          // Cumple con la clasificación
          lCumpleClasificacion = 1
        FinSi
        // Siguiente valor de clasificación
        lValorActual = lValorActual + 1
      FinMientras
      // Nos recorremos en la cadena de Ids las posiciones correspondientes a los valores de la
      //  clasificación ya visitados
      lOffsetClasificacion = lOffsetClasificacion + lTotalValores
    FinSi
    // Siguiente clasificación
    lNumClasificacion = lNumClasificacion + 1
  FinMientras

  Retorna lCumpleClasificacion
FinFunc

// ==========================================================================================
// fRevisaMisClases
// ========================================================================================== 
Deffunc fRevisaMisClases(aValoresDeClases:TABLA;pIdClase1;pIdClase2;pIdClase3;pIdClase4;pIdClase5;pIdClase6)
    // ===== se arman los ID en una LIsta para poder recorrerlos en una iteración
    gClasesRecibidas = fCuentaClases(&gNumClasesPorTipo;pIdClase1;pIdClase2;pIdClase3;pIdClase4;pIdClase5;pIdClase6)
    // se cargan las clasificaciones validas y se obtiene el número de clases validas
    gNumDeClases = fCargaClases(aValoresDeClases;&gListNombreDeClases; &gListIdDeClases; gClasesRecibidas)
    //Si gNumDeClases > 0    // solo si hubo al menos una clase seleccionada
    //  fImprimeClases(gListNombreDeClases;gNumClasesPorTipo ) 
    //Finsi
FinFunc

// *****************************************************************************
//  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 
    tCliProvPorId.Busca[vIdCliProv]
    Si tCliProvPorId->Encontro
      vCadena1 = tCliProvPorId(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
    tAgentePorId.Busca[vIdAgente]
    Si tAgentePorId->Encontro
      vCadena1 = tAgentePorId(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

// *****************************************************************************
//  fImprimeNombreCaracterisrica
//
//	Busca el padre de característica con id dado y si la encuentra 
//  imprime su nombre.
//
//  Parámetros 
//    - vIdPadreCaracteristica : id de padre de característica.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeNombreCaracterisrica(vIdPadreCaracteristica)
Local vCadena1

  Si vIdPadreCaracteristica = '0' O vIdPadreCaracteristica = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tCaracteristicas.Busca[vIdPadreCaracteristica]
    Si tCaracteristicas->Encontro
      vCadena1 = tCaracteristicas(CNOMBRECARACTERISTICA)
      imprime vCadena1
    SiNo
      vCadena1 = ''
      imprime vCadena1
    FinSi
  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)
Local vCadena1, vNemo1, vNemo2, vNemo3

  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
  
  vCadena1 = vNemo1 & ',' & vNemo2 & ',' & vNemo3
  imprime vCadena1
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 
// *****************************************************************************
DefFunc fImprimeCodigoProducto(vIdProducto)
Local vCadena1

  Si vIdProducto = '0' O vIdProducto = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tProductosPorId.Busca[vIdProducto]
    Si tProductosPorId->Encontro
      vCadena1 = tProductosPorId(CCODIGOPRODUCTO)
      imprime vCadena1
    SiNo
      //Escribir nulo
      vCadena1 = ''
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImprimeCodigoComponente
//
//	Busca el producto que es componente de un paquete con id dado y 
//  si lo encuentra imprime su código y tipo.
//
//  Parámetros 
//    - tProd : tabla por valor para recuperar la posición anterior.
//    - vIdProducto : id de producto.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeCodigoComponente(vIdProducto)
Local vCadena1

  Si vIdProducto = '0' O vIdProducto = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tProductosDetalle.Busca[vIdProducto]
    Si tProductosDetalle->Encontro
      vCadena1 = tProductosDetalle(CCODIGOPRODUCTO)
      imprime vCadena1
    SiNo
      vCadena1 = ''
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  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
    tAlmacenesPorId.Busca[vIdAlmacen]
    Si tAlmacenesPorId->Encontro
      vCadena1 = tAlmacenesPorId(CCODIGOALMACEN)
      imprime vCadena1
    SiNo
      vCadena1 = ''
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImpriemeValorCaracteristica
//
//	Busca el valor de característica con id dado y si lo encuentra 
//  imprime su valor.
//
//  Parámetros 
//    - vIdValorCaracteristica : id de valor de característica.
//
//  Salidas 
// *****************************************************************************
DefFunc fImpriemeValorCaracteristica(vIdValorCaracteristica)
Local vCadena1, vCadena2, vCadena3, vNumero1

  Si vIdValorCaracteristica = '0' O vIdValorCaracteristica = ''
    //Escribir nulo
    vCadena1 = ''
    imprime vCadena1
  SiNo
    tValCaracteristicas.Busca[vIdValorCaracteristica]
    Si tValCaracteristicas->Encontro
      vCadena1 = tValCaracteristicas(CNEMOCARACTERISTICA)
      imprime vCadena1
    SiNo
      vCadena1 = ''
      imprime vCadena1
    FinSi
  FinSi
FinFunc

// *****************************************************************************
//  fImprimeDirecciones
//
//	Imprime las direcciones con id de catálogo igual al proporcionado.
//
//  Parámetros 
//    - vIdCatalogo : Id de catálogo.
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeDirecciones(vIdCatalogo)
Local vCadenaDir, vNumeroDir

  vCadenaDir = @Str(vIdCatalogo;0)
  tDirecciones.Busca[vCadenaDir]
  Mientras tDirecciones->Encontro Y tDirecciones(CIDCATALOGO) = vIdCatalogo
    Si tDirecciones(CIDDIRECCION) = 0 O tDirecciones(CTIPOCATALOGO) > 2
      tDirecciones.SaltaReg[1]
      Continua
    FinSi

    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
        
    tDirecciones.SaltaReg[1]
  FinMientras
    
FinFunc

DefFunc ImprimeClienteProveedor()
        Texto C0;'MGW10002'
        imprime
        vCadena = tCliProv(cCodigoCliente)
        imprime vCadena
        vCadena = tCliProv(cRazonSocial)
        imprime vCadena
        vCadena = tCliProv(cFechaAlta)
        fImprimeFecha(vCadena)
        vCadena = tCliProv(cRFC)
        imprime vCadena
        vCadena = tCliProv(cCURP)
        imprime vCadena
        vCadena = tCliProv(cDenComercial)
        imprime vCadena
        vCadena = tCliProv(cRepLegal)
        imprime vCadena
        vNumero = @Str(tCliProv(cIdMoneda);0)
        imprime vNumero
        // N.D.3168 Inicio
        // Exportación de la moneda secundaria
        vNumero = @Str(tCliProv(cIdMoneda2);0)
        imprime vNumero
        // N.D.3168 Fin
        vNumero = @Str(tCliProv(cListaPrecioCliente);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cDescuentoDocto);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cDescuentoMovto);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cBanVentaCredito);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cIdValorClasifCliente1);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cIdValorClasifCliente2);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cIdValorClasifCliente3);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cIdValorClasifCliente4);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cIdValorClasifCliente5);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cIdValorClasifCliente6);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cTipoCliente);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cEstatus);0)
        imprime vNumero
        vCadena = tCliProv(cFechaBaja)
        fImprimeFecha(vCadena)
        vCadena = tCliProv(cFechaUltimaRevision)
        fImprimeFecha(vCadena)
        vNumero = @Str(tCliProv(cLimiteCreditoCliente);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cDiasCreditoCliente);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cLimDoctos);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cBanExcederCredito);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cDescuentoProntoPago);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cDiasProntoPago);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cInteresMoratorio);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cDiaPago);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cDiasRevision);0)
        imprime vNumero
        vCadena = tCliProv(cMensajeria)
        imprime vCadena
        vCadena = tCliProv(cCuentaMensajeria)
        imprime vCadena
        vNumero = @Str(tCliProv(cDiasEmbarqueCliente);0)
        imprime vNumero

        //Buscar código almacen
        vNumero = @Str(tCliProv(cIdAlmacen);0)
        fImpriemeCodigoAlmacen(vNumero)

        vNumero = @Str(tCliProv(cIdAgenteVenta);0)
        fImprimeCodigoAgente(vNumero)
        vNumero = @Str(tCliProv(cIdAgenteCobro);0)
        fImprimeCodigoAgente(vNumero)
        vNumero = @Str(tCliProv(cRestriccionAgente);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cImpuesto1);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cImpuesto2);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cImpuesto3);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cRetencionCliente1);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cRetencionCliente2);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cIdValorClasifProveedor1);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cIdValorClasifProveedor2);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cIdValorClasifProveedor3);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cIdValorClasifProveedor4);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cIdValorClasifProveedor5);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cIdValorClasifProveedor6);0)
        fImpriemeClasificacion(vNumero)
        vNumero = @Str(tCliProv(cLimiteCreditoProveedor);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cDiasCreditoProveedor);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cTiempoEntrega);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cDiasEmbarqueProveedor);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cImpuestoProveedor1);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cImpuestoProveedor2);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cImpuestoProveedor3);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cRetencionProveedor1);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cRetencionProveedor2);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cBanInteresMoratorio);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cComVentaExcepCliente);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cComCobroExcepCliente);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cBanProductoConsignacion);0)
        imprime vNumero
        vCadena = tCliProv(cSegContCliente1)
        imprime vCadena
        vCadena = tCliProv(cSegContCliente2)
        imprime vCadena
        vCadena = tCliProv(cSegContCliente3)
        imprime vCadena
        vCadena = tCliProv(cSegContCliente4)
        imprime vCadena
        vCadena = tCliProv(cSegContCliente5)
        imprime vCadena
        vCadena = tCliProv(cSegContCliente6)
        imprime vCadena
        vCadena = tCliProv(cSegContCliente7)
        imprime vCadena
        vCadena = tCliProv(cSegContProveedor1)
        imprime vCadena
        vCadena = tCliProv(cSegContProveedor2)
        imprime vCadena
        vCadena = tCliProv(cSegContProveedor3)
        imprime vCadena
        vCadena = tCliProv(cSegContProveedor4)
        imprime vCadena
        vCadena = tCliProv(cSegContProveedor5)
        imprime vCadena
        vCadena = tCliProv(cSegContProveedor6)
        imprime vCadena
        vCadena = tCliProv(cSegContProveedor7)
        imprime vCadena
        vCadena = tCliProv(cTextoExtra1)
        imprime vCadena
        vCadena = tCliProv(cTextoExtra2)
        imprime vCadena
        vCadena = tCliProv(cTextoExtra3)
        imprime vCadena
        vCadena = tCliProv(cFechaExtra)
        fImprimeFecha(vCadena)
        vNumero = @Str(tCliProv(cImporteExtra1);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cImporteExtra2);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cImporteExtra3);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cImporteExtra4);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cBanDomicilio);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cBanCreditoyCobranza);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cBanEnvio);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cBanAgente);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cBanImpuesto);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cBanPrecio);0)
        imprime vNumero
        vNumero = @Str(tCliProv(cComVenta);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cComCobro);5)
        imprime vNumero
        vNumero = @Str(tCliProv(cFacTerc01);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cCodProvCo);0)
		imprime vNumero
		//N.D.8173: Se incluyen los datos faltantes de la BD (FPP)
		vNumero = @Str(tCliProv(cEmail1);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cEmail2);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cEmail3);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cTipoEntre);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cConcteema);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cIdCertcte);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cEncripent);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cBancfd);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cTextoEx04);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cTextoEx05);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cImporte05);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cIdAddenda);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cQuitaBlan);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cFmtoEntre);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cIdComplem);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cDesglosai);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cLimDoctos);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cSitioFtp);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cUsrFtp);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cMetodoPag);0)
        imprime vNumero
		vNumero = @Str(tCliProv(cNumCtaPag);0)
        imprime vNumero
    vCadena = tCliProv(cUsoCFDI)
        imprime vCadena
		
        //Si existe dirección bajar.
        Si tCliProv(cBanDomicilio) = 1
          fImprimeDirecciones(tCliProv(cIdClienteProveedor))
        FinSi

FinFunc
// **********************************************************************************************
// Cuerpo del reporte
// **********************************************************************************************
//vParametro = 'pMonedas: ' & pMonedas
//imprime vParametro
//vParametro = 'pClasificaciones: ' & pClasificaciones
//imprime vParametro
//vParametro = 'pCaracteristicas: ' & pCaracteristicas
//imprime vParametro
//vParametro = 'pIncluirConvUnidades: ' & pIncluirConvUnidades
//imprime vParametro
//vParametro = 'pFechaAlmacenIni: ' & pFechaAlmacenIni
//imprime vParametro
//vParametro = 'pFechaAlmacenFin: ' & pFechaAlmacenFin
//imprime vParametro
//vParametro = 'pIncluirPromociones: ' & pIncluirPromociones
//imprime vParametro
//vParametro = 'pFechaAgenteIni: ' & pFechaAgenteIni
//imprime vParametro
//vParametro = 'pFechaAgenteFin: ' & pFechaAgenteFin
//imprime vParametro
//vParametro = 'pFechaCliProvIni: ' & pFechaCliProvIni
//imprime vParametro
//vParametro = 'pFechaCliProvFin: ' & pFechaCliProvFin
//imprime vParametro
//vParametro = 'pFechaProductoIni: ' & pFechaProductoIni
//imprime vParametro
//vParametro = 'pFechaProductoFin: ' & pFechaProductoFin
//imprime vParametro
//vParametro = 'pFechaPaqueteIni: ' & pFechaPaqueteIni
//imprime vParametro
//vParametro = 'pFechaPaqueteFin: ' & pFechaPaqueteFin
//imprime vParametro
//vParametro = 'pIncluirListaPrecios: ' & pIncluirListaPrecios
//imprime vParametro

//Tipo de exportación.
  Texto C0;'CATALOGOS'
  imprime
  Texto C0;'MGW10034'
  imprime
  Texto C0;'cIdMoneda'
  imprime
  Texto C0;'cNombreMoneda'
  imprime
  Texto C0;'cSimboloMoneda'
  imprime
  Texto C0;'cPosicionSimbolo'
  imprime
  Texto C0;'cPlural'
  imprime
  Texto C0;'cSingular'
  imprime
  Texto C0;'cDescripcionProtegida'
  imprime
  Texto C0;'cIdBandera'
  imprime
  Texto C0;'cDecimalesMoneda'
  imprime
  Texto C0;'CCLAVESAT'
  imprime
  Texto C0;'/MGW10034'
  imprime
  Texto C0;'MGW10019'
  imprime
  Texto C0;'cIdClasificacion'
  imprime
  Texto C0;'cNombreClasificacion'
  imprime
  Texto C0;'/MGW10019'
  imprime
  Texto C0;'MGW10020'
  imprime
  Texto C0;'cValorClasificacion'
  imprime
  Texto C0;'cCodigoValorClasificacion'
  imprime
  Texto C0;'/MGW10020'
  imprime
  Texto C0;'MGW10021'
  imprime
  Texto C0;'cNombreCaracteristica'
  imprime
  Texto C0;'/MGW10021'
  imprime
  Texto C0;'MGW10022'
  imprime
  Texto C0;'cValorCaracteristica'
  imprime
  Texto C0;'cNemoCaracteristica'
  imprime
  Texto C0;'/MGW10022'
  imprime
  Texto C0;'MGW10026'
  imprime
  Texto C0;'cNombreUnidad'
  imprime
  Texto C0;'cAbreviatura'
  imprime
  Texto C0;'cDespliegue'
  imprime
  Texto C0;'CCLAVEINT'
  imprime
  Texto C0;'CCLAVESAT'
  imprime
  Texto C0;'/MGW10026'
  imprime
  Texto C0;'MGW10027'
  imprime
  Texto C0;'cNombreUnidad1'
  imprime
  Texto C0;'cNombreUnidad2'
  imprime
  Texto C0;'cFactorConversion'
  imprime
  Texto C0;'/MGW10027'
  imprime
  Texto C0;'MGW10003'
  imprime
  Texto C0;'cCodigoAlmacen'
  imprime
  Texto C0;'cNombreAlmacen'
  imprime
  Texto C0;'cFechaAltaAlmacen'
  imprime
  Texto C0;'cCodigoValorClasif1'
  imprime
  Texto C0;'cCodigoValorClasif2'
  imprime
  Texto C0;'cCodigoValorClasif3'
  imprime
  Texto C0;'cCodigoValorClasif4'
  imprime
  Texto C0;'cCodigoValorClasif5'
  imprime
  Texto C0;'cCodigoValorClasif6'
  imprime
  Texto C0;'cSegContAlmacen'
  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;'cBanDomicilio'
  imprime
  Texto C0;'cSistOrig'
  imprime
  Texto C0;'/MGW10003'
  imprime
  Texto C0;'MGW10029'
  imprime
  Texto C0;'CCODIGOPROMOCION'
  imprime
  Texto C0;'CNOMBREPROMOCION'
  imprime
  Texto C0;'CFECHAINICIO'
  imprime
  Texto C0;'CFECHAFIN'
  imprime
  Texto C0;'CVOLUMENMINIMO'
  imprime
  Texto C0;'CVOLUMENMAXIMO'
  imprime
  Texto C0;'CPORCENTAJEDESCUENTO'
  imprime
  Texto C0;'cCodigoValorClasifCliente1'
  imprime
  Texto C0;'cCodigoValorClasifCliente2'
  imprime
  Texto C0;'cCodigoValorClasifCliente3'
  imprime
  Texto C0;'cCodigoValorClasifCliente4'
  imprime
  Texto C0;'cCodigoValorClasifCliente5'
  imprime
  Texto C0;'cCodigoValorClasifCliente6'
  imprime
  Texto C0;'cCodigoValorClasifProducto1'
  imprime
  Texto C0;'cCodigoValorClasifProducto2'
  imprime
  Texto C0;'cCodigoValorClasifProducto3'
  imprime
  Texto C0;'cCodigoValorClasifProducto4'
  imprime
  Texto C0;'cCodigoValorClasifProducto5'
  imprime
  Texto C0;'cCodigoValorClasifProducto6'
  imprime
  Texto C0;'/MGW10029'
  imprime
  Texto C0;'MGW10001'
  imprime
  Texto C0;'CCODIGOAGENTE'
  imprime
  Texto C0;'CNOMBREAGENTE'
  imprime
  Texto C0;'CFECHAALTAAGENTE'
  imprime
  Texto C0;'CTIPOAGENTE'
  imprime
  Texto C0;'CCOMISIONVENTAAGENTE'
  imprime
  Texto C0;'CCOMISIONCOBROAGENTE'
  imprime
  Texto C0;'cCodigoCliente'
  imprime
  Texto C0;'cCodigoProveedor'
  imprime
  Texto C0;'cCodigoValorClasif1'
  imprime
  Texto C0;'cCodigoValorClasif2'
  imprime
  Texto C0;'cCodigoValorClasif3'
  imprime
  Texto C0;'cCodigoValorClasif4'
  imprime
  Texto C0;'cCodigoValorClasif5'
  imprime
  Texto C0;'cCodigoValorClasif6'
  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;'/MGW10001'
  imprime
  Texto C0;'MGW10002'
  imprime
  Texto C0;'CCODIGOCLIENTE'
  imprime
  Texto C0;'CRAZONSOCIAL'
  imprime
  Texto C0;'CFECHAALTA'
  imprime
  Texto C0;'CRFC'
  imprime
  Texto C0;'CCURP'
  imprime
  Texto C0;'CDENCOMERCIAL'
  imprime
  Texto C0;'CREPLEGAL'
  imprime
  Texto C0;'CIDMONEDA'
  imprime
  // N.D.3168 Inicio
  // Exportación de la moneda secundaria
  Texto C0;'CIDMONEDA2'
  imprime
  // N.D.3168 Fin
  Texto C0;'CLISTAPRECIOCLIENTE'
  imprime
  Texto C0;'CDESCUENTODOCTO'
  imprime
  Texto C0;'CDESCUENTOMOVTO'
  imprime
  Texto C0;'CBANVENTACREDITO'
  imprime
  Texto C0;'cCodigoValorClasifCliente1'
  imprime
  Texto C0;'cCodigoValorClasifCliente2'
  imprime
  Texto C0;'cCodigoValorClasifCliente3'
  imprime
  Texto C0;'cCodigoValorClasifCliente4'
  imprime
  Texto C0;'cCodigoValorClasifCliente5'
  imprime
  Texto C0;'cCodigoValorClasifCliente6'
  imprime
  Texto C0;'CTIPOCLIENTE'
  imprime
  Texto C0;'CESTATUS'
  imprime
  Texto C0;'CFECHABAJA'
  imprime
  Texto C0;'CFECHAULTIMAREVISION'
  imprime
  Texto C0;'CLIMITECREDITOCLIENTE'
  imprime
  Texto C0;'CDIASCREDITOCLIENTE'
  imprime
  Texto C0;'CLIMDOCTOS'
  imprime
  Texto C0;'CBANEXCEDERCREDITO'
  imprime
  Texto C0;'CDESCUENTOPRONTOPAGO'
  imprime
  Texto C0;'CDIASPRONTOPAGO'
  imprime
  Texto C0;'CINTERESMORATORIO'
  imprime
  Texto C0;'CDIAPAGO'
  imprime
  Texto C0;'CDIASREVISION'
  imprime
  Texto C0;'CMENSAJERIA'
  imprime
  Texto C0;'CCUENTAMENSAJERIA'
  imprime
  Texto C0;'CDIASEMBARQUECLIENTE'
  imprime
  Texto C0;'cCodigoAlmacen'
  imprime
  Texto C0;'cCodigoAgenteVenta'
  imprime
  Texto C0;'cCodigoAgenteCobro'
  imprime 
  Texto C0;'CRESTRICCIONAGENTE'
  imprime
  Texto C0;'CIMPUESTO1'
  imprime
  Texto C0;'CIMPUESTO2'
  imprime
  Texto C0;'CIMPUESTO3'
  imprime
  Texto C0;'CRETENCIONCLIENTE1'
  imprime
  Texto C0;'CRETENCIONCLIENTE2'
  imprime
  Texto C0;'cCodigoValorClasifProveedor1'
  imprime
  Texto C0;'cCodigoValorClasifProveedor2'
  imprime
  Texto C0;'cCodigoValorClasifProveedor3'
  imprime
  Texto C0;'cCodigoValorClasifProveedor4'
  imprime
  Texto C0;'cCodigoValorClasifProveedor5'
  imprime
  Texto C0;'cCodigoValorClasifProveedor6'
  imprime
  Texto C0;'CLIMITECREDITOPROVEEDOR'
  imprime
  Texto C0;'CDIASCREDITOPROVEEDOR'
  imprime
  Texto C0;'CTIEMPOENTREGA'
  imprime
  Texto C0;'CDIASEMBARQUEPROVEEDOR'
  imprime
  Texto C0;'CIMPUESTOPROVEEDOR1'
  imprime
  Texto C0;'CIMPUESTOPROVEEDOR2'
  imprime
  Texto C0;'CIMPUESTOPROVEEDOR3'
  imprime
  Texto C0;'CRETENCIONPROVEEDOR1'
  imprime
  Texto C0;'CRETENCIONPROVEEDOR2'
  imprime
  Texto C0;'CBANINTERESMORATORIO'
  imprime
  Texto C0;'CCOMVENTAEXCEPCLIENTE'
  imprime
  Texto C0;'CCOMCOBROEXCEPCLIENTE'
  imprime
  Texto C0;'CBANPRODUCTOCONSIGNACION'
  imprime
  Texto C0;'CSEGCONTCLIENTE1'
  imprime
  Texto C0;'CSEGCONTCLIENTE2'
  imprime
  Texto C0;'CSEGCONTCLIENTE3'
  imprime
  Texto C0;'CSEGCONTCLIENTE4'
  imprime
  Texto C0;'CSEGCONTCLIENTE5'
  imprime
  Texto C0;'CSEGCONTCLIENTE6'
  imprime
  Texto C0;'CSEGCONTCLIENTE7'
  imprime
  Texto C0;'CSEGCONTPROVEEDOR1'
  imprime
  Texto C0;'CSEGCONTPROVEEDOR2'
  imprime
  Texto C0;'CSEGCONTPROVEEDOR3'
  imprime
  Texto C0;'CSEGCONTPROVEEDOR4'
  imprime
  Texto C0;'CSEGCONTPROVEEDOR5'
  imprime
  Texto C0;'CSEGCONTPROVEEDOR6'
  imprime
  Texto C0;'CSEGCONTPROVEEDOR7'
  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;'CBANDOMICILIO'
  imprime
  Texto C0;'CBANCREDITOYCOBRANZA'
  imprime
  Texto C0;'CBANENVIO'
  imprime
  Texto C0;'CBANAGENTE'
  imprime
  Texto C0;'CBANIMPUESTO'
  imprime
  Texto C0;'CBANPRECIO'
  imprime
  Texto C0;'CCOMVENTA'
  imprime
  Texto C0;'CCOMCOBRO'
  imprime
  Texto C0;'CFACTERC01'
  imprime
  Texto C0;'CCODPROVCO'
  imprime
  //N.D. 8173 SE inluyen todos los campos de la tabla de clientes y proveedores para la exporación TXT (FPP)
  Texto C0;'CEMAIL1'
  imprime
  Texto C0;'CEMAIL2'
  imprime
  Texto C0;'CEMAIL3'
  imprime
  Texto C0;'CTIPOENTRE'
  imprime
  Texto C0;'CCONCTEEMA'
  imprime
  Texto C0;'CIDCERTCTE'
  imprime
  Texto C0;'CENCRIPENT'
  imprime
  Texto C0;'CBANCFD'
  imprime
  Texto C0;'CTEXTOEX04'
  imprime
  Texto C0;'CTEXTOEX05'
  imprime
  Texto C0;'CIMPORTE05'
  imprime
  // N.D.8637
  Texto C0;'CIDADDENDA'
  imprime
  Texto C0;'CQUITABLAN'
  imprime
  Texto C0;'CFMTOENTRE'
  imprime
  Texto C0;'CIDCOMPLEM'
  imprime
  Texto C0;'CDESGLOSAI'
  imprime
  Texto C0;'CLIMDOCTOS'
  imprime
  Texto C0;'CSITIOFTP'
  imprime
  Texto C0;'CUSRFTP'
  imprime
  Texto C0;'CMETODOPAG'
  imprime
  Texto C0;'CNUMCTAPAG'
  imprime
  Texto C0;'CUSOCFDI'
  imprime
  Texto C0;'/MGW10002'
  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;'MGW10005'
  imprime
  Texto C0;'cCodigoProducto'
  imprime
  Texto C0;'cNombreProducto'
  imprime
  Texto C0;'cTipoProducto'
  imprime
  Texto C0;'cFechaAltaProducto'
  imprime
  Texto C0;'cControlExistencia'
  imprime
	// 6070 Impresión del campo de descripción del producto
  Texto C0;'cDescripcionProducto'
  imprime
  Texto C0;'cMetodoCosteo'
  imprime
  Texto C0;'cPesoProducto'
  imprime
  Texto C0;'cComVentaExcepProducto'
  imprime
  Texto C0;'cComCobroExcepProducto'
  imprime
  Texto C0;'cCostoEstandar'
  imprime
  Texto C0;'cMargenUtilidad'
  imprime
  Texto C0;'cStatusProducto'
  imprime
  Texto C0;'cNombreUnidadBase'
  imprime
  // N.D.UNIDADES Exportar las nuevas unidades asumidas de compra / venta
  Texto C0;'cNombreUnidadCompra'
  imprime
  Texto C0;'cNombreUnidadVenta'
  imprime
  Texto C0;'cNombreUnidadNoConvertible'
  imprime
  Texto C0;'cFechaBaja'
  imprime
  Texto C0;'cImpuesto1'
  imprime
  Texto C0;'cImpuesto2'
  imprime
  Texto C0;'cImpuesto3'
  imprime
  Texto C0;'cRetencion1'
  imprime
  Texto C0;'cRetencion2'
  imprime
  Texto C0;'cNombrePadreCarac1'
  imprime
  Texto C0;'cNombrePadreCarac2'
  imprime
  Texto C0;'cNombrePadreCarac3'
  imprime
  Texto C0;'cCodigoValorClasif1'
  imprime
  Texto C0;'cCodigoValorClasif2'
  imprime
  Texto C0;'cCodigoValorClasif3'
  imprime
  Texto C0;'cCodigoValorClasif4'
  imprime
  Texto C0;'cCodigoValorClasif5'
  imprime
  Texto C0;'cCodigoValorClasif6'
  imprime
  Texto C0;'cSegContProducto1'
  imprime
  Texto C0;'cSegContProducto2'
  imprime
  Texto C0;'cSegContProducto3'
  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;'cPrecio1'
  imprime
  Texto C0;'cPrecio2'
  imprime
  Texto C0;'cPrecio3'
  imprime
  Texto C0;'cPrecio4'
  imprime
  Texto C0;'cPrecio5'
  imprime
  Texto C0;'cPrecio6'
  imprime
  Texto C0;'cPrecio7'
  imprime
  Texto C0;'cPrecio8'
  imprime
  Texto C0;'cPrecio9'
  imprime
  Texto C0;'cPrecio10'
  imprime
  Texto C0;'cBanUnidades'
  imprime
  Texto C0;'cBanCaracteristicas'
  imprime
  Texto C0;'cBanMetodoCosteo'
  imprime
  Texto C0;'cBanMaxMin'
  imprime
  Texto C0;'cBanPrecio'
  imprime
  Texto C0;'cBanImpuesto'
  imprime
  Texto C0;'cBanCodigoBarra'
  imprime
  Texto C0;'cBanComponente'
  imprime
  Texto C0;'cEsCuotaI2'
  imprime
  Texto C0;'cEsCuotaI3'
  imprime
  Texto C0;'cEsExento'
  imprime
  Texto C0;'cTipoPaque'
  imprime
  // S.C.245 Exportación de campos faltantes
  Texto C0;'cPrecSelec'
  imprime
  Texto C0;'cCodAltern'
  imprime
  Texto C0;'cNomAltern'
  imprime
  Texto C0;'cDescCorta'
  imprime
  Texto C0;'cSubTipo'
  imprime
  Texto C0;'cUsaBascu'
  imprime
  Texto C0;'cIdMoneda'
  imprime
  Texto C0;'cDesglosaI'
  imprime
  Texto C0;'cCtaPred'
  imprime
  Texto C0;'cNombreUnidadXML'
  imprime
  Texto C0;'cClaveSat'
  imprime
  Texto C0;'cCantidadFiscal'
  imprime
  Texto C0;'/MGW10005'
  imprime
  Texto C0;'MGW10015'
  imprime
  Texto C0;'cCodigoProducto'
  imprime
  Texto C0;'cCantidadProducto'
  imprime
  // N.D.UNIDADES Exportar las nuevas unidades asumidas de compra / venta
  Texto C0;'cNombreUnidadVenta'
  imprime
  Texto C0;'cCodigoValorCarac1'
  imprime
  Texto C0;'cCodigoValorCarac2'
  imprime
  Texto C0;'cCodigoValorCarac3'
  imprime
  Texto C0;'cTipoProducto'
  imprime
  Texto C0;'/MGW10015'
  imprime
  Texto C0;'MGW10004'
  imprime
  Texto C0;'cTipoProducto'
  imprime
  Texto C0;'cCodigoProductoPadre'
  imprime
  Texto C0;'cCodigoValorCarac1'
  imprime
  Texto C0;'cCodigoValorCarac2'
  imprime
  Texto C0;'cCodigoValorCarac3'
  imprime
  Texto C0;'/MGW10004'
  imprime 
  Texto C0;'MGW10016'
  imprime
  Texto C0;'CCODIGOALMACEN'
  imprime
  Texto C0;'CCODIGOPRODUCTO'
  imprime
  Texto C0;'CCODIGOPRODUCTOPADRE'
  imprime
  Texto C0;'CEXISTENCIAMINBASE'
  imprime
  Texto C0;'CEXISTENCIAMAXBASE'
  imprime
  Texto C0;'CEXISTMINNOCONVERTIBLE'
  imprime
  Texto C0;'CEXISTMAXNOCONVERTIBLE'
  imprime
  // N.D.3094 Inicio
  Texto C0;'CZONA'
  imprime  
  Texto C0;'CPASILLO'
  imprime
  Texto C0;'CANAQUEL'
  imprime
  Texto C0;'CREPISA'
  imprime
  // N.D.3094 Fin
  Texto C0;'/MGW10016'
  imprime
  Texto C0;'MGW10014'
  imprime
  Texto C0;'CCODIGOPRODUCTO'
  imprime
  Texto C0;'CCODIGOCLIENTE'
  imprime
  Texto C0;'CPRECIOCOMPRA'
  imprime
  Texto C0;'CIDMONEDA'
  imprime
  Texto C0;'CCODIGOPRODUCTOPROVEEDOR'
  imprime
  Texto C0;'CNOMBREUNIDAD'
  imprime
  Texto C0;'/MGW10014'
  imprime 1

// **********************************************************************************************
// Monedas
// **********************************************************************************************
Si pTipoReporte = 1
tMonedas.Busca Primero
Mientras tMonedas->Encontro
  Si tMonedas(CIDMONEDA) = 0
    //El registro con CIDMONEDA = 0 se ignora
    tMonedas.SaltaReg[1]
    Continua
  FinSi

  //Si la moneda no fué selecionada no se exporta.
  Si pMonedas != '*'
    vAuxiliar = @Pos(pMonedas;tMonedas(CNOMBREMONEDA))
    Si vAuxiliar < 0
      tMonedas.SaltaReg[1]
      Continua
    FinSi
  FinSi

  Texto C0;'MGW10034'
  imprime
  vNumero = @Str(tMonedas(CIDMONEDA);0)
  imprime vNumero
  vCadena = tMonedas(CNOMBREMONEDA)
  imprime vCadena
  vCadena = tMonedas(CSIMBOLOMONEDA)
  imprime vCadena
  vNumero = @Str(tMonedas(CPOSICIONSIMBOLO);0)
  imprime vNumero
  vCadena = tMonedas(CPLURAL)
  imprime vCadena
  vCadena = tMonedas(CSINGULAR)
  imprime vCadena
  vCadena = tMonedas(CDESCRIPCIONPROTEGIDA)
  imprime vCadena
  vNumero = @Str(tMonedas(CIDBANDERA);0)
  imprime vNumero
  vNumero = @Str(tMonedas(CDECIMALESMONEDA);0)
  imprime vNumero
  vCadena = tMonedas(CCLAVESAT)
  imprime vCadena

  tMonedas.SaltaReg[1]
FinMientras
FinSi

// **********************************************************************************************
// Clasificaciones
// **********************************************************************************************
Si pTipoReporte = 1
tValClasificacion.Usaindice['iClasifValorClasif'] 
tClasificaciones.Busca Primero
Mientras tClasificaciones->Encontro
  Si tClasificaciones(CIDCLASIFICACION) = 0
    //El registro con CIDCLASIFICACION = 0 se ignora
    tClasificaciones.SaltaReg[1]
    Continua
  FinSi

  //Si la clasificación no fué seleccionada no se exporta.
  Si pClasificaciones != '*'
    vAuxiliar = @Pos(pClasificaciones;tClasificaciones(CNOMBRECLASIFICACION))
    Si vAuxiliar < 0
      tClasificaciones.SaltaReg[1]
      Continua
    FinSi
  FinSi

  Texto C0;'MGW10019'
  imprime
  vNumero = @Str(tClasificaciones(CIDCLASIFICACION);0)
  imprime vNumero
  vCadena = tClasificaciones(CNOMBRECLASIFICACION)
  imprime vCadena

  tValClasificacion.Busca[@Str(tClasificaciones(CIDCLASIFICACION);0)]
  Mientras tValClasificacion->Encontro Y tClasificaciones(CIDCLASIFICACION) = tValClasificacion(CIDCLASIFICACION)
    Si tValClasificacion(CIDVALORCLASIFICACION) = 0
      //El registro con CIDVALORCLASIFICACION = 0 se ignora
      tValClasificacion.SaltaReg[1]
      Continua
    FinSi

    Texto C0;'MGW10020'
    imprime
    vCadena = tValClasificacion(CVALORCLASIFICACION)
    imprime vCadena
    vCadena = tValClasificacion(CCODIGOVALORCLASIFICACION)
    imprime vCadena

    tValClasificacion.SaltaReg[1]
  FinMientras

  tClasificaciones.SaltaReg[1]
FinMientras
tValClasificacion.Usaindice[''] 
FinSi

// **********************************************************************************************
// Caracteristicas
// **********************************************************************************************
Si pTipoReporte = 1
  tValCaracteristicas.Usaindice['iPadreNemo']

  tCaracteristicas.Busca Primero
  Mientras tCaracteristicas->Encontro
    Si tCaracteristicas(CIDPADRECARACTERISTICA) = 0
      //El registro con CIDPADRECARACTERISTICA = 0 se ignora
      tCaracteristicas.SaltaReg[1]
      Continua
    FinSi

  // N.D.3119 Inicio
  // Ahora se reciben los Id´s de las características a exportar a TXT a fin de permitir 
  //  exportar características con comas
  // Si la característica no fué seleccionada no se exporta.
  Si pCaracteristicas != '*'
    // N.D.3119 vAuxiliar = @Pos(pCaracteristicas; tCaracteristicas(CNOMBRECARACTERISTICA))
    vAuxiliar = @Pos(pCaracteristicas; tCaracteristicas(CIDPADRECARACTERISTICA))
    Si vAuxiliar < 0
      tCaracteristicas.SaltaReg[1]
      Continua
    FinSi
  FinSi
  // N.D.3119 Fin

  Texto C0;'MGW10021'
  imprime
  vCadena = tCaracteristicas(CNOMBRECARACTERISTICA)
  imprime vCadena

  tValCaracteristicas.Busca[@Str(tCaracteristicas(CIDPADRECARACTERISTICA);0)]
  Mientras tValCaracteristicas->Encontro Y tCaracteristicas(CIDPADRECARACTERISTICA) = tValCaracteristicas(CIDPADRECARACTERISTICA)
    Si tValCaracteristicas(CIDVALORCARACTERISTICA) = 0
      //El registro con CIDVALORCARACTERISTICA = 0 se ignora
      tValCaracteristicas.SaltaReg[1]
      Continua
    FinSi

    Texto C0;'MGW10022'
    imprime
    vCadena = tValCaracteristicas(CVALORCARACTERISTICA)
    imprime vCadena
    vCadena = tValCaracteristicas(CNEMOCARACTERISTICA)
    imprime vCadena

    tValCaracteristicas.SaltaReg[1]
  FinMientras
  tCaracteristicas.SaltaReg[1]
FinMientras
tValCaracteristicas.Usaindice['']
FinSi

// **********************************************************************************************
// Unidades
// **********************************************************************************************
Si pTipoReporte = 1
Si pUnidadesYConversiones = 1
  tUnidades.Busca Primero
  Mientras tUnidades->Encontro
    Si tUnidades(CIDUNIDAD) = 0
      //El registro con CIDUNIDAD = 0 se ignora
      tUnidades.SaltaReg[1]
      Continua
    FinSi

    Texto C0;'MGW10026'
    imprime
    vCadena = tUnidades(CNOMBREUNIDAD)
    imprime vCadena
    vCadena = tUnidades(CABREVIATURA)
    imprime vCadena
    vCadena = tUnidades(CDESPLIEGUE)
    imprime vCadena
    vCadena = tUnidades(CCLAVEINT)
    imprime vCadena
    vCadena = tUnidades(CCLAVESAT)
    imprime vCadena

    tUnidades.SaltaReg[1]
  FinMientras
FinSi
FinSi

// **********************************************************************************************
// Conversión de Unidades
// **********************************************************************************************
Si pTipoReporte = 1
Si pUnidadesYConversiones = 1
  tConversiones.Busca Primero
  Mientras tConversiones->Encontro
    Si tConversiones(CIDUNIDAD1) = 0 Y tConversiones(CIDUNIDAD2) = 0
      //El registro con CIDUNIDAD1 = 0 y CIDUNIDAD2 = 0 se ignora
      tConversiones.SaltaReg[1]
      Continua
    FinSi

    Texto C0;'MGW10027'
    imprime
    vNumero = @Str(tConversiones(CIDUNIDAD1);0)
    fImprimeNombreUnidad(vNumero)
    vNumero = @Str(tConversiones(CIDUNIDAD2);0)
    fImprimeNombreUnidad(vNumero)
    vNumero = @Str(tConversiones(CFACTORCONVERSION);5)
    imprime vNumero

    tConversiones.SaltaReg[1]
  FinMientras
FinSi
FinSi

// **********************************************************************************************
// Almacenes
// **********************************************************************************************
si ptipoReporte = 2
  fRevisaMisClases(tValClasificacion; pIdClasifAlm1; pIdClasifAlm2; pIdClasifAlm3; pIdClasifAlm4; pIdClasifAlm5; pIdClasifAlm6 ) 

  // Si no se da un almacén inicial se toma el primero, sino el que se dio  
  Si pAlmacenInicial = ' '
    tAlmacenes.Busca Primero
    Si tAlmacenes->Encontro
      pAlmacenInicial = tAlmacenes(cCodigoAlmacen)
      // Si el almacén inicial es el almacén cero, lee el siguiente
      Si !tAlmacenes(cIdAlmacen)
        tAlmacenes.Busca Siguiente[1]
        Si tAlmacenes->Encontro
          pAlmacenInicial = tAlmacenes(cCodigoAlmacen)
        FinSi
      FinSI
    FinSi
  FinSi

  // Si el rango final es el último almacén, recupera el código del último
  Si pAlmacenFinal = ' '
    tAlmacenes.Busca Ultimo
    Si tAlmacenes->Encontro
      pAlmacenFinal = tAlmacenes(cCodigoAlmacen)
    FinSi
  FinSi

  // N.D.2836 Inicio
  // Correcciones a la exportación cuando se utilizan clasificaciones
  Mientras[tAlmacenes.Busca[pAlmacenInicial & '..' & pAlmacenFinal]; tAlmacenes->Encontro; tAlmacenes.Busca Siguiente[1]]
    // Por omisión exportar el registro
    lExportar = 1

    // Validar el almacen Id cero
    Si tAlmacenes(cIdAlmacen) = 0
      lExportar = 0
    FinSi

    // Validar las clasificaciones
    // Se Revisan las CLASIFICACIONES, solo en el caso de haber seleccionado al menos una
    // Ojo:  las variables gNumDeClases y gListIdDeClases, están declaradas en
    // LibAdminpaq.rpt, por lo que sólo con indicarle el tipo identifica a qué grupo de
    // clasificaciones correponde.
    Si (gNumDeClases > 0) Y (lExportar = 1)
      // Revisar si cumple con las clasificaciones
      lIdClasif1 = tAlmacenes(cIdValorClasificacion1)
      lIdClasif2 = tAlmacenes(cIdValorClasificacion2)
      lIdClasif3 = tAlmacenes(cIdValorClasificacion3)
      lIdClasif4 = tAlmacenes(cIdValorClasificacion4)
      lIdClasif5 = tAlmacenes(cIdValorClasificacion5)
      lIdClasif6 = tAlmacenes(cIdValorClasificacion6)
      lExportar = fCumpleConClasificaciones(lIdClasif1; lIdClasif2; lIdClasif3; lIdClasif4; lIdClasif5; lIdClasif6; gListIdDeClases)
    Finsi

    Si lExportar = 1
      Texto C0;'MGW10003'
      imprime
      vCadena = tAlmacenes(CCODIGOALMACEN)
      imprime vCadena
      vCadena = tAlmacenes(CNOMBREALMACEN)
      imprime vCadena
      vCadena = tAlmacenes(CFECHAALTAALMACEN)
      fImprimeFecha(vCadena)
      vNumero = @Str(tAlmacenes(CIDVALORCLASIFICACION1);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tAlmacenes(CIDVALORCLASIFICACION2);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tAlmacenes(CIDVALORCLASIFICACION3);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tAlmacenes(CIDVALORCLASIFICACION4);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tAlmacenes(CIDVALORCLASIFICACION5);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tAlmacenes(CIDVALORCLASIFICACION6);0)
      fImpriemeClasificacion(vNumero)
      vCadena = tAlmacenes(CSEGCONTALMACEN)
      imprime vCadena
      vCadena = tAlmacenes(CTEXTOEXTRA1)
      imprime vCadena
      vCadena = tAlmacenes(CTEXTOEXTRA2)
      imprime vCadena
      vCadena = tAlmacenes(CTEXTOEXTRA3)
      imprime vCadena
      vCadena = tAlmacenes(CFECHAEXTRA)
      fImprimeFecha(vCadena)
      vNumero = @Str(tAlmacenes(CIMPORTEEXTRA1);5)
      imprime vNumero
      vNumero = @Str(tAlmacenes(CIMPORTEEXTRA2);5)
      imprime vNumero
      vNumero = @Str(tAlmacenes(CIMPORTEEXTRA3);5)
      imprime vNumero
      vNumero = @Str(tAlmacenes(CIMPORTEEXTRA4);5)
      imprime vNumero
      vNumero = @Str(tAlmacenes(CBANDOMICILIO);0)
      imprime vNumero
      vNumero = @Str(tAlmacenes(CSISTORIG);0)
      imprime vNumero
    FinSi
  FinMientras
  // N.D.2836 Fin
Finsi

// **********************************************************************************************
// Promociones
// **********************************************************************************************
Si pTipoReporte = 1
  Si pIncluirPromociones = 1
    tPromociones.Busca Primero
    Mientras tPromociones->Encontro
      Si tPromociones(CIDPROMOCION) = 0
        //El registro con CIDPROMOCION = 0 se ignora
        tPromociones.SaltaReg[1]
        Continua
      FinSi

      Texto C0;'MGW10029'
      imprime
      vCadena = tPromociones(CCODIGOPROMOCION)
      imprime vCadena
      vCadena = tPromociones(CNOMBREPROMOCION)
      imprime vCadena
      vCadena = tPromociones(CFECHAINICIO)
      fImprimeFecha(vCadena)
      vCadena = tPromociones(CFECHAFIN)
      fImprimeFecha(vCadena)
      vNumero = @Str(tPromociones(CVOLUMENMINIMO);5)
      imprime vNumero
      vNumero = @Str(tPromociones(CVOLUMENMAXIMO);5)
      imprime vNumero
      vNumero = @Str(tPromociones(CPORCENTAJEDESCUENTO);5)
      imprime vNumero
      vNumero = @Str(tPromociones(CIDVALORCLASIFCLIENTE1);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tPromociones(CIDVALORCLASIFCLIENTE2);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tPromociones(CIDVALORCLASIFCLIENTE3);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tPromociones(CIDVALORCLASIFCLIENTE4);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tPromociones(CIDVALORCLASIFCLIENTE5);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tPromociones(CIDVALORCLASIFCLIENTE6);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tPromociones(CIDVALORCLASIFPRODUCTO1);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tPromociones(CIDVALORCLASIFPRODUCTO2);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tPromociones(CIDVALORCLASIFPRODUCTO3);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tPromociones(CIDVALORCLASIFPRODUCTO4);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tPromociones(CIDVALORCLASIFPRODUCTO5);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tPromociones(CIDVALORCLASIFPRODUCTO6);0)
      fImpriemeClasificacion(vNumero)

      tPromociones.SaltaReg[1]
    FinMientras
  FinSi
FinSi
// **********************************************************************************************
// Agentes
// **********************************************************************************************
Si pTipoReporte=3

  fRevisaMisClases(tValClasificacion; pIdClasifAgen1; pIdClasifAgen2; pIdClasifAgen3; pIdClasifAgen4; pIdClasifAgen5; pIdClasifAgen6) 

  // Si el rango inicial es el primer agente, recupera el código del primero
  Si pAlgenteInicial = ' '
    tAgente.Busca Primero
    Si tAgente->Encontro
      pAlgenteInicial = tAgente(cCodigoAgente)
      // Si el agente inicial es cero, lee el siguiente
      Si tAgente(cIdAgente) = 0
        tAgente.Saltareg[1]
        Si tAgente->Encontro
          pAlgenteInicial = tAgente(cCodigoAgente)
        FinSi
      FinSI
    FinSi
  FinSi

  // Si el rango final es el último agente, recupera el código del último
  Si pAlgenteFinal = ' '
    tAgente.Busca Ultimo
    Si tAgente->Encontro
      pAlgenteFinal = tAgente(cCodigoAgente)
    FinSi
  FinSi

  // N.D.2836 Inicio
  // Correcciones a la exportación cuando se utilizan clasificaciones
  Mientras [tAgente.Busca[pAlgenteInicial & '..' & pAlgenteFinal]; tAgente->Encontro; tAgente.Busca Siguiente[1]]
    // Por omisíón exportar el registro
    lExportar = 1

    // Validación del Agente 0
    Si tAgente(cIdAgente) = 0
      lExportar = 0
    FinSi

    // Validación de las clasificaciones
    Si (gNumDeClases > 0) Y (lExportar = 1)
      // Revisar si cumple con las clasificaciones
      lIdClasif1 = tAgente(cIdValorClasificacion1)
      lIdClasif2 = tAgente(cIdValorClasificacion2)
      lIdClasif3 = tAgente(cIdValorClasificacion3)
      lIdClasif4 = tAgente(cIdValorClasificacion4)
      lIdClasif5 = tAgente(cIdValorClasificacion5)
      lIdClasif6 = tAgente(cIdValorClasificacion6)
      lExportar = fCumpleConClasificaciones(lIdClasif1; lIdClasif2; lIdClasif3; lIdClasif4; lIdClasif5; lIdClasif6; gListIdDeClases)
    Finsi

    // Exportación del agente
    Si lExportar = 1
      Texto C0;'MGW10001'
      imprime
      vCadena = tAgente(CCODIGOAGENTE)
      imprime vCadena
      vCadena = tAgente(CNOMBREAGENTE)
      imprime vCadena
      vCadena = tAgente(CFECHAALTAAGENTE)
      fImprimeFecha(vCadena)
      vNumero = @Str(tAgente(CTIPOAGENTE);0)
      imprime vNumero
      vNumero = @Str(tAgente(CCOMISIONVENTAAGENTE);5)
      imprime vNumero
      vNumero = @Str(tAgente(CCOMISIONCOBROAGENTE);5)
      imprime vNumero
      vNumero = @Str(tAgente(CIDCLIENTE);0)
      fImprimeCodigoCliProv(vNumero)
      vNumero = @Str(tAgente(CIDPROVEEDOR);0)
      fImprimeCodigoCliProv(vNumero)
      vNumero = @Str(tAgente(CIDVALORCLASIFICACION1);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tAgente(CIDVALORCLASIFICACION2);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tAgente(CIDVALORCLASIFICACION3);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tAgente(CIDVALORCLASIFICACION4);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tAgente(CIDVALORCLASIFICACION5);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tAgente(CIDVALORCLASIFICACION6);0)
      fImpriemeClasificacion(vNumero)
      vCadena = tAgente(CTEXTOEXTRA1)
      imprime vCadena
      vCadena = tAgente(CTEXTOEXTRA2)
      imprime vCadena
      vCadena = tAgente(CTEXTOEXTRA3)
      imprime vCadena
      vCadena = tAgente(CFECHAEXTRA)
      fImprimeFecha(vCadena)
      vNumero = @Str(tAgente(CIMPORTEEXTRA1);5)
      imprime vNumero
      vNumero = @Str(tAgente(CIMPORTEEXTRA2);5)
      imprime vNumero
      vNumero = @Str(tAgente(CIMPORTEEXTRA3);5)
      imprime vNumero
      vNumero = @Str(tAgente(CIMPORTEEXTRA4);5)
      imprime vNumero
    FinSi
  FinMientras
  // N.D.2836 Fin
FinSi
// **********************************************************************************************
// Clientes, proveedores y sus direcciones
// **********************************************************************************************
Si pTipoReporte=4
  // Activación del indice de la tabla de Clientes
  tCliProv.Usaindice['iCodigoTipo']

  //*********************************************************************************************
  // C L I E N T E S
  //*********************************************************************************************
  // Inicialización de las variables globales para el manejo de las Clasificaciones
  fRevisaMisClases(tValClasificacion; pIdClasifCli1; pIdClasifCli2; pIdClasifCli3; pIdClasifCli4; pIdClasifCli5; pIdClasifCli6 ) 

  // Si el rango inicial es el primer cliente, recupera el código del primero
  Si pCliInicial = ' '
    tCliProv.Busca Primero
    Si tCliProv->Encontro
      pCliInicial = tCliProv(cCodigoCliente)
      // Si el Id del cliente inicial es cero descartarlo
      Si tCliProv(cIdClienteProveedor) = 0
        tCliProv.Saltareg[1]
        Si tCliProv->Encontro
          pCliInicial = tCliProv(cCodigoCliente)
        FinSi
      FinSI
    FinSi
  FinSi

  // Si el rango final es el último cliente, recupera el código del último
  Si pCliFinal = ' '
    tCliProv.Busca Ultimo
    Si tCliProv->Encontro
      pCliFinal = tCliProv(cCodigoCliente)
    FinSi
  FinSi

  // N.D.2836 Inicio
  // Correcciones a la exportación cuando se utilizan clasificaciones
  // Recorrido de los clientes  
  Mientras[tCliProv.Busca[pCliInicial & '..' & pCliFinal]; tCliProv->Encontro; tCliProv.Busca Siguiente[1]]
    // Exportar el registro
    lExportar = 1

    // Validación del Id Cero
    Si tCliProv(cIdClienteProveedor) = 0 
      lExportar = 0
    FinSi

    // Validación del Tipo de Cliente / Proveedor
    Si tCliProv(cTipoCliente) = 3
      lExportar = 0
    FinSi

    // En caso de existir clasificaciones revisar que se cumplan
    Si (gNumDeClases > 0) Y (lExportar = 1)
      // Revisar si cumple con las clasificaciones
      lIdClasif1 = tCliProv(cIdValorClasifCliente1)
      lIdClasif2 = tCliProv(cIdValorClasifCliente2)
      lIdClasif3 = tCliProv(cIdValorClasifCliente3)
      lIdClasif4 = tCliProv(cIdValorClasifCliente4)
      lIdClasif5 = tCliProv(cIdValorClasifCliente5)
      lIdClasif6 = tCliProv(cIdValorClasifCliente6)
      lExportar = fCumpleConClasificaciones(lIdClasif1; lIdClasif2; lIdClasif3; lIdClasif4; lIdClasif5; lIdClasif6; gListIdDeClases)
    Finsi

    Si lExportar = 1
      ImprimeClienteProveedor()
    FinSi
    
  FinMientras
  // N.D.2836 Fin

  //*********************************************************************************************
  // P R O V E E D O R E S
  //*********************************************************************************************
  fRevisaMisClases(tValClasificacion; pIdClasifProv1; pIdClasifProv2; pIdClasifProv3; pIdClasifProv4; pIdClasifProv5; pIdClasifProv6 ) 

  Si pProvInicial = ' '
    tCliProv.Busca Primero
    Si tCliProv->Encontro
      pProvInicial = tCliProv(cCodigoCliente)
      // Si el Id del cliente inicial es cero descartarlo
      Si tCliProv(cIdClienteProveedor) = 0
        tCliProv.Saltareg[1]
        Si tCliProv->Encontro
          pProvInicial = tCliProv(cCodigoCliente)
        FinSi
      FinSI
    FinSi
  FinSi

  // Si el rango final es el último cliente, recupera el código del último
  Si pProvFinal = ' '
    tCliProv.Busca Ultimo
    Si tCliProv->Encontro
      pProvFinal = tCliProv(cCodigoCliente)
    FinSi
  FinSi

  // N.D.2836 Inicio
  // Correcciones a la exportación cuando se utilizan clasificaciones
  Mientras [tCliProv.Busca[pProvInicial  &'..'&pProvFinal ]; tCliProv->Encontro; tCliProv.Busca Siguiente[1]]
    // Exportar el registro
    lExportar = 1

    // Validación del  Id Cero
    Si tCliProv(cIdClienteProveedor) = 0 
      lExportar = 0
    FinSi

    // Validación del Tipo de Cliente / Proveedor
    Si tCliProv(cTipoCliente) = 1
      lExportar = 0
    FinSi

    // En caso de existir clasificaciones revisar que se cumplan
    Si (gNumDeClases > 0) Y (lExportar = 1)
      // Revisar si cumple con las clasificaciones
      lIdClasif1 = tCliProv(cIdValorClasifProveedor1)
      lIdClasif2 = tCliProv(cIdValorClasifProveedor2)
      lIdClasif3 = tCliProv(cIdValorClasifProveedor3)
      lIdClasif4 = tCliProv(cIdValorClasifProveedor4)
      lIdClasif5 = tCliProv(cIdValorClasifProveedor5)
      lIdClasif6 = tCliProv(cIdValorClasifProveedor6)
      lExportar = fCumpleConClasificaciones(lIdClasif1; lIdClasif2; lIdClasif3; lIdClasif4; lIdClasif5; lIdClasif6; gListIdDeClases)
    Finsi

    Si lExportar = 1
      ImprimeClienteProveedor()
    FinSi
  FinMientras
  // N.D.2836 Fin
FinSi
// **********************************************************************************************
// Productos y Servicios
// **********************************************************************************************
Si pTipoReporte= 5
  fRevisaMisClases(tValClasificacion; pIdClasifProd1; pIdClasifProd2; pIdClasifProd3; pIdClasifProd4; pIdClasifProd5; pIdClasifProd6 ) 

  // Si el rango inicial es el primer producto, recupera el código del primero
  Si pProdInicial = ' '
    tProductos.Busca Primero
    Si tProductos->Encontro
      pProdInicial = tProductos(cCodigoProducto)
      Si tProductos(cIdProducto) = 0
        tProductos.Saltareg[1]
        Si tProductos->Encontro
          pProdInicial = tProductos(cCodigoProducto)
        FinSi
      FinSI
    FinSi
  FinSi

  // Si el rango final es el último producto, recupera el código del último
  Si pProdFinal = ' '
    tProductos.Busca Ultimo
    Si tProductos->Encontro
      pProdFinal = tProductos(cCodigoProducto)
    FinSi
  FinSi

  // N.D.2836 Inicio
  // Correcciones a la exportación cuando se utilizan clasificaciones
  Mientras[tProductos.Busca[pProdInicial & '..' & pProdFinal]; tProductos->Encontro; tProductos.Busca Siguiente[1]]
    // Por omisón exportar el registro
    lExportar = 1

    // Validación del Id cero
    Si tProductos(cIdProducto) = 0
      lExportar = 0
    FinSi
 
    // En caso de existir clasificaciones revisar que se cumplan
    Si (gNumDeClases > 0) Y (lExportar = 1)
      // Revisar si cumple con las clasificaciones
      lIdClasif1 = tProductos(cIdValorClasificacion1)
      lIdClasif2 = tProductos(cIdValorClasificacion2)
      lIdClasif3 = tProductos(cIdValorClasificacion3)
      lIdClasif4 = tProductos(cIdValorClasificacion4)
      lIdClasif5 = tProductos(cIdValorClasificacion5)
      lIdClasif6 = tProductos(cIdValorClasificacion6)
      lExportar = fCumpleConClasificaciones(lIdClasif1; lIdClasif2; lIdClasif3; lIdClasif4; lIdClasif5; lIdClasif6; gListIdDeClases)
    Finsi

    Si (lExportar = 1) Y (tProductos(CTIPOPRODUCTO) != 2)    	
      Texto C0;'MGW10005'
      imprime
      vCadena = tProductos(CCODIGOPRODUCTO)
      imprime vCadena
      vCadena = tProductos(CNOMBREPRODUCTO)
      imprime vCadena
      vNumero = @Str(tProductos(CTIPOPRODUCTO);0)
      imprime vNumero
      vCadena = tProductos(CFECHAALTAPRODUCTO)
      fImprimeFecha(vCadena)
      vNumero = @Str(tProductos(CCONTROLEXISTENCIA);0)
      imprime vNumero
      //vCadena = tProductos(CFOTOPRODUCTO)
      //imprime vCadena
      // 6070 16/12/2001 Impresión del campo de descripción del producto (LAP)
      Texto C0;'{'
      imprime
      vCadena = tProductos(CDESCRIPCIONPRODUCTO)
      imprime vCadena
      Texto C0;'}'
      imprime
      vNumero = @Str(tProductos(CMETODOCOSTEO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CPESOPRODUCTO);5)
      imprime vNumero
      vNumero = @Str(tProductos(CCOMVENTAEXCEPPRODUCTO);5)
      imprime vNumero
      vNumero = @Str(tProductos(CCOMCOBROEXCEPPRODUCTO);5)
      imprime vNumero
      vNumero = @Str(tProductos(CCOSTOESTANDAR);5)
      imprime vNumero
      vNumero = @Str(tProductos(CMARGENUTILIDAD);5)
      imprime vNumero
      vNumero = @Str(tProductos(CSTATUSPRODUCTO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CIDUNIDADBASE);0)
      fImprimeNombreUnidad(vNumero)
      // N.D.UNIDADES Exportar las nuevas unidades asumidas de compra / venta
      vNumero = @Str(tProductos(CIDUNIDADCOMPRA);0)
      fImprimeNombreUnidad(vNumero)
      vNumero = @Str(tProductos(CIDUNIDADVENTA);0)
      fImprimeNombreUnidad(vNumero)     
      vNumero = @Str(tProductos(CIDUNIDADNOCONVERTIBLE);0)
      fImprimeNombreUnidad(vNumero)
      vCadena = tProductos(CFECHABAJA)
      fImprimeFecha(vCadena)
      vNumero = @Str(tProductos(CIMPUESTO1);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIMPUESTO2);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIMPUESTO3);5)
      imprime vNumero
      vNumero = @Str(tProductos(CRETENCION1);5)
      imprime vNumero
      vNumero = @Str(tProductos(CRETENCION2);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIDPADRECARACTERISTICA1);0)
      fImprimeNombreCaracterisrica(vNumero)
      vNumero = @Str(tProductos(CIDPADRECARACTERISTICA2);0)
      fImprimeNombreCaracterisrica(vNumero)
      vNumero = @Str(tProductos(CIDPADRECARACTERISTICA3);0)
      fImprimeNombreCaracterisrica(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION1);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION2);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION3);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION4);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION5);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION6);0)
      fImpriemeClasificacion(vNumero)
      vCadena = tProductos(CSEGCONTPRODUCTO1)
      imprime vCadena
      vCadena = tProductos(CSEGCONTPRODUCTO2)
      imprime vCadena
      vCadena = tProductos(CSEGCONTPRODUCTO3)
      imprime vCadena
      vCadena = tProductos(CTEXTOEXTRA1)
      imprime vCadena
      vCadena = tProductos(CTEXTOEXTRA2)
      imprime vCadena
      vCadena = tProductos(CTEXTOEXTRA3)
      imprime vCadena
      vCadena = tProductos(CFECHAEXTRA)
      fImprimeFecha(vCadena)
      vNumero = @Str(tProductos(CIMPORTEEXTRA1);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIMPORTEEXTRA2);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIMPORTEEXTRA3);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIMPORTEEXTRA4);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO1);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO2);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO3);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO4);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO5);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO6);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO7);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO8);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO9);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO10);5)
      imprime vNumero
      vNumero = @Str(tProductos(CBANUNIDADES);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANCARACTERISTICAS);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANMETODOCOSTEO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANMAXMIN);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANPRECIO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANIMPUESTO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANCODIGOBARRA);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANCOMPONENTE);0)
      imprime vNumero
      vNumero = @Str(tProductos(CESCUOTAI2);0)
      imprime vNumero
      vNumero = @Str(tProductos(CESCUOTAI3);0)
      imprime vNumero
      vNumero = @Str(tProductos(CESEXENTO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CTIPOPAQUE);0)
      imprime vNumero
      // S.C.245 Exportación de campos faltantes
      vNumero = @Str(tProductos(cPrecSelec);0)
      imprime vNumero
      vCadena = tProductos(cCodAltern)
      imprime vCadena
      vCadena = tProductos(cNomAltern)
      imprime vCadena
      vCadena = tProductos(cDescCorta)
      imprime vCadena
      vNumero = @Str(tProductos(cSubTipo);0)
      imprime vNumero
      vNumero = @Str(tProductos(cUsaBascu);0)
      imprime vNumero
      vNumero = @Str(tProductos(cIdMoneda);0)
      imprime vNumero
      vNumero = @Str(tProductos(cdesglosai);0)
      imprime vNumero
      vCadena = tProductos(cCtaPred)
      imprime vCadena
      vNumero = @Str(tProductos(cIdUniXML);0)
      fImprimeNombreUnidad(vNumero)   
      vCadena = tProductos(cClaveSat)
      imprime vCadena
      vNumero = @Str(tProductos(cCantidadFiscal);0)
      imprime vNumero
    FinSi
  FinMientras
  // N.D.2836 Fin
// **********************************************************************************************
// Paquetes y sus componentes
// **********************************************************************************************

  // N.D.2836
  // Revisión de las clasificaciones del Paquete
  fRevisaMisClases(tValClasificacion; pIdClasifPaq1; pIdClasifPaq2; pIdClasifPaq3; pIdClasifPaq4; pIdClasifPaq5; pIdClasifPaq6 ) 

  // Si el rango inicial es el primer paquete, recupera el código del primero
  Si pPaqInicial = ' '
    tProductos.Busca Primero
    Si tProductos->Encontro
      pPaqInicial = tProductos(cCodigoProducto)
      Si !tProductos(cIdProducto)
        tProductos.Saltareg[1]
        Si tProductos->Encontro
          pPaqInicial = tProductos(cCodigoProducto)
        FinSi
      FinSI
    FinSi
  FinSi

  // Si el rango final es el último paquete, recupera el código del último
  Si pPaqFinal = ' '
    tProductos.Busca Ultimo
    Si tProductos->Encontro
      pPaqFinal = tProductos(cCodigoProducto)
    FinSi
  FinSi

  // N.D.2836 Inicio
  // Correcciones a la exportación cuando se utilizan clasificaciones
  Mientras[tProductos.Busca[pPaqInicial & '..' & pPaqFinal]; tProductos->Encontro; tProductos.Busca Siguiente[1]]
    // Por omisón exportar el registro
    lExportar = 1

    // Validación del Id cero
    Si tProductos(cIdProducto) = 0
      lExportar = 0
    FinSi

    // Validación del Paquete
    Si (tProductos(CTIPOPRODUCTO) = 1) O (tProductos(CTIPOPRODUCTO) = 3)
      lExportar = 0
    FinSi
 
    // En caso de existir clasificaciones revisar que se cumplan
    Si (gNumDeClases > 0) Y (lExportar = 1)
      // Revisar si cumple con las clasificaciones
      lIdClasif1 = tProductos(cIdValorClasificacion1)
      lIdClasif2 = tProductos(cIdValorClasificacion2)
      lIdClasif3 = tProductos(cIdValorClasificacion3)
      lIdClasif4 = tProductos(cIdValorClasificacion4)
      lIdClasif5 = tProductos(cIdValorClasificacion5)
      lIdClasif6 = tProductos(cIdValorClasificacion6)
      lExportar = fCumpleConClasificaciones(lIdClasif1; lIdClasif2; lIdClasif3; lIdClasif4; lIdClasif5; lIdClasif6; gListIdDeClases)
    Finsi

    Si lExportar = 1
      Texto C0;'MGW10005'
      imprime
      vCadena = tProductos(CCODIGOPRODUCTO)
      imprime vCadena
      vCadena = tProductos(CNOMBREPRODUCTO)
      imprime vCadena
      vNumero = @Str(tProductos(CTIPOPRODUCTO);0)
      imprime vNumero
      vCadena = tProductos(CFECHAALTAPRODUCTO)
      fImprimeFecha(vCadena)
      vNumero = @Str(tProductos(CCONTROLEXISTENCIA);0)
      imprime vNumero
      //vCadena = tProductos(CFOTOPRODUCTO)
      //imprime vCadena
      //vCadena = tProductos(CDESCRIPCIONPRODUCTO)
      //imprime vCadena
      // 13/05/2002 GTP Impresión de la descripción del producto según cambio hecho (6070 16/12/2001)
      Texto C0;'{'
      imprime
      vCadena = tProductos(CDESCRIPCIONPRODUCTO)
      imprime vCadena
      Texto C0;'}'
      imprime
      vNumero = @Str(tProductos(CMETODOCOSTEO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CPESOPRODUCTO);5)
      imprime vNumero
      vNumero = @Str(tProductos(CCOMVENTAEXCEPPRODUCTO);5)
      imprime vNumero
      vNumero = @Str(tProductos(CCOMCOBROEXCEPPRODUCTO);5)
      imprime vNumero
      vNumero = @Str(tProductos(CCOSTOESTANDAR);5)
      imprime vNumero
      vNumero = @Str(tProductos(CMARGENUTILIDAD);5)
      imprime vNumero
      vNumero = @Str(tProductos(CSTATUSPRODUCTO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CIDUNIDADBASE);0)
      fImprimeNombreUnidad(vNumero)
      // N.D.UNIDADES Exportar las nuevas unidades asumidas de compra / venta
      vNumero = @Str(tProductos(CIDUNIDADCOMPRA);0)
      fImprimeNombreUnidad(vNumero)
      vNumero = @Str(tProductos(CIDUNIDADVENTA);0)
      fImprimeNombreUnidad(vNumero)     
      vNumero = @Str(tProductos(CIDUNIDADNOCONVERTIBLE);0)
      fImprimeNombreUnidad(vNumero)
      vCadena = tProductos(CFECHABAJA)
      fImprimeFecha(vCadena)
      vNumero = @Str(tProductos(CIMPUESTO1);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIMPUESTO2);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIMPUESTO3);5)
      imprime vNumero
      vNumero = @Str(tProductos(CRETENCION1);5)
      imprime vNumero
      vNumero = @Str(tProductos(CRETENCION2);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIDPADRECARACTERISTICA1);0)
      fImprimeNombreCaracterisrica(vNumero)
      vNumero = @Str(tProductos(CIDPADRECARACTERISTICA2);0)
      fImprimeNombreCaracterisrica(vNumero)
      vNumero = @Str(tProductos(CIDPADRECARACTERISTICA3);0)
      fImprimeNombreCaracterisrica(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION1);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION2);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION3);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION4);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION5);0)
      fImpriemeClasificacion(vNumero)
      vNumero = @Str(tProductos(CIDVALORCLASIFICACION6);0)
      fImpriemeClasificacion(vNumero)
      vCadena = tProductos(CSEGCONTPRODUCTO1)
      imprime vCadena
      vCadena = tProductos(CSEGCONTPRODUCTO2)
      imprime vCadena
      vCadena = tProductos(CSEGCONTPRODUCTO3)
      imprime vCadena
      vCadena = tProductos(CTEXTOEXTRA1)
      imprime vCadena
      vCadena = tProductos(CTEXTOEXTRA2)
      imprime vCadena
      vCadena = tProductos(CTEXTOEXTRA3)
      imprime vCadena
      vCadena = tProductos(CFECHAEXTRA)
      fImprimeFecha(vCadena)
      vNumero = @Str(tProductos(CIMPORTEEXTRA1);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIMPORTEEXTRA2);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIMPORTEEXTRA3);5)
      imprime vNumero
      vNumero = @Str(tProductos(CIMPORTEEXTRA4);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO1);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO2);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO3);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO4);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO5);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO6);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO7);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO8);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO9);5)
      imprime vNumero
      vNumero = @Str(tProductos(CPRECIO10);5)
      imprime vNumero
      vNumero = @Str(tProductos(CBANUNIDADES);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANCARACTERISTICAS);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANMETODOCOSTEO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANMAXMIN);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANPRECIO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANIMPUESTO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANCODIGOBARRA);0)
      imprime vNumero
      vNumero = @Str(tProductos(CBANCOMPONENTE);0)
      imprime vNumero
      vNumero = @Str(tProductos(CESCUOTAI2);0)
      imprime vNumero
      vNumero = @Str(tProductos(CESCUOTAI3);0)
      imprime vNumero
      vNumero = @Str(tProductos(CESEXENTO);0)
      imprime vNumero
      vNumero = @Str(tProductos(CTIPOPAQUE);0)
      imprime vNumero
      //N.D.6204 Exportación de campos faltantes      
      vNumero = @Str(tProductos(cPrecSelec);0)
      imprime vNumero
      vCadena = tProductos(cCodAltern)
      imprime vCadena
      vCadena = tProductos(cNomAltern)
      imprime vCadena
      vCadena = tProductos(cDescCorta)
      imprime vCadena
      vNumero = @Str(tProductos(cSubTipo);0)
      imprime vNumero
      vNumero = @Str(tProductos(cUsaBascu);0)
      imprime vNumero
      vNumero = @Str(tProductos(cIdMoneda);0)
      imprime vNumero
      vNumero = @Str(tProductos(cdesglosai);0)
      imprime vNumero
      //Fin N.D.6204     
      vCadena = tProductos(cCtaPred)
      imprime vCadena
      vNumero = @Str(tProductos(cIdUniXML);0)
      fImprimeNombreUnidad(vNumero)   
      vCadena = tProductos(cClaveSat)
      imprime vCadena
      vNumero = @Str(tProductos(cCantidadFiscal);0)
      imprime vNumero

      // Se imprimen los componentes del paquete
      tCompPaquetes.Busca[@Str(tProductos(CIDPRODUCTO);0)]
      Mientras tCompPaquetes->Encontro Y tProductos(CIDPRODUCTO) = tCompPaquetes(CIDPAQUETE)
        Si tCompPaquetes(CIDCOMPONENTE) = 0
          //El registro con CIDCOMPONENTE = 0 se ignora.
          tCompPaquetes.SaltaReg[1]
          Continua
        FinSi
				
        Texto C0;'MGW10015'
        imprime
        vNumero = @Str(tCompPaquetes(CIDPRODUCTO);0)
        fImprimeCodigoComponente(vNumero)
        vNumero = @Str(tCompPaquetes(CCANTIDADPRODUCTO);5)
        imprime vNumero
        // N.D.UNIDADES Exportar las nuevas unidades asumidas de compra / venta
        vNumero = @Str(tCompPaquetes(CIDUNIDADVENTA);0)
        fImprimeNombreUnidad(vNumero)
        vNumero = @Str(tCompPaquetes(CIDVALORCARACTERISTICA1);0)
        fImpriemeValorCaracteristica(vNumero)
        vNumero = @Str(tCompPaquetes(CIDVALORCARACTERISTICA2);0)
        fImpriemeValorCaracteristica(vNumero)
        vNumero = @Str(tCompPaquetes(CIDVALORCARACTERISTICA3);0)
        fImpriemeValorCaracteristica(vNumero)
        vNumero = @Str(tCompPaquetes(CTIPOPRODUCTO);0)
        imprime vNumero
        tCompPaquetes.SaltaReg[1]
      FinMientras
    FinSi
  FinMientras
  // N.D.2836 Fin
FinSi
// **********************************************************************************************
// Identificador de productos y detalles
// **********************************************************************************************
Si pTipoReporte = 5
  tIdProdDetalles.Busca Primero
  Mientras tIdProdDetalles->Encontro
    Si tIdProdDetalles(CIDPRODUCTO) = 0 O tIdProdDetalles(CIDPRODUCTOPADRE) = 0
      //El registro con CIDPRODUCTO = 0 O CIDPRODUCTOPADRE = 0 se ignora
      tIdProdDetalles.SaltaReg[1]
      Continua
    FinSi
    //Buscar tIdProdDetalles(CIDPRODUCTOPADRE)
    vNumero = @Str(tIdProdDetalles(CIDPRODUCTOPADRE);0)
    tProductosPorId.Busca[vNumero]
    //Si se encontro y esta dentro del rango de productos
    Si tProductosPorId->Encontro
      // N.D.2836 Inicio
      // Correcciones a la exportación cuando se utilizan clasificaciones
      Si gNumDeClases > 0
        // Revisar si cumple con las clasificaciones
        lIdClasif1 = tProductosPorId(cIdValorClasificacion1)
        lIdClasif2 = tProductosPorId(cIdValorClasificacion2)
        lIdClasif3 = tProductosPorId(cIdValorClasificacion3)
        lIdClasif4 = tProductosPorId(cIdValorClasificacion4)
        lIdClasif5 = tProductosPorId(cIdValorClasificacion5)
        lIdClasif6 = tProductosPorId(cIdValorClasificacion6)
        lPerteneceClase = fCumpleConClasificaciones(lIdClasif1; lIdClasif2; lIdClasif3; lIdClasif4; lIdClasif5; lIdClasif6; gListIdDeClases)
      Sino
        lPerteneceClase = 1
      Finsi
      // N.D.2836 Fin
      lCodigoProd = tProductosPorId(cCodigoProducto)
      Si lPerteneceClase = 1 Y lCodigoProd >= pProdInicial Y lCodigoProd <= pProdFinal
        Texto C0;'MGW10004'
        imprime
        vNumero = @Str(tIdProdDetalles(CTIPOPRODUCTO);0)
        imprime vNumero
        vNumero = @Str(tIdProdDetalles(CIDPRODUCTOPADRE);0)
        fImprimeCodigoProducto(vNumero)
        vNumero = @Str(tIdProdDetalles(CIDVALORCARACTERISTICA1);0)
        fImpriemeValorCaracteristica(vNumero)
        vNumero = @Str(tIdProdDetalles(CIDVALORCARACTERISTICA2);0)
        fImpriemeValorCaracteristica(vNumero)
        vNumero = @Str(tIdProdDetalles(CIDVALORCARACTERISTICA3);0)
        fImpriemeValorCaracteristica(vNumero)
      FinSi
    FinSi

    tIdProdDetalles.SaltaReg[1]
  FinMientras
FinSi
// **********************************************************************************************
// Existencia máxima y mínima
// **********************************************************************************************
Si pTipoReporte=5
  Si pIncluirExisMaxMin = 1
   tExistencias.Busca Primero
   Mientras tExistencias->Encontro
     Texto C0;'MGW10016'
     imprime
     vNumero = @Str(tExistencias(CIDALMACEN);0)
     fImpriemeCodigoAlmacen(vNumero)
     Si tExistencias(CIDPRODUCTOPADRE) = 0
       vNumero = @Str(tExistencias(CIDPRODUCTO);0)
       fImprimeCodigoProducto(vNumero)
       vCadena = ''
       imprime vCadena
     SiNo
       tIdProdDetalles.Busca[@Str(tExistencias(CIDPRODUCTO);0)]
       Si tIdProdDetalles->Encontro
         fImprimeNemosCaracteristicas(tIdProdDetalles(CIDVALORCARACTERISTICA1);tIdProdDetalles(CIDVALORCARACTERISTICA2);tIdProdDetalles(CIDVALORCARACTERISTICA3))
       SiNo
         vCadena = ',,'
         imprime vCadena
       FinSi
       vNumero = @Str(tExistencias(CIDPRODUCTOPADRE);0)
       fImprimeCodigoProducto(vNumero)
     FinSi
     vNumero = @Str(tExistencias(CEXISTENCIAMINBASE);5)
     imprime vNumero
     vNumero = @Str(tExistencias(CEXISTENCIAMAXBASE);5)
     imprime vNumero
     vNumero = @Str(tExistencias(CEXISTMINNOCONVERTIBLE);5)
     imprime vNumero
     vNumero = @Str(tExistencias(CEXISTMAXNOCONVERTIBLE);5)
     imprime vNumero
     // N.D.3094 Inicio
     vNumero = tExistencias(CZONA)
     imprime  vNumero
     vNumero = tExistencias(CPASILLO)
     imprime  vNumero
     vNumero = tExistencias(CANAQUEL)
     imprime  vNumero
     vNumero = tExistencias(CREPISA)
     imprime  vNumero
     // N.D.3094 Fin
     tExistencias.SaltaReg[1]
    FinMientras
  FinSi
FinSi
// **********************************************************************************************
// Lista de Precios de Compra
// **********************************************************************************************
Si pTipoReporte = 4
  Si pIncluirListaPrecios = 1
    tListaPrecios.Busca Primero
    Mientras tListaPrecios->Encontro
      Texto C0;'MGW10014'
      imprime
      vNumero = @Str(tListaPrecios(CIDPRODUCTO);0)
      fImprimeCodigoProducto(vNumero)
      vNumero = @Str(tListaPrecios(CIDPROVEEDOR);0)
      fImprimeCodigoCliProv(vNumero)
      vNumero = @Str(tListaPrecios(CPRECIOCOMPRA);5)
      imprime vNumero
      vNumero = @Str(tListaPrecios(CIDMONEDA);0)
      imprime vNumero
      vCadena = tListaPrecios(CCODIGOPRODUCTOPROVEEDOR)
      imprime vCadena
      vNumero = @Str(tListaPrecios(CIDUNIDAD);0)
      fImprimeNombreUnidad(vNumero)

      tListaPrecios.SaltaReg[1]
    FinMientras
  FinSi
FinSi
