// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//
//	Conciliacion.rpt
//	Nombre del reporte en el sistema: Conciliación AdminPAQ vs ContPAQ.
//
//  Sistema: AdminPAQ v1.1
// 
//	Este reporte busca y despliega diferencias en las pólizas de ContPAQ
//  respecto a las de AdminPAQ.
//
//	Consideraciones especiales:
//  Este reporte aunque está programado como uno solo, representa en realidad
//  dos reportes en el ámbito del sistema:
//    Conciliación AdminPAQ vs ContPAQ
//    Conciliación AdminPAQ vs ContPAQ Detallada
//  
//	Elaboró:    Eduardo Pérez Figueroa
//	Fecha: 	    18 de Septiembre del 2001
//
//  Historia de revisiones:
//	Fecha       ID-LOTUS     DESCRIPCION
// 09/08/2002  N.D.0643     Se llevó a cabo la contabilización generando 
//                          correctamente las pólizas en ContPAQ, sin embargo, 
//                          al generar el reporte de Conciliación AdminPAQ 
//                          ContPAQ no muestra las pólizas de ContPAQ solo las 
//                          de  AdminPAQ. (DRdA)
// 15/01/2003  N.D.1712     Marcaba los casos 4 y 6 cuando no debía y en la 
//                          salida detallada sacaba renglones de polizas sin 
//                          datos de la misma. (DRdA)
// 21/01/2003  N.D.1726     Presenta prepólizas con estado de error. (DRdA)
// 05/06/2006  N.D.4089     Mostrar la hora de la póliza de AdminPaq en el 
//                          reporte (ELVS)
// 21/06/2006  N.D.4089	    Se reabre el defecto, porque solo se debe mostrar
//			    la hora cuando la empresa usa CFDs	
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


// *****************************************************************************
// Funciones de librería

Incluye LibAdminPAQ.Rpt


// *****************************************************************************
//	Parámetros del reporte:

Parametro pFechaInicial = '20051001'    // Fecha inicial del rango
Parametro pFechaFinal = '20051231'      // Fecha final del rango
Parametro pTipoPolizas = ' '            // Tipo de pólizas a imprimir
                                        // Este parámetro puede ser una lista separada por comas
                                        // 1 = Ingresos
                                        // 2 = Egresos
                                        // 3 = Diario
                                        // 4 = Orden
                                        // 5 = Otros Tipos
Parametro pImprimirPolizas = 0          // Imprimir pólizas
                                        // 0 = Todas
                                        // 1 = Sólo con diferencias
Parametro pTipoReporte = 1              // Tipo de Reporte (este parámetro es interno a AdminPAQ)
                                        // 0 = Conciliación AdminPAQ vs ContPAQ
                                        // 1 = Conciliación AdminPAQ vs ContPAQ Detallada

// *****************************************************************************
//	Tablas a utilizar e Indices de búsqueda por omisión

UsaEmpresa tEmpresa;'ADMINPAQW'                                 // Parámetros

UsaTabla tPolizaAdminPAQ = tEmpresa['MGW10038']                 // Pólizas AdminPAQ
tPolizaAdminPAQ.Usaindice['iFechaTipoNum']                      // Fecha+Tipopol+NumPol

UsaTabla tMovtoAdminPAQ = tEmpresa['MGW10039']                  // Movimientos AdminPAQ
tMovtoAdminPAQ.Usaindice['iPrepolizaMovto']                     // cIdPrepoliza+Movto

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

// Lee el registro de parámetros de la empresa para obtener el directorio de trabajo de ContPAQ
gDirContPAQ = ''
tParametros.Busca Primero
Si tParametros->Encontro // Si lo encontró
  gDirContPAQ = tParametros(cRutaContPAQ)
FinSi

Si gDirContPAQ != ''
  UsaEmpresa tEmpContPAQ;'CONTPAQW';gDirContPAQ
  UsaTabla tPolizaContPAQ = tEmpContPAQ['CTW10003/IPOLIZA']       // Pólizas ContPAQ: Eje+Periodo+TipoPol+NumPol
  UsaTabla tMovtoContPAQ = tEmpContPAQ['CTW10004/IPOLMOV']        // Movimientos ContPAQ: Eje+Periodo+TipoPol+NumPol+Movto
  UsaTabla tCuenta = tEmpContPAQ['CTW10001/ICUENTA']              // Catálogo de cuentas: Cuenta
  UsaTabla tDiario = tEmpContPAQ['CTW10009/IDIARIO']              // Catálogo de diarios: Tipo Póliza
  gDecimales = tEmpContPAQ->UsaCentavos
Sino
  UsaEmpresa tEmpContPAQ2;'CONTPAQW'
  UsaTabla tPolizaContPAQ = tEmpContPAQ2['CTW10003/IPOLIZA']       // Pólizas ContPAQ: Eje+Periodo+TipoPol+NumPol
  UsaTabla tMovtoContPAQ = tEmpContPAQ2['CTW10004/IPOLMOV']        // Movimientos ContPAQ: Eje+Periodo+TipoPol+NumPol+Movto
  UsaTabla tCuenta = tEmpContPAQ2['CTW10001/ICUENTA']              // Catálogo de cuentas: Cuenta
  UsaTabla tDiario = tEmpContPAQ2['CTW10009/IDIARIO']              // Catálogo de diarios: Tipo Póliza
  gDecimales = tEmpContPAQ2->UsaCentavos
FinSi

vLongTipoMov = 1
vLongTipoMov = @VAL(@ESCOGE(tMovtoContPAQ->Campo[2];2))
// *****************************************************************************
// Definiciones y asumidos globales para el reporte

