Presentación Inversa de Suma Acumulada
Publicado por Violeta (2 intervenciones) el 30/08/2016 17:11:00
Se me pide que en una DW tipo external agregue varias columnas (cantidad, costo, existencia, descripcion, fecha, contabilizado, precio_factura)
Debe estar ordenado por fecha de manera descendente, y el campo existencia debe mostrar la suma acumulada de la columna cantidad (positivo o negativo dependiendo la descripción del concepto, para que se reste o se sume). El problema aquí lo tengo en mostrar el acumulado de abajo hacia arriba, es decir, como se ve en la imagen, el campo 'existencia', es el que lleva el acumulado de lo que entra y sale de almacen por ventas y compras, es en ASPEI SAE, y lo filtraron por fecha, donde la existencia inicia su acumulado, desde abajo hasta arriba dónde se muestra lo que hay hasta la fecha más reciente.
Utilize un compute cumulativeSum (cantidad for all) y con un cursor lleno los campos y este en automático se llena, pero me surgen dos problemas, inicia de arriba hacia abajo, y el último dato no lo acumula, solo repite el último resultado.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
DECIMAL ldc_cantidad, ldc_costo, ldc_existencia, ldc_precio_factura, ldc_cantidad_ult
INTEGER li_row, li_contador = 0, li_row_ult, li_row_menos
STRING ls_descripcion, ls_contabilizado, ls_salida = 'N'
DATE ld_fecha
DECLARE cur_insumo CURSOR FOR
SELECT "cmp_ord_compra_proveedores_detalle"."cantidad_recibida",
"cmp_ord_compra_proveedores_detalle"."precio",
"cmp_ord_compra_proveedores_detalle"."precio_factura",
"cmp_ord_compra_proveedores_detalle"."fecha_recep_ep"
FROM "cmp_ord_compra_proveedores_detalle"
WHERE ("cmp_ord_compra_proveedores_detalle"."id_elemento" = :ii_id_elemento) AND
("cmp_ord_compra_proveedores_detalle"."status" IN ('T','R'))
//ESTATUS T= RECIBIDA TOTAL Y R=RECIBIDA PARCIAL CERRADA
GROUP BY ("cmp_ord_compra_proveedores_detalle"."cantidad_recibida",
"cmp_ord_compra_proveedores_detalle"."precio",
"cmp_ord_compra_proveedores_detalle"."precio_factura",
"cmp_ord_compra_proveedores_detalle"."fecha_recep_ep")
ORDER BY "cmp_ord_compra_proveedores_detalle"."fecha_recep_ep" DESC
USING SQLCA;
dw_reporte.GetChild('dw_det',idwc_detalle_mp)
idwc_detalle_mp.SetTransObject(SQLCA)
OPEN cur_insumo;
//Validar primero si existen registros
IF SQLCA.SQLCode = 100 THEN
MessageBox("Aviso","La Materia Prima seleccionada no presenta movimientos",Exclamation!,OK! )
rb_1.Checked = False
CLOSE cur_insumo;
END IF
IF SQLCA.SQLCode = 0 THEN
DO WHILE ls_salida = 'N'
FETCH cur_insumo INTO :ldc_cantidad, :ldc_costo, :ldc_precio_factura, :ld_fecha;
//Verificar si no está vacío de registros
IF SQLCA.SQLCode = 100 AND li_contador = 0 THEN
MessageBox("¡AVISO!","La Materia Prima seleccionada no presenta movimientos",Exclamation!,OK!)
rb_1.Checked = False
ls_salida = 'S'
END IF
IF SQLCA.SQLCode = 0 THEN
//Validar Nulos
IF IsNull(ldc_cantidad) THEN ldc_cantidad = 0.00
IF IsNull(ldc_costo) THEN ldc_costo = 0.00
IF IsNull(ldc_precio_factura) THEN ldc_precio_factura = 0.00
//IF IsNull(ld_fecha) THEN ld_fecha = DATE (1900,01,01) //DATE ( year yyyy, month mm, day dd )
//Obtención de extras
ldc_existencia = 0.00
ls_descripcion = 'C'
ls_contabilizado = ''
/*
CHOOSE CASE ls_descripcion
CASE 'C'
ldc_cantidad = ldc_cantidad * (1)
CASE 'V'
ldc_cantidad = ldc_cantidad * (-1)
CASE 'DV'
ldc_cantidad = ldc_cantidad * (1)
CASE 'DC'
ldc_cantidad = ldc_cantidad * (-1)
END CHOOSE
*/
//Llenado de DWC
li_row = idwc_detalle_mp.InsertRow(0)
idwc_detalle_mp.SetItem(li_row,"cantidad",ldc_cantidad)
idwc_detalle_mp.SetItem(li_row,"costo",ldc_costo)
// idwc_detalle_mp.SetItem(li_row,"existencia_1",ldc_existencia)//No lo ocupo
idwc_detalle_mp.SetItem(li_row,"descripcion",ls_descripcion)
idwc_detalle_mp.SetItem(li_row,"fecha",ld_fecha)
idwc_detalle_mp.SetItem(li_row,"contabilizado",ls_contabilizado)
idwc_detalle_mp.SetItem(li_row,"precio_factura", ldc_precio_factura)
idwc_detalle_mp.SetItem(li_row,"numeracion",li_row)
ELSE
ls_salida = 'S'
END IF
li_contador = li_contador + 1
LOOP
END IF
CLOSE cur_insumo;
Es así como la arme, se llena si hay datos, hace el acumulativo, pero no en el orden que deseo y el último dato no lo suma, ya intente cambiando el ORDER BY a ASC y el InsertRow(1), redibujar al final con un .ReDraw() y luego ordenar con SORT(), pero no me ha funcionado. Alguien podría ayudarme. De antemano, gracias
Esto es lo que me despliega
Valora esta pregunta
0