// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// Reporte:            Lista de Precios de Venta (Hasta 5 Precios)
//                     Lista de Precios de Venta (6 Precios o más)
//                     Lista de Precios de Venta por Código
//
// Sistema:     ADMINPAQ  Versión v1.0 Windows
//
// Descripcion: 
// 
// Consideraciones :
// Creación  :  Luis Palau Castañeda.  12/septiembre/2001
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// Historia de modificaciones
//  Fecha      Nombre   IDLotus                     Descripcion
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

// *********************************************************************************************************************
// Funciones de librería
// *********************************************************************************************************************
Incluye LibAdminPaq.rpt


// *********************************************************************************************************************
//  Parámetros del reporte:
// *********************************************************************************************************************
Parametro pProductoInicial = '(Ninguno)'
Parametro pProductoFinal = 'z'
Parametro pEstadoProducto = 0           // 0 = Todos     1 =  Activos     2 = Inactivos
Parametro pTipoProducto   = 0           // 0 = Todos  1=Productos 3=Servicios 2=Paquetes
Parametro pListasPrecios  = '1,2,3,4,5,6,7,8,9,10'  // Listas de precios a imprimir
Parametro pAdicionarIva   = 0          // 0 = No adicionar IVA, 1 = Adicionar IVA
Parametro pFechaVigencia  = '20020911' // Fecha de vigencia, sólo aparece en el encabezado
Parametro pMonedas        = 0        // 0 = Moneda de cada Lista de Precios, 1 = Seleccionada.
Parametro pIdMoneda       = 0        // >0 Id Moneda seleccionada 
Parametro pIdClase1       = 0
Parametro pIdClase2       = 0
Parametro pIdClase3       = 0
Parametro pIdClase4       = 0 
Parametro pIdClase5       = 0   
Parametro pIdClase6       = 0
Parametro pTipoReporte    = 1  // 1  Lista de Precios de Venta (Hasta 5 Precios)
                               // 2  Lista de Precios de Venta (6 Precios o más)
                               // 3  Lista de Precios de Venta por Código


// *********************************************************************************************************************
//  Tablas a utilizar e Indices de búsqueda por omisión
// *********************************************************************************************************************
UsaEmpresa tEmpresa;'AdminpaqW'

 // Parametros de la empresa
UsaTabla tParametros = tEmpresa['mgw10000']

//Productos
UsaTabla tProductos = tEmpresa['mgw10005']
tProductos.Usaindice['iCodigoTipo']

//Monedas
UsaTabla tMonedas = tEmpresa['mgw10034']
tMonedas.Usaindice['']                     // Usa el índice primario, por cIdMoneda

//Tipos de cambio. 
//Índice: cIdMoneda + cFecha.
Usatabla tTiposCambio = tEmpresa['mgw10035']
tTiposCambio.Usaindice['iMonedaFecha']

//unidades
UsaTabla tUnidadesPM = tEmpresa['mgw10026']
tUnidadesPM.Usaindice['']

//Clasificaciones
UsaTabla tClasificaciones = tEmpresa['mgw10020']
tClasificaciones.Usaindice['']

tParametros.Busca Primero   


// *********************************************************************************************************************
// Definiciones y asumidos globales para el reporte
// *********************************************************************************************************************
Columnas 21;2.25,0.15,5.7,0.15,2.24,0.15,2.24,0.15,2.24,0.15,2.24,0.15,2.24,0.2,0

gRenglon = '' 
gRenglon2 = '' 
gProductosImpresos = 0

// Variables globales que contienen los tipos de cambio de la moneda del reporte y de cada lista de precios. 
//  Se buscan en este punto para no hacer búsquedas al imprimir cada precio.
// Si se imprimen los precios en la moneda de cada lista de precios
Si pMonedas = 0
  gNombreMoneda = ''
  gDecimales = 2
  gTipoCambioReporte = 1.0
  gTipoCambioLista1  = 1.0
  gTipoCambioLista2  = 1.0
  gTipoCambioLista3  = 1.0
  gTipoCambioLista4  = 1.0
  gTipoCambioLista5  = 1.0
  gTipoCambioLista6  = 1.0
  gTipoCambioLista7  = 1.0
  gTipoCambioLista8  = 1.0
  gTipoCambioLista9  = 1.0
  gTipoCambioLista10 = 1.0