// Ancho de columnas = caracteres / 17 * 2.54
// Se consideran columnas intermedias de un espacio
// *** Reporte concentrado ***
// C0 (Fecha) = 11 caracteres // N.D. 4089 Se agrega la hora concatenada a la fecha
// C2 (Tipo) = 8 caracteres
// C4 (Número) = 6 caracteres
// C6 (Cargo AdminPAQ) = 12 caracteres
// C8 (Abono AdminPAQ) = 12 caracteres
// C10 (Cargo ContPAQ) = 12 caracteres
// C12 (Abono ContPAQ) = 12 caracteres
// C14 (Diferencia Cargo) = 12 caracteres
// C16 (Diferencia Abono) = 12 caracteres
// C18 (Observaciones) = 12 caracteres
// N.D. 4089 Se modificaron las columnas para concatenar la hora a la fecha
// Originales Columnas 20;1.64,0.15,1.20,0.15,0.90,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15
// Actuales   Columnas 20;5.15,0.15,1.50,0.15,0.90,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15
// *** Reporte detallado ***
// C0 (Número de movimiento) = 3 caracteres
// C2 (Cuenta) = 12 caracteres
// C4 (Nombre) = 20 caracteres
// C6 (Cargo AdminPAQ) = 12 caracteres
// C8 (Abono AdminPAQ) = 12 caracteres
// C10 (Cargo ContPAQ) = 12 caracteres
// C12 (Abono ContPAQ) = 12 caracteres
// C14 (Diferencia Cargo) = 12 caracteres
// C16 (Diferencia Abono) = 12 caracteres
// C18 (Observaciones) = 12 caracteres
// N.D. 4089 Se modificaron las columnas para concatenar la hora a la fecha
// Originales Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15
// Actuales   Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15

Si pTipoReporte // Detallado
  // N.D. 4089 Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15
  Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15
Sino // Concentrado
  // N.D. 4089 Se modificaron las columnas para concatenar la hora a la fecha
  Columnas 20;5.15,0.15,1.50,0.15,0.90,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15
FinSi


Usaletra 'Arial'
Altura 9
[C6,C8,C10,C12,C14,C16].Coma
Si gDecimales
  [C6,C8,C10,C12,C14,C16].Decimales 2
Sino
  [C6,C8,C10,C12,C14,C16].Decimales 0
FinSi
[C0,C4].Decimales 0

// *****************************************************************************
//	Variables de ámbito global:

gIdioma = 0                 // Idioma del reporte
                            // 0 = Español
                            // 1 = Inglés


// *****************************************************************************
//  fCaso29
//
//	Verifica la póliza de AdminPAQ para encontrar los siguientes:
//    Caso 2: La póliza no existe en ContPAQ
//    Caso 9: La póliza no existe en ContPAQ pues no ha sido contabilizada
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fCaso29(atPolizaAdminPAQ: Tabla; aObservaciones)

  // Verifica el estado de la póliza en AdminPAQ
  // 1 = No contabilizado
  // 2 = Prepóliza de documento
  // 3 = Prepóliza diaria
  // 4 = Prepóliza por período
  Si atPolizaAdminPAQ(cEstadoContable) <= 4
    aObservaciones = 1[C9] // caso 9
    aObservaciones = 0[C1]
  Sino
    aObservaciones = 1[C2] // caso 2
    aObservaciones = 0[C1]
  FinSi
FinFunc


// *****************************************************************************
//  fCaso456
//
//	Verifica el movimiento de AdminPAQ y ContPAQ para encontrar las siguientes
//  diferencias:
//    Caso 4: Existen diferencias en las cuentas
//    Caso 5: Existen diferencias en el importe
//    Caso 6: Existen diferencias en el tipo de movimiento
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fCaso456(atMovtoAdminPAQ: Tabla; atMovtoContPAQ: Tabla; aObservaciones)
Local lDiferencias

  // Asume que no hay diferencias
  lDiferencias = 0
  // Verifica la cuenta
  Si atMovtoAdminPAQ(Cuenta) != @SubStr(atMovtoContPAQ(Cuenta); 0; @Len(atMovtoAdminPAQ(Cuenta)))
    aObservaciones = 1[C4] // caso 4
    lDiferencias = 1
  FinSi
  Si atMovtoAdminPAQ(Importe) != atMovtoContPAQ(Importe)
  // Verifica el importe
    aObservaciones = 1[C5] // caso 5
    lDiferencias = 1
  FinSi
  // Verifica el tipo de movimiento
  // AdminPAQ es cargo y ContPAQ abono?
  Si (atMovtoAdminPAQ(TipoMov) = 1 o atMovtoAdminPAQ(TipoMov) = 2) y atMovtoContPAQ(TipoMov) = 'T'
    aObservaciones = 1[C6] // caso 6
    lDiferencias = 1
  FinSi
  // AdminPAQ es abono y ContPAQ cargo?
  Si (atMovtoAdminPAQ(TipoMov) = 3 o atMovtoAdminPAQ(TipoMov) = 4) y atMovtoContPAQ(TipoMov) = 'F'
    aObservaciones = 1[C6] // caso 6
    lDiferencias = 1
  FinSi
  Si lDiferencias // Si hubo diferencias
    aObservaciones = 0[C1] // enconces no se da el caso 1: pólizas idénticas
  FinSi

  Retorna lDiferencias
FinFunc


// *****************************************************************************
//  fCaso7
//
//	Verifica si la póliza ContPAQ existe para determinar si aplica el siguiente:
//    Caso 7: La póliza AdminPAQ tiene más movimientos que la póliza ContPAQ
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fCaso7(aObservaciones)

  // El caso 7 se da cuando no existe un movimiento en ContPAQ, siempre que la
  // póliza en ContPAQ sí exista
  Si @Col(aObservaciones; 2) = 0 y @Col(aObservaciones; 9) = 0
    aObservaciones = 1[C7] // caso 7
    aObservaciones = 0[C1] // enconces no se da el caso 1: pólizas idénticas
  FinSi
FinFunc


// *****************************************************************************
//  fCaso
//
//	Regresa un texto con los números de caso a imprimir en el reporte.
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fCaso(aObservaciones; aPoliza)
Local lCaso

  lCaso = ''
  Si aPoliza = 1 // Datos de la póliza: Caso 2,9
    Si @Col(aObservaciones;1) != 0
      lCaso = '1'
    FinSi
    Si @Col(aObservaciones;2) != 0
      // Caso 2
      Si lCaso != ''
        lCaso = lCaso & ',2'
      Sino
        lCaso = lCaso & '2'
      FinSi
    FinSi
    Si @Col(aObservaciones;9) != 0
      // Caso 9
      Si lCaso != ''
        lCaso = lCaso & ',9'
      Sino
        lCaso = lCaso & '9'
      FinSi
    FinSi
  FinSi
  // Datos del movimiento: Caso 4,5,6,7,8
  Si @Col(aObservaciones;4) != 0
    // Caso 4
    Si lCaso != ''
      lCaso = lCaso & ',4'
    Sino
      lCaso = '4'
    FinSi
  FinSi
  Si @Col(aObservaciones;5) != 0
    // Caso 5
    Si lCaso != ''
      lCaso = lCaso & ',5'
    Sino
      lCaso = lCaso & '5'
    FinSi
  FinSi
  Si @Col(aObservaciones;6) != 0
    // Caso 6
    Si lCaso != ''
      lCaso = lCaso & ',6'
    Sino
      lCaso = lCaso & '6'
    FinSi
  FinSi
  Si @Col(aObservaciones;7) != 0
    // Caso 7
    Si lCaso != ''
      lCaso = lCaso & ',7'
    Sino
      lCaso = lCaso & '7'
    FinSi
  FinSi
  Si @Col(aObservaciones;8) != 0
    // Caso 8
    Si lCaso != ''
      lCaso = lCaso & ',8'
    Sino
      lCaso = lCaso & '8'
    FinSi
  FinSi

  Si lCaso != ''
    lCaso = 'Caso: ' & lCaso
  FinSi

  Retorna lCaso
