Files
MBS/PROYECTO/ccdir/ccprmt008.4gl
T

1363 lines
56 KiB
Plaintext

{
-----------------------------------------------------------------------------
PROGRAMA : CCPRMT008
OBJETIVO : Mantenimiento Requisiciones Despacho
REALIZADO POR : JUAN SOTO
FECHA : Enero 2010
FUNCTIONES : envia_correo() Envia correo a la persona quien autoriza las ordenes
-----------------------------------------------------------------------------
}
GLOBALS "ccprgb000.4gl"
DEFINE estado BOOLEAN,
actualiza CHAR(2),
accion CHAR(1),
idx2 SMALLINT,
resultado,total_medida_r DEC(12,5),
porc_itbis DYNAMIC ARRAY OF DEC(8,2),
rcantidad,numerotemp INT,
listarequisi DYNAMIC ARRAY OF RECORD
estado1 CHAR(20),
estado2 CHAR(20),
estado_produccion VARCHAR(20),
num_req1 INT,
fecha1 CHAR(10),
material CHAR(50),
fecha_transporte CHAR(10),
fecha_llegada CHAR(10),
num_oc1 INT,
cliente1 CHAR(40),
valor1 DEC(12,2)
END RECORD,
pcerrada CHAR(1),
xmonto DEC(12,2),
rdespiece DYNAMIC ARRAY OF RECORD
etiqueta CHAR(20),
cod_n ,
cod_grupo ,
cod_tipo ,
cod_sec SMALLINT,
lado_1 ,
lado_2 ,
lado_3 ,
cantidad ,
medida,
cantidad_r,
medida_r DEC(12,5)
END RECORD,
idx1,cuenta_despiece,pcondpago SMALLINT,
pneto DEC(12,2),
pcotizacion,xorden,xtipocliente,xseccliente INT,
pfecha_req CHAR(10)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(4) RETURNING impresor
CALL STARTLOG("ccprmt008.txt")
CONNECT to "smarmotech" USER usuarios USING clave
INITIALIZE requisicion.* TO NULL
SELECT a.sec_vend,RTRIM(b.nom1_emp)||' '||b.apell1_emp,
a.email
INTO requisicion.sec_vend,requisicion.nombre_vendedor,
vendedorEmail
FROM seg0000 a,adtb00003 b
WHERE a.usuario = usuarios AND
a.sec_vend = b.num_emp
CALL ccprmt008()
END MAIN
FUNCTION ccprmt008()
OPTIONS INPUT WRAP
OPEN WINDOW w1 AT 10,5 WITH FORM "ccfmmt008"
CALL carga_lista()
LET requisicion.fecha_requisicion = TODAY
DISPLAY BY NAME requisicion.nombre_vendedor,
requisicion.sec_vend,requisicion.fecha_requisicion
MENU
ON ACTION nuevo ATTRIBUTE(TEXT="Nuevo",IMAGE="new")
LET actualiza = "NO"
LET accion = "A"
CALL arr_requisicion.clear()
CALL ccprad008()
ON ACTION buscar ATTRIBUTE(TEXT="Buscar",IMAGE="find")
LET accion = "M"
CALL ccprmf008()
ON ACTION refrescar ATTRIBUTE(TEXT="Refrescar",IMAGE="Refresh")
CALL carga_lista()
ON ACTION salir
EXIT MENU
END MENU
CLOSE WINDOW w1
END FUNCTION
FUNCTION ccprad008()
DEFINE remanente,unidadRemanente DEC(12,4),
total_cotizacion,total_requisicion DEC(12,2)
LET requisicion.fecha_requisicion = TODAY
LET requisicion.estado = 'NO AUTORIZADA'
LET requisicion.num_req = 0
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
INPUT BY NAME requisicion.busca_orden ATTRIBUTES(WITHOUT DEFAULTS)
{AFTER FIELD sec_vend
SELECT UNIQUE RTRIM(b.nom1_emp)||' '||b.apell1_emp,a.email
INTO requisicion.nombre_vendedor,vendedoremail
FROM adtb00003 b,seg0000 a
WHERE b.num_emp = requisicion.sec_vend and
b.num_Emp = a.sec_vend
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD sec_vend
END IF
DISPLAY BY NAME requisicion.nombre_vendedor}
AFTER FIELD busca_orden
LET pcerrada = null
SELECT a.sec_vend,a.cerrada,a.cond_pago
INTO requisicion.sec_vend,pcerrada,pcondpago
FROM prtb00012 a
WHERE a.num_oc = requisicion.busca_orden AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL msg(3)
END IF
IF pcerrada = 'S' THEN
CALL fgl_winmessage("INFO","ORDEN ESTA CERRADA","STOP")
NEXT FIELD busca_orden
END IF
SELECT RTRIM(b.nom1_emp)||' '||b.apell1_emp
INTO requisicion.nombre_vendedor
FROM adtb00003 b
WHERE b.num_emp = requisicion.sec_vend
DISPLAY BY NAME requisicion.sec_vend,requisicion.nombre_vendedor
# IF pcondpago = 4 THEN
# CALL fgl_winmessage("INFO","ESTA ORDEN ES AL CONTADO, NO PUEDES HACER REQUISICION","INFO")
# NEXT FIELD busca_orden
# END IF
# ESTE CONSTRUCT SE COLOCO EN COMENTARIO PORQUE EL DIRECTOR DE VENTAS
# INFORMO QUE EN LA PRIMERA VERSION, EL VENDEDOR DEBE SABER QUE ORDEN
# VA A REQUERIR.
# CONSTRUCT criterio ON a.num_oc,a.fecha_oc,a.cotizacion_no
# FROM busca_orden,busca_fecha,busca_cotizacion
# BEFORE CONSTRUCT
# CALL DIALOG.setactionactive("procesa",0)
# CALL arr_requisicion.clear()
# ON ACTION busca_parametros
LET selec3 =
"SELECT 'N',a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no,a.tipo_cliente,a.sec_cliente,c.nombre,SUM(b.cantidad),SUM(h.cantidad_1), ",
" b.area,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,d.descrip_esp,d.unidad_med, ",
" SUM(h.cantidad_1),SUM(b.cantidad),'0','0','0','0','0',h.id_kit,g.porc_itbi ",
"FROM prtb00012 a,vetb00004 c,prtb00013 b,iptb00002 d, ",
" vetb00050 g,prtb00023 h ",
"WHERE a.num_oc =",requisicion.busca_orden," AND ",
# " a.sec_vend = g.sec_vend AND ",
" a.tipo_cliente = c.tipo_cliente AND ",
" a.sec_cliente = c.sec_cliente AND ",
" a.num_oc = b.num_oc and ",
" a.num_oc = h.num_oc AND",
" b.cod_n = d.cod_n and ",
" b.cod_grupo = d.cod_grupo and ",
" b.cod_tipo = d.cod_tipo and ",
" b.cod_Sec = d.cod_Sec and ",
" b.secuencia = h.secuencia AND ",
" b.cod_n = h.cod_n and ",
" b.cod_grupo = h.cod_grupo and ",
" b.cod_tipo = h.cod_tipo and ",
" b.cod_Sec = h.cod_Sec and ",
" a.cotizacion_no = g.cotizacion_no AND ",
" a.cerrada = 'N' and a.status_t IS NULL ",
" GROUP BY a.fecha_oc,a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no,a.tipo_cliente,a.sec_cliente,c.nombre, ",
" b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,d.descrip_esp,d.unidad_med,g.porc_itbi,b.area,h.id_kit "
{ " UNION ",
"SELECT 'N',a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no,a.tipo_cliente,a.sec_cliente,c.nombre,b.cantidad,b.cantidad, ",
" b.area,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,d.descrip_esp,d.unidad_med, ",
" b.cantidad,b.cantidad,'0','0','0','0','0',b.id_kit,g.porc_itbi ",
"FROM prtb00012 a,vetb00004 c,prtb00031 b,iptb00002 d, ",
" vetb00050 g ",
"WHERE a.num_oc =",requisicion.busca_orden," AND ",
" a.sec_vend = g.sec_vend AND ",
" a.tipo_cliente = c.tipo_cliente AND ",
" a.sec_cliente = c.sec_cliente AND ",
" a.num_oc = b.num_oc and ",
" b.cod_n = d.cod_n and ",
" b.cod_grupo = d.cod_grupo and ",
" b.cod_tipo = d.cod_tipo and ",
" b.cod_Sec = d.cod_Sec and ",
" a.cotizacion_no = g.cotizacion_no AND ",
" a.cerrada = 'N' and a.status_t IS NULL "
}
PREPARE comando FROM selec3
DECLARE busca_orden CURSOR FOR comando
OPEN busca_orden
LET total_cotizacion = 0
LET idx = 1
LET pcotizacion = 0
FOREACH busca_orden INTO arr_requisicion[idx].*,
porc_itbis[idx]
LET arr_requisicion[idx].procesa = "NO"
# BUSCA PRECIO
LET arr_requisicion[idx].precio = 0
IF arr_requisicion[idx].kit IS NULL THEN
SELECT AVG(a.precio),AVG(a.porc_Desc)
INTO arr_requisicion[idx].precio,arr_requisicion[idx].descuento
FROM vetb00051 a
WHERE a.cotizacion_no = arr_requisicion[idx].cotizacion_no AND
a.area = arr_requisicion[idx].area AND
a.cod_n = arr_requisicion[idx].cod_n AND
a.cod_grupo = arr_requisicion[idx].cod_grupo AND
a.cod_tipo = arr_requisicion[idx].cod_tipo AND
a.cod_Sec = arr_requisicion[idx].cod_sec
ELSE
SELECT AVG(a.precio),AVG(a.porc_Desc)
INTO arr_requisicion[idx].precio,arr_requisicion[idx].descuento
FROM vetb00031 a
WHERE a.cotizacion_no = arr_requisicion[idx].cotizacion_no AND
a.area = arr_requisicion[idx].area AND
a.cod_n = arr_requisicion[idx].cod_n AND
a.cod_grupo = arr_requisicion[idx].cod_grupo AND
a.cod_tipo = arr_requisicion[idx].cod_tipo AND
a.cod_Sec = arr_requisicion[idx].cod_sec AND
a.id_kit = arr_requisicion[idx].kit
END IF
IF arr_requisicion[idx].precio IS NULL THEN
LET arr_requisicion[idx].precio = 0
END IF
LET pcotizacion = arr_requisicion[idx].cotizacion_no
LET arr_requisicion[idx].valor = arr_requisicion[idx].cantidad_ord *
arr_requisicion[idx].precio
LET arr_requisicion[idx].descvalor =
(arr_requisicion[idx].cantidad_ord *
arr_requisicion[idx].precio) *
(arr_requisicion[idx].descuento/100)
LET arr_requisicion[idx].valor = arr_requisicion[idx].valor -
arr_requisicion[idx].descvalor
LET arr_requisicion[idx].valor = (arr_requisicion[idx].valor *
(porc_itbis[idx] /100)) +
arr_requisicion[idx].valor
CALL controles(requisicion.num_req,arr_requisicion[idx].area, arr_requisicion[idx].cod_n,
arr_requisicion[idx].cod_grupo,arr_requisicion[idx].cod_tipo,
arr_requisicion[idx].cod_sec,arr_requisicion[idx].num_oc,0,arr_requisicion[idx].cantidad_ord)
RETURNING estado,arr_requisicion[idx].cantidad,arr_requisicion[idx].cantidad_1
LET total_cotizacion = total_cotizacion + arr_requisicion[idx].valor
IF arr_requisicion[idx].cantidad IS NULL THEN
LET arr_requisicion[idx].cantidad_1 = arr_requisicion[idx].cantidad_ord1
LET arr_requisicion[idx].cantidad = arr_requisicion[idx].cantidad_ord
LET arr_requisicion[idx].cantidad_pendiente = 0
ELSE
DISPLAY "CALCULO: CODIGO: ", arr_requisicion[idx].cod_sec," ORDEN:",arr_requisicion[idx].cantidad_ord1," CANTIDAD1: ",arr_requisicion[idx].cantidad_1
LET arr_requisicion[idx].cantidad_1 = arr_requisicion[idx].cantidad_ord1 -
arr_requisicion[idx].cantidad_1
CALL factor_conv(arr_requisicion[idx].cod_n,
arr_requisicion[idx].cod_grupo,
arr_requisicion[idx].cod_tipo,
arr_requisicion[idx].cod_sec,
arr_requisicion[idx].cantidad_1)
RETURNING resultado,estado
LET arr_requisicion[idx].cantidad_pendiente = arr_requisicion[idx].cantidad_1
DISPLAY "pendiente: ",arr_requisicion[idx].cantidad_pendiente
CALL factor_conv(arr_requisicion[idx].cod_n,
arr_requisicion[idx].cod_grupo,arr_requisicion[idx].cod_tipo,
arr_requisicion[idx].cod_sec,arr_requisicion[idx].cantidad_1)
RETURNING resultado,estado
IF resultado > 0 THEN
LET arr_requisicion[idx].cantidad = resultado
ELSE
LET arr_requisicion[idx].cantidad = arr_requisicion[idx].cantidad_1
END IF
IF arr_requisicion[idx].cantidad_1 <=0 THEN
DISPLAY "SE DEVUELVE: ",arr_requisicion[idx].cod_sec," cantidad: ",arr_requisicion[idx].cantidad_1
CONTINUE FOREACH
END IF
END IF
LET idx = idx + 1
END FOREACH
LET estado = FALSE
IF idx = 1 THEN
CALL fgl_winmessage("ERROR","NO EXISTEN ORDENES CON ESA CONDICION","STOP")
CALL arr_requisicion.clear()
EXIT DIALOG
END IF
DISPLAY BY NAME total_cotizacion
CALL set_count(idx-1)
# AFTER CONSTRUCT
# CALL input_data()
AFTER INPUT
SELECT UNIQUE RTRIM(b.nom1_emp)||' '||b.apell1_emp,a.email
INTO requisicion.nombre_vendedor,vendedoremail
FROM adtb00003 b,seg0000 a
WHERE b.num_emp = requisicion.sec_vend and
b.num_Emp = a.sec_vend
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD busca_orden
END IF
DISPLAY BY NAME requisicion.nombre_vendedor
END INPUT
INPUT ARRAY arr_requisicion FROM s_requisi.* ATTRIBUTE(WITHOUT DEFAULTS)
ON ACTION desseleccion
FOR idx2 = 1 TO idx
IF arr_requisicion[idx2].num_oc IS NOT NULL THEN
LET arr_requisicion[idx2].procesa = "NO"
DISPLAY arr_requisicion[idx2].procesa TO s_requisi[scr_l].procesa
END IF
END FOR
ON ACTION seleccion
FOR idx2 = 1 TO arr_requisicion.getLength()
IF arr_requisicion[idx2].num_oc IS NOT NULL THEN
LET arr_requisicion[idx2].procesa = "SI"
LET scr_l = scr_line()
DISPLAY arr_requisicion[idx2].procesa TO s_requisi[idx2].procesa
END IF
END FOR
BEFORE INPUT
CALL DIALOG.setactionactive("procesa",1)
CALL DIALOG.setactionactive("insert",FALSE)
CALL DIALOG.setactionactive("delete",FALSE)
CALL DIALOG.setactionactive("append",FALSE)
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
AFTER FIELD cantidad_1
LET curr = arr_curr()
LET scr_l = scr_line()
IF arr_requisicion[curr].cantidad_1 > 0 AND arr_requisicion[curr].procesa = "SI" THEN
LET arr_requisicion[curr].valor = 0
CALL factor_conv(arr_requisicion[curr].cod_n,
arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo,
arr_requisicion[curr].cod_sec,arr_requisicion[curr].cantidad_1)
RETURNING resultado,estado
IF estado = FALSE THEN
CALL fgl_winmessage("ERROR","PROBLEMA EN EL FACTOR DE CONVERSION, CONTACTE ADM INVENTARIO","STOP")
NEXT FIELD cantidad_1
END IF
LET arr_requisicion[curr].cantidad = resultado
DISPLAY arr_requisicion[curr].cantidad TO s_requisi[scr_l].cantidad
IF arr_requisicion[curr].cantidad_1 > arr_requisicion[curr].cantidad_ord1 THEN
CALL fgl_Winmessage("ERROR","CANTIDAD EXECEDE CANTIDAD ORDEN","STOP")
NEXT FIELD cantidad_1
END IF
CALL controles(requisicion.num_req,arr_requisicion[curr].area,arr_requisicion[curr].cod_n,
arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo,
arr_requisicion[curr].cod_sec,arr_requisicion[curr].num_oc,arr_requisicion[curr].cantidad,
arr_requisicion[curr].cantidad_ord)
RETURNING estado,remanente,unidadRemanente
IF NOT estado THEN
CALL fgl_winmessage("ERROR","NO PUEDE HACER MAS REQUISICION A ESTA ORDEN","STOP")
NEXT FIELD cantidad_1
END IF
# CALL control_despiece(arr_requisicion[curr].area,arr_requisicion[curr].cod_n,arr_requisicion[curr].cod_grupo,
# arr_requisicion[curr].cod_tipo,arr_requisicion[curr].cod_sec,
# arr_requisicion[curr].num_oc ,arr_requisicion[curr].cantidad,accion) RETURNING estado
# IF estado = FALSE THEN
# CALL fgl_winmessage("ERROR","NO PUEDE ADICIONAR REQUISICION, EXISTE UN ITEM QUE DEBE DESPIEZAR o LA CANTIDAD DIFIERE DE LA CANTIDAD EN LA REQUISICION","STOP")
# NEXT FIELD cantidad_1
# END IF
# call fgl_winmessage("w",rcantidad||' '||arr_requisicion[idx].num_oc||' '||
# arr_requisicion[idx].procesa||' '||
# arr_requisicion[idx].cod_sec|| ' '||idx,"stop")
LET arr_requisicion[curr].descvalor =(arr_requisicion[curr].cantidad *
arr_requisicion[curr].precio) *
(arr_requisicion[curr].descuento/100)
LET arr_requisicion[curr].valor = (arr_requisicion[curr].cantidad *
arr_requisicion[curr].precio) -
arr_requisicion[curr].descvalor
LET arr_requisicion[curr].valor = arr_requisicion[curr].valor +
(arr_requisicion[curr].valor * (porc_itbis[curr]/100))
IF arr_requisicion[curr].valor < 0 THEN
LET arr_requisicion[curr].valor =arr_requisicion[curr].cantidad *
arr_requisicion[curr].precio
END IF
DISPLAY arr_requisicion[curr].valor TO s_requisi[scr_l].valor
END IF
AFTER INPUT
LET total_requisicion = 0
FOR idx = 1 TO arr_count()
# CALL control_despiece(arr_requisicion[idx].area,arr_requisicion[idx].cod_n,arr_requisicion[idx].cod_grupo,
# arr_requisicion[idx].cod_tipo,arr_requisicion[idx].cod_sec,
# arr_requisicion[idx].num_oc ,arr_requisicion[idx].cantidad,accion) RETURNING estado
# IF estado = FALSE THEN
# CALL fgl_winmessage("ERROR","NO PUEDE ADICIONAR REQUISICION, EXISTE UN ITEM QUE DEBE DESPIEZAR o LA CANTIDAD DIFIERE DE LA CANTIDAD EN LA REQUISICION","STOP")
# NEXT FIELD cantidad_1
# END IF
LET total_Requisicion = total_requisicion + arr_requisicion[curr].valor
# call fgl_winmessage("w",rcantidad||' '||arr_requisicion[idx].num_oc||' '||
# arr_requisicion[idx].procesa||' '||
# arr_requisicion[idx].cod_sec|| ' '||idx,"stop")
END FOR
DISPLAY BY NAME total_requisicion
END INPUT
ON ACTION procesa
LET rcantidad = arr_requisicion.getLength()
IF rcantidad > 0 THEN
CALL req_insert() RETURNING estado
IF estado THEN
DECLARE busca_emails CURSOR FOR
SELECT a.correo FROM seg0003 a
WHERE a.autorizacionDespacho = 'SI'
LET idx = 1
FOREACH busca_emails INTO copiacorreo[idx]
LET copiaemail = copiaemail CLIPPED,";",copiacorreo[idx] CLIPPED
LET idx = idx + 1
END FOREACH
IF idx=1 THEN
LET copiaemail='jsoto@marmotech.com.do'
END IF
CALL fgl_winmessage("MENSAJE","ADICION EXITOSA","STOP")
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
# CALL envia_correo(vendedorEmail,copiaemail,cuerpo_correo,
# subject, procedimiento )
SELECT a.cond_pago,a.total_neto INTO pcondpago,pneto
FROM vetb00050 a
WHERE a.cotizacion_no = arr_requisicion[1].cotizacion_no
CALL evaluaclientes(arr_requisicion[1].tipo_cliente,
arr_requisicion[1].sec_cliente,pcondpago,requisicion.num_req,
arr_requisicion[1].num_oc,
requisicion.sec_vend,'RQ',xmonto) RETURNING estado
IF estado THEN
UPDATE cctb00025 set estado = 'AUTORIZADA',
sec_vend_aprobado = requisicion.sec_vend,
fecha_autorizacion = GETDATE()
where num_req = requisicion.num_req
UPDATE cctb00026 set estado = 'AUTORIZADA',
us_mod = 'MBS',
fech_mod = GETDATE()
where num_req = requisicion.num_req
END IF
CALL entraMensaje(requisicion.num_req, pcotizacion,"A",usuarios)
CLEAR FORM
CALL arr_requisicion.clear()
RETURN
END IF
END IF
ON ACTION refrescar
CALL carga_lista()
ON ACTION CANCEL
CALL arr_requisicion.clear()
CALL msg(2)
DELETE FROM cctb00027 WHERE Num_req = numerotemp
EXIT DIALOG
END DIALOG
END FUNCTION
FUNCTION req_insert()
DEFINE ultimo,numeroOrden INT
# WHENEVER ERROR CONTINUE
SELECT a.num_req INTO ultimo FROM cctb00019 a
IF ultimo IS NULL THEN
LET ultimo = 0
END IF
LET ultimo = ultimo + 1
LET requisicion.num_req = ultimo
UPDATE cctb00019 SET num_req = requisicion.num_req,us_crea=usuarios,fech_crea=getdate()
# GUARDA MASTER TABLE
# PREPARE s FROM "SELECT @@IDENTITY"
BEGIN WORK
# EXECUTE s INTO requisicion.num_req
DISPLAY BY NAME requisicion.num_req
LET subject = "AVISO REQUISICION DESPACHO NO. ",requisicion.num_req USING "&&&&&&"," VALOR: "
LET cuerpo_correo = "VENDEDOR : ",requisicion.nombre_vendedor CLIPPED
LET cuerpo_correo = " ",cuerpo_correo CLIPPED," FECHA REQUISICION : ",requisicion.fecha_requisicion USING "DD/MM/YYYY"
LET cuerpo_correo = " ",cuerpo_correo CLIPPED," NUMERO DE ORDEN: ",requisicion.busca_orden USING "&&&&&&"
LET selec =
"INSERT INTO cctb00034 (id_kit,num_req,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad)",
"SELECT a.id_kit,'",requisicion.num_req USING "<<<<<<","',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad ",
"FROM prtb00030 a ",
" WHERE a.id_kit = ? AND ",
" a.num_oc =?"
# PREPARE xcctb34 FROM selec
LET xmonto = 0
FOR idx = 1 TO arr_requisicion.getLength()
IF arr_requisicion[idx].num_oc is not null THEN
IF arr_requisicion[idx].procesa = "SI" THEN
LET cuerpo_correo = " ",cuerpo_correo CLIPPED," CLIENTE: ",arr_requisicion[idx].nombre CLIPPED," ",
" CONTIENE EL PRODUCTO ",
arr_requisicion[idx].unidad_med," ",
arr_requisicion[idx].cantidad_1," ",
arr_requisicion[idx].cantidad USING "<<,<<<.##",
arr_requisicion[idx].descripcion CLIPPED
LET numeroOrden = arr_requisicion[idx].num_oc
# IF arr_requisicion[idx].valor = 0 OR arr_requisicion[idx].valor IS NULL THEN
IF arr_requisicion[idx].descvalor IS NULL THEN
LET arr_requisicion[idx].descvalor = 0
END IF
IF arr_requisicion[idx].descuento IS NULL THEN
LET arr_requisicion[idx].descuento = 0
END IF
LET arr_requisicion[idx].valor = ((arr_requisicion[idx].cantidad * arr_requisicion[idx].precio)-
arr_requisicion[idx].descvalor)
DISPLAY "data1 ",arr_requisicion[idx].cantidad," precio ",arr_requisicion[idx].precio,
" valor ",arr_requisicion[idx].valor,"descuento ",arr_requisicion[idx].descvalor
LET arr_requisicion[idx].valor = arr_requisicion[idx].valor +
(arr_requisicion[idx].valor * (porc_itbis[idx]/100))
DISPLAY "data2 ",arr_requisicion[idx].cantidad," precio ",arr_requisicion[idx].precio,
" valor ",arr_requisicion[idx].valor,"descuento ",arr_requisicion[idx].descvalor
# END IF
LET xmonto = xmonto + arr_requisicion[idx].valor
IF arr_requisicion[idx].cantidad IS NULL THEN
ROLLBACK WORK
CALL fgl_winmessage("INFO","CANTIDAD EN BLANCO","INFO")
RETURN FALSE
END IF
INSERT INTO cctb00026 (num_req,num_oc,cotizacion_no,id,area,cod_n,cod_grupo,cod_tipo,cod_Sec,
cantidad_ord1,cantidad_ord,cantidad_1,cantidad,precio,descuento,descvalor,valor,us_crea,fech_crea,estado,
id_kit)
VALUES (requisicion.num_req,arr_requisicion[idx].num_oc,arr_requisicion[idx].cotizacion_no,
idx,arr_requisicion[idx].area,arr_requisicion[idx].cod_n,arr_requisicion[idx].cod_grupo,
arr_requisicion[idx].cod_tipo,arr_requisicion[idx].cod_Sec,
arr_requisicion[idx].cantidad_ord1,arr_requisicion[idx].cantidad_ord,arr_requisicion[idx].cantidad_1,
arr_requisicion[idx].cantidad,
arr_requisicion[idx].precio,arr_requisicion[idx].descuento,
arr_requisicion[idx].descvalor,
arr_requisicion[idx].valor,SUSER_SNAME(),GETDATE(),requisicion.estado,arr_requisicion[idx].kit)
IF SQLSTATE > 02 THEN
LET chmensaje = SQLERRMESSAGE CLIPPED,"NO ES POSIBLE GUARDAR LA TRANSACCION"
ROLLBACK WORK
CALL fgl_winmessage("ERROR",chmensaje,"STOP")
RETURN FALSE
EXIT FOR
END IF
END IF
END IF
END FOR
# INSERTA DESPIECE
FOR idx1 = 1 TO rdespiece.getLength()
IF rdespiece[idx1].medida> 0 THEN
INSERT INTO cctb00027
(num_req,etiqueta,num_oc,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,
Lado_1,lado_2,lado_3,cantidad,medida,cantidad_r,medida_r,us_crea,
fech_crea)
VALUES
(requisicion.num_req,rdespiece[idx1].etiqueta,numeroOrden,idx,arr_requisicion[idx].area,
rdespiece[idx1].cod_n,
rdespiece[idx1].cod_grupo,rdespiece[idx1].cod_tipo,rdespiece[idx1].cod_sec,
rdespiece[idx1].lado_1,rdespiece[idx1].lado_2,rdespiece[idx1].lado_3,
rdespiece[idx1].cantidad,rdespiece[idx1].medida,rdespiece[idx1].cantidad_r,
rdespiece[idx1].medida_r,usuarios,GETDATE())
IF STATUS < 0 THEN
ROLLBACK WORK
CLOSE WINDOW w10
CALL fgl_winmessage("ERROR","OCURRIO UN ERROR ACTUALIZANDO LOS DATOS","STOP")
LET estado = FALSE
RETURN FALSE
ELSE
LET estado = TRUE
END IF
END IF
END FOR
INSERT INTO cctb00025 (num_req,fecha,sec_vend,us_crea,fech_crea,estado,estado_despacho,monto_req)
VALUES (requisicion.num_req,requisicion.fecha_requisicion,
requisicion.sec_vend,SUSER_SNAME(),GETDATE(),requisicion.estado,"NO DESPACHADA",xmonto)
IF STATUS < 0 THEN
LET chmensaje = SQLERRMESSAGE CLIPPED,"NO ES POSIBLE GUARDAR LA TRANSACCION"
ROLLBACK WORK
CALL fgl_Winmessage("ERROR",chmensaje,"STOP")
RETURN FALSE
END IF
IF estado THEN
COMMIT WORK
CALL entramensaje(requisicion.num_req,pcotizacion,"A",usuarios)
RETURN TRUE
ELSE
ROLLBACK WORK
CALL fgl_winmessage("MENSAJE","NO SE INSERTARON DATOS EN REQUISICION","STOP")
RETURN FALSE
END IF
END FUNCTION
FUNCTION controles(pnumreq,parea,pcodn,pcodgrupo,pcodtipo,pcodsec,numero,cantidad_Trx,cantidadORD)
DEFINE unidad_ctrl,cantidad_ctrl,cantidad_trx,cantidadORD DEC(12,2),
pcodn,pcodgrupo,pcodtipo,pcodsec,parea SMALLINT,
numero,pnumreq INT,
chmesage CHAR(80)
SELECT ISNULL(SUM(a.cantidad),0) INTO cantidadord
FROM prtb00013 a
WHERE a.num_oc = numero AND
a.cod_n = pcodn AND
a.cod_grupo = pcodgrupo AND
a.cod_tipo = pcodtipo AND
a.cod_sec = pcodsec AND
a.area = parea AND
a.status_t IS NULL
# CONTROL 01 CANTIDAD REQUISICION VS CANTIDAD ORDENADA
LET cantidad_ctrl=0
LET unidad_ctrl=0
SELECT ISNULL(SUM(a.cantidad),0),ISNULL(SUM(a.cantidad_1),0) INTO cantidad_ctrl,unidad_ctrl
FROM cctb00026 a
WHERE a.num_oc = numero AND
a.cod_n = pcodn AND
a.cod_grupo = pcodgrupo AND
a.cod_tipo = pcodtipo AND
a.cod_sec = pcodsec AND
a.num_req <> pnumreq AND
a.area = parea AND
a.status_t IS NULL
IF cantidad_ctrl IS NULL THEN
LET cantidad_ctrl=0
END IF
#LET chmesage = " TRX "+cantidad_trx using "&&&&.####"," CTRL ",cantidad_ctrl USING "&&&.####"
#LET chmesage = " ORDEN "+numero USING "&&&&&&"
#LET chmesage = " codn ",pcodn using "&&&"," codgrupo ",pcodgrupo USING "&&&"," codtipo " ,pcodtipo using "&&&"," codsec ",pcodsec USING "&&&"
# CALL FGL_WINMESSAGE("W",cantidad_ctrl,"STOP")
# DISPLAY "cantidad ctrl ",cantidad_ctrl, "cantidad_trx,",cantidad_trx,
#"cantidadORD ",cantidadord," cod ",pcodsec
IF cantidad_trx IS NULL THEN
LET cantidad_Trx = 0
END IF
DISPLAY "control: ",cantidad_ctrl," cantidad trx: ",cantidad_trx," orden: ",cantidadOrd
IF cantidad_ctrl +cantidad_Trx > cantidadORD THEN
DISPLAY "resultado: ",cantidad_ctrl +cantidad_Trx," orden ",cantidadORD
RETURN FALSE,cantidad_ctrl,unidad_ctrl
ELSE
RETURN TRUE, cantidad_ctrl,unidad_ctrl
END IF
END FUNCTION
FUNCTION busca_info()
DISPLAY pfecha_req TO fecha_requisicion
DISPLAY requisicion.num_req,
requisicion.sec_vend_a,requisicion.nombre_a,
requisicion.nombre_vendedor,requisicion.sec_vend,
requisicion.estado
TO num_req,sec_vend_a,nombre_a,nombre_vendedor,sec_vend,estado
CALL arr_requisicion.clear()
DECLARE busca_req2 CURSOR FOR
SELECT a.num_oc,CAST(b.fecha_oc AS CHAR(10)),a.cotizacion_no,
a.cantidad_1,a.cantidad,a.cantidad_ord1,a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
b.tipo_cliente,b.sec_cliente,c.nombre,a.cantidad_ord,a.precio,
a.descuento,a.descvalor,a.valor,d.descrip_esp,a.estado,a.id_kit
FROM cctb00026 a,prtb00012 b,vetb00004 c,iptb00002 d
WHERE a.num_req = requisicion.num_req and
a.num_oc = b.num_oc AND
b.tipo_cliente = c.tipo_cliente AND
b.sec_cliente = c.sec_cliente AND
a.cod_n = d.cod_n AND
a.cod_grupo = d.cod_grupo AND
a.cod_tipo = d.cod_tipo AND
a.cod_Sec = d.cod_sec
LET idx = 1
FOREACH busca_req2 INTO arr_requisicion[idx].num_oc,arr_requisicion[idx].fecha,
arr_requisicion[idx].cotizacion_no,arr_requisicion[idx].cantidad_1,
arr_requisicion[idx].cantidad,arr_requisicion[idx].cantidad_ord1,
arr_requisicion[idx].area,
arr_requisicion[idx].cod_n,
arr_requisicion[idx].cod_grupo,arr_requisicion[idx].cod_tipo,
arr_requisicion[idx].cod_Sec,arr_requisicion[idx].tipo_cliente,
arr_requisicion[idx].sec_cliente,arr_requisicion[idx].nombre,
arr_requisicion[idx].cantidad_ord,
arr_requisicion[idx].precio,arr_requisicion[idx].descuento,
arr_requisicion[idx].descvalor,arr_requisicion[idx].valor,
arr_requisicion[idx].descripcion,arr_requisicion[idx].procesa,
arr_requisicion[idx].kit
LET pcotizacion = arr_requisicion[idx].cotizacion_no
LET arr_requisicion[idx].cantidad_pendiente = arr_requisicion[idx].cantidad_ord - arr_requisicion[idx].cantidad
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY arr_requisicion TO s_requisi.*
END FUNCTION
#FUNCTION envia_correo()
# IF vendedorEmail IS NULL THEN
# LET vendedorEmail = 'jsoto@marmotech.com.do'
# END IF
# LET vendedorEmail = vendedorEmail CLIPPED,'rantonio@marmotech.com.do'
# PREPARE smt FROM "{ call cc_avisadespacho(?,?,?) }"
# EXECUTE smt USING cuerpo_correo IN,subject IN,vendedorEmail IN
#END FUNCTION
FUNCTION control_despiece(parea,pcodn,pcodgrupo,pcodtipo,pcodsec,numero_ord,pcantidad,accion)
DEFINE pestado BOOLEAN,
total_medida DEC(12,5),
punidad CHAR(3),accion CHAR(1),
pdescripcion CHAR(60),
numero_ord,numero_req INT,
parea,pcodn,pcodgrupo,pcodtipo,pcodsec SMALLINT,
medidactrl,pcantidad DEC(12,5)
CALL rdespiece.clear()
# BUSCA SI EL ARTICULO SE DESPIEZA
SELECT UNIQUE b.unidad_med,b.descrip_esp
INTO punidad,pdescripcion
FROM iptb00027 a,iptb00002 b
WHERE a.cod_n = pcodn AND
a.cod_grupo = pcodgrupo AND
a.cod_tipo = pcodtipo AND
a.cod_Sec = pcodsec AND
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
IF STATUS = NOTFOUND THEN
LET estado=TRUE
RETURN estado
END IF
IF accion = "A" THEN
# SELECT a.num_temp_req INTO numero_req FROM cctb00028 a
# IF numero_req IS NULL THEN
LET numero_req = 1000
# INSERT INTO cctb00028 (num_temp_req) VALUES (numero_req) SE COLOCO ESTAS INSTRUCCIONES EN COMENTARIO PORQUE SE CREO UNA TABLA TEMPORAL cctb00030
# END IF
# LET numero_req = numero_req + 1
# UPDATE cctb00028 set num_temp_req = numero_req
DECLARE busca_despiece CURSOR FOR
SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
a.lado_1,a.lado_2,a.lado_3,
SUM(a.cantidad),SUM(a.medida),SUM(b.cantidad),SUM(b.medida)
FROM prtb00022 a LEFT OUTER JOIN cctb00030 b ON
a.num_oc = b.num_oc AND
a.area = b.area AND
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.lado_1 = b.lado_1 AND
a.lado_2 = b.lado_2 AND
a.lado_3 = b.lado_3 AND
b.us_crea = usuarios AND
a.etiqueta = b.etiqueta
WHERE
a.num_oc = numero_ord AND
a.area = parea AND
a.cod_n = pcodn AND
a.cod_grupo = pcodgrupo AND
a.cod_tipo = pcodtipo AND
a.cod_sec = pcodsec
GROUP BY a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
a.lado_1,a.lado_2,a.lado_3
LET idx1 = 1
FOREACH busca_despiece INTO rdespiece[idx1].*
LET rdespiece[idx1].cantidad_r = rdespiece[idx1].cantidad
LET rdespiece[idx1].medida_r = rdespiece[idx1].medida
LET idx1 = idx1 + 1
END FOREACH
ELSE
# call fgl_winmessage("w",numero_Req,"stop")
DECLARE busca_despiece1 CURSOR FOR
SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
a.lado_1,a.lado_2,a.lado_3,
SUM(a.cantidad),SUM(a.medida),SUM(a.cantidad),SUM(a.medida)
FROM cctb00027 a
WHERE
a.num_oc = numero_ord AND
a.area = parea AND
a.cod_n = pcodn AND
a.cod_grupo = pcodgrupo AND
a.cod_tipo = pcodtipo AND
a.cod_sec = pcodsec AND
a.num_req = numero_req
GROUP BY a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
a.lado_1,a.lado_2,a.lado_3
LET idx1 = 1
FOREACH busca_despiece1 INTO rdespiece[idx1].*
LET idx1 = idx1 + 1
END FOREACH
END IF
IF idx1 = 1 THEN
LET pestado = FALSE
RETURN pestado
ELSE
LET pestado = TRUE
END IF
OPEN WINDOW w10 AT 5,6 WITH FORM "ccfmwd004"
DISPLAY pdescripcion TO descrip_esp
DISPLAY punidad TO unidad_med
CALL set_count(idx1-1)
INPUT ARRAY rdespiece WITHOUT DEFAULTS FROM sdespiece.*
BEFORE ROW
LET curr = arr_curr()
LET fila = scr_line()
AFTER FIELD cantidad_r
IF rdespiece[curr].cantidad_r IS NOT NULL THEN
LET medidactrl = 0
SELECT SUM(a.medida_r) INTO medidaCtrl
FROM cctb00027 a
WHERE a.area = parea AND
a.cod_n = rdespiece[curr].cod_n AND
a.cod_grupo =rdespiece[curr].cod_grupo AND
a.cod_tipo = rdespiece[curr].cod_tipo AND
a.cod_sec = rdespiece[curr].cod_Sec AND
a.lado_1 = rdespiece[curr].lado_1 AND
a.lado_2 = rdespiece[curr].lado_2 AND
a.num_oc = numero_ord AND a.status_t IS NULL AND
a.num_req <> numero_req
IF medidaCtrl IS NULL THEN
LET medidactrl = 0
END IF
IF punidad= "M2" THEN
LET rdespiece[curr].medida_r =
rdespiece[curr].cantidad_r * (rdespiece[curr].lado_1 * rdespiece[curr].lado_2)
END IF
IF punidad= "M3" THEN
LET rdespiece[curr].medida_r =
rdespiece[curr].cantidad_r * (rdespiece[curr].lado_1 * rdespiece[curr].lado_2 * rdespiece[curr].lado_3)
END IF
IF punidad= "ML" THEN
LET rdespiece[curr].medida_r =
rdespiece[curr].cantidad_r * rdespiece[curr].lado_1
LET rdespiece[curr].lado_2 = 0
END IF
IF punidad= "UD" OR punidad= "GL" THEN
LET rdespiece[curr].medida_r = rdespiece[curr].cantidad_r
END IF
DISPLAY rdespiece[curr].medida_r TO sdespiece[fila].medida_r
#IF medidaCtrl + rdespiece[curr].medida_r > rdespiece[curr].medida THEN
# LET pestado = FALSE
# EXIT INPUT LOCOLOQUE POR TIENE OTRO AFTER INPUT FECHA:14/10/11
# END IF
LET total_medida_r = 0
LET cuenta_despiece = arr_count()
LET total_medida = 0
FOR idx1= 1 TO cuenta_despiece
IF rdespiece[idx1].medida_r > 0 THEN
LET total_medida_r = total_medida_r + rdespiece[idx1].medida_r
END IF
IF rdespiece[idx1].medida > 0 THEN
LET total_medida = total_medida + rdespiece[idx1].medida
END IF
END FOR
DISPLAY BY NAME total_medida,total_medida_r
END IF
AFTER INPUT
IF Int_flag THEN
LET pestado = FALSE
EXIT INPUT
END IF
LET total_medida_r = 0
LET cuenta_despiece = arr_count()
FOR idx1 = 1 TO cuenta_despiece
IF rdespiece[idx1].medida_r > 0 THEN
LET total_medida_r = total_medida_r + rdespiece[idx1].medida_r
END IF
IF rdespiece[idx1].medida > 0 THEN
LET total_medida = total_medida + rdespiece[idx1].medida
END IF
END FOR
DISPLAY "T ",total_medida_r," ",pcantidad
IF total_medida_r <> pcantidad THEN
CONTINUE INPUT
END IF
DISPLAY BY NAME total_medida,total_medida_r
IF int_flag THEN
CLOSE WINDOW w10
RETURN FALSE
END IF
END INPUT
IF int_flag THEN
LET int_flag = FALSE
LET pestado = FALSE
END IF
# WHENEVER ERROR CONTINUE
BEGIN WORK
LET numerotemp = numero_req
FOR idx1 = 1 TO cuenta_despiece
IF rdespiece[idx1].cantidad_r > 0 THEN
DELETE FROM cctb00030 WHERE us_crea = usuarios and num_req = numero_req and
area = parea AND
cod_n = rdespiece[idx1].cod_n and
cod_grupo = rdespiece[idx1].cod_grupo and
cod_tipo = rdespiece[idx1].cod_tipo and
cod_Sec = rdespiece[idx1].cod_sec
LET rdespiece[idx].etiqueta=idx
INSERT INTO cctb00030
(num_req,etiqueta,num_oc,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,
Lado_1,lado_2,lado_3,cantidad,medida,cantidad_r,medida_r,us_crea,
fech_crea)
VALUES
(numero_req,rdespiece[idx1].etiqueta,numero_ord,idx,parea,rdespiece[idx1].cod_n,
rdespiece[idx1].cod_grupo,rdespiece[idx1].cod_tipo,rdespiece[idx1].cod_sec,
rdespiece[idx1].lado_1,rdespiece[idx1].lado_2,rdespiece[idx1].lado_3,
rdespiece[idx1].cantidad,rdespiece[idx1].medida,rdespiece[idx1].cantidad_r,
rdespiece[idx1].medida_r,usuarios,GETDATE())
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","OCURRIO UN ERROR ACTUALIZANDO LOS DATOS","STOP")
LET pestado = FALSE
EXIT FOR
CLOSE WINDOW w10
ELSE
LET pestado = TRUE
END IF
END IF
END FOR
IF pestado THEN
COMMIT WORK
ELSE
ROLLBACK WORK
END IF
CLOSE WINDOW w10
RETURN pestado
END FUNCTION
FUNCTION carga_lista()
DEFINE busca_vend SMALLINT,
bnombre_vend CHAR(50)
INPUT BY NAME busca_vend
AFTER FIELD busca_vend
IF busca_vend IS NOT NULL THEN
SELECT RTRIM(b.nom1_emp)||' '||b.apell1_emp
INTO bnombre_vend
FROM adtb00003 b
WHERE b.num_emp = busca_vend
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD busca_vend
END IF
DISPLAY BY NAME bnombre_vend
END IF
AFTER INPUT
IF Int_flag THEN
LET int_flag = FALSE
RETURN
END IF
END INPUT
DISPLAY ARRAY listarequisi TO s_lista.*
BEFORE DISPLAY
CALL busca_lista(busca_vend)
IF idx = 1 THEN
RETURN
END IF
ON ACTION refrescar
CALL busca_lista(busca_vend)
AFTER DISPLAY
EXIT DISPLAY
END DISPLAY
END FUNCTION
FUNCTION busca_lista(xvend)
DEFINE xvend SMALLINT
DECLARE busca_requi20 CURSOR FOR
SELECT a.estado,a.estado_despacho,x.estado_produccion,a.num_req,CAST(a.fecha AS CHAR(10)),
e.descrip_Esp||' '||e.unidad_med,CAST(b.fecha_transporte AS CHAR(10)),CAST(b.fecha_llegada AS CHAR(10)),
b.num_oc,c.nombre,SUM(b.valor)
FROM cctb00025 a,cctb00026 b,vetb00004 c,prtb00012 d,iptb00002 e,prtb00013 x
WHERE a.sec_vend = xvend AND
a.num_req = b.num_req AND
b.num_oc = d.num_oc AND
b.num_oc = x.num_oc AND
d.tipo_cliente = c.tipo_cliente AND
d.sec_cliente = c.sec_cliente AND
b.area = x.area AND
b.cod_n = e.cod_n AND b.cod_grupo = e.cod_grupo AND
b.cod_tipo = e.cod_tipo AND b.cod_Sec = e.cod_sec AND
b.cod_n = x.cod_n AND b.cod_grupo = x.cod_grupo AND
b.cod_tipo = x.cod_tipo AND b.cod_Sec = x.cod_Sec AND
d.cerrada = 'N' AND a.status_t IS NULL AND a.estado_despacho NOT IN ('DESPACHADA')
GROUP BY a.estado,a.estado_despacho,a.num_req,b.num_oc,c.nombre,a.fecha, e.descrip_Esp,e.unidad_med,
b.fecha_transporte,b.fecha_llegada,x.estado_produccion
ORDER BY a.estado DESC
LET idx = 1
FOREACH busca_requi20 INTO listarequisi[idx].estado1,
listarequisi[idx].estado2,
listarequisi[idx].estado_produccion,
listarequisi[idx].num_req1,
listarequisi[idx].fecha1,
listarequisi[idx].material,
listarequisi[idx].fecha_transporte,
listarequisi[idx].fecha_llegada,
listarequisi[idx].num_oc1,
listarequisi[idx].cliente1,
listarequisi[idx].valor1
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
END FUNCTION
FUNCTION factor_conv(pcodn,pcodgrupo,pcodtipo,pcodsec,pcantidad)
DEFINE pcodn,pcodgrupo,pcodtipo,pcodsec SMALLINT,
pcantidad,pfactor,presultado DEC(12,5),
pestado BOOLEAN
LET pfactor = 0
SELECT a.factor_conv INTO pfactor
FROM iptb00001 a
WHERE a.cod_n = pcodn AND
a.cod_grupo = pcodgrupo AND
a.cod_tipo = pcodtipo AND
a.cod_sec = pcodsec AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET pestado = FALSE
ELSE
LET presultado = pcantidad * pfactor
LET pestado = TRUE
END IF
RETURN presultado,pestado
END FUNCTION
FUNCTION input_data()
DEFINE remanente,unidadRemanente DEC(12,4)
CALL set_count(idx-1)
INPUT ARRAY arr_requisicion WITHOUT DEFAULTS FROM s_requisi.*
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
AFTER FIELD cantidad_1
IF arr_requisicion[curr].cantidad_1 > 0 AND arr_requisicion[curr].procesa = "SI" THEN
LET arr_requisicion[curr].valor = 0
CALL factor_conv(arr_requisicion[curr].cod_n,
arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo,
arr_requisicion[curr].cod_sec,arr_requisicion[curr].cantidad_1)
RETURNING resultado,estado
IF estado = FALSE THEN
CALL fgl_winmessage("ERROR","PROBLEMA EN EL FACTOR DE CONVERSION, CONTACTE ADM INVENTARIO","STOP")
NEXT FIELD cantidad
END IF
LET arr_requisicion[curr].cantidad = resultado
DISPLAY arr_requisicion[curr].cantidad TO s_requisi[scr_l].cantidad
IF arr_requisicion[curr].cantidad_1 > arr_requisicion[curr].cantidad_ord1 THEN
CALL fgl_Winmessage("ERROR","CANTIDAD EXECEDE CANTIDAD ORDEN","STOP")
NEXT FIELD cantidad_1
END IF
CALL controles(requisicion.num_req,arr_requisicion[curr].area,arr_requisicion[curr].cod_n,
arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo,
arr_requisicion[curr].cod_sec,arr_requisicion[curr].num_oc,arr_requisicion[curr].cantidad,
arr_requisicion[curr].cantidad_ord)
RETURNING estado,remanente,unidadRemanente
IF NOT estado THEN
CALL fgl_winmessage("ERROR","NO PUEDE HACER MAS REQUISICION A ESTA ORDEN","STOP")
NEXT FIELD cantidad_1
END IF
LET arr_requisicion[curr].descvalor =(arr_requisicion[curr].cantidad *
arr_requisicion[curr].precio) *
(arr_requisicion[curr].descuento/100)
LET arr_requisicion[curr].valor = (arr_requisicion[curr].cantidad *
arr_requisicion[curr].precio) -
arr_requisicion[curr].descvalor
LET arr_requisicion[curr].valor = arr_requisicion[curr].valor +
(arr_requisicion[curr].valor * (porc_itbis[curr]/100))
IF arr_requisicion[curr].valor < 0 THEN
LET arr_requisicion[curr].valor =arr_requisicion[curr].cantidad *
arr_requisicion[curr].precio
END IF
DISPLAY arr_requisicion[curr].valor TO s_requisi[scr_l].valor
END IF
ON ACTION procesa
LET rcantidad = arr_count()
CALL req_insert() RETURNING estado
IF estado = TRUE THEN
# CALL envia_correo()
DISPLAY BY NAME requisicion.num_req
CALL fgl_winmessage("MENSAJE","ADICION EXITOSA","STOP")
CLEAR FORM
CALL arr_requisicion.clear()
RETURN
END IF
END INPUT
END FUNCTION
FUNCTION ccprmf008()
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
CONSTRUCT criterio ON a.num_req,c.num_oc,a.fecha FROM num_req,busca_orden,fecha_requisicion
ON ACTION refrescar
CALL carga_lista()
ON ACTION busca_parametros ATTRIBUTE(TEXT="Ejecuta Busqueda",IMAGE="find_all")
LET selec =
"SELECT DISTINCT a.num_req,CONVERT(CHAR(10),a.fecha,103),a.sec_vend_aprobado,",
"(SELECT RTRIM(k.nom1_emp)+' '+k.apell1_emp FROM adtb00003 k WHERE ",
"k.num_emp = a.sec_vend_aprobado) as nombre_aprobado,",
"a.sec_vend,ISNULL(RTRIM(b.nom1_emp),' ') +' '+ISNULL(b.apell1_emp,' '),a.estado ",
" FROM cctb00025 a,adtb00003 b,cctb00026 c ",
" WHERE ",criterio CLIPPED," AND a.num_req = c.num_req ",
" AND a.sec_vend = b.num_emp AND a.status_t is null ",
" ORDER BY a.num_req"
PREPARE comando2 FROM selec
DECLARE busca_req SCROLL CURSOR FOR comando2
OPEN busca_req
FETCH FIRST busca_req INTO requisicion.num_req,pfecha_req,
requisicion.sec_vend_a,requisicion.nombre_a,
requisicion.sec_vend,requisicion.nombre_vendedor,
requisicion.estado
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("ERROR","NO EXISTEN ORDENES CON ESTE CRITERIO DE BUSQUEDA","STOP")
EXIT DIALOG
ELSE
CALL busca_info()
MENU
ON ACTION mensaje
CALL entraMensaje(requisicion.num_req,pcotizacion,"M",usuarios)
ON ACTION siguiente
FETCH NEXT busca_req INTO requisicion.num_req,requisicion.fecha_requisicion,
requisicion.sec_vend_a,requisicion.nombre_a,
requisicion.sec_vend,requisicion.nombre_vendedor,
requisicion.estado
CALL busca_info()
ON ACTION primero
FETCH FIRST busca_req INTO requisicion.num_req,requisicion.fecha_requisicion,
requisicion.sec_vend_a,requisicion.nombre_a,
requisicion.sec_vend,requisicion.nombre_vendedor,
requisicion.estado
CALL busca_info()
ON ACTION ultimo
FETCH LAST busca_req INTO requisicion.num_req,requisicion.fecha_requisicion,
requisicion.sec_vend_a,requisicion.nombre_a,
requisicion.sec_vend,requisicion.nombre_vendedor,
requisicion.estado
CALL busca_info()
CALL fgl_winmessage("MENSAJE","ULTIMO REGISTRO","STOP")
ON ACTION anterior
FETCH PREVIOUS busca_req INTO requisicion.num_req,requisicion.fecha_requisicion,
requisicion.sec_vend_a,requisicion.nombre_a,
requisicion.sec_vend,requisicion.nombre_vendedor,
requisicion.estado
CALL busca_info()
ON ACTION anular
# CONTROL REQUISICION DESPACHADA
SELECT UNIQUE a.num_req FROM iptb00006 a
WHERE a.num_req = requisicion.num_req AND a.status_t IS null
IF STATUS <> NOTFOUND THEN
CALL fgl_winmessage("ERR0R","REQUISICION TIENE DESPACHO NO PUEDE ANULAR","INFO")
CONTINUE DIALOG
END IF
LET respuesta= fgl_winquestion("ATENCION","ESTA SEGURO DE ANULAR ESTA REQUISICION?","no","yes|no","question",0)
IF respuesta = "yes" THEN
LET pcotizacion = NULL
LET xorden = NULL
LET xtipocliente=NULL
LET xseccliente = NULL
LET requisicion.estado=NULL
SELECT DISTINCT a.cotizacion_no,a.num_oc,b.tipo_cliente,b.sec_cliente,c.monto_req,c.estado
INTO pcotizacion, xorden,xtipocliente,xseccliente,xmonto,requisicion.estado
FROM cctb00026 a,prtb00012 b,cctb00025 c
WHERE a.num_req = requisicion.num_req AND a.num_req = c.num_req AND a.cotizacion_no = b.cotizacion_no AND
b.status_t IS NULL AND c.status_t IS null
BEGIN WORK
UPDATE cctb00025 SET status_t = 'E',
us_mod = suser_sname(),
fech_mod = getdate(),
estado = 'ANULADA'
WHERE num_req = requisicion.num_req
UPDATE cctb00026 SET status_t = 'E',
us_mod = suser_sname(),
fech_mod = getdate()
WHERE num_req = requisicion.num_req
UPDATE cctb00027 SET status_t = 'E',
us_mod = suser_sname(),
fech_mod = getdate()
WHERE num_req = requisicion.num_req
#INSERTA EN TABLA LOG
INSERT INTO cctb00031
(fecha,us_crea,sec_vend,nombrevendedor,tipo_cliente,sec_cliente,num_oc,descrip_estado,
num_req,tipo_doc_ref,cotizacion_no )
VALUES (getdate(),usuarios,requisicion.sec_vend,requisicion.nombre_vendedor,
xtipocliente,xseccliente,xorden,
'ESTA REQUISICION FUE ANULADA',requisicion.num_req,'RQ',pcotizacion)
COMMIT WORK
END IF
CLEAR FORM
{ ON ACTION actualizar
IF requisicion.sec_vend_a IS NULL THEN
CALL input_data()
FOR idx = 1 TO arr_count()
IF arr_requisicion[idx].cantidad > 0 THEN
IF arr_requisicion[idx].procesa = "SI" THEN
UPDATE cctb00026 SET cantidad = arr_requisicion[idx].cantidad,
us_mod = usuarios,
fech_mod = getdate()
WHERE cod_n = arr_requisicion[idx].cod_n AND
cod_n = arr_requisicion[idx].cod_n AND
cod_grupo = arr_requisicion[idx].cod_grupo AND
cod_tipo = arr_requisicion[idx].cod_tipo AND
cod_sec = arr_requisicion[idx].cod_sec AND
num_req = requisicion.num_req
END IF
END IF
END FOR
ELSE
CALL fgl_winmessage("ERROR","NO PUEDE ACTUALIZAR REQUISICION, YA ESTA APROBADA","STOP")
END IF
}
ON ACTION sale
EXIT DIALOG
END MENU
END IF
END CONSTRUCT
ON ACTION cancel
CALL arr_requisicion.clear()
CALL msg(2)
EXIT DIALOG
END DIALOG
END FUNCTION