Sino
  // Busca el nombre y el tipo de cambio de la moneda del reporte
  tMonedas.Busca[@Str(pIdMoneda;0)]
  gNombreMoneda = tMonedas(cNombreMoneda)
  gDecimales = tMonedas(cDecimalesMoneda)
  gTipoCambioReporte = ( pIdMoneda = 1 ? 1.0 : fTipoCambio(pFechaVigencia; pIdMoneda; tTiposCambio) )[C0]
  // Buscar los tipos de cambio de las monedas de cada lista de precios
  gTipoCambioLista1  = ( tParametros(cIdMonedaLista1) = 1 ? 1.0 : fTipoCambio(pFechaVigencia; tParametros(cIdMonedaLista1); tTiposCambio) )[C0]
  gTipoCambioLista2  = ( tParametros(cIdMonedaLista2) = 1 ? 1.0 : fTipoCambio(pFechaVigencia; tParametros(cIdMonedaLista2); tTiposCambio) )[C0]
  gTipoCambioLista3  = ( tParametros(cIdMonedaLista3) = 1 ? 1.0 : fTipoCambio(pFechaVigencia; tParametros(cIdMonedaLista3); tTiposCambio) )[C0]
  gTipoCambioLista4  = ( tParametros(cIdMonedaLista4) = 1 ? 1.0 : fTipoCambio(pFechaVigencia; tParametros(cIdMonedaLista4); tTiposCambio) )[C0]
  gTipoCambioLista5  = ( tParametros(cIdMonedaLista5) = 1 ? 1.0 : fTipoCambio(pFechaVigencia; tParametros(cIdMonedaLista5); tTiposCambio) )[C0]
  gTipoCambioLista6  = ( tParametros(cIdMonedaLista6) = 1 ? 1.0 : fTipoCambio(pFechaVigencia; tParametros(cIdMonedaLista6); tTiposCambio) )[C0]
  gTipoCambioLista7  = ( tParametros(cIdMonedaLista7) = 1 ? 1.0 : fTipoCambio(pFechaVigencia; tParametros(cIdMonedaLista7); tTiposCambio) )[C0]
  gTipoCambioLista8  = ( tParametros(cIdMonedaLista8) = 1 ? 1.0 : fTipoCambio(pFechaVigencia; tParametros(cIdMonedaLista8); tTiposCambio) )[C0]
  gTipoCambioLista9  = ( tParametros(cIdMonedaLista9) = 1 ? 1.0 : fTipoCambio(pFechaVigencia; tParametros(cIdMonedaLista9); tTiposCambio) )[C0]
  gTipoCambioLista10 = ( tParametros(cIdMonedaLista10)= 1 ? 1.0 : fTipoCambio(pFechaVigencia; tParametros(cIdMonedaLista10); tTiposCambio) )[C0]
FinSi

kMeses = 'Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic'[C0]

UsaLetra 'Arial'
Altura 9 
[c2,c4,c6,c8,c10,c12,C14,c16,c18,c20].Decimales gDecimales


// *********************************************************************************************************************
//  Funciones del reporte:
// *********************************************************************************************************************

// *********************************************************************************************************************
// Descripcion: Esta función recibe una fecha con formato ddmmaaaa y la convierte a formato dd/mmm/aaaa
// Entradas :  Fecha : contiene la fecha AAAAMMDD
// Salida :    regresa una cadena con la fecha en formato DD/MMM/AAAA
// *********************************************************************************************************************
DefFunc fEditaFecha(aFecha)
Local lMes
Local lRegreso

  lMes = @INT(@SubStr(aFecha;4;2))
  lRegreso[0] = @SubStr(aFecha;6;2) & '/' & @Escoge(kMeses;lMes-1) & '/' & @SubStr(aFecha;0;4)
  Retorna lRegreso
FinFunc