FinFunc


// *****************************************************************************
//  fBuscaDiferenciasPol
//
//	Compara las pólizas y movimientos de AdminPAQ y ContPAQ para encontrar
//  Diferencias.
//
//  Parámetros 
//
//  Salidas
//
//  Historial:
//  18/Feb/2002 N.D. 134 Se hace la búsqueda de los Movimientos tomando en
//              cuenta la longitud del campo TipoPol.
// *****************************************************************************
DefFunc fBuscaDiferenciasPol(atPolizaAdminPAQ: Tabla; atPolizaContPAQ: Tabla)
Local lPaso, lDiferencia

  lDiferencia = 0

  // Si los totales de las pólizas no son iguales, retorna 1
  SI atPolizaAdminPAQ(Cargos) != atPolizaContPAQ(Cargos) o atPolizaAdminPAQ(Abonos) != atPolizaContPAQ(Abonos)
    lDiferencia = 1
  FinSi
  SI !lDiferencia
    // Lee los movimientos de AdminPAQ
    Mientras [ tMovtoAdminPAQ.Busca[@Str(atPolizaAdminPAQ(cIdPrepoliza);0)]; tMovtoAdminPAQ->Encontro; tMovtoAdminPAQ.Busca Siguiente[1] ]
      // Busca el movimiento correspondiente en ContPAQ
      tMovtoContPAQ.Busca[(tMovtoAdminPAQ(Eje) $ 4) & (tMovtoAdminPAQ(Periodo) $ 2) & (tMovtoAdminPAQ(TipoPol) $ vLongTipoMov) & (tMovtoAdminPAQ(NumPol) $ 8) & (tMovtoAdminPAQ(Movto) $ 4)]
      Si !tMovtoContPAQ->Encontro
        lDiferencia = 1
        FinCiclo
      Sino
        // Verifica si los dos movimentos son iguales
        Si fCaso456(tMovtoAdminPAQ; tMovtoContPAQ; &lPaso)
          lDiferencia = 1
          FinCiclo
        FinSi
      FinSi
    FinMientras
  FinSi
  SI !lDiferencia
    // Busca movimientos adicionales en ContPAQ
    Si tMovtoContPAQ->Encontro
      tMovtoContPAQ.Busca Siguiente[14 + vLongTipoMov]
    FinSi
    Si tMovtoContPAQ->Encontro
      lDiferencia = 1
    FinSi
  FinSi

  Retorna lDiferencia
FinFunc


// *****************************************************************************
//  fFormatea
//
//	Formatea el código de cuenta conforme a la esructura de código de cuenta
//  contenida en parámetros de la empresa de ContPAQ.
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fFormatea(Codigo; Mascarilla)
Local apunta, Tmp, CodigoEdi

	apunta[0] = 0
	Tmp[0] = 0
	Tmp[1] = 0
	Mientras @Col(apunta;0) <= (@Len(Mascarilla) - 1) 
		Tmp[0] = @SubStr(Mascarilla; apunta; 1)
		Si @Col(Tmp;0) = ' '
			FinCiclo
		FinSi
		apunta[0] = @Col(apunta;0) + 1
		Si @Asc(@Col(Tmp;0)) > 64
			Tmp[0] = ((@Asc(@Col(Tmp;0)) - @Asc('A')) + 10)
		SiNo
			Tmp[0] = (@Asc(@Col(Tmp;0)) - @Asc('0'))
		FinSi
		Tmp[2] = @Col(Tmp;1)
		Tmp[1] = @Col(Tmp;1) + @Col(Tmp;0)
		SI @Col(Tmp;2) = 0
			CodigoEdi = @SubStr(Codigo;@Col(Tmp;2); @Col(Tmp;0))
		SiNo
			CodigoEdi = @Col(CodigoEdi;1) & '-' & @SubStr(Codigo;@Col(Tmp;2); @Col(Tmp;0))
		FinSi
	FinMientras
	retorna CodigoEdi
FinFunc


// *****************************************************************************
//  fImprimeEncPolAdminPAQ
//
//	Imprime los datos del encabezado de la póliza AdminPAQ. Se utiliza en el 
//  reporte concentrado.
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeEncPolAdminPAQ(atPolizaAdminPAQ: Tabla)
Local vImprime

  // modifica el ancho de las columnas
  // N.D. 4089  Columnas 20;1.64,0.15,1.20,0.15,0.90,0.15,0
  Columnas 20;5.15,0.15,1.50,0.15,0.90,0.15,0

  vImprime = ' '[C0..C19]

  // Fecha de la póliza
  //N.D. 4089 Solo aplica para empresas que usen CFDs
  Si tParametros(cEsCFD)=1
       lFecha = fFormateaFecha(atPolizaAdminPAQ(Fecha);gIdioma) & ' ' & atPolizaAdminPAQ(cHora)
  SiNo
       lFecha = fFormateaFecha(atPolizaAdminPAQ(Fecha);gIdioma)
  FinSi
  vImprime = @Col(lFecha;0)[C0]
  // Tipo de póliza
  Escoge atPolizaAdminPAQ(TipoPol)
    Caso 1 // Ingresos
      vImprime = 'Ingresos'[C2]
    FinCaso
    Caso 2 // Egresos
      vImprime = 'Egresos'[C2]
    FinCaso
    Caso 3 // Diario
      vImprime = 'Diario'[C2]
    FinCaso
    Caso 4 // Orden
      vImprime = 'Orden'[C2]
    FinCaso
    Caso 5 // Estadística
      vImprime = 'Estadística'[C2]
    FinCaso
    OtroCaso
      vImprime = 'Inválido'[C2]
      Si tDiario(Numero) = atPolizaAdminPAQ(TipoPol)
        vImprime = tDiario(Descrip)[C2]
      SiNo
        tDiario.Busca[atPolizaAdminPAQ(TipoPol) $ 3]
        Si tDiario->Encontro
          vImprime = tDiario(Descrip)[C2]
        FinSi
      FinSi
    FinCaso
  FinEscoge
  // Número de póliza  
  vImprime = atPolizaAdminPAQ(NumPol)[C4]

  Lista vImprime

  // regresa las columnas a su configuración original
  // N.D. 4089 Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15
  Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15
