Files
MBS/PROYECTO/cgdir/edprrp071.4gl
T

685 lines
24 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : EDPRRP071
OBJETIVO : Transferencia de Inventario a Los Vendedores
PROGRAMADOR : Juan F. Soto
FECHA REALIZACION : Septiembre 19, 1996.
-------------------------------------------------------------------------------
}
DATABASE rayovac
GLOBALS
DEFINE tiene CHAR(1)
DEFINE mes CHAR(2)
DEFINE e36,e31,i1,idx,numero_msg,tipo_papel SMALLINT
DEFINE salir2,salir,salir1,primera CHAR(1)
DEFINE reporte_20 RECORD
cod_mov SMALLINT,
sec_cliente INTEGER,
cod_n LIKE intb00001.cod_n,
cod_grupo LIKE intb00001.cod_grupo,
cod_tipo LIKE intb00001.cod_tipo,
cod_sec LIKE intb00001.cod_sec,
descrip_esp CHAR(30),
unidad_med CHAR(4),
cantidad INTEGER,
cuenta_no LIKE vetb00033.cuenta_no,
costo DECIMAL(8,4),
cod_g LIKE intb00001.cod_n,
codigo CHAR(10)
END RECORD
DEFINE costos RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
material LIKE iptb00004.material,
labor LIKE iptb00004.labor,
gasto_ind LIKE iptb00004.gasto_ind
END RECORD
DEFINE actual RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp LIKE intb00001.descrip_esp,
unidad_med LIKE intb00001.unidad_med,
balance LIKE iptb00006.cantidad_2
END RECORD
DEFINE anterior RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
balance LIKE iptb00006.cantidad_2
END RECORD
DEFINE selec,select_cost,select_act,select_ant CHAR(500)
DEFINE entrada71_b ARRAY [200] OF RECORD
cuenta_no LIKE cgtb00004.cuenta_no,
descripcion CHAR(25),
debito LIKE cgtb00004.debito,
credito LIKE cgtb00004.credito
END RECORD
DEFINE entrada71 ARRAY [200] OF RECORD
cuenta_no LIKE cgtb00004.cuenta_no,
descripcion CHAR(25),
debito LIKE cgtb00004.debito,
credito LIKE cgtb00004.credito
END RECORD,
entra CHAR(14),
entra1 CHAR(5),
fecha1,fecha2,p_fecha DATE,
afecta CHAR(1),
detalle CHAR(30)
END GLOBALS
MAIN
CALL edprrp071()
END MAIN
FUNCTION edprrp071()
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM edfmrp071 FROM "edfmrp071"
DISPLAY FORM edfmrp071
CALL pantalla()
DISPLAY "edprrp071" AT 4,3
DISPLAY "Transferencia de Inventario a Los Vendedores" AT 6,23
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
INPUT BY NAME entra,fecha1,fecha2,afecta,detalle
AFTER FIELD entra
SELECT unique ref FROM cgtb00004
WHERE ref = entra
IF STATUS != NOTFOUND THEN
ERROR "(12) REGISTRO EXISTE"
NEXT FIELD entra
END IF
LET entra1 = entra
BEFORE FIELD fecha1
SELECT MAX(fecha) INTO p_fecha FROM cgtb00004
WHERE ref[1,5] = entra1
LET fecha1 = p_fecha + 1
DISPLAY BY NAME fecha1
AFTER FIELD fecha1
IF fecha1 IS NULL THEN
ERROR "(16) CAMPO EN BLANCO"
NEXT FIELD fecha1
END IF
IF fecha1 <= p_fecha THEN
ERROR "(179) EXISTE ENTRADA DE DIARIO CON ESA FECHA"
NEXT FIELD fecha1
END IF
AFTER FIELD fecha2
IF fecha2 is null THEN
ERROR "(16) CAMPO EN BLANCO"
NEXT FIELD fecha2
END IF
IF fecha1 > fecha2 THEN
ERROR "(149) FECHA NO PUEDE SER MAYOR QUE LA ANTERIOR"
NEXT FIELD fecha1
END IF
###### Selecionando en rango de fecha de la tabla de periodo para el fecha2
SELECT UNIQUE ref FROM cgtb00004 where ref = entra
IF STATUS != NOTFOUND THEN
ERROR "(12) REGISTRO EXISTE"
NEXT FIELD fecha2
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET selec =
"SELECT a.cod_mov,a.cod_sp_sec,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,",
"b.descrip_esp, ",
" b.unidad_med,a.cantidad_2,d.cuenta_no ",
"FROM iptb00017 a,intb00001 b, vetb00033 d ",
"WHERE (a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND ",
" a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec AND ",
" a.cod_sp_sec = d.sec_cliente AND ",
" a.fecha BETWEEN '010101' AND ?) AND ",
" (a.cod_mov IN (33,34)) AND a.status_t IS NULL ",
" ORDER BY 2,3,4,5,6"
DISPLAY "<< Estoy Buscando Informacion... Espere >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE comando FROM selec
DECLARE busca CURSOR FOR comando
OPEN busca USING fecha2
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT reprte20 TO PIPE "lp -dcentral"
LET idx = 1
WHILE status != notfound
FETCH busca INTO reporte_20.*
IF status = notfound THEN
EXIT WHILE
END IF
IF reporte_20.cod_n = 3 THEN
LET reporte_20.cod_g = 3
ELSE
LET reporte_20.cod_g = 6
END IF
LET reporte_20.codigo = reporte_20.cod_n USING "&",
reporte_20.cod_grupo USING "&",
reporte_20.cod_tipo USING "&&",
reporte_20.cod_sec USING "&&&"
LET tiene = "S"
SELECT material+labor+gasto_ind,max(mes_ini),max(mes_fin)
INTO reporte_20.costo
FROM iptb00004
WHERE (cod_n = reporte_20.cod_n and
cod_grupo = reporte_20.cod_grupo and
cod_tipo = reporte_20.cod_tipo and
cod_sec = reporte_20.cod_sec and
ventas = "1" and
ano = YEAR(fecha2)) and
status_t is null
GROUP BY 1
IF STATUS = NOTFOUND THEN
LET reporte_20.costo = 0
LET tiene = "N"
END IF
OUTPUT TO REPORT reprte20(reporte_20.*)
END WHILE
FINISH REPORT reprte20
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
REPORT reprte20(x)
DEFINE x RECORD
cod_mov SMALLINT,
sec_cliente INTEGER,
cod_n LIKE intb00001.cod_n,
cod_grupo LIKE intb00001.cod_grupo,
cod_tipo LIKE intb00001.cod_tipo,
cod_sec LIKE intb00001.cod_sec,
descrip_esp CHAR(30),
unidad_med CHAR(4),
cantidad INTEGER,
cuenta_no LIKE vetb00033.cuenta_no,
costo DECIMAL(8,4),
cod_g LIKE intb00001.cod_n,
codigo CHAR(10)
END RECORD,
i,salida,entrada INTEGER,
dife,t_debito,t_credito,c_salida,c_entrada DECIMAL(12,3),
p_descripcion CHAR(25)
DEFINE doble_on CHAR(3)
DEFINE doble_off CHAR(3)
DEFINE negrillas_on CHAR(6)
DEFINE negrillas_off CHAR(6)
DEFINE comp_on CHAR(2)
DEFINE comp_off CHAR(3)
DEFINE doce CHAR(3)
DEFINE hora CHAR(5)
DEFINE descr CHAR(15)
DEFINE nombre1 CHAR(30)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
#ORDER BY x.sec_cliente,x.cod_g,x.codigo
FORMAT
PAGE HEADER
LET doble_on = ASCII 001
LET doble_off = ASCII 002
LET negrillas_on = ASCII 027, ASCII 098
LET negrillas_off = ASCII 027, ASCII 099
LET comp_on = ASCII 31
LET comp_off = ASCII 029
LET doce = ASCII 030
LET hora = time
PRINT COLUMN 1,comp_on
PRINT COLUMN 1, "edprrp071",
COLUMN 49, "R A Y . O . V A C D O M I N I C A N A, S. A.",
COLUMN 137, "Pag. ",pageno using "###"
PRINT COLUMN 49, " Sistema de Contabilidad General",
COLUMN 137, today using "dd/mm/yy"
PRINT COLUMN 49, " Transferencia de Inventario A Los Vendedores",
COLUMN 140, hora
BEFORE GROUP OF x.sec_cliente
SKIP 1 LINES
PRINT COLUMN 1,"Rango de Fecha: Del ", fecha1 USING "dd/mm/yy",
" Al ",fecha2 USING "dd/mm/yy"
PRINT COLUMN 1,"--------------------------------------------------",
"--------------------------------------------------",
"--------------------------------------------"
PRINT COLUMN 96, "Valor",
COLUMN 109, "Valor",
COLUMN 118, "Diferencia",
COLUMN 135, "Diferencia"
PRINT COLUMN 1, "Codigo",
COLUMN 53, "Salida",
COLUMN 65, "Entrada",
COLUMN 85, "Std.",
COLUMN 96, "Salida",
COLUMN 109, "Entrada",
COLUMN 118, "Unidad",
COLUMN 135, "Valor"
PRINT COLUMN 1,"--------------------------------------------------",
"--------------------------------------------------",
"--------------------------------------------"
SKIP 1 LINE
SELECT a.nombre INTO nombre1 FROM vetb00004 a
WHERE a.sec_cliente = x.sec_cliente
PRINT COLUMN 1, "Cliente: ","(",x.sec_cliente USING "<<<<",")",
nombre1 CLIPPED
BEFORE GROUP OF x.cod_g
IF x.cod_g = 3 THEN
LET descr = "RAY.O.VAC"
ELSE
LET descr = "DISTRIBIDORA"
END IF
PRINT COLUMN 1, descr
AFTER GROUP OF x.codigo
LET entrada = GROUP SUM(x.cantidad) WHERE x.cod_mov = 33
LET salida = GROUP SUM(x.cantidad) WHERE x.cod_mov = 34
LET c_entrada = GROUP SUM(x.cantidad * x.costo) WHERE x.cod_mov = 33
LET c_salida = GROUP SUM(x.cantidad * x.costo) WHERE x.cod_mov = 34
IF entrada IS NULL THEN
LET entrada = 0
END IF
IF salida IS NULL THEN
LET salida = 0
END IF
IF c_entrada IS NULL THEN
LET c_entrada = 0
END IF
IF c_salida IS NULL THEN
LET c_salida = 0
END IF
PRINT COLUMN 1, x.cod_n USING "&","-",x.cod_grupo USING "&","-",
x.cod_tipo USING "&&","-",x.cod_sec USING "&&&",
" ",x.descrip_esp," ",x.unidad_med;
IF tiene = "S" THEN
PRINT COLUMN 47, salida USING "###,###,###",
COLUMN 62, entrada USING "###,###,###",
COLUMN 74, x.costo USING "#,###,###.####",
COLUMN 89, c_salida USING "##,###,###.##",
COLUMN 103, c_entrada USING "##,###,###.##",
COLUMN 117, salida + entrada USING "###,###,###",
COLUMN 131, c_salida + c_entrada USING "###,###,###.##"
ELSE
PRINT COLUMN 47, "N O T I E N E C O S T O S T A N D A R D"
END IF
AFTER GROUP OF x.cod_g
LET entrada = GROUP SUM(x.cantidad) WHERE x.cod_mov = 33
LET salida = GROUP SUM(x.cantidad) WHERE x.cod_mov = 34
LET c_entrada = GROUP SUM(x.cantidad * x.costo) WHERE x.cod_mov = 33
LET c_salida = GROUP SUM(x.cantidad * x.costo) WHERE x.cod_mov = 34
IF entrada IS NULL THEN
LET entrada = 0
END IF
IF salida IS NULL THEN
LET salida = 0
END IF
IF c_entrada IS NULL THEN
LET c_entrada = 0
END IF
IF c_salida IS NULL THEN
LET c_salida = 0
END IF
SKIP 1 LINE
PRINT COLUMN 20, "Total Compania",
COLUMN 48, salida USING "###,###,###",
COLUMN 62, entrada USING "###,###,###",
COLUMN 89, c_salida USING "##,###,###.##",
COLUMN 103, c_entrada USING "##,###,###.##",
COLUMN 117, salida + entrada USING "###,###,###",
COLUMN 131, c_salida + c_entrada USING "###,###,###.##"
LET dife = c_salida + c_entrada
IF dife < 0 THEN
LET dife = dife * - 1
END IF
IF dife > 0 THEN
IF x.cod_g = 3 THEN
SELECT a.descripcion INTO p_descripcion
FROM cgtb00001 a
WHERE a.cuenta_no = "1131"
LET entrada71[idx].cuenta_no = "1131"
LET entrada71[idx].descripcion = p_descripcion
LET entrada71[idx].credito = c_salida + c_entrada
LET idx = idx + 1
ELSE
SELECT a.descripcion INTO p_descripcion
FROM cgtb00001 a
WHERE a.cuenta_no = "1136"
LET entrada71[idx].cuenta_no = "1136"
LET entrada71[idx].descripcion = p_descripcion
LET entrada71[idx].credito = c_salida + c_entrada
LET idx = idx + 1
END IF
END IF
SKIP 1 LINE
AFTER GROUP OF x.sec_cliente
LET entrada = GROUP SUM(x.cantidad) WHERE x.cod_mov = 33
LET salida = GROUP SUM(x.cantidad) WHERE x.cod_mov = 34
LET c_entrada = GROUP SUM(x.cantidad * x.costo) WHERE x.cod_mov = 33
LET c_salida = GROUP SUM(x.cantidad * x.costo) WHERE x.cod_mov = 34
IF entrada IS NULL THEN
LET entrada = 0
END IF
IF salida IS NULL THEN
LET salida = 0
END IF
IF c_entrada IS NULL THEN
LET c_entrada = 0
END IF
IF c_salida IS NULL THEN
LET c_salida = 0
END IF
PRINT COLUMN 20, "Total Cliente-Vendedor",
COLUMN 48, salida USING "###,###,###",
COLUMN 62, entrada USING "###,###,###",
COLUMN 89, c_salida USING "##,###,###.##",
COLUMN 103, c_entrada USING "##,###,###.##",
COLUMN 117, salida + entrada USING "###,###,###",
COLUMN 131, c_salida + c_entrada USING "###,###,###.##",
x.cuenta_no
LET dife = c_salida + c_entrada
IF dife < 0 THEN
LET dife = dife * -1
END IF
IF dife > 0 THEN
SELECT a.descripcion INTO p_descripcion
FROM cgtb00001 a
WHERE a.cuenta_no = x.cuenta_no
LET entrada71[idx].cuenta_no = x.cuenta_no
LET entrada71[idx].descripcion = p_descripcion
LET entrada71[idx].debito = c_salida + c_entrada
LET idx = idx + 1
END IF
SKIP TO TOP OF PAGE
ON LAST ROW
LET entrada = SUM(x.cantidad) WHERE x.cod_mov = 33
LET salida = SUM(x.cantidad) WHERE x.cod_mov = 34
LET c_entrada = SUM(x.cantidad * x.costo) WHERE x.cod_mov = 33
LET c_salida = SUM(x.cantidad * x.costo) WHERE x.cod_mov = 34
PRINT COLUMN 20, "Total General ",
COLUMN 48, salida USING "###,###,###",
COLUMN 62, entrada USING "###,###,###",
COLUMN 89, c_salida USING "##,###,###.##",
COLUMN 103, c_entrada USING "##,###,###.##",
COLUMN 117, salida + entrada USING "###,###,###",
COLUMN 131, c_salida + c_entrada USING "###,###,###.##"
PRINT COLUMN 1,comp_off
SKIP TO TOP OF PAGE
PRINT comp_off,doce
SKIP 1 LINES
PRINT COLUMN 01,"Entrada de Diario No.",
doble_on,entra,doble_off
PRINT COLUMN 1,"Observaciones: _____________________________________"
PRINT COLUMN 1," _____________________________________"
PRINT COLUMN 1,
"--------------------------------------------------",
"--------------------------------------------------"
PRINT COLUMN 2, "Cuenta ",
COLUMN 11, "Dpto",
COLUMN 17, "Catalogo",
COLUMN 26, "Refe",
COLUMN 41, "Concepto",
COLUMN 75, "Debe",
COLUMN 93, "Haber",negrillas_off
PRINT COLUMN 1,
"--------------------------------------------------",
"--------------------------------------------------"
IF t_debito IS NULL THEN
LET t_debito = 0
END IF
IF t_credito IS NULL THEN
LET t_credito = 0
END IF
LET i1 = 1
FOR i = 1 TO idx
IF entrada71[i].debito IS NOT NULL THEN
LET entrada71_b[i1].cuenta_no = entrada71[i].cuenta_no
LET entrada71_b[i1].descripcion = entrada71[i].descripcion
LET entrada71_b[i1].debito = entrada71[i].debito
LET i1 = i1 + 1
END IF
IF entrada71[i].cuenta_no = "1131" THEN
LET e31 = i
END IF
IF entrada71[i].cuenta_no = "1136" THEN
LET e36 = i
END IF
END FOR
FOR i = 1 TO idx
IF entrada71[i].credito IS NOT NULL THEN
IF entrada71[i].cuenta_no = "1131" THEN
IF entrada71[i].credito < 0 THEN
LET entrada71[i].credito = entrada71[i].credito * -1
END IF
IF entrada71_b[e31].credito IS NULL THEN
LET entrada71_b[e31].credito = 0
END IF
LET entrada71_b[e31].cuenta_no = entrada71[i].cuenta_no
LET entrada71_b[e31].descripcion =
entrada71[i].descripcion
LET entrada71_b[e31].credito = entrada71[i].credito +
entrada71_b[e31].credito
END IF
IF entrada71[i].cuenta_no = "1136" THEN
IF entrada71[i].credito < 0 THEN
LET entrada71[i].credito = entrada71[i].credito * -1
END IF
IF entrada71_b[e36].credito IS NULL THEN
LET entrada71_b[e36].credito = 0
END IF
LET entrada71_b[e36].cuenta_no = entrada71[i].cuenta_no
LET entrada71_b[e36].descripcion =
entrada71[i].descripcion
LET entrada71_b[e36].credito = entrada71[i].credito +
entrada71_b[e36].credito
END IF
END IF
END FOR
FOR i = 1 TO idx
LET entrada71[i].cuenta_no = null
LET entrada71[i].descripcion = null
LET entrada71[i].debito = null
LET entrada71[i].credito = null
END FOR
FOR i = 1 TO idx
LET entrada71[i].cuenta_no = entrada71_b[i].cuenta_no
LET entrada71[i].descripcion = entrada71_b[i].descripcion
LET entrada71[i].debito = entrada71_b[i].debito
LET entrada71[i].credito = entrada71_b[i].credito
END FOR
FOR i =1 TO idx
IF entrada71[i].cuenta_no IS NOT NULL THEN
PRINT COLUMN 2, entrada71[i].cuenta_no,
COLUMN 41, entrada71[i].descripcion,
COLUMN 68, entrada71[i].debito USING "##,###,###.##",
COLUMN 85, entrada71[i].credito USING "##,###,###.##"
IF entrada71[i].credito < 0 THEN
LET entrada71[i].credito = entrada71[i].credito * -1
END IF
IF entrada71[i].debito < 0 THEN
LET entrada71[i].debito = entrada71[i].debito * -1
END IF
IF entrada71[i].debito IS NOT NULL THEN
LET t_debito = t_debito + entrada71[i].debito
END IF
IF entrada71[i].credito IS NOT NULL THEN
LET t_credito= t_credito+ entrada71[i].credito
END IF
IF entrada71[i].debito IS NULL THEN
LET entrada71[i].debito = 0
END IF
IF entrada71[i].credito IS NULL THEN
LET entrada71[i].credito = 0
END IF
IF afecta = "S" THEN
IF entrada71[i].debito > 0 or entrada71[i].credito > 0
THEN
INSERT INTO cgtb00004
VALUES(fecha2,1,entra,
entrada71[i].cuenta_no,
null,null,
null,null,null,
detalle,null,
entrada71[i].debito,
entrada71[i].credito,null,user,
current,null,null)
END IF
END IF
END IF
END FOR
SKIP 1 LINE
PRINT COLUMN 68, "------------",
COLUMN 85, "------------"
PRINT COLUMN "Totales---> ",
COLUMN 68, t_debito USING "##,###,###.##",
COLUMN 85, t_credito USING "##,###,###.##"
LET t_debito = 0
LET t_credito = 0
END REPORT
{
Esta funcion se utiliza para desplegar mensajes de los reportes de
los sistemas de Ray-O-Vac Dominicana.
Realizada por Lic. Abner Montalvo y Johnny Soto Agosto 21, 1992
}
FUNCTION msgrp000(tipo_papel)
DEFINE tipo_papel SMALLINT,
longitud CHAR(11),
linea_papel CHAR(50)
CASE
WHEN tipo_papel = 1
LET longitud = " 9 1/2 x 11"
WHEN tipo_papel = 2
LET longitud = "14 7/8 x 11"
END CASE
LET linea_papel = "Coloque papel ",longitud," en la impresora."
DISPLAY linea_papel
AT 15,14
DISPLAY "Asegurese de que la impresora este encendida."
AT 16,14
DISPLAY "<Esc> Ejecuta impresion <Ctrl-C> Cancela impresion"
AT 18,14
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
{
Esta funcion se utiliza para desplegar mensajes de errores en todos
los sistemas de Ray-O-Vac Dominicana.
Esta funcion busca el mensaje deseado en la tabla "msgtable" y lo
despliega en la linea de mensajes
}
FUNCTION msg(numero_msg)
DEFINE numero_msg SMALLINT
DEFINE descripcion CHAR (60)
SELECT desc_msg INTO descripcion FROM msgtable
WHERE cod_msg = numero_msg
IF status = NOTFOUND THEN
LET numero_msg = 22
SELECT desc_msg INTO descripcion FROM msgtable
WHERE cod_msg = numero_msg
ERROR descripcion ATTRIBUTE(BOLD)
ELSE
ERROR descripcion ATTRIBUTE(BOLD)
LET numero_msg = 0
END IF
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
FUNCTION pantalla()
DEFINE fecha CHAR(8),
hora char(5)
LET fecha = today USING "dd/mm/yy"
LET hora = time
DISPLAY "R A Y . O . V A C D O M I N I C A N A, S. A." AT 4,17
ATTRIBUTE (REVERSE,YELLOW)
DISPLAY fecha AT 4,70 ATTRIBUTE (YELLOW)
DISPLAY "Sistema de Contabilidad General" AT 5,24
DISPLAY hora AT 6,73 ATTRIBUTE(YELLOW)
CALL fgl_drawbox(5,79,3,1)
CALL fgl_drawbox(1,79,22,1)
RUN "type C:\\archivo > %USPRINT%" END FUNCTION