// *********************************************************************************************************************
// Descripcion: Esta función recibe el id de la moneda
// Entradas : 
// Salida :   
// *********************************************************************************************************************
DefFunc fTraeMoneda(aIdMoneda; aColumna)
Local lregreso

  tMonedas.Busca[@Str(aIdMoneda;0)]
  Si tMonedas->Encontro
    lregreso = tMonedas(cSingular)
    Escoge aColumna
      Caso 2
        [c2].Decimales tMonedas(cDecimalesMoneda)
      FinCaso
      Caso 4
        [c4].Decimales tMonedas(cDecimalesMoneda)
      FinCaso
      Caso 6
        [c6].Decimales tMonedas(cDecimalesMoneda)
      FinCaso
      Caso 8
        [c8].Decimales tMonedas(cDecimalesMoneda)
      FinCaso
      Caso 10
        [c10].Decimales tMonedas(cDecimalesMoneda)
      FinCaso
      Caso 12
        [c12].Decimales tMonedas(cDecimalesMoneda)
      FinCaso
      Caso 14
        [c14].Decimales tMonedas(cDecimalesMoneda)
      FinCaso
      Caso 16
        [c16].Decimales tMonedas(cDecimalesMoneda)
      FinCaso
      Caso 18
        [c18].Decimales tMonedas(cDecimalesMoneda)
      FinCaso
      Caso 20
        [c20].Decimales tMonedas(cDecimalesMoneda)
      FinCaso
    FinEscoge
  finsi
  Retorna lRegreso
FinFunc


// *********************************************************************************************************************
// Descripcion: Regresa el precio con o sin IVA dependiendo si el reporte imprime precios incluyendo IVA y si los precios 
//              ya lo incluyen. También convierte el precio a la moneda del reporte.
// Entradas :   aPrecio - Precio del producto 
//              aIdMonedaLista - Moneda del Precio
// Salida :     Precio con o sin IVA en la moneda del reporte
// *********************************************************************************************************************
DefFunc fConviertePrecioIVA(aPrecio; aIdMonedaLista; aTipoCambioListaPrecios)
Local lPrecioRetorno

  // Si no se imprimien precios con IVA y el precio no lo incluye
  Si !pAdicionarIva Y !tParametros(cPreciosConIVA) 
    lPrecioRetorno = aPrecio[C0]
  FinSi
  // Si no se imprimien precios con IVA y el precio ya lo incluye
  Si !pAdicionarIva Y tParametros(cPreciosConIVA) 
    Escoge tParametros(cNumImpuestoIVA) 
      Caso 1
        lPrecioRetorno = aPrecio / (1 + tProductos(cImpuesto1)/100)[C0]
      FinCaso
      Caso 2
        lPrecioRetorno = aPrecio / (1 + tProductos(cImpuesto2)/100)[C0]
      FinCaso
      Caso 3
        lPrecioRetorno = aPrecio / (1 + tProductos(cImpuesto3)/100)[C0]
      FinCaso
    Finescoge
  FinSi
  // Si se imprimien precios con IVA y el precio no lo incluye
  Si pAdicionarIva Y !tParametros(cPreciosConIVA) 
    Escoge tParametros(cNumImpuestoIVA) 
      Caso 1
        lPrecioRetorno = aPrecio * (1 + tProductos(cImpuesto1)/100)[C0]
      FinCaso
      Caso 2
        lPrecioRetorno = aPrecio * (1 + tProductos(cImpuesto2)/100)[C0]
      FinCaso
      Caso 3
        lPrecioRetorno = aPrecio * (1 + tProductos(cImpuesto3)/100)[C0]
      FinCaso
    Finescoge
  FinSi
  // Si se imprimien precios con IVA y el precio ya lo incluye
  Si pAdicionarIva Y tParametros(cPreciosConIVA) 
    lPrecioRetorno = aPrecio[C0]
  FinSi
  
  // Si el reporte se imprime en la moneda de cada lista de precios convertir el precio a la moneda del reporte
  Si pMonedas != 0
    // Si la moneda de la lista de precios es diferente que la del reporte
    Si aIdMonedaLista != pIdMoneda
      lPrecioRetorno = (lPrecioRetorno * aTipoCambioListaPrecios / gTipoCambioReporte)[C0]
    FinSi  
  FinSi  

  Retorna lPrecioRetorno
FinFunc