FinFunc


// *****************************************************************************
//  fImprimeEncPolContPAQ
//
//	Imprime los datos del encabezado de la póliza ContPAQ. Se utiliza en el 
//  reporte concentrado.
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeEncPolContPAQ(atPolizaContPAQ: Tabla)
Local vImprime

  // modifica el ancho de las columnas
  // N.D. 4089 Columnas 20;5.15,0.15,1.20,0.15,0.90,0.15,0
  Columnas 20;5.15,0.15,1.50,0.15,0.90,0.15,0

  vImprime = ' '[C0..C19]

  // Fecha de la póliza
  // N.D. 4089 Revisar si aplicará la fecha de la póliza de ContPaq
  lFecha = fFormateaFecha(atPolizaContPAQ(Fecha);gIdioma) 
  vImprime = @Col(lFecha;0) [C0]
  // Tipo de póliza
  Escoge atPolizaContPAQ(TipoPol)
    Caso 1 // Ingresos
      vImprime = 'Ingresos'[C2]
    FinCaso
    Caso 2 // Egresos
      vImprime = 'Egresos'[C2]
    FinCaso
    Caso 3 // Diario
      vImprime = 'Diario'[C2]
    FinCaso
    Caso 4 // Orden
      vImprime = 'Orden'[C2]
    FinCaso    
    Caso 5 // Estadística
      vImprime = 'Estadística'[C2]
    FinCaso
    OtroCaso
      vImprime = 'Inválido'[C2]
      Si tDiario(Numero) = atPolizaContPAQ(TipoPol)
        vImprime = tDiario(Descrip)[C2]
      SiNo
        tDiario.Busca[atPolizaContPAQ(TipoPol) $ 3]
        Si tDiario->Encontro
          vImprime = tDiario(Descrip)[C2]
        FinSi
      FinSi
    FinCaso
  FinEscoge
  // Número de póliza  
  vImprime = atPolizaContPAQ(NumPol)[C4]

  Lista vImprime

  // regresa las columnas a su configuración original
  // N.D. 4089 Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15
  Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15
FinFunc


// *****************************************************************************
//  fImprimeMovtoAdminPAQ
//
//	Imprime los datos del movimiento de la póliza AdminPAQ.
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeMovtoAdminPAQ(atMovtoAdminPAQ: Tabla; aCargoContPAQ; aAbonoContPAQ; aTipoMovContPAQ; aObservaciones)
Local vImprime, lCodigo, lObservaciones

  vImprime = ' '[C0..C19]
  // Imprime el número de movimiento
  vImprime = atMovtoAdminPAQ(Movto)+1[C0]
  // Imprime la cuenta y el nombre
  // Formatea el código de cuenta
  lCodigo = fFormatea(atMovtoAdminPAQ(Cuenta); tEmpContPAQ->Estructura)
  vImprime = @Col(lCodigo;0)[C2]
  // Lee la cuenta del movimiento
  tCuenta.Busca[atMovtoAdminPAQ(Cuenta)  $ 20]
  Si tCuenta->Encontro
    vImprime = tCuenta(Nombre)[C4]
  FinSi
  // Imprime el importe de cargo y abono de AdminPAQ
  Si atMovtoAdminPAQ(TipoMov) = 1 o atMovtoAdminPAQ(TipoMov) = 2 // Movimiento de cargo?
    vImprime = atMovtoAdminPAQ(Importe)[C6]
    vImprime = ' '[C8]
  Sino // Abono
    vImprime = ' '[C6]
    vImprime = atMovtoAdminPAQ(Importe)[C8]
  FinSi
  // Imprime el importe de cargo y abono de ContPAQ
  Si aTipoMovContPAQ = 0 // Cargo
    vImprime = @Col(aCargoContPAQ;0)[C10]
  FinSi
  Si aTipoMovContPAQ = 1 // Abono
    vImprime = @Col(aAbonoContPAQ;0)[C12]
  FinSi
  // Calcula e imprime las diferencias
  vImprime = @Col(vImprime;6) - @Col(aCargoContPAQ;0)[C14]
  vImprime = @Col(vImprime;8) - @Col(aAbonoContPAQ;0)[C16]
  // Imprime las observaciones
  lObservaciones = fCaso(aObservaciones; 0)
  vImprime = @Col(lObservaciones;0)[C18]
  
  Lista vImprime
FinFunc


// *****************************************************************************
//  fImprimeMovtoContPAQ
//
//	Imprime los datos de la póliza, cuando el reporte es concentrado.
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeMovtoContPAQ(atMovtoContPAQ: Tabla; aCaso8)
Local vImprime, lCodigo

  vImprime = ' '[C0..C19]
  // Imprime el número de movimiento
  Si !aCaso8
    vImprime = atMovtoContPAQ(Movto)+1[C0]
  FinSi
  // Imprime la cuenta y el nombre
  // Formatea el código de cuenta
  lCodigo = fFormatea(atMovtoContPAQ(Cuenta); tEmpContPAQ->Estructura)
  vImprime = @Col(lCodigo;0)[C2]
  // Lee la cuenta del movimiento
  tCuenta.Busca[atMovtoContPAQ(Cuenta) $ 20]
  Si tCuenta->Encontro
    vImprime = tCuenta(Nombre)[C4]
  FinSi
  // Imprime el importe de cargo y abono
  Si atMovtoContPAQ(TipoMov) = 'F' // Movimiento de cargo?
    vImprime = atMovtoContPAQ(Importe)[C10]
    vImprime = ' '[C12]
  Sino // Abono
    vImprime = ' '[C10]
    vImprime = atMovtoContPAQ(Importe)[C12]
  FinSi
  // Calcula e imprime las diferencias
  vImprime = @Col(vImprime;6) - @Col(vImprime;10)[C14]
  vImprime = @Col(vImprime;8) - @Col(vImprime;12)[C16]
  // Imprime caso 8
  Si aCaso8
    vImprime = 'Caso: 8'[C18]
  FinSi

  Lista vImprime
FinFunc


