219 lines
6.7 KiB
Plaintext
219 lines
6.7 KiB
Plaintext
{
|
|
===============================================================
|
|
PROGRAMA : IPPRRP053
|
|
OBJETIVO : INFORME TRANSACCIONES INVENTARIOS
|
|
DESARROLLADOR : Ing. Elvis Garcia
|
|
===============================================================
|
|
}
|
|
|
|
GLOBALS "ipprgb000.4gl"
|
|
|
|
DEFINE
|
|
fecha1 DATE,
|
|
fecha2 DATE,
|
|
inv DYNAMIC ARRAY OF RECORD
|
|
fecha DATE,
|
|
numero_doc STRING,
|
|
almacen STRING,
|
|
producto STRING,
|
|
cantidad DECIMAL(18, 5),
|
|
costo_standard DECIMAL(18, 5),
|
|
codigo_mov INT,
|
|
descripcion_mov STRING
|
|
END RECORD,
|
|
idx INT,
|
|
query STRING
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
|
|
CONNECT TO "smarmotech" USER usuarios USING clave
|
|
|
|
CALL ipprrp053()
|
|
END MAIN
|
|
|
|
FUNCTION ipprrp053()
|
|
|
|
OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21
|
|
|
|
CLEAR SCREEN
|
|
|
|
OPEN FORM ipfmrp053 FROM "ipfmrp053"
|
|
DISPLAY FORM ipfmrp053
|
|
|
|
INPUT BY NAME fecha1, fecha2
|
|
|
|
BEFORE INPUT
|
|
INITIALIZE fecha1, fecha2 TO NULL
|
|
|
|
AFTER FIELD fecha1
|
|
IF fecha1 IS NULL OR fecha1 > TODAY THEN
|
|
CALL msg(16)
|
|
NEXT FIELD fecha1
|
|
END IF
|
|
LET fecha2 = TODAY
|
|
DISPLAY BY NAME fecha2
|
|
|
|
AFTER FIELD fecha2
|
|
IF fecha2 IS NULL OR fecha2 < fecha1 THEN
|
|
CALL msg(16)
|
|
NEXT FIELD fecha1
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
|
|
LET idx = 1
|
|
|
|
LET query =
|
|
"SELECT",
|
|
" DATEFROMPARTS(a.ano, a.mes_orden, 1),",
|
|
" a.numero_doc,",
|
|
" ISNULL(a.origen, ''),",
|
|
" CAST(a.cod_n AS VARCHAR(10)) + '-' +",
|
|
" CAST(a.cod_grupo AS VARCHAR(10)) + '-' +",
|
|
" CAST(a.cod_tipo AS VARCHAR(10)) + '-' +",
|
|
" CAST(a.cod_sec AS VARCHAR(10)) + ' ' +",
|
|
" RTRIM(ISNULL(a.descripcion, '')) + ' ' +",
|
|
" RTRIM(ISNULL(a.unidad_med, '')),",
|
|
" ISNULL(a.cantidad2, 0),",
|
|
" ISNULL(a.costo_standard, 0),",
|
|
" CASE",
|
|
" WHEN a.codigo_mov IN (30,31,55,56) THEN 30",
|
|
" ELSE a.codigo_mov",
|
|
" END AS grupo_mov,",
|
|
" CASE",
|
|
" WHEN a.codigo_mov IN (30,31,55,56) THEN 'MOVIMIENTOS VARIOS (30,31,55,56)'",
|
|
" ELSE ISNULL(a.descripcion_mov, '')",
|
|
" END AS desc_grupo_mov",
|
|
" FROM vwipprodterm a",
|
|
" WHERE a.codigo_mov IN (44,12,13,30,31,55,56)",
|
|
" AND a.ano BETWEEN YEAR('",
|
|
fecha1 USING 'yyyy-mm-dd',
|
|
"') AND YEAR('",
|
|
fecha2 USING 'yyyy-mm-dd',
|
|
"')",
|
|
" AND a.mes_orden BETWEEN MONTH('",
|
|
fecha1 USING 'yyyy-mm-dd',
|
|
"') AND MONTH('",
|
|
fecha2 USING 'yyyy-mm-dd',
|
|
"')",
|
|
" ORDER BY grupo_mov, a.ano, a.mes_orden, a.numero_doc"
|
|
|
|
DECLARE buscar CURSOR FROM query
|
|
FOREACH buscar INTO inv[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
IF idx > 1 THEN
|
|
|
|
LET r_filename = "ipprrp053.4rp"
|
|
IF fgl_report_loadCurrentSettings(r_filename) THEN
|
|
LET preview = 1
|
|
CALL selectoutput() RETURNING r_output
|
|
CALL fgl_report_selectDevice(r_output)
|
|
CALL fgl_report_selectPreview(preview)
|
|
LET handler = fgl_report_commitCurrentSettings()
|
|
END IF
|
|
|
|
START REPORT rpt_ipprrp053 TO XML HANDLER handler
|
|
|
|
FOR idx = 1 TO inv.getlength()
|
|
OUTPUT TO REPORT rpt_ipprrp053(inv[idx].*, fecha1, fecha2)
|
|
END FOR
|
|
|
|
FINISH REPORT rpt_ipprrp053
|
|
|
|
ELSE
|
|
CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS", "INFO")
|
|
END IF
|
|
|
|
END INPUT
|
|
|
|
END FUNCTION
|
|
|
|
REPORT rpt_ipprrp053(x, fecha1, fecha2)
|
|
|
|
DEFINE x RECORD
|
|
fecha DATE,
|
|
numero_doc STRING,
|
|
almacen STRING,
|
|
producto STRING,
|
|
cantidad DECIMAL(18, 5),
|
|
costo_standard DECIMAL(18, 5),
|
|
codigo_mov INT,
|
|
descripcion_mov STRING
|
|
END RECORD
|
|
DEFINE fecha1, fecha2, fecha_actual DATE,
|
|
total_registros INT,
|
|
total_cantidad DECIMAL(18, 5),
|
|
total_costos DECIMAL(18, 5),
|
|
grupo_registros INT,
|
|
grupo_cantidad DECIMAL(18, 5),
|
|
grupo_costos DECIMAL(18, 5),
|
|
prev_fecha DATE,
|
|
prev_doc STRING,
|
|
prev_almacen STRING,
|
|
print_fecha DATE,
|
|
print_doc STRING,
|
|
print_almacen STRING
|
|
|
|
ORDER EXTERNAL BY x.codigo_mov
|
|
|
|
FORMAT
|
|
|
|
FIRST PAGE HEADER
|
|
LET fecha_actual = CURRENT
|
|
LET prev_fecha = NULL
|
|
LET prev_doc = ""
|
|
LET prev_almacen = ""
|
|
PRINTX fecha1, fecha2, fecha_actual
|
|
|
|
ON EVERY ROW
|
|
IF x.fecha = prev_fecha THEN
|
|
LET print_fecha = NULL
|
|
ELSE
|
|
LET print_fecha = x.fecha
|
|
LET prev_fecha = x.fecha
|
|
END IF
|
|
|
|
IF x.numero_doc = prev_doc THEN
|
|
LET print_doc = ""
|
|
ELSE
|
|
LET print_doc = x.numero_doc
|
|
LET prev_doc = x.numero_doc
|
|
END IF
|
|
|
|
IF x.almacen = prev_almacen THEN
|
|
LET print_almacen = ""
|
|
ELSE
|
|
LET print_almacen = x.almacen
|
|
LET prev_almacen = x.almacen
|
|
END IF
|
|
|
|
PRINTX print_fecha, print_doc, print_almacen, x.producto,
|
|
x.cantidad, x.costo_standard
|
|
|
|
AFTER GROUP OF x.codigo_mov
|
|
LET prev_fecha = NULL
|
|
LET prev_doc = ""
|
|
LET prev_almacen = ""
|
|
LET grupo_cantidad = GROUP SUM(x.cantidad)
|
|
LET grupo_costos = GROUP SUM(x.costo_standard)
|
|
LET grupo_registros = GROUP COUNT(*)
|
|
PRINTX grupo_cantidad,
|
|
grupo_costos,
|
|
grupo_registros,
|
|
x.codigo_mov,
|
|
x.descripcion_mov
|
|
|
|
ON LAST ROW
|
|
LET total_cantidad = SUM(x.cantidad)
|
|
LET total_costos = SUM(x.costo_standard)
|
|
LET total_registros = COUNT(*)
|
|
PRINTX total_cantidad,total_costos, total_registros
|
|
|
|
END REPORT
|