// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // Reporte: Reporte de Devoluciones sobre Venta por Cliente (DevClien) // Reporte de Devoluciones sobre Compra por Proveedor // Reporte de Devoluciones de Remision por Cliente // Reporte de Devoluciones de Consignación por Proveedor // // Sistema: ADMINPAQ Versión v1.0 Windows // // Descripcion: // // Consideraciones : // Creación : Luis Palau Castañeda. 15/Agosto/2001 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // 18/05/2007 JAAM N.C.147 Esquema de adicion de unidades de compra y venta // 16/06/2008 IYPZ N.D.4408 Los totales por cliente y global se imprimen en las columnas: 4,8,10,14 // Se modifica: // - fRenglon // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ************************************************************************************************* // INCLUSION DE ARCHIVOS // ************************************************************************************************* Incluye LibAdminPaq.rpt // ************************************************************************************************* // INICIO PARAMETROS // ************************************************************************************************* Parametro pFechaIni = '20050401' Parametro pFechaFin = '20050430' Parametro pClienteInicial = ' ' Parametro pClienteFinal = 'z' Parametro pProductoInicial= ' ' Parametro pProductoFinal = 'z' Parametro pUnidad = 0 //0 = Unidad Base· 1 = Unidad No Equivalente· 2 = Seleccionar Unidad Parametro pIdUnidad = 1 //base de datos de unidades (id) Parametro pIdMoneda = 1 // 1 = ID moneda Peso mexicano Parametro pTipoReporte = 1 // 1 = Reporte de Devoluciones sobre Venta por Cliente // 2 = Reporte de Devoluciones sobre Compra por Proveedor // 3 = Reporte de Devoluciones de Remision por Cliente // 4 = Reporte de Devoluciones de Consignación por Proveedor // ************************************************************************************************* // INICIO APERTURA TABLAS // ************************************************************************************************* UsaEmpresa tEmpresa;'CONTPAQ I Facturacion' // Parametros de la empresa UsaTabla tParametros = tEmpresa['mgw10000'] // Clientes UsaTabla tClientes = tEmpresa['mgw10002'] tClientes.Usaindice['iCodigoTipo'] // Productos UsaTabla tProductos = tEmpresa['mgw10005'] tProductos.Usaindice['cIdProducto'] // Documentos UsaTabla tDocumentos = tEmpresa['mgw10008'] tDocumentos.Usaindice['iClienteProveedorFecha'] // Movimientos UsaTabla tMovimientos = tEmpresa['mgw10010'] Alias 'Movimientos' tMovimientos.Usaindice['iDoctoNumeroMovto'] // tMovimientosOcultos UsaTabla tMovimientosOcultos = tEmpresa['mgw10010'] Alias 'tMovtosOcultos' tMovimientosOcultos.Usaindice['iMovtoOwnerMovto'] //unidades peso y med UsaTabla tUnidadesPM = tEmpresa['mgw10026'] tUnidadesPM.Usaindice[''] //EquivalenciasUnidades peso y med UsaTabla tEquivaleUnidadesPM = tEmpresa['mgw10027'] tEquivaleUnidadesPM.Usaindice[''] //Monedas UsaTabla tMonedas = tEmpresa['mgw10034'] tMonedas.Usaindice[''] // Usa el índice primario, por cIdMoneda // TiposCambio Usatabla tTiposCambio = tEmpresa['mgw10035'] tTiposCambio.Usaindice['iMonedaFecha'] tParametros.Busca Primero // ************************************************************************************************* // DEFINICION DE COLUMNAS // ************************************************************************************************* Columnas 20;2.4,0.15,5.7,0.15,2.4,0.15,0.45,0.15,2.4,0.15,2.4,0.15,0.45,0.15,2.4,0.15,0 UsaLetra 'Arial' Altura 9 [C0,C3].Decimales 0 [C0,C3].Blanco ' ' tMonedas.Busca[@str(pIdMoneda;0)] gDecimales = tMonedas(cDecimalesMoneda) [C4,C8,C10,C14].Coma [C4,C10].Decimales tParametros(cDecimalesUnidades) // Decimales para unidades [C8,C14].Decimales gDecimales [C4,C8,C10,C14].Blanco '0.00' [C0..C7,C9,C11..C13,C15..C19].Blanco ' ' // ************************************************************************************************* // VARIABLES GLOBALES // ************************************************************************************************* gUnidad = pUnidad gIdUnidad = pIdUnidad gIdRenIni = 5 // Inicio de la hoja gIdRenFin = 5 // Fin de la hoja (inicializacion) gDelaFecha = pFechaIni gAlaFecha = pFechaFin gRenglon = '' gTotalCliente = '' gTotalGral = '' gTotalPaquetes = '' gTotalClientePaquetes = '' gNombreMoneda = tMonedas(cNombreMoneda) gEncabezadoCliente = 0 gImpTotalGral = 0 gIdMonedaCte = 1 kMeses = 'Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic'[C0] // ************************************************************************************************* // FUNCIONES <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ************************************************************************************************* // ************************************************************************************************* // 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: imprime los acumulados de un producto // Entradas : // Salida : // Salida : // 16/06/2008 IYPZ N.D.4408 Los totales por cliente y global se imprimen en las columnas: 4,8,10,14. // ************************************************************************************************* DefFunc fRenglon(aIdRenglon) // Código Nom(Prod) Cantidad Neto-Desc Cantidad Neto-Desc // C0 C2 C4 C6 C8 C10 C12 C14 C16 gRenglon[0] = @Col({aIdRenglon};1) gRenglon[2] = @Col({aIdRenglon};2) gRenglon[4] = @Col({aIdRenglon};3) gRenglon[6] = @Col({aIdRenglon};7) gRenglon[8] = @Col({aIdRenglon};4) gRenglon[10] = @Col({aIdRenglon};5) gRenglon[12] = @Col({aIdRenglon};7) gRenglon[14] = @Col({aIdRenglon};6) Imprime gRenglon Si @Col({aIdRenglon};8) = 2 // En caso de paquetes acumular las unidades al total de paquetes gTotalPaquetes = gTotalPaquetes + gRenglon[C4] gTotalPaquetes = gTotalPaquetes + gRenglon[C10] // En caso de paquetes acumular las unidades al total de paquetes gTotalClientePaquetes = gTotalClientePaquetes + gRenglon[C4] gTotalClientePaquetes = gTotalClientePaquetes + gRenglon[C10] // Acumular los restantes importes gTotalCliente = gTotalCliente + gRenglon[C6, C8, C12, C14] gTotalGral = gTotalGral + gRenglon[C6, C8, C12, C14] Sino //N.D. 4408 - IYPZ gTotalCliente = gTotalCliente + gRenglon[C4, C8, C10, C14] gTotalGral = gTotalGral + gRenglon[C4, C8, C10, C14] FinSi gRenglon = '' Finfunc // ************************************************************************************************* // Descripcion: imprime los datos del Cliente o Proveedor // Entradas : // Salida : // ************************************************************************************************* Deffunc ImprimeCP() Local lImprime, lIdRenglon Si gIdRenIni < gIdRenFin gEncabezadoCliente = 1 gImpTotalGral = 1 // C0 C2 Columnas 20;1.5,0.15,6.6,0.15,0 Negritas True Si pTipoReporte = 1 o pTipoReporte = 3 lImprime = 'Cliente:' [C0] Sino lImprime = 'Proveedor:' [C0] Finsi lImprime = fMascarilla(tClientes(cCodigoCliente);tParametros(cMascarillaClientes))[C2] Imprime lImprime lImprime = 'Nombre:' [C0] lImprime = tClientes(cRazonSocial) [C2] Imprime lImprime Negritas False // Código Nom(Prod)Cantidad Neto-Desc Cantidad Neto-Desc // C0 C2 C4 C6 C8 C10 C12 C14 C16 Columnas 20;2.4,0.15,5.7,0.15,2.4,0.15,0.45,0.15,2.4,0.15,2.4,0.15,0.45,0.15,2.4,0.15,0 // Imprime el detalle Mientras [lIdRenglon = gIdRenIni; lIdRenglon < gIdRenFin; lIdRenglon = lIdRenglon + 1] fRenglon(lIdRenglon) FinMientras FinSi Finfunc // ************************************************************************************************* // Descripcion: imprime los totales generales de las variables gTotalGral // Entradas : // Salida : // ************************************************************************************************* DefFunc fTotalGral() Local LTotalLinea // Código Nom(Prod)Cantidad Neto-Desc Cantidad Neto-Desc // C0 C2 C4 C6 C8 C10 C12 C14 C16 // Si hubo datos Si gImpTotalGral = 1 LTotalLinea = '==========================='[C0] Saltalin Texto C4; @Col(LTotalLinea;0) Texto C8; @Col(LTotalLinea;0) Texto C10; @Col(LTotalLinea;0) Texto C14; @Col(LTotalLinea;0) Imprime gTotalGral = ''[C0..C3] gTotalGral[2] = 'Total General' Imprime gTotalGral gTotalGral = '' Si (@Col(gTotalPaquetes; 4) > 0) O (@Col(gTotalPaquetes; 10) > 0) gTotalPaquetes = ''[c0..c3] gTotalPaquetes[2] = 'Total Cantidad de Paquetes' Imprime gTotalPaquetes FinSi gTotalPaquetes = '' FinSi Finfunc // ************************************************************************************************* // Descripcion: imprime los totales del cliente de las variables gTotalCliente // Entradas : // Salida : // ************************************************************************************************* DefFunc fTotalCliente() // Código Nom(Prod)Cantidad Neto-Desc Cantidad Neto-Desc // C0 C2 C4 C6 C8 C10 C12 C14 C16 Si gEncabezadoCliente = 1 Texto '@L{4,8,10,14}' Imprime gTotalCliente = ''[C0..C3] Si (pTipoReporte = 1) O (pTipoReporte = 3) gTotalCliente[2] = 'Total Cliente' Sino gTotalCliente[2] = 'Total Proveedor' FinSi Imprime gTotalCliente gTotalCliente = '' gEncabezadoCliente = 0 Si (@Col(gTotalClientePaquetes; 4) > 0) O (@Col(gTotalClientePaquetes; 10) > 0) gTotalClientePaquetes = ''[c0..c3] gTotalClientePaquetes[2] = 'Total Cantidad de Paquetes' Imprime gTotalClientePaquetes FinSi gTotalClientePaquetes = '' FinSi Finfunc // ************************************************************************************************* // Descripcion : Agrega el producto si no existe y deposita o acumula los datos del movimiento // Entradas : el producto // Salida : id del renglon // ************************************************************************************************* DefFunc fAcumulaProducto(aCodigoProd;aNombreProd;aTipoProducto;aUnidad;aCantidadVen;aNetoMenDescVen;aCantidadDev;aNetoMenDescDev) Local lIdTemp lIdTemp = gIdRenIni Mientras lIdTemp < gIdRenFin Si @Col(aCodigoProd;0) = @Col({lIdTemp};1) FinCiclo Finsi lIdTemp = lIdTemp + 1 FinMientras // Si no se encontro el producto lo agrega a la lista Si lIdTemp = gIdRenFin {lIdTemp}[1] = aCodigoProd {lIdTemp}[2] = aNombreProd {lIdTemp}[3] = 0 {lIdTemp}[4] = 0 {lIdTemp}[5] = 0 {lIdTemp}[6] = 0 {lIdTemp}[7] = aUnidad // Guardar el tipo de producto {lIdTemp}[8] = aTipoProducto gIdRenFin = lIdTemp + 1 Finsi // Agrega los datos {lIdTemp}[3] = @Col({lIdTemp};3) + @Col(aCantidadVen;0) {lIdTemp}[4] = @Col({lIdTemp};4) + @Col(aNetoMenDescVen;0) {lIdTemp}[5] = @Col({lIdTemp};5) + @Col(aCantidadDev;0) {lIdTemp}[6] = @Col({lIdTemp};6) + @Col(aNetoMenDescDev;0) FinFunc // ************************************************************************************************* // Descripcion : Agrega el producto si no existe y deposita o acumula los datos del movimiento // Entrada :aTblDocto : Documento del que se tomarán la fecha y el tipo de cambio // aTblMovto : Movimiento del que se tomarán los datos // aTipoDato : 0 - Vendido // 1 - Devuelto // Salida :Importe del documento reflejado en la moneda que recibe // ************************************************************************************************* Deffunc fProcesaMovto(aTblDocto:TABLA; aTblMovto:TABLA; aTipoDato) Local lCantidad, lUnidad, lNeto, lDescuentos, lNetoMenDesc Local lRegresa, lIdUnidad lRegresa = 0 Si aTblMovto(cIdProducto) = 0 lRegresa = 1 SiNo tProductos.Busca[@Str(aTblMovto(cIdProducto);0)] Si pTipoReporte = 2 O pTipoReporte = 4 Si tProductos(cTipoProducto) = 2 //si es compra y es paquete, se brinca el registro lRegresa = 1 Finsi Finsi FinSi Si lRegresa = 0 Y tProductos->Encontro Y (tProductos(cCodigoProducto) >= pProductoInicial O pProductoInicial = ' ') Y (tProductos(cCodigoProducto) <= pProductoFinal O pProductoFinal = ' ') lIdUnidad = tProductos(cIdUnidadBase) fVerificaUnidad(tProductos) // SI el Producto tiene Unidad de Medida NO Equivalente "Y" pUnidad = 1 Si pUnidad = 1 Y tProductos(cIdUnidadNoConvertible) != 0 Y tMovimientos(cUnidadesNC) > 0 lCantidad = tMovimientos(cUnidadesNC) lIdUnidad = tProductos(cIdUnidadNoConvertible) Sino lCantidad = tMovimientos(cUnidades) FinSi // Convertir cantidad de unidades a la unidad solicitada Si pUnidad = 2 Y tProductos(cIdUnidadBase) != 0 // El Producto tiene Unidad de Medida y Peso, por lo que hay que // unificar vCantidad de acuerdo a la unidad deseada en el reporte. tEquivaleUnidadesPM.Busca[@Str(tProductos(cIdUnidadBase);0) &':'& @Str(pIdUnidad;0)] Si tEquivaleUnidadesPM->Encontro lCantidad = lCantidad * tEquivaleUnidadesPM(cFactorConversion) lIdUnidad = pIdUnidad Finsi Finsi // Se busca el nombre de la unidad del producto lUnidad = '' Si lIdUnidad != 0 tUnidadesPM.Busca[@Str(lIdUnidad;0)] Si tUnidadesPM->Encontro lUnidad = tUnidadesPM(cDespliegue) FinSi FinSi lNeto = fCambiarMonedaDoctoAReporte(aTblDocto; tTiposCambio; aTblMovto(cNeto); pIdMoneda; gIdMonedaCte) lDescuentos = aTblMovto(cDescuento1) + aTblMovto(cDescuento2) + aTblMovto(cDescuento3) + aTblMovto(cDescuento4) + aTblMovto(cDescuento5) lDescuentos = fCambiarMonedaDoctoAReporte(aTblDocto; tTiposCambio; lDescuentos; pIdMoneda; gIdMonedaCte) lNetoMenDesc = lNeto - lDescuentos // Acumula los saldos en memoria Si aTipoDato = 0 // Vendido fAcumulaProducto(fMascarilla(tProductos(cCodigoProducto);tParametros(cMascarillaProducto));tProductos(cNombreProducto);tProductos(cTipoProducto);lUnidad;lCantidad;lNetoMenDesc;0;0) SiNo // Devuelto fAcumulaProducto(fMascarilla(tProductos(cCodigoProducto);tParametros(cMascarillaProducto));tProductos(cNombreProducto);tProductos(cTipoProducto);lUnidad;0;0;lCantidad;lNetoMenDesc) FinSi FinSi FinFunc // ************************************************************************************************* //ENCABEZADO // ************************************************************************************************* Encab Texto '@TC{156;0;89}@S{8}Factura Electrónica' Hoja '"@TC{0,0,0}@S{8}Página: ' Imprime Texto '@TC{0,0,0}@S{8}Moneda: '& gNombreMoneda Texto '^@TC{0,0,0}@S{22}' & tEmpresa->Nombre Texto '"@TC{0,0,0}@S{8}Fecha: ' & fEditaFecha(@Hoy()) Imprime Si pTipoReporte = 1 Texto '^@TC{0,0,0}@S{16}' & 'Reporte de Devoluciones sobre Venta por Cliente' Sino Si pTipoReporte = 2 Texto '^@TC{0,0,0}@S{16}' & 'Reporte de Devoluciones sobre Compra por Proveedor' Sino Si pTipoReporte = 3 Texto '^@TC{0,0,0}@S{16}' & 'Reporte de Devoluciones de Remision por Cliente' Sino Si pTipoReporte = 4 Texto '^@TC{0,0,0}@S{16}' & 'Reporte de Devoluciones de Consignación por Proveedor' Finsi Finsi Finsi Finsi Texto '"@TC{0,0,0}@S{8}Hora: ' & @Hora() Imprime Texto '^@TC{0,0,0}@S{16}'& 'Del ' & fEditaFecha(gDelaFecha) & ' al ' & fEditaFecha(gAlaFecha) Imprime NEGRITAS TRUE Altura 10 Texto '@TC{0,0,0}@L{-1}' Imprime // V E N D I D O D E V U E L T O Columnas 20;9.6,0.15,6.15,0.15,3,0.15 Si pTipoReporte = 1 Texto C2;' V E N D I D O' Sino Si pTipoReporte = 2 Texto C2;' C O M P R A D O' Sino Si pTipoReporte = 3 Texto C2;'R E M I S I O N A D O' Sino Texto C2;' C O N S I G N A D O' Finsi Finsi Finsi Texto c4;'D E V U E L T O' Imprime // Código Nom(Prod)Cantidad Neto-Desc Cantidad Neto-Desc // C0 C2 C4 C6 C8 C10 C12 C14 C16 Columnas 20;2.4,0.15,5.7,0.15,2.4,0.15,0.45,0.15,2.4,0.15,2.4,0.15,0.45,0.15,2.4,0.15,0 Texto C0;'Código' Texto C2;'Nombre(Producto,Servicio,Paquete)' Texto C4;'^Cantidad' Texto C8;'^Neto-Desc.' Texto C10;'^Cantidad' Texto C14;'^Neto-Desc.' Imprime Texto '@TC{0,0,0}@L{-1}' Imprime NEGRITAS FALSE Altura 10 FinEncab // ************************************************************************************************* // PRINCIPAL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ************************************************************************************************* gRenglon = '' gTotalGral = '' Si @str(pClienteInicial;0) = ' ' tClientes.Busca Primero Sino tClientes.busca[@str(pClienteInicial;0) & ':'] Finsi // Ciclo principal de Cleintes/Proveedores Mientras tClientes->Encontro Si pClienteInicial != ' ' Si tClientes(cCodigoCliente) < pClienteInicial tClientes.Saltareg[1] Continua Finsi Finsi Si pClienteFinal != ' ' Si tClientes(cCodigoCliente) > pClienteFinal Finciclo Finsi Finsi // Se salta el Cliente NINGUNO Si tClientes(cIdClienteProveedor) = 0 tClientes.Saltareg[1] Continua Finsi // Si se requieren los clientes y no se trata de un cliente:(1=cliente,2=cliente/provedor,3= proveedor) Si (pTipoReporte = 1 O pTipoReporte = 3) Y (tClientes(cTipoCliente) > 2) tClientes.Saltareg[1] Continua Finsi // Si se requieren los Proveedores y no se trata de un Proveedor Si (pTipoReporte = 2 O pTipoReporte = 4) Y (tClientes(cTipoCliente) < 2) tClientes.Saltareg[1] Continua Finsi gIdMonedaCte = tClientes(cIdMoneda) gIdRenFin = 5 // Reinicia la hoja con el Agente // N.D.4048 Búsqueda de un movimiento del producto a la fecha inicial del reporte gFechaBusqueda = pFechaIni // NOTA: Es obligatorio volver a fijar el índice a fin de que las búsquedas parciales funcionen correctamente tDocumentos.Usaindice['iClienteProveedorFecha'] tDocumentos.busca[tClientes(cIdClienteProveedor) & ':' & gFechaBusqueda] Si !tDocumentos->ENCONTRO // Busquedas parciales: Cursor en el registro más cercano que cumple con la llave // NOTA: La propiedad Llave de la tabla nos regresa la llave más cercana que cumple con el criterio de la búsqueda // La llave está en formato cadena y no tiene ningún separador entre los campos, por lo que es necesario revisar // en FoxPro la definición del índice para descomponer los elementos de la Llave Si tClientes(cIdClienteProveedor) = @Val(@SUBSTR(tDocumentos->Llave;0;11)) Si @SUBSTR(tDocumentos->Llave;11;8) >= pFechaIni Y @SUBSTR(tDocumentos->Llave;11;8) <= pFechaFin // Realizar nuevamente la búsqueda a fin de posicionarnos en el registro y activar la propiedad Encontro gFechaBusqueda = @SUBSTR(tDocumentos->Llave;11;8) tDocumentos.busca[tClientes(cIdClienteProveedor) & ':' & gFechaBusqueda] FinSi FinSi FinSi Mientras tDocumentos->Encontro Y (tDocumentos(cFecha) <= pFechaFin) Si tDocumentos(cAfectado) != 1// Salta los NO AFECTADOS tDocumentos.BUSCA SIGUIENTE[1] Continua FinSi Si pTipoReporte = 1 // Devoluciones de venta y devoluciones sobre notas de venta Si tDocumentos(cIdDocumentoDe)!= 4 Y tDocumentos(cIdDocumentoDe)!= 5 Y tDocumentos(cIdDocumentoDe)!= 35 Y tDocumentos(cIdDocumentoDe)!= 36 //FBCS POS tDocumentos.BUSCA SIGUIENTE[1] Continua FinSi FinSi Si pTipoReporte = 2 // Devoluciones de compra Si !(tDocumentos(cIdDocumentoDe) = 19 O tDocumentos(cIdDocumentoDe) = 20) // Si no es Compra ó Devol/Com tDocumentos.BUSCA SIGUIENTE[1] Continua FinSi Finsi Si pTipoReporte = 3 // Devoluciones de remisión Si !(tDocumentos(cIdDocumentoDe) = 3 O tDocumentos(cIdDocumentoDe) = 6) // Si no es Remisión ó Devol/Rem tDocumentos.BUSCA SIGUIENTE[1] Continua FinSi Finsi Si pTipoReporte = 4 // Devoluciones de consignación Si !(tDocumentos(cIdDocumentoDe) = 18 O tDocumentos(cIdDocumentoDe) = 21) // Si no es Consignación ó Devol/Con tDocumentos.BUSCA SIGUIENTE[1] Continua FinSi Finsi // Ciclo de los movimientos visibles del documento tMovimientos.Busca[@str(tDocumentos(cIdDocumento);0)] Mientras tMovimientos->Encontro Si tMovimientos(cIdDocumento) != tDocumentos(cIdDocumento) Finciclo FinSi Si pTipoReporte = 3 // Devoluciones de remision Si tDocumentos(cIdDocumentoDe) = 3 // Remisión // Se salta el que no sea de salida Si tMovimientos(cAfectaExistencia) != 2 tMovimientos.Saltareg[1] Continua FinSi SiNo // Devolución de Remisión // Se salta el que no sea de entrada Si tMovimientos(cAfectaExistencia) != 1 tMovimientos.Saltareg[1] Continua FinSi FinSi FinSi // Acumula datos del movto a su producto asignado Si tDocumentos(cIdDocumentoDe) = 4 O tDocumentos(cIdDocumentoDe) = 3 O tDocumentos(cIdDocumentoDe) = 18 O tDocumentos(cIdDocumentoDe) = 19 O tDocumentos(cIdDocumentoDe) = 35 fProcesaMovto(tDocumentos;tMovimientos;0) SiNo // A lo devuelto fProcesaMovto(tDocumentos;tMovimientos;1) FinSi // Recorre los movtos hijos del movto origen tMovimientosOcultos.Busca[@Str(tMovimientos(cIdMovimiento);0)] Mientras tMovimientosOcultos->Encontro Si tMovimientosOcultos(cIdMovtoOwner) != tMovimientos(cIdMovimiento) Finciclo Finsi //ped. cot Si (tMovimientosOcultos(cIdDocumentoDe) = 1 O tMovimientosOcultos(cIdDocumentoDe) = 2) Y (tMovimientosOcultos(cTipoTraspaso)=4) tMovimientosOcultos.Saltareg[1] Continua Finsi //remisiones Si pTipoReporte != 3 Si (tMovimientosOcultos(cIdDocumentoDe) = 3 ) Y (tMovimientosOcultos(cTipoTraspaso)!=2) tMovimientosOcultos.Saltareg[1] Continua FinSi FinSi //ord. compra ,consig Si pTipoReporte = 1 O pTipoReporte = 3 Si (tMovimientosOcultos(cIdDocumentoDe) = 17 O tMovimientosOcultos(cIdDocumentoDe) = 18) Y (tMovimientosOcultos(cTipoTraspaso)=4) tMovimientosOcultos.Saltareg[1] Continua FinSi FinSi Si pTipoReporte = 3 // Devoluciones de remision Si tDocumentos(cIdDocumentoDe) = 3 // Remisión // Se salta el que no sea de salida Si tMovimientosOcultos(cAfectaExistencia) != 2 tMovimientosOcultos.Saltareg[1] Continua FinSi SiNo // Devolución de Remisión // Se salta el que no sea de entrada Si tMovimientosOcultos(cAfectaExistencia) != 1 tMovimientosOcultos.Saltareg[1] Continua FinSi FinSi FinSi // Acumula datos del movto a su producto asignado // FBCS POS Si tDocumentos(cIdDocumentoDe) = 4 O tDocumentos(cIdDocumentoDe) = 3 O tDocumentos(cIdDocumentoDe) = 18 O tDocumentos(cIdDocumentoDe) = 19 O tDocumentos(cIdDocumentoDe) = 35 fProcesaMovto(tDocumentos;tMovimientosOcultos;0) SiNo // A lo devuelto fProcesaMovto(tDocumentos;tMovimientosOcultos;1) FinSi tMovimientosOcultos.saltareg[1] FinMientras tMovimientos.Saltareg[1] FinMientras tDocumentos.BUSCA SIGUIENTE[1] FinMientras ImprimeCP() //Imprime Totales del cliente fTotalCliente() tClientes.Saltareg[1] FinMientras //Imprime Totales Generales fTotalGral()