// *****************************************************************************
//  fImprimePolizaAdminPAQ
//
//	Imprime los datos de la póliza, cuando el reporte es concentrado.
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimePolizaAdminPAQ(atPolizaAdminPAQ: Tabla; aTotalCargosContPAQ; aTotalAbonosContPAQ; aObservaciones)
Local vImprime, lFecha, lObservaciones

  vImprime = ' '[C0..C19]

  // Fecha de la póliza
  lFecha = fFormateaFecha(atPolizaAdminPAQ(Fecha);gIdioma) 
  //N.D. 4089 Solo aplica para empresas que usen CFDs
  Si tParametros(cEsCFD)=1
      vImprime = @Col(lFecha;0) & ' ' &atPolizaAdminPAQ(cHora)[C0]
  SiNo
      vImprime = @Col(lFecha;0)[C0]
  FinSi      
  // Tipo de póliza
  Escoge atPolizaAdminPAQ(TipoPol)
    Caso 1 // Ingresos
      vImprime = 'Ingresos'[C2]
    FinCaso
    Caso 2 // Egresos
      vImprime = 'Egresos'[C2]
    FinCaso
    Caso 3 // Diario
      vImprime = 'Diario'[C2]
    FinCaso
    Caso 4 // Orden
      vImprime = 'Orden'[C2]
    FinCaso    
    Caso 5 // Estadística
      vImprime = 'Estadística'[C2]
    FinCaso
    OtroCaso
      vImprime = 'Inválido'[C2]
      Si tDiario(Numero) = atPolizaAdminPAQ(TipoPol)
        vImprime = tDiario(Descrip)[C2]
      SiNo
        tDiario.Busca[atPolizaAdminPAQ(TipoPol) $ 3]
        Si tDiario->Encontro
          vImprime = tDiario(Descrip)[C2]
        FinSi
      FinSi
    FinCaso
  FinEscoge
  // Número de póliza  
  vImprime = atPolizaAdminPAQ(NumPol)[C4]
  // Total de cargos y abonos AdminPAQ
  vImprime = atPolizaAdminPAQ(Cargos)[C6]
  vImprime = atPolizaAdminPAQ(Abonos)[C8]
  // Total de cargos y abonos ContPAQ
  vImprime = @Col(aTotalCargosContPAQ;0)[C10]
  vImprime = @Col(aTotalAbonosContPAQ;0)[C12]
  // Diferencias
  vImprime = atPolizaAdminPAQ(Cargos) - @Col(aTotalCargosContPAQ;0)[C14]
  vImprime = atPolizaAdminPAQ(Abonos) - @Col(aTotalAbonosContPAQ;0)[C16]
  // Observaciones
  lObservaciones = fCaso(aObservaciones; 1)
  vImprime = @Col(lObservaciones;0)[C18]

  Lista vImprime
FinFunc


// *****************************************************************************
//  fImprimePolizaContPAQ
//
//	Imprime los datos de la póliza ContPAQ, cuando el reporte es concentrado.
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimePolizaContPAQ(atPolizaContPAQ: Tabla)
Local vImprime, lFecha

  vImprime = ' '[C0..C19]

  // Fecha de la póliza
  // N.D. 4089 Revisar si aplicará la fecha de la póliza de ContPaq
  lFecha = fFormateaFecha(atPolizaContPAQ(Fecha);gIdioma)
  vImprime = @Col(lFecha;0)[C0]
  // Tipo de póliza
  Escoge atPolizaContPAQ(TipoPol)
    Caso 1 // Ingresos
      vImprime = 'Ingresos'[C2]
    FinCaso
    Caso 2 // Egresos
      vImprime = 'Egresos'[C2]
    FinCaso
    Caso 3 // Diario
      vImprime = 'Diario'[C2]
    FinCaso
    Caso 4 // Orden
      vImprime = 'Orden'[C2]
    FinCaso    
    Caso 5 // Estadística
      vImprime = 'Estadística'[C2]
    FinCaso
    OtroCaso
      vImprime = 'Inválido'[C2]
      Si tDiario(Numero) = atPolizaContPAQ(TipoPol)
        vImprime = tDiario(Descrip)[C2]
      SiNo
        tDiario.Busca[atPolizaContPAQ(TipoPol) $ 3]
        Si tDiario->Encontro
          vImprime = tDiario(Descrip)[C2]
        FinSi
      FinSi
    FinCaso
  FinEscoge
  // Número de póliza  
  vImprime = atPolizaContPAQ(NumPol)[C4]
  // Total de cargos y abonos AdminPAQ
  vImprime = 0.0[C6]
  vImprime = 0.0[C8]
  // Total de cargos y abonos ContPAQ
  vImprime = atPolizaContPAQ(Cargos)[C10]
  vImprime = atPolizaContPAQ(Abonos)[C12]
  // Diferencias
  vImprime = @Col(vImprime;6) - @Col(vImprime;10)[C14]
  vImprime = @Col(vImprime;8) - @Col(vImprime;12)[C16]

  vImprime = 'Caso: 3'[C18]

  Lista vImprime
FinFunc


// *****************************************************************************
//  fImprimeTextosCasos
//
//	Imprime los textos de los casos al calce del reporte.
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeTextosCasos()
Local vImprime

  Saltalin
  Columnas 20;16,0
  NEGRITAS TRUE
  vImprime = ' '[C0..C19]
  vImprime = '* * * * *  Detalle de observaciones:'[C0]
  Lista vImprime
  NEGRITAS FALSE
  Saltalin
  Texto '- Caso 1: Pólizas idénticas'
  Imprime
  Texto '- Caso 2: La póliza no existe en ContPAQ (solo en AdminPAQ)'
  Imprime
  Texto '- Caso 3: La póliza no existe en AdminPAQ (solo en ContPAQ)'
  Imprime
  Texto '- Caso 4: Existen diferencias en el número de cuenta de uno de los movimientos de pólizas'
  Imprime
  Texto '- Caso 5: Existen diferencias en el importe de uno de los movimientos de pólizas'
  Imprime
  Texto '- Caso 6: Existen diferencias en el tipo (cargo/abono) de uno de los movimientos de pólizas'
  Imprime
  Texto '- Caso 7: La póliza AdminPAQ tiene más movimientos que la póliza ContPAQ'
  Imprime
  Texto '- Caso 8: La póliza ContPAQ tiene más movimientos que la póliza AdminPAQ'
  Imprime
  Texto '- Caso 9: La póliza no existe en ContPAQ, pues ésta no ha sido contabilizada'
  Imprime