// *********************************************************************************************************************
// Encabezado del reporte
// *********************************************************************************************************************
Encab
  Texto '@TC{255,0,0}@S{8}AdminPAQ' 
  Hoja '"@TC{0,0,0}@S{8}Página: '
  Imprime
  Texto '^@TC{0,0,0}@S{22}' & tEmpresa->Nombre
  Texto '"@TC{0,0,0}@S{8}Fecha: ' & fEditaFecha(@Hoy())
  Imprime
  // Si el reporte se imprime en una sóla moneda
  Si pTipoReporte = 1
    Texto '^@TC{0,0,0}@S{16}' & ' Lista de Precios de Venta por Nombre (Hasta 5 Precios)'
  Sino
    Si pTipoReporte = 2
      Texto '^@TC{0,0,0}@S{16}' & ' Lista de Precios de Venta por Nombre (6 Precios o más)'
    Sino 
      Texto '^@TC{0,0,0}@S{16}' & ' Lista de Precios de Venta por Código'
    Finsi
  Finsi
  Imprime
  gFechaVigencia  = fFormateaFecha(pFechaVigencia  ;0)
  Texto '^@TC{0,0,0}@S{16}'& 'Vigencia: ' & gFechaVigencia
  Imprime

  // Agregar la impresión de la moneda del reporte y la leyenda si los precios incluyen IVA o no
  Si pMonedas != 0  
    Texto '@TC{0,0,0}@S{8}Moneda: ' & gNombreMoneda
  FinSi
  Si pAdicionarIva
    Texto '^@TC{0,0,0}@S{10}'& 'Los Producto Grabados Incluyen IVA'
  Sino
    Texto '^@TC{0,0,0}@S{10}'& 'Los Producto Grabados No Incluyen IVA'
  FinSi
  Texto '"@TC{0,0,0}@S{8}Hora: ' & @Hora()
  Imprime

  // ===== Se Revisan las clasificaciones, para recuperarlas e imprimirlas en el encabezado
  fRevisaClases(tClasificaciones)
  // ===== Fin de la revision de clasificaciones

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

  // Si es Lista de Precios de Venta por Nombre (Hasta 5 Precios)
  Si pTiporeporte = 1
    //Código         Nombre(Producto)                           Precio 1  Precio 2  Precio 3  Precio 4  Precio 5  
    Columnas 21;2.25,0.15,5.7,0.15,2.24,0.15,2.24,0.15,2.24,0.15,2.24,0.15,2.24,0.2,0
    Texto ''
    gRenglon[0] = 'Código'
    Si pTipoProducto=1
      gRenglon[2] = 'Nombre(Prod)'
    Sino
      Si pTipoProducto=2
        gRenglon[2] = 'Nombre(Paq)'
      Sino
        Si pTipoProducto=3
          gRenglon[2] = 'Nombre(Serv)'
        Sino
          gRenglon[2] = 'Nombre(Prod,Serv,Paq)'
        Finsi
      Finsi
    Finsi
    gColActual = 4
    gNumeroLista = 0
  Finsi

  // Si es Lista de Precios de Venta por Nombre (6 Precios o más)
  Si pTiporeporte = 2
    //Código         Nombre(Producto)               
    //               Precio 1  Precio 2  Precio 3  Precio 4  Precio 5  Precio 6  Precio 7  Precio 8  Precio 9  Precio 10
    Columnas 21;2.25,0.15,5.7,12.15,0
    Texto ''
    Texto C0;'Código'
    Si pTipoProducto=1
      Texto C2;'Nombre(Prod)'
    Sino
      Si pTipoProducto=2
        Texto C2;'Nombre(Paq)'
      Sino
        Si pTipoProducto=3
          Texto C2;'Nombre(Serv)'
        Sino
          Texto C2;'Nombre(Prod,Serv,Paq)'
        Finsi
      Finsi
    Finsi
    Imprime   
    Texto ''
    Columnas 21;2.25,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65
    gColActual = 2
    gNumeroLista = 0
  Finsi  // Si es Lista de Precios de Venta por Nombre (6 Precios o más)

  // Si es Lista de Precios de Venta por Código
  Si pTiporeporte = 3
    // Código             Precio 1  Precio 2  Precio 3  Precio 4  Precio 5  Precio 6  Precio 7  Precio 8  Precio 9  Precio 10
    Columnas 21;2.25,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65
    Si pTipoProducto=1
      gRenglon[0] = 'Código(Prod)'
    Sino
      Si pTipoProducto=2
        gRenglon[0] = 'Código(Paq)'
      Sino
        Si pTipoProducto=3
          gRenglon[0] = 'Código(Serv)'
        Sino
          gRenglon[0] = 'Código'
        Finsi
      Finsi
    Finsi
    gColActual = 2
    gNumeroLista = 0
  Finsi  // Si es Lista de Precios de Venta por Código

  Si pTiporeporte = 1
    [c4,c6,c8,c10,c12].Decimales gDecimales
  Finsi
  Si pTiporeporte = 2
    [c2,c4,c6,c8,c10,c12,C14,c16,c18,c20].Decimales gDecimales
  Finsi
  Si pTiporeporte = 3
    [c2,c4,c6,c8,c10,c12,C14,c16,c18,c20].Decimales gDecimales
  Finsi

  // Imprimir sólo los nombres de las listas de precios seleccionadas
  gListaActual = @Escoge(pListasPrecios; gNumeroLista) 
  // Mientras hay listas de precios a imprimir
  Mientras gListaActual != ''  
    Si gListaActual = '1'  // si se imprime la lista de precios 1
      gRenglon[gColActual] = tParametros(cNombreLista1)
      Si pMonedas = 0  
        gRenglon2[gColActual] = fTraeMoneda(tparametros(cIdMonedaLista1); gColActual)
      FinSi
    FinSi
    Si gListaActual = '2'  // si se imprime la lista de precios 2
      gRenglon[gColActual] = tParametros(cNombreLista2)
      Si pMonedas = 0  
        gRenglon2[gColActual] = fTraeMoneda(tparametros(cIdMonedaLista2); gColActual)
      FinSi
    FinSi
    Si gListaActual = '3'  // si se imprime la lista de precios 3
      gRenglon[gColActual] = tParametros(cNombreLista3)
      Si pMonedas = 0  
        gRenglon2[gColActual] = fTraeMoneda(tparametros(cIdMonedaLista3); gColActual)
      FinSi
    FinSi
    Si gListaActual = '4'  // si se imprime la lista de precios 4
      gRenglon[gColActual] = tParametros(cNombreLista4)
      Si pMonedas = 0  
        gRenglon2[gColActual] = fTraeMoneda(tparametros(cIdMonedaLista4); gColActual)
      FinSi
    FinSi
    Si gListaActual = '5'  // si se imprime la lista de precios 5
      gRenglon[gColActual] = tParametros(cNombreLista5)
      Si pMonedas = 0  
        gRenglon2[gColActual] = fTraeMoneda(tparametros(cIdMonedaLista5); gColActual)
      FinSi
    FinSi
    Si gListaActual = '6'  // si se imprime la lista de precios 6
      gRenglon[gColActual] = tParametros(cNombreLista6)
      Si pMonedas = 0  
        gRenglon2[gColActual] = fTraeMoneda(tparametros(cIdMonedaLista6); gColActual)
      FinSi
    FinSi
    Si gListaActual = '7'  // si se imprime la lista de precios 7
      gRenglon[gColActual] = tParametros(cNombreLista7)
      Si pMonedas = 0  
        gRenglon2[gColActual] = fTraeMoneda(tparametros(cIdMonedaLista7); gColActual)
      FinSi
    FinSi
    Si gListaActual = '8'  // si se imprime la lista de precios 8
      gRenglon[gColActual] = tParametros(cNombreLista8)
      Si pMonedas = 0  
        gRenglon2[gColActual] = fTraeMoneda(tparametros(cIdMonedaLista8); gColActual)
      FinSi
    FinSi
    Si gListaActual = '9'  // si se imprime la lista de precios 9
      gRenglon[gColActual] = tParametros(cNombreLista9)
      Si pMonedas = 0  
        gRenglon2[gColActual] = fTraeMoneda(tparametros(cIdMonedaLista9); gColActual)
      FinSi
    FinSi
    Si gListaActual = '10'  // si se imprime la lista de precios 10
      gRenglon[gColActual] = tParametros(cNombreLista10)
      Si pMonedas = 0  
        gRenglon2[gColActual] = fTraeMoneda(tparametros(cIdMonedaLista10); gColActual)
      FinSi
    FinSi
    gColActual = gColActual + 2
    gNumeroLista = gNumeroLista + 1
    gListaActual = @Escoge(pListasPrecios; gNumeroLista) 
  FinMientras

  imprime gRenglon
  gRenglon = ''
  Si pMonedas = 0  
    imprime gRenglon2
    gRenglon2 = ''
  FinSi

  Texto '@TC{0,0,0}@L{-1}'
  Imprime 
  NEGRITAS FALSE
  Altura 10
FinEncab


// *********************************************************************************************************************
// Cuerpo del reporte
// *********************************************************************************************************************
gRenglon = '' 

Si pProductoInicial = ' '
  tProductos.Busca primero
SiNo
  tProductos.Busca [@str(pProductoInicial;0) & ':']
FinSi

Si @col(pTipoReporte;0) != 3
  tProductos.Usaindice['INombreTipo']
  tProductos.Busca primero
FinSi
gProductosImpresos = 0

Mientras tProductos->Encontro
  // Se estaba comparando contra un valor numérico en vez de una cadena
  Si pProductoFinal != ' '
    Si tProductos(cCodigoProducto) > @str(pProductoFinal;0)
      tProductos.Saltareg[1]
      Continua
    Finsi 
  Finsi
  Si pProductoInicial != ' '
    Si tProductos(cCodigoProducto) < @str(pProductoInicial;0)
      tProductos.Saltareg[1]
      Continua
    Finsi 
  Finsi
  Si tProductos(cIdProducto)= 0
    tProductos.Saltareg[1]
    Continua
  Finsi

  Si pTipoProducto !=0
    Si tProductos(cTipoProducto) != @col(pTipoProducto;0)
      tProductos.Saltareg[1]
      Continua
    Finsi
  Finsi

  Si pEstadoProducto = 1  // 0 = Todos     1 = Productos Activos     2 = Productos Inactivos
    Si tProductos(cStatusProducto)!= 1
      tProductos.Saltareg[1]
      Continua
    Finsi
  Finsi
  Si pEstadoProducto = 2  // 0 = Todos     1 = Productos Activos     2 = Productos Inactivos
    Si tProductos(cStatusProducto)!= 0
      tProductos.Saltareg[1]
      Continua
    Finsi
  Finsi

  // Se Revisan las CLASIFICACIONES, solo en el caso de haber seleccionado al menos una 
  Si gNumDeClases > 0
    lQueTipo = 2
    Si !fMiembroDeUnaClase( tProductos   ;gNumDeClases;gListIdDeClases;lQueTipo)
       // Se salta el producto actual, por no pertenecer a alguna de las clasificaciones
       tProductos.Saltareg[1]
       Continua
    Finsi
  Finsi

  Si pTiporeporte = 1
    //Código         Nombre(Producto)                           Precio 1  Precio 2  Precio 3  Precio 4  Precio 5  
    Columnas 21;2.25,0.15,5.7,0.15,2.24,0.15,2.24,0.15,2.24,0.15,2.24,0.15,2.24,0.2,0
    //[c4,c6,c8,c10,c12].Decimales gDecimales
    gRenglon = fMascarilla(tProductos(cCodigoProducto);tParametros(cMascarillaProducto))[c0]
    gRenglon = tProductos(cNombreProducto)[c2]
    gColActual = 4
    gNumeroLista = 0
  Finsi

  Si pTiporeporte = 2
    //Código         Nombre(Producto)               
    //               Precio 1  Precio 2  Precio 3  Precio 4  Precio 5  Precio 6  Precio 7  Precio 8  Precio 9  Precio 10
    Columnas 21;2.25,0.15,5.7,12.15,0
    gRenglon = fMascarilla(tProductos(cCodigoProducto);tParametros(cMascarillaProducto))[c0]
    gRenglon = tProductos(cNombreProducto)[c2]
    imprime gRenglon
    gRenglon = ''
    Columnas 21;2.25,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65
    //[c2,c4,c6,c8,c10,c12,C14,c16,c18,c20].Decimales gDecimales
    gColActual = 2
    gNumeroLista = 0
  Finsi

  Si pTiporeporte = 3
    // Código             Precio 1  Precio 2  Precio 3  Precio 4  Precio 5  Precio 6  Precio 7  Precio 8  Precio 9  Precio 10
    Columnas 21;2.25,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65,0.15,1.65
    //[c2,c4,c6,c8,c10,c12,C14,c16,c18,c20].Decimales gDecimales
    gRenglon = fMascarilla(tProductos(cCodigoProducto);tParametros(cMascarillaProducto))[c0]
    gColActual = 2
    gNumeroLista = 0
  Finsi

  // Imprimir sólo las listas de precios seleccionadas
  gListaActual = @Escoge(pListasPrecios; gNumeroLista) 
  // Mientras hay listas de precios a imprimir
  Mientras gListaActual != ''  
    Si gListaActual = '1'  // si se imprime la lista de precios 1
      gRenglon[gColActual] = fConviertePrecioIVA( tProductos(cPrecio1); tParametros(cIdMonedaLista1); gTipoCambioLista1 )
    FinSi
    Si gListaActual = '2'  // si se imprime la lista de precios 2
      gRenglon[gColActual] = fConviertePrecioIVA( tProductos(cPrecio2); tParametros(cIdMonedaLista2); gTipoCambioLista2 )
    FinSi
    Si gListaActual = '3'  // si se imprime la lista de precios 3
      gRenglon[gColActual] = fConviertePrecioIVA( tProductos(cPrecio3); tParametros(cIdMonedaLista3); gTipoCambioLista3 )
    FinSi
    Si gListaActual = '4'  // si se imprime la lista de precios 1
      gRenglon[gColActual] = fConviertePrecioIVA( tProductos(cPrecio4); tParametros(cIdMonedaLista4); gTipoCambioLista4 )
    FinSi
    Si gListaActual = '5'  // si se imprime la lista de precios 1
      gRenglon[gColActual] = fConviertePrecioIVA( tProductos(cPrecio5); tParametros(cIdMonedaLista5); gTipoCambioLista5 )
    FinSi
    Si gListaActual = '6'  // si se imprime la lista de precios 1
      gRenglon[gColActual] = fConviertePrecioIVA( tProductos(cPrecio6); tParametros(cIdMonedaLista6); gTipoCambioLista6 )
    FinSi
    Si gListaActual = '7'  // si se imprime la lista de precios 1
      gRenglon[gColActual] = fConviertePrecioIVA( tProductos(cPrecio7); tParametros(cIdMonedaLista7); gTipoCambioLista7 )
    FinSi
    Si gListaActual = '8'  // si se imprime la lista de precios 1
      gRenglon[gColActual] = fConviertePrecioIVA( tProductos(cPrecio8); tParametros(cIdMonedaLista8); gTipoCambioLista8 )
    FinSi
    Si gListaActual = '9'  // si se imprime la lista de precios 1
      gRenglon[gColActual] = fConviertePrecioIVA( tProductos(cPrecio9); tParametros(cIdMonedaLista9); gTipoCambioLista9 )
    FinSi
    Si gListaActual = '10'  // si se imprime la lista de precios 1
      gRenglon[gColActual] = fConviertePrecioIVA( tProductos(cPrecio10); tParametros(cIdMonedaLista10); gTipoCambioLista10 )
    FinSi
    gColActual = gColActual + 2
    gNumeroLista = gNumeroLista + 1
    gListaActual = @Escoge(pListasPrecios; gNumeroLista) 
  FinMientras
  imprime gRenglon
  gRenglon = ''
  // Aumentar el contador de productos impresos
  gProductosImpresos = gProductosImpresos + 1

  tProductos.Saltareg[1]
FinMientras

columnas 21;20.25,0
saltalin
Si pTipoProducto=1
  Lista 'Se imprimieron ' & gProductosImpresos & ' Productos',''
Sino
  Si pTipoProducto=2
    Lista 'Se imprimieron ' & gProductosImpresos & ' Paquetes',''
  Sino
    Si pTipoProducto=3
      Lista 'Se imprimieron ' & gProductosImpresos & ' Servicios',''
    Sino
      Lista 'Se imprimieron ' & gProductosImpresos & ' Productos, Paquetes o Servicios',''
    FinSi
  FinSi
FinSi