FinFunc


// *****************************************************************************
//  fImprimeTotalesPolAdminPAQ
//
//	Imprime los totales de la póliza AdminPAQ, cuando el reporte es detallado.
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeTotalesPolAdminPAQ(atPolizaAdminPAQ: Tabla; aTotalCargosContPAQ; aTotalAbonosContPAQ; aObservaciones)
Local vImprime
  
	Texto C6;'@L{6}'
	Texto C8;'@L{8}'
	Texto C10;'@L{10}'
	Texto C12;'@L{12}'
	Texto C14;'@L{14}'
	Texto C16;'@L{16}'
	Imprime

  vImprime = ' '[C0..C19]
  // Total de cargos y abonos AdminPAQ
  vImprime = atPolizaAdminPAQ(Cargos)[C6]
  vImprime = atPolizaAdminPAQ(Abonos)[C8]
  // Total de cargos y abonos ContPAQ
  vImprime = @Col(aTotalCargosContPAQ;0)[C10]
  vImprime = @Col(aTotalAbonosContPAQ;0)[C12]
  // Diferencias
  vImprime = atPolizaAdminPAQ(Cargos) - @Col(aTotalCargosContPAQ;0)[C14]
  vImprime = atPolizaAdminPAQ(Abonos) - @Col(aTotalAbonosContPAQ;0)[C16]
  // Observaciones
  lObservaciones = fCaso(aObservaciones; 1)
  vImprime = @Col(lObservaciones;0)[C18]

  Lista vImprime
  Saltalin
FinFunc


// *****************************************************************************
//  fImprimeTotalesPolContPAQ
//
//	Imprime los totales de la póliza ContPAQ, cuando el reporte es detallado.
//
//  Parámetros 
//
//  Salidas 
// *****************************************************************************
DefFunc fImprimeTotalesPolContPAQ(atPolizaContPAQ: Tabla)
Local vImprime
  
	Texto C6;'@L{6}'
	Texto C8;'@L{8}'
	Texto C10;'@L{10}'
	Texto C12;'@L{12}'
	Texto C14;'@L{14}'
	Texto C16;'@L{16}'
	Imprime

  vImprime = ' '[C0..C19]
  // Total de cargos y abonos AdminPAQ
  vImprime = 0.0[C6]
  vImprime = 0.0[C8]
  // Total de cargos y abonos ContPAQ
  vImprime = atPolizaContPAQ(Cargos)[C10]
  vImprime = atPolizaContPAQ(Abonos)[C12]
  // Diferencias
  vImprime = @Col(vImprime;6) - @Col(vImprime;10)[C14]
  vImprime = @Col(vImprime;8) - @Col(vImprime;12)[C16]

  vImprime = 'Caso: 3'[C18]

  Lista vImprime
  Saltalin
FinFunc


// *****************************************************************************
//  fAdminPAQvsContPAQ
//
//	Lee las pólizas de ContPAQ que fueron generadas desde AdminPAQ en un 
//  rango de fechas y busca diferencias con las pólizas de AdminPAQ.
//
//  Parámetros 
//
//  Salidas
//
//  Historial:
//  18/Feb/2002 N.D. 134 Se cambio el valor SistOrig de AdminPAQ de 5 a 7.
//              Se hace la búsqueda de los Movimientos tomando en cuenta la
//              longitud del campo TipoPol.
// *****************************************************************************
DefFunc fAdminPAQvsContPAQ()
Local lFecha, lSistOrig, lLlave

  tPolizaContPAQ.Usaindice['IORIGFECHA'] // Sistorig+Fecha+Tipopol+Numpol
  lSistOrig = ' 7' // AdminPAQ
  tPolizaContPAQ.Busca[' 1'] // Sistema origen: ContPAQ
  Si !tPolizaContPAQ->Encontro // No se pudo activar?
    tPolizaContPAQ.Usaindice['IFECHA'] // Fecha+Tipopol+Numpol
    lSistOrig = ''
  FinSi

  tPolizaAdminPAQ.Usaindice['iEjePeriodoTipoNumPol'] // Eje+Periodo+Tipopol+NumPol

  // Inicializa la Fecha de inicio del rango de fechas del reporte
  lFecha = pFechaInicial 
  // Recorre todas las fechas en el rango de fechas del reporte
  Mientras lFecha <= pFechaFinal
    lLlave = lSistOrig & (lFecha $ 8)
    Mientras [ tPolizaContPAQ.Busca[lLlave]; tPolizaContPAQ->Encontro; tPolizaContPAQ.Busca Siguiente[@LEN(lLlave)] ]
      // Discrimina la póliza conforme a su tipo
      Si pTipoPolizas != ' '
        Si tPolizaContPAQ(TipoPol) > 5
          Si @Pos(pTipoPolizas;'5') = -1
            Continua
          FinSi
        SiNo
          Si @Pos(pTipoPolizas;@Str(tPolizaContPAQ(TipoPol);0)) = -1
            Continua
          FinSi
        FinSi
      FinSi
      // Si el sistema de origen no es AdminPAQ, continúa con la siguiente
      Si tPolizaContPAQ(SistOrig) != 7
        Continua
      FinSi
      // Busca la póliza AdminPAQ
      tPolizaAdminPAQ.Busca[tPolizaContPAQ(Eje) & ':' & tPolizaContPAQ(Periodo) & ':' & tPolizaContPAQ(TipoPol) & ':' & tPolizaContPAQ(NumPol)]
      Si tPolizaAdminPAQ->Encontro
        Continua
      FinSi

      Si pTipoReporte // Si el reporte es detallado
        fImprimeEncPolContPAQ(tPolizaContPAQ)
        // lee los movimientos de la póliza
        tMovtoContPAQ.Busca[(tPolizaContPAQ(Eje) $ 4) & (tPolizaContPAQ(Periodo) $ 2) & (tPolizaContPAQ(TipoPol) $ vLongTipoMov) & (tPolizaContPAQ(NumPol) $ 8)]
        Mientras tMovtoContPAQ->Encontro
          // Imprime el movimiento
          fImprimeMovtoContPAQ(tMovtoContPAQ; 0)
          tMovtoContPAQ.Busca Siguiente[14 + vLongTipoMov]
        FinMientras
        // Totales de la póliza, imprime caso 3
        fImprimeTotalesPolContPAQ(tPolizaContPAQ)
      Sino      
        // Imprime la póliza
        fImprimePolizaContPAQ(tPolizaContPAQ)
      FinSi
    FinMientras

    // Incrementa un día a la fecha
    lFecha = fFechaSiguiente(lFecha)
  FinMientras
FinFunc


// *****************************************************************************
//  fContPAQvsAdminPAQ
//
//	Lee las pólizas de AdminPAQ en un rango de fechas y busca diferencias con
//  las pólizas de ContPAQ.
//
//  Parámetros 
//
//  Salidas
//
//  Historial:
//  18/Feb/2002 N.D. 134 Se hace la búsqueda de los Movimientos tomando en
//              cuenta la longitud del campo TipoPol.
//  21/Ene/2003 N.D.1726 Se agregó el filtro para brincarse la prepólizas con
//                       estado de error. (DRdA)
// *****************************************************************************
DefFunc fContPAQvsAdminPAQ()
Local lObservaciones, lFecha, lDiferencias, lEncabezadoPoliza
Local lCargoContPAQ, lAbonoContPAQ, lTotalCargosContPAQ, lTotalAbonosContPAQ, lTipoMov

  // Inicializa la Fecha de inicio del rango de fechas del reporte
  lFecha = pFechaInicial 
  // Recorre todas las fechas en el rango de fechas del reporte
  Mientras lFecha <= pFechaFinal
    Mientras [ tPolizaAdminPAQ.Busca[lFecha]; tPolizaAdminPAQ->Encontro; tPolizaAdminPAQ.Busca Siguiente[1] ]
      // Discrimina la póliza conforme a su tipo
      Si pTipoPolizas != ' '
        Si tPolizaAdminPAQ(TipoPol) > 5
          Si @Pos(pTipoPolizas;'5') = -1
            Continua
          FinSi
        SiNo
          Si @Pos(pTipoPolizas;@Str(tPolizaAdminPAQ(TipoPol);0)) = -1
            Continua
          FinSi
        FinSi
      FinSi

      Si tPolizaAdminPAQ(cEstadoContable) = 0
        Continua
      FinSi

      // Inicializa el arreglo de observaciones
      lObservaciones = 0[C0,C2..C19]
      lObservaciones = 1[C1] // Asume caso 1
      // No se ha impreso el encabezado de la póliza
      lEncabezadoPoliza = 0
      // N.D.0643 Se cambió "tPolizaAdminPAQ(TipoPol) $ 1" por "tPolizaAdminPAQ(TipoPol) $ vLongTipoMov" por que
      // el tamaño del campo puede cambiar en le empresa de ContPAQ. (DRdA)
      // Busca la póliza ContPAQ
      tPolizaContPAQ.Busca[(tPolizaAdminPAQ(Eje) $ 4) & (tPolizaAdminPAQ(Periodo) $ 2) & (tPolizaAdminPAQ(TipoPol) $ vLongTipoMov) & (tPolizaAdminPAQ(NumPol) $ 8)]
      Si !tPolizaContPAQ->Encontro
        // Caso 2 y 9
        fCaso29(tPolizaAdminPAQ; &lObservaciones)
        // El total de cargos y abonos de la póliza es cero
        lTotalCargosContPAQ = 0.0
        lTotalAbonosContPAQ = 0.0
      Sino
        Si pImprimirPolizas // Imprimir pólizas con diferencias?
          // Busca diferencias en las pólizas para discriminar
          lDiferencias = fBuscaDiferenciasPol(tPolizaAdminPAQ; tPolizaContPAQ)
          // Si no encontró diferencias, continua con la siguiente póliza
          Si !lDiferencias
            Continua
          FinSi
        FinSi
        // Toma el total de cargos y abonos de la póliza ContPAQ
        lTotalCargosContPAQ = tPolizaContPAQ(Cargos)
        lTotalAbonosContPAQ = tPolizaContPAQ(Abonos)
      FinSi

      // Lee uno a uno los movimientos de la póliza AdminPAQ
      Mientras [ tMovtoAdminPAQ.Busca[@Str(tPolizaAdminPAQ(cIdPrepoliza);0)]; tMovtoAdminPAQ->Encontro; tMovtoAdminPAQ.Busca Siguiente[1] ]
        // Busca el movimiento correspondiente en ContPAQ
        tMovtoContPAQ.Busca[(tMovtoAdminPAQ(Eje) $ 4) & (tMovtoAdminPAQ(Periodo) $ 2) & (tMovtoAdminPAQ(TipoPol) $ vLongTipoMov) & (tMovtoAdminPAQ(NumPol) $ 8) & (tMovtoAdminPAQ(Movto) $ 4)]
        Si !tMovtoContPAQ->Encontro
          // Caso 7
          fCaso7(&lObservaciones)

          lCargoContPAQ = 0.0
          lAbonoContPAQ = 0.0
          lTipoMov = -1
        Sino
          // Verifica los movimientos de la póliza, casos 4, 5 y 6
          fCaso456(tMovtoAdminPAQ; tMovtoContPAQ; &lObservaciones)
          // Obtiene el importe de cargo o abono
          Si tMovtoContPAQ(TipoMov) = 'F' // Cargo?
            lCargoContPAQ = tMovtoContPAQ(Importe)
            lAbonoContPAQ = 0.0
            lTipoMov = 0
          Sino // abono
            lCargoContPAQ = 0.0
            lAbonoContPAQ = tMovtoContPAQ(Importe)
            lTipoMov = 1
          FinSi
        FinSi

        // Imprime el detalle del movimiento
        Si pTipoReporte // Siempre que el reporte sea detallado
          // Si no se ha impreso el encabezado de la póliza, lo imprime
          Si !lEncabezadoPoliza
            fImprimeEncPolAdminPAQ(tPolizaAdminPAQ)
            lEncabezadoPoliza = 1
          FinSi
          fImprimeMovtoAdminPAQ(tMovtoAdminPAQ; lCargoContPAQ; lAbonoContPAQ; lTipoMov; lObservaciones)
          // limpia el buffer de casos del movimiento
          lObservaciones = 0[C4..C7]
        FinSi
      FinMientras

      Si lEncabezadoPoliza
        // Busca movimientos adicionales en ContPAQ, caso 8
        Si tMovtoContPAQ->Encontro
          tMovtoContPAQ.Busca Siguiente[14 + vLongTipoMov]
        FinSi
        Mientras tMovtoContPAQ->Encontro
          lObservaciones = 0[C1] // enconces no se da el caso 1: pólizas idénticas
          // Imprime el detalle del movimiento
          Si pTipoReporte // Siempre que el reporte sea detallado
            fImprimeMovtoContPAQ(tMovtoContPAQ; 1) // Imprime caso 8
          Sino // Si es concentrado, no tiene caso seguir leyendo movimientos
            lObservaciones = 1[C8]
            FinCiclo
          FinSi
          tMovtoContPAQ.Busca Siguiente[14 + vLongTipoMov]
        FinMientras
      SiNo
        Si pTipoReporte // Siempre que el reporte sea detallado
          fImprimeEncPolAdminPAQ(tPolizaAdminPAQ)
        FinSi
      FinSi

      SI pTipoReporte // Si el reporte es detallado
        // Imprime los totales de la póliza
        fImprimeTotalesPolAdminPAQ(tPolizaAdminPAQ; lTotalCargosContPAQ; lTotalAbonosContPAQ; lObservaciones)
      Sino // Si el reporte es concentrado
        // Imprime la póliza
        fImprimePolizaAdminPAQ(tPolizaAdminPAQ; lTotalCargosContPAQ; lTotalAbonosContPAQ; lObservaciones)
      FinSI
    FinMientras

    // Incrementa un día a la fecha
    lFecha = fFechaSiguiente(lFecha)
  FinMientras
FinFunc


// *****************************************************************************
// Encabezado del reporte

Encab
	Texto '@TC{255,0,0}@S{8}AdminPAQ'
	Hoja '"@TC{0,0,0}@S{8}Hoja: '
	Imprime
	Texto '"@TC{0,0,0}@S{8}Fecha: ' & fFormateaFecha(@Hoy();gIdioma)
  Imprime

	Texto '^@TC{0,0,0}@S{22}' & tEmpresa->Nombre
	Imprime

  Si pTipoReporte // Detallado
  	Texto '^@TC{0,0,0}@S{16}CONCILIACION ADMINPAQ VS CONTPAQ DETALLADA'
  Sino // Concentrado
  	Texto '^@TC{0,0,0}@S{16}CONCILIACION ADMINPAQ VS CONTPAQ'
  FinSi
	Imprime
	Texto '^@TC{0,0,0}@S{16}Del: ' & fFormateaFecha(pFechaInicial;gIdioma) & ' Al: ' & fFormateaFecha(pFechaFinal;gIdioma)
	Imprime 

  Saltalin

	NEGRITAS TRUE
	Texto '@TC{0,0,0}@L{-1}'
  Imprime

  // Modifica la configuración de las columnas
  Si pTipoReporte // Detallado
    // N.D. 4089     Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,3.73,0.00,0.00,0.15,3.73,0.00,0.00,0.15,3.73,0.00,0.00,0.15,1.79,0.15
    Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,3.33,0.00,0.00,0.15,3.33,0.00,0.00,0.15,3.33,0.00,0.00,0.15,1.59,0.15
  Sino // Concentrado
    // N.F. 4089 Columnas 20;1.64,0.15,1.20,0.15,0.90,0.15,3.73,0.00,0.00,0.15,3.73,0.00,0.00,0.15,3.73,0.00,0.00,0.15,1.79,0.15
    Columnas 20;5.15,0.15,1.50,0.15,0.90,0.15,3.33,0.00,0.00,0.15,3.33,0.00,0.00,0.15,3.33,0.00,0.00,0.15,1.59,0.15
  FinSi
  Texto C6;'^AdminPAQ'
  Texto C10;'^ContPAQ'
  Texto C14;'^Diferencias'
  Imprime

  // Regresa las columnas a su configuración original
  Si pTipoReporte // Detallado
    // N.D. 4089 Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15
    Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15
   	Texto C2;'Cuenta'
    Texto C4;'Nombre'
  	Texto C6;'^Cargo'
  	Texto C8;'^Abono'
   	Texto C10;'^Cargo'
 	  Texto C12;'^Abono'
   	Texto C14;'^Cargo'
	  Texto C16;'^Abono'
  	Texto C18;'Obs.'
  Sino // Concentrado
    // N.D. 4089 Columnas 20;1.64,0.15,1.20,0.15,0.90,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15
    Columnas 20;5.15,0.15,1.50,0.15,0.90,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15
    //N.D. 4089 Solo aplica para empresas que usen CFDs
    Si tParametros(cEsCFD)=1
  	Texto C0;'Fecha y Hora'
    SiNo
  	Texto C0;'Fecha'
    FinSi
  	Texto C2;'Tipo'
    Texto C4;'No.'
  	Texto C6;'^Cargo'
  	Texto C8;'^Abono'
  	Texto C10;'^Cargo'
  	Texto C12;'^Abono'
  	Texto C14;'^Cargo'
  	Texto C16;'^Abono'
  	Texto C18;'Obs.'
  FinSi
 	Imprime

	Texto '@TC{0,0,0}@L{-1}'
	Imprime 1

	NEGRITAS FALSE
	Color @RGB(0;0;0)
	Altura 9
FinEncab


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

// Verifica las diferencias de ContPAQ vs AdminPAQ
Columnas 20;16,0
NEGRITAS TRUE
vTemp = ' '[C0..C19]
vTemp = '* * * * *  Diferencias en ContPAQ respecto a AdminPAQ:'[C0]
Lista vTemp
NEGRITAS FALSE
Saltalin
Si pTipoReporte // Detallado
  // N.D. 4089 Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15
  Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15
Sino // Concentrado
  // N.D. 4089 Columnas 20;1.64,0.15,1.20,0.15,0.90,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15
  Columnas 20;5.15,0.15,1.50,0.15,0.90,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15
FinSi
fContPAQvsAdminPAQ()

// Verifica las diferencias de AdminPAQ vs ContPAQ
Saltalin
Columnas 20;16,0
NEGRITAS TRUE
vTemp = ' '[C0..C19]
vTemp = '* * * * *  Diferencias en AdminPAQ respecto a ContPAQ:'[C0]
Lista vTemp
NEGRITAS FALSE
Saltalin
Si pTipoReporte // Detallado
  // N.D. 4089 Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15
    Columnas 20;0.45,0.15,1.79,0.15,2.99,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15
Sino // Concentrado
  // N.D. 4089 Columnas 20;1.64,0.15,1.20,0.15,0.90,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15,1.79,0.15
    Columnas 20;5.15,0.15,1.50,0.15,0.90,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15,1.59,0.15
FinSi

fAdminPAQvsContPAQ()

// Imprime el texto que corresponde a los nueve casos de diferencias
fImprimeTextosCasos()
