diff --git a/PROYECTO/PRDIR/primpresion.4gl b/PROYECTO/PRDIR/primpresion.4gl
index 9ad2f1c..2873a33 100644
--- a/PROYECTO/PRDIR/primpresion.4gl
+++ b/PROYECTO/PRDIR/primpresion.4gl
@@ -11,7 +11,7 @@
END RECORD,
nombre_cia STRING
-FUNCTION impresion(pnumoc)
+FUNCTION impresion_oc(pnumoc)
DEFINE pnumoc,I INT
DECLARE busca_orden CURSOR FOR
diff --git a/PROYECTO/PRDIR/prprmt008.4gl b/PROYECTO/PRDIR/prprmt008.4gl
index 20e7395..8ab0f28 100644
--- a/PROYECTO/PRDIR/prprmt008.4gl
+++ b/PROYECTO/PRDIR/prprmt008.4gl
@@ -64,7 +64,7 @@ GLOBALS "prprgb000.4gl"
nombre_vend,nombres,apellidos CHAR(40),fcalle CHAR(25),
fcasa_num CHAR(5), fbarrio,furbanizacion CHAR(15),
monto_desc,total1,p_costos1,total_i,total_mo DECIMAL(12,2),
- ult_numero,cuenta INTEGER,
+ ult_numero,cuenta,existe_oc INTEGER,
vetb05 RECORD LIKE vetb00005.*,
cuenta_p,ridx SMALLINT,
pbalance1,pbalance2 DEC(12,2),
@@ -798,19 +798,26 @@ FUNCTION prpcad008()
# SE COLOCO QUE EL NUMERO SE GENERARA A PARTIR DEL 01/01/2003 HACIA ATRAS POR MODIFICACION DEL
# SISTEMA Y LA INCLUSION DEL NCF A PARTIR DEL 01/01/2007
# FECHA MODIFICACION: 11/01/2007
- SELECT num_oc INTO ult_numero FROM prtb00020
IF nuevo = "S" THEN
- IF ult_numero IS NULL THEN
- LET ult_numero = 0
- END IF
- LET ult_numero = ult_numero + 1
- LET prtb08.num_oc = ult_numero
- DISPLAY BY NAME prtb08.num_oc
-
- UPDATE prtb00020 set num_oc = ult_numero,
+ # CONSECUTIVO ATOMICO: el UPDATE incrementa y bloquea la fila de prtb00020
+ # hasta el COMMIT, asi dos usuarios no pueden tomar el mismo num_oc
+ # (antes se leia y luego se escribia -> PK_prtb00012 duplicada)
+ BEGIN WORK
+ UPDATE prtb00020 SET num_oc = ISNULL(num_oc, 0) + 1,
us_crea = SUSER_SNAME(),
fech_crea = GETDATE()
-
+ SELECT num_oc INTO ult_numero FROM prtb00020
+ # AUTOCORRECCION: si el contador quedo por detras de prtb00012, salta al siguiente libre
+ LET existe_oc = 0
+ SELECT COUNT(*) INTO existe_oc FROM prtb00012 WHERE num_oc = ult_numero
+ IF existe_oc > 0 THEN
+ SELECT MAX(num_oc) + 1 INTO ult_numero FROM prtb00012
+ UPDATE prtb00020 SET num_oc = ult_numero
+ END IF
+ COMMIT WORK
+ LET prtb08.num_oc = ult_numero
+ DISPLAY BY NAME prtb08.num_oc
+
{ CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia1
@@ -851,9 +858,8 @@ CALL seleccionarsalida() RETURNING r_output
fech_crea = GETDATE()
WHERE @num_oc = prtb09.num_oc
- UPDATE prtb00020 SET num_oc = ult_numero,
- us_Crea = SUSER_SNAME(),
- fech_crea = GETDATE()
+ # (se elimino la re-escritura de prtb00020 aqui: el consecutivo ya se tomo
+ # arriba de forma atomica y re-escribirlo podia retroceder el contador)
# ACTUALIZA NUMERO TEMPORAL PARA EL DESPIECE
UPDATE prtb00022 SET num_oc = prtb08.num_oc WHERE num_oc = tmpnumero
diff --git a/PROYECTO/PRDIR/prprmt021.4gl b/PROYECTO/PRDIR/prprmt021.4gl
index e5a8451..ea54e9d 100644
--- a/PROYECTO/PRDIR/prprmt021.4gl
+++ b/PROYECTO/PRDIR/prprmt021.4gl
@@ -177,7 +177,7 @@ END RECORD
" ORDEN ECOMMERCE ",orden_externa USING "&&&&&&&"
INPUT ARRAY detalle FROM sdetalle.* ATTRIBUTE(WITHOUT DEFAULTS)
ON ACTION impresion ATTRIBUTE(TEXT="Orden",IMAGE="printer")
- CALL impresion(pnum_oc)
+ CALL impresion_oc(pnum_oc)
ON ACTION etiqueta ATTRIBUTE(TEXT="Label",IMAGE="fa-tag")
LET datos.celular = orden.celular
LET datos.cliente = orden.nombre_envio
diff --git a/PROYECTO/bin/ipprrp013.4rp b/PROYECTO/bin/ipprrp013.4rp
new file mode 100644
index 0000000..3784afc
--- /dev/null
+++ b/PROYECTO/bin/ipprrp013.4rp
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/bin/ipprrp014.4rp b/PROYECTO/bin/ipprrp014.4rp
new file mode 100644
index 0000000..1ef56ed
--- /dev/null
+++ b/PROYECTO/bin/ipprrp014.4rp
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/bin/ipprrp047.4rp b/PROYECTO/bin/ipprrp047.4rp
new file mode 100644
index 0000000..cca4f05
--- /dev/null
+++ b/PROYECTO/bin/ipprrp047.4rp
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/bin/ipprrp048.4rp b/PROYECTO/bin/ipprrp048.4rp
new file mode 100644
index 0000000..09a0137
--- /dev/null
+++ b/PROYECTO/bin/ipprrp048.4rp
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/bin/ipprrp051.4rp b/PROYECTO/bin/ipprrp051.4rp
new file mode 100644
index 0000000..f2da80f
--- /dev/null
+++ b/PROYECTO/bin/ipprrp051.4rp
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/bin/ipprrp053.4rp b/PROYECTO/bin/ipprrp053.4rp
new file mode 100644
index 0000000..815a3fd
--- /dev/null
+++ b/PROYECTO/bin/ipprrp053.4rp
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/bin/ipprrp054.4rp b/PROYECTO/bin/ipprrp054.4rp
new file mode 100644
index 0000000..ef90162
--- /dev/null
+++ b/PROYECTO/bin/ipprrp054.4rp
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/bin/lqprrp004.4rp b/PROYECTO/bin/lqprrp004.4rp
index 9ac921b..7e69d5f 100644
Binary files a/PROYECTO/bin/lqprrp004.4rp and b/PROYECTO/bin/lqprrp004.4rp differ
diff --git a/PROYECTO/ccdir/ccprmt008.4gl b/PROYECTO/ccdir/ccprmt008.4gl
index bac1802..77efb16 100644
--- a/PROYECTO/ccdir/ccprmt008.4gl
+++ b/PROYECTO/ccdir/ccprmt008.4gl
@@ -514,19 +514,28 @@ FUNCTION req_insert()
DEFINE ultimo,numeroOrden INT
# WHENEVER ERROR CONTINUE
- SELECT a.num_req INTO ultimo FROM cctb00019 a
-
+ # 05/10/2026 - consecutivo dentro de la transaccion con bloqueo
+ # (evita num_req duplicado en cctb00025, ver requisiciondespacho.4gl)
+ BEGIN WORK
+ PREPARE p_numreq FROM "SELECT ISNULL(MAX(num_req),0) FROM cctb00019 WITH (UPDLOCK, HOLDLOCK)"
+ EXECUTE p_numreq INTO ultimo
+ PREPARE p_maxreq FROM "SELECT ISNULL(MAX(num_req),0) FROM cctb00025 WITH (UPDLOCK, HOLDLOCK)"
+ EXECUTE p_maxreq INTO numeroOrden
+
IF ultimo IS NULL THEN
LET ultimo = 0
END IF
+ IF numeroOrden > ultimo THEN
+ LET ultimo = numeroOrden
+ END IF
+ LET numeroOrden = NULL
LET ultimo = ultimo + 1
LET requisicion.num_req = ultimo
-
- UPDATE cctb00019 SET num_req = requisicion.num_req,us_crea=usuarios,fech_crea=getdate()
-
+
+ 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
diff --git a/PROYECTO/ccdir/ccprmt008.4gl.bak20261005 b/PROYECTO/ccdir/ccprmt008.4gl.bak20261005
new file mode 100644
index 0000000..bac1802
--- /dev/null
+++ b/PROYECTO/ccdir/ccprmt008.4gl.bak20261005
@@ -0,0 +1,1362 @@
+{
+-----------------------------------------------------------------------------
+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
+
diff --git a/PROYECTO/ctdir/ctprrp004.4gl b/PROYECTO/ctdir/ctprrp004.4gl
index d0a0539..f21fdce 100644
--- a/PROYECTO/ctdir/ctprrp004.4gl
+++ b/PROYECTO/ctdir/ctprrp004.4gl
@@ -20,6 +20,7 @@ DEFINE HANDLER om.SaxDocumentHandler, -- return value from fgl_report_commitCurr
DEFINE selec5 STRING
DEFINE anos CHAR(4)
DEFINE jdx INTEGER
+DEFINE hay_filas SMALLINT
DEFINE fecha_inicio, fecha_corte, fecha1 DATE, reporte_tipo INT
MAIN
@@ -52,6 +53,7 @@ FUNCTION ctprrp004()
OPEN FORM ctfmrp004 FROM "ctfmrp004"
DISPLAY FORM ctfmrp004
+ CALL ui.Window.getCurrent().setText("Reporte Produccion Diaria")
CONSTRUCT criterio ON c.departamento, c.cod_prod FROM departamento, cod_prod
@@ -166,35 +168,42 @@ FUNCTION ctprrp004()
LET r_filename = 'ctprrp004.4rp'
- IF fgl_report_loadCurrentSettings(r_filename) THEN
- LET preview=1
- CALL selectoutput() RETURNING r_output
- CALL fgl_report_selectDevice(r_output) -- changing default
- CALL fgl_report_selectPreview(preview) -- changing default
- LET handler = fgl_report_commitCurrentSettings() -- commit changes
- END IF
-
- START REPORT reporte_detallado TO XML HANDLER HANDLER
-
LET fecha_actual = CURRENT YEAR TO FRACTION
DISPLAY selec5
-
+
PREPARE comando4 FROM selec5
DECLARE busca4 CURSOR FOR comando4
-
+ LET hay_filas = FALSE
+
FOREACH busca4 INTO prod_dia.*
- IF reporte_tipo <> 1 THEN
+ IF NOT hay_filas THEN
+ 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 reporte_detallado TO XML HANDLER HANDLER
+ LET hay_filas = TRUE
+ END IF
+
+ IF reporte_tipo <> 1 THEN
LET prod_dia.num_doc = 0
- LET prod_dia.fecha = CURRENT
- END IF
-
+ LET prod_dia.fecha = CURRENT
+ END IF
+
OUTPUT TO REPORT reporte_detallado(
prod_dia.*, fecha_inicio, fecha_corte, fecha_actual)
END FOREACH
- FINISH REPORT reporte_detallado
+ IF hay_filas THEN
+ FINISH REPORT reporte_detallado
+ ELSE
+ CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS", "INFO")
+ END IF
IF abortar_reporte THEN
RETURN
diff --git a/PROYECTO/ctdir/ctprrp014.4gl b/PROYECTO/ctdir/ctprrp014.4gl
index 4ff80f7..6dae2c3 100644
--- a/PROYECTO/ctdir/ctprrp014.4gl
+++ b/PROYECTO/ctdir/ctprrp014.4gl
@@ -20,6 +20,8 @@ DEFINE HANDLER om.SaxDocumentHandler, -- return value from fgl_report_commitCurr
DEFINE selec5 STRING
DEFINE anos STRING
+DEFINE hay_filas SMALLINT
+
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
@@ -55,6 +57,7 @@ FUNCTION ctprrp004()
OPEN FORM ctfmrp004 FROM "ctfmrp014"
DISPLAY FORM ctfmrp004
+ CALL ui.Window.getCurrent().setText("Reporte Produccion Mensual")
CONSTRUCT criterio ON c.cod_prod FROM cod_prod
@@ -128,33 +131,40 @@ FUNCTION ctprrp004()
LET r_filename = 'ctprrp014.4rp'
- IF fgl_report_loadCurrentSettings(r_filename) THEN
- LET preview=1
- CALL selectoutput() RETURNING r_output
- CALL fgl_report_selectDevice(r_output) -- changing default
- CALL fgl_report_selectPreview(preview) -- changing default
- LET handler = fgl_report_commitCurrentSettings() -- commit changes
- END IF
-
- START REPORT reporte_mensual TO XML HANDLER HANDLER
-
LET fecha_actual = CURRENT YEAR TO FRACTION
DISPLAY selec5
-
+
PREPARE comando4 FROM selec5
DECLARE busca4 CURSOR FOR comando4
-
+ LET hay_filas = FALSE
+
FOREACH busca4 INTO prod_dia.*
-
- IF prod_dia.semielaborado IS NULL THEN
+
+ IF NOT hay_filas THEN
+ 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 reporte_mensual TO XML HANDLER HANDLER
+ LET hay_filas = TRUE
+ END IF
+
+ IF prod_dia.semielaborado IS NULL THEN
LET abortar_reporte = TRUE;
- END IF
-
+ END IF
+
OUTPUT TO REPORT reporte_mensual(prod_dia.*, anos, fecha_actual);
END FOREACH
- FINISH REPORT reporte_mensual
+ IF hay_filas THEN
+ FINISH REPORT reporte_mensual
+ ELSE
+ CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS", "INFO")
+ END IF
IF abortar_reporte THEN
RETURN
diff --git a/PROYECTO/ipdir/IPPRRP048.4gl b/PROYECTO/ipdir/IPPRRP048.4gl
index 3defc37..c337d1e 100644
--- a/PROYECTO/ipdir/IPPRRP048.4gl
+++ b/PROYECTO/ipdir/IPPRRP048.4gl
@@ -75,6 +75,7 @@ FUNCTION ipprrp048()
OPEN FORM ipfmrp048 FROM "ipfmrp048"
DISPLAY FORM ipfmrp048
+ CALL ui.Window.getCurrent().setText("Transacciones de Inventario por Departamento")
DISPLAY "ipprrp048" AT 4,3
DISPLAY "Operacion Por Movimiento Detallado y Valorizado" AT 6,18
@@ -167,7 +168,7 @@ END INPUT
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview=1
- CALL seleccionarsalida() RETURNING r_output -- load the .4rp file
+ CALL selectOutputSimple() RETURNING r_output -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
@@ -296,5 +297,20 @@ FORMAT
PRINTX t_t_consumo,t_t_mtsAdicionales
END REPORT
+FUNCTION busca_departamento()
+ DEFINE
+ pdepartamento ui.combobox,
+ kdepartamento SMALLINT,
+ kdescripcion CHAR(30)
-
+ LET pdepartamento = ui.combobox.forname("formonly.departamento")
+ CALL pdepartamento.clear()
+ DECLARE pagar CURSOR FOR
+ SELECT departamento, nom_dpto
+ FROM adtb00001
+ WHERE status_t IS NULL
+ ORDER BY nom_dpto
+ FOREACH pagar INTO kdepartamento, kdescripcion
+ CALL pdepartamento.additem(kdepartamento, kdescripcion)
+ END FOREACH
+END FUNCTION
diff --git a/PROYECTO/ipdir/ipprrp013.4gl b/PROYECTO/ipdir/ipprrp013.4gl
index f193a07..9bc72e3 100644
--- a/PROYECTO/ipdir/ipprrp013.4gl
+++ b/PROYECTO/ipdir/ipprrp013.4gl
@@ -629,7 +629,7 @@ REPORT estadistica(x,dias2,c_dias)
FORMAT
FIRST PAGE HEADER
LET hora = time
- LET fecha = today
+ LET fecha = today
LET total_registros = 0
LET tcantidad = 0
LET fecha_v = NULL
@@ -653,14 +653,14 @@ REPORT estadistica(x,dias2,c_dias)
# BUSCA ULTIMA FECHA DE COMPRA Y VENTA DEL PRODUCTO
LET fecha_v = NULL
- SELECT convert(char(10),MAX(a.fecha_factura),103) INTO fecha_v
+ SELECT MAX(a.fecha_factura) INTO fecha_v
FROM vetb00003 d,vetb00002 a
WHERE d.factura = a.factura AND
d.cod_n=x.cod_n AND d.cod_grupo=x.cod_grupo AND
d.cod_tipo = x.cod_tipo AND d.cod_sec = x.cod_sec AND
a.status_t is NULL
LET fecha_oc = NULL
- SELECT ISNULL(convert(char(10),MAX(a.fech_oc),103)," ") INTO fecha_oc
+ SELECT MAX(a.fech_oc) INTO fecha_oc
FROM cotb00015 d,cotb00014 a
WHERE d.num_oc = a.num_oc AND
d.cod_n=x.cod_n AND d.cod_grupo=x.cod_grupo AND
diff --git a/PROYECTO/ipdir/ipprrp013.4rp b/PROYECTO/ipdir/ipprrp013.4rp
index cf4e3e4..3784afc 100644
--- a/PROYECTO/ipdir/ipprrp013.4rp
+++ b/PROYECTO/ipdir/ipprrp013.4rp
@@ -1,5 +1,5 @@
-
+
@@ -8,22 +8,26 @@
+
-
-
+
+
-
+
+
-
-
+
+
+
+
@@ -43,35 +47,33 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/PROYECTO/ipdir/ipprrp014.4gl b/PROYECTO/ipdir/ipprrp014.4gl
index aaf80b2..ffc0c7c 100644
--- a/PROYECTO/ipdir/ipprrp014.4gl
+++ b/PROYECTO/ipdir/ipprrp014.4gl
@@ -155,6 +155,7 @@ FUNCTION ipprrp013()
OPEN FORM ipfmrp014 FROM "ipfmrp014"
DISPLAY FORM ipfmrp014
+ CALL ui.Window.getCurrent().setText("Dias de Inventarios Gerente Marcas")
DISPLAY "ipprrp014" AT 4, 3 ATTRIBUTE(RED)
DISPLAY "Dias de Inventarios Gerente Marcas" AT 6, 33 ATTRIBUTE(BLACK)
@@ -282,8 +283,8 @@ FUNCTION ipprrp013()
LET select_bal =
"SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.descrip_esp,",
" a.unidad_med, '0', d.descripcion, ' ', x.cod_categoria, x.descripcion,",
- " convert(char(10), uv.fecha_v, 103),",
- " convert(char(10), uc.fecha_oc, 103),",
+ " uv.fecha_v,",
+ " uc.fecha_oc,",
" ISNULL(uc.tcantidad, 0)",
" FROM iptb00002 a",
" INNER JOIN iptb00035 x1 ON a.cod_n = x1.cod_n",
diff --git a/PROYECTO/ipdir/ipprrp014.4rp b/PROYECTO/ipdir/ipprrp014.4rp
new file mode 100644
index 0000000..1ef56ed
--- /dev/null
+++ b/PROYECTO/ipdir/ipprrp014.4rp
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/ipdir/ipprrp046.4gl b/PROYECTO/ipdir/ipprrp046.4gl
index a616398..8c8e3a6 100644
--- a/PROYECTO/ipdir/ipprrp046.4gl
+++ b/PROYECTO/ipdir/ipprrp046.4gl
@@ -53,6 +53,7 @@ FUNCTION ipprrp046()
OPEN FORM ipfmrp046 FROM "ipfmrp046"
DISPLAY FORM ipfmrp046
+ CALL ui.Window.getCurrent().setText("Relacion de Documentos")
# CALL pantalla()
DISPLAY "ipprrp046" AT 4,3 ATTRIBUTE(RED)
DISPLAY " Relacion de Documentos" AT 6,22 ATTRIBUTE(BLACK)
@@ -110,8 +111,8 @@ END INPUT
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
- CALL seleccionarsalida() RETURNING r_output
- CALL configureoutput(r_output) RETURNING handler
+ CALL selectOutputSimple() RETURNING r_output
+ LET handler = configurarSalidaClasica(r_output)
START REPORT relacion TO XML HANDLER handler
@@ -241,3 +242,16 @@ END FUNCTION
ON LAST ROW
END REPORT
+
+FUNCTION configurarSalidaClasica(tipo_file)
+ DEFINE tipo_file CHAR(3)
+ IF NOT fgl_report_loadCurrentSettings(NULL) THEN
+ RETURN NULL
+ END IF
+ CALL fgl_report_setPageMargins("0.5cm", "0.5cm", "0.5cm", "0.5cm")
+ CALL fgl_report_configureCompatibilityOutput(160,"Monospaced",NULL,NULL,NULL,NULL)
+ CALL fgl_report_selectDevice(tipo_file)
+ CALL fgl_report_configurexlsxdevice(NULL, NULL, NULL, FALSE, FALSE, NULL, 1)
+ CALL fgl_report_selectPreview(TRUE)
+ RETURN fgl_report_commitCurrentSettings()
+END FUNCTION
diff --git a/PROYECTO/ipdir/ipprrp047.4gl b/PROYECTO/ipdir/ipprrp047.4gl
index 218cc4f..3344b7a 100644
--- a/PROYECTO/ipdir/ipprrp047.4gl
+++ b/PROYECTO/ipdir/ipprrp047.4gl
@@ -78,6 +78,7 @@ FUNCTION ipprrp047()
OPEN FORM ipfmrp047 FROM "ipfmrp047"
DISPLAY FORM ipfmrp047
+ CALL ui.Window.getCurrent().setText("Transacciones de Inventario")
DISPLAY "ipprrp047" AT 4,3
DISPLAY "Operacion Por Movimiento Detallado y Valorizado" AT 6,18
@@ -200,7 +201,7 @@ END IF
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview=1
- CALL seleccionarsalida() RETURNING r_output -- load the .4rp file
+ CALL selectOutputSimple() RETURNING r_output -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
@@ -504,5 +505,20 @@ FORMAT
END REPORT
+FUNCTION busca_departamento()
+ DEFINE
+ pdepartamento ui.combobox,
+ kdepartamento SMALLINT,
+ kdescripcion CHAR(30)
-
+ LET pdepartamento = ui.combobox.forname("formonly.departamento")
+ CALL pdepartamento.clear()
+ DECLARE pagar CURSOR FOR
+ SELECT departamento, nom_dpto
+ FROM adtb00001
+ WHERE status_t IS NULL
+ ORDER BY nom_dpto
+ FOREACH pagar INTO kdepartamento, kdescripcion
+ CALL pdepartamento.additem(kdepartamento, kdescripcion)
+ END FOREACH
+END FUNCTION
diff --git a/PROYECTO/ipdir/ipprrp047.4rp b/PROYECTO/ipdir/ipprrp047.4rp
new file mode 100644
index 0000000..cca4f05
--- /dev/null
+++ b/PROYECTO/ipdir/ipprrp047.4rp
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/ipdir/ipprrp048.4rp b/PROYECTO/ipdir/ipprrp048.4rp
new file mode 100644
index 0000000..09a0137
--- /dev/null
+++ b/PROYECTO/ipdir/ipprrp048.4rp
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/ipdir/ipprrp051.4gl b/PROYECTO/ipdir/ipprrp051.4gl
index e010a38..0996f0a 100644
--- a/PROYECTO/ipdir/ipprrp051.4gl
+++ b/PROYECTO/ipdir/ipprrp051.4gl
@@ -87,6 +87,7 @@ FUNCTION ipprrp051()
OPEN FORM ipfmrp051 FROM "ipfmrp051"
DISPLAY FORM ipfmrp051
+ CALL ui.Window.getCurrent().setText("Transacciones de Inventario")
DISPLAY "ipprrp051" AT 4, 3
DISPLAY "Operacion Por Movimiento Detallado y Valorizado" AT 6, 18
@@ -186,8 +187,7 @@ FUNCTION ipprrp051()
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview = 1
- CALL seleccionarsalida()
- RETURNING r_output -- load the .4rp file
+ CALL selectOutputSimple() RETURNING r_output -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler =
@@ -381,3 +381,21 @@ REPORT opera(x, y)
LET t_t_mtsAdicionales = SUM(x.mtsAdicionales)
PRINTX t_t_consumo, t_t_mtsAdicionales
END REPORT
+
+FUNCTION busca_departamento()
+ DEFINE
+ pdepartamento ui.combobox,
+ kdepartamento SMALLINT,
+ kdescripcion CHAR(30)
+
+ LET pdepartamento = ui.combobox.forname("formonly.departamento")
+ CALL pdepartamento.clear()
+ DECLARE pagar CURSOR FOR
+ SELECT departamento, nom_dpto
+ FROM adtb00001
+ WHERE status_t IS NULL
+ ORDER BY nom_dpto
+ FOREACH pagar INTO kdepartamento, kdescripcion
+ CALL pdepartamento.additem(kdepartamento, kdescripcion)
+ END FOREACH
+END FUNCTION
diff --git a/PROYECTO/ipdir/ipprrp051.4rp b/PROYECTO/ipdir/ipprrp051.4rp
new file mode 100644
index 0000000..f2da80f
--- /dev/null
+++ b/PROYECTO/ipdir/ipprrp051.4rp
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/ipdir/ipprrp053.4gl b/PROYECTO/ipdir/ipprrp053.4gl
index d0bc967..793407e 100644
--- a/PROYECTO/ipdir/ipprrp053.4gl
+++ b/PROYECTO/ipdir/ipprrp053.4gl
@@ -43,6 +43,7 @@ FUNCTION ipprrp053()
OPEN FORM ipfmrp053 FROM "ipfmrp053"
DISPLAY FORM ipfmrp053
+ CALL ui.Window.getCurrent().setText("Informe Transacciones Inventarios")
INPUT BY NAME fecha1, fecha2
@@ -112,7 +113,7 @@ FUNCTION ipprrp053()
LET r_filename = "ipprrp053.4rp"
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview = 1
- CALL selectoutput() RETURNING r_output
+ CALL selectOutputSimple() RETURNING r_output
CALL fgl_report_selectDevice(r_output)
CALL fgl_report_selectPreview(preview)
LET handler = fgl_report_commitCurrentSettings()
diff --git a/PROYECTO/ipdir/ipprrp053.4rp b/PROYECTO/ipdir/ipprrp053.4rp
new file mode 100644
index 0000000..815a3fd
--- /dev/null
+++ b/PROYECTO/ipdir/ipprrp053.4rp
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/ipdir/ipprrp054.4gl b/PROYECTO/ipdir/ipprrp054.4gl
index 815c8ce..c29bc7e 100644
--- a/PROYECTO/ipdir/ipprrp054.4gl
+++ b/PROYECTO/ipdir/ipprrp054.4gl
@@ -34,6 +34,7 @@ FUNCTION ipprrp054()
OPEN FORM ipfmrp054 FROM "ipfmrp054"
DISPLAY FORM ipfmrp054
+ CALL ui.Window.getCurrent().setText("Conduces con y sin Archivo")
INPUT BY NAME fecha1,fecha2
BEFORE INPUT
AFTER INPUT
@@ -50,27 +51,34 @@ FUNCTION ipprrp054()
LET r_filename = "ipprrp054.4rp"
- CALL seleccionarsalida() RETURNING r_output
- iF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
-
-
- LET preview=1
- CALL fgl_report_selectDevice(r_output) -- changing default
- CALL fgl_report_selectPreview(preview) -- changing default
-
- LET handler = fgl_report_commitCurrentSettings() -- commit changes
- ELSE
- EXIT PROGRAM
- END IF
- START REPORT prt_co TO XML HANDLER HANDLER
- PREPARE comando FROM selec
- DECLARE busca CURSOR FOR comando
- OPEN busca USING fecha1,fecha2
+ PREPARE comando FROM selec
+ DECLARE busca CURSOR FOR comando
+ OPEN busca USING fecha1,fecha2
+ LET idx = 0
+
+ FOREACH busca INTO co.*
+ IF idx = 0 THEN
+ CALL selectOutputSimple() RETURNING r_output
+ IF fgl_report_loadCurrentSettings(r_filename) THEN
+ LET preview = 1
+ CALL fgl_report_selectDevice(r_output)
+ CALL fgl_report_selectPreview(preview)
+ LET handler = fgl_report_commitCurrentSettings()
+ ELSE
+ EXIT PROGRAM
+ END IF
+ START REPORT prt_co TO XML HANDLER HANDLER
+ LET idx = 1
+ END IF
+ OUTPUT TO REPORT prt_co(co.*)
+ END FOREACH
+
+ IF idx = 1 THEN
+ FINISH REPORT prt_co
+ ELSE
+ CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS", "INFO")
+ END IF
- FOREACH busca INTO co.*
- OUTPUT TO REPORT prt_co(co.*)
- END FOREACH
- FINISH REPORT prt_co
END INPUT
END FUNCTION
diff --git a/PROYECTO/ipdir/ipprrp054.4rp b/PROYECTO/ipdir/ipprrp054.4rp
new file mode 100644
index 0000000..ef90162
--- /dev/null
+++ b/PROYECTO/ipdir/ipprrp054.4rp
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PROYECTO/lqdir/lqprrp004.4gl b/PROYECTO/lqdir/lqprrp004.4gl
index a58d13b..dc89e0e 100644
--- a/PROYECTO/lqdir/lqprrp004.4gl
+++ b/PROYECTO/lqdir/lqprrp004.4gl
@@ -1,2 +1,823 @@
-{==============================================================================
PROGRAMA : LQPRRP004
SISTEMA : Sistema de Liquidacion Materiales
Objetivo : Liquidacion Mercancia Compras Exterior Prod. Terminados
PROGRAMADOR : Juan F. Soto
FECHA : Mayo 13, 1994
MODIFICADO : VALENTIN RODRIGUEZ
FECHA : MAYO, 2019
==============================================================================}
-GLOBALS "lqprgb000.4gl" ###### Variables para busqueda de rango de fecha
DEFINE elije,imp,afecta,tipo_inventario CHAR(1)
DEFINE p_ano,m_mes SMALLINT
DEFINE fecha1, fecha2 DATE ,
p_fecha CHAR(10)
DEFINE entra CHAR(25)
DEFINE t_costst DECIMAL(12,2)
DEFINE detalla CHAR(30)
DEFINE orden CHAR(10)
DEFINE t_variacion DECIMAL(12,2)
DEFINE debe, haber DECIMAL(12,2),
idz INT
###### Variables que la almacenan la informacion enviada al reporte
DEFINE diario1 RECORD
cuenta_no LIKE cgtb00001.cuenta_no,
debito DECIMAL(18,2)
END RECORD
DEFINE i SMALLINT
DEFINE fecha_inicial,fecha_final DATE
DEFINE primera,imp_entrada CHAR(1)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_compania.* FROM companias a
CALL lqprrp004()
END MAIN
FUNCTION lqprrp004()
DEFINE busca_datos RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descripcion CHAR(30),
unidad CHAR(3),
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
proveedor CHAR(7),
num_doc INTEGER,
num_oc INTEGER,
tipo CHAR(2),
cantidad DECIMAL(12,5),
precio DECIMAL(12,5),
flete DECIMAL(12,5),
imp_colect DECIMAL(12,5),
imp_aduana DECIMAL(12,5),
tasa DECIMAL(8,2),
cost_std LIKE intb00013.costo_st
END RECORD
LET int_flag = FALSE
OPTIONS
FORM LINE 8
OPEN FORM lqfmrp004 FROM "lqfmrp004"
DISPLAY FORM lqfmrp004
DISPLAY "lqprrp004" AT 4,3
DISPLAY "Liquidacion Mercancia pt" AT 6,28
LET tipo_papel = 2
CALL msgrp000(tipo_papel)
CONSTRUCT criterio ON c.num_oc,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec
FROM num_oc,cod_n,cod_grupo,cod_tipo,cod_sec
AFTER CONSTRUCT
IF INT_FLAG THEN
CALL msg(2)
LET INT_FLAG = FALSE
EXIT PROGRAM
END IF
EXIT CONSTRUCT
END CONSTRUCT
INPUT BY NAME tipo_inventario, p_ano,m_mes,elije,imp_entrada,imp
AFTER FIELD m_mes
SELECT fecha_inicio, fecha_corte INTO fecha_inicial,fecha_final
FROM prdtable where mes = m_mes AND ano = p_ano
DISPLAY BY NAME fecha_inicial,fecha_final
LET p_fechas = fecha_final using "ddmmyyyy"
CALL prd(p_fechas,usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
# NEXT FIELD p_ano
END IF
AFTER INPUT
EXIT INPUT
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET chstd = FGL_WINQUESTION("PREGUNTA","Actualiza Costos STD?","yes","Yes|no","question",0)
LET chstd = UPSHIFT(chstd)
LET primera = "S"
IF tipo_inventario = '2' THEN
LET selec =
"SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
" a.unidad_med,b.cod_sp,b.cod_sp_sec,b.nom_sp,c.rep_entrada,c.num_oc, ",
" c.tipo,c.cantidad_oc,c.cantidad_oc*c.fob,c.costo_flete,c.impuesto,c.otros_g,d.prima_us ",
"FROM iptb00002 a,cotb00001 b,cgtb00018 c,cgtb00017 d ",
"WHERE (a.cod_n = c.cod_n and a.cod_grupo = c.cod_grupo and ",
" a.cod_tipo = c.cod_tipo and a.cod_sec = c.cod_sec) AND ",
" (d.fecha between '", fecha_inicial USING "MM/DD/YYYY","' and '",
fecha_final USING "MM/DD/YYYY","') and ",
" (c.num_oc = d.num_oc) and (c.tipo=d.tipo) and (d.cod_sp=b.cod_sp AND ",
" d.cod_sp_sec = b.cod_sp_sec) and (c.rep_entrada = d.rep_entrada) and ",
" (c.status_t is null) and d.liquidada='",elije,"' and c.tipo = '2' ",
" AND (a.status_t IS NULL) AND (d.status_t IS NULL) and ",
criterio CLIPPED,
" ORDER BY c.num_oc,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
ELSE
LET selec =
"SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
" a.unidad_med,b.cod_sp,b.cod_sp_sec,b.nom_sp,c.rep_entrada,c.num_oc, ",
" c.tipo,c.cantidad_oc,c.cantidad_oc*c.fob,c.costo_flete,c.impuesto,c.otros_g,d.prima_us ",
"FROM intb00001 a,cotb00001 b,cgtb00018 c,cgtb00017 d ",
"WHERE (a.cod_n = c.cod_n and a.cod_grupo = c.cod_grupo and ",
" a.cod_tipo = c.cod_tipo and a.cod_sec = c.cod_sec) AND ",
" (d.fecha between '", fecha_inicial USING "MM/dd/YYYY","' and '",
fecha_final USING "MM/dd/YYYY","') and ",
" (c.num_oc = d.num_oc) and (c.tipo=d.tipo) and (d.cod_sp=b.cod_sp AND ",
" d.cod_sp_sec = b.cod_sp_sec) and (c.rep_entrada = d.rep_entrada) and ",
" (c.status_t is null) and d.liquidada='",elije,"' and c.tipo = 1 ",
" AND (a.status_t IS NULL) AND (d.status_t IS NULL) and ",
criterio CLIPPED,
" ORDER BY c.num_oc,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
END IF
DISPLAY selec
DISPLAY "elije ",elije
LET idx = 1
PREPARE comando FROM selec
DECLARE busca CURSOR FOR comando
INSERT INTO cttb000log1 VALUES (GETDATE(),usuarios,'lqprrp004','ELIMINO')
FOREACH busca INTO busca_datos.*
DISPLAY "datos ",busca_datos.cod_sp_sec," ",busca_datos.descripcion
LET orden = busca_datos.num_oc USING "<<<<<<"
IF busca_datos.imp_colect is null THEN
LET busca_datos.imp_colect = 0
END IF
IF busca_datos.imp_colect < 0 THEN
LET busca_datos.imp_colect = busca_datos.imp_colect * -1
END IF
IF busca_datos.imp_aduana is null THEN
LET busca_datos.imp_aduana = 0
END IF
IF busca_datos.imp_aduana < 0 THEN
LET busca_datos.imp_aduana = busca_datos.imp_aduana * -1
END IF
# Busca el costos standard
LET busca_datos.cost_std = 0
IF tipo_inventario = '2' THEN
SELECT AVG(a.material+a.labor+a.gastos) INTO busca_datos.cost_std
FROM iptb00004 a
WHERE a.ventas = "1" and
a.ano = year(fecha_inicial) and a.cod_n = busca_datos.cod_n and
a.cod_grupo = busca_datos.cod_grupo and
a.cod_tipo = busca_datos.cod_tipo and
a.cod_sec = busca_datos.cod_sec and a.status_t is NULL
ELSE
SELECT AVG(a.costo_st) INTO busca_datos.cost_std
FROM intb00013 a
WHERE a.ano = year(fecha_inicial) and a.cod_n = busca_datos.cod_n and
a.cod_grupo = busca_datos.cod_grupo and
a.cod_tipo = busca_datos.cod_tipo and
a.cod_sec = busca_datos.cod_sec and a.status_t is NULL
END IF
IF STATUS = NOTFOUND THEN
LET busca_datos.cost_std = 0
END IF
IF busca_datos.cost_std is null THEN
LET busca_datos.cost_std = 0
END IF
IF chstd = "yes" THEN
DELETE FROM cttb00013 WHERE (fecha_lq = fecha_final AND
tipo_lq = elije AND
tipo_orden = 2 AND
num_oc = busca_datos.num_oc)
END IF
IF imp="S" THEN
LET r_filename ="lqprrp004.4rp"
IF idx = 1 THEN
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview=1
CALL seleccionarsalida() RETURNING r_output -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
# CALL fgl_report_configurexlsxdevice(null,null,null,false,false,null,1)
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
LET idx = 2
START REPORT liquida1 TO XML HANDLER HANDLER
END IF
DISPLAY "DATOS "
OUTPUT TO REPORT liquida1(busca_datos.*)
END IF
END FOREACH
IF imp = "S" THEN
IF idx > 1 THEN
FINISH REPORT liquida1
END IF
END IF
IF imp_entrada = "S" THEN
CALL edprrp0271()
END IF
END FUNCTION
REPORT liquida1(x)
DEFINE x RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descripcion CHAR(30),
unidad CHAR(3),
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
proveedor CHAR(7),
num_doc INTEGER,
num_oc INTEGER,
tipo CHAR(2),
cantidad DECIMAL(12,5),
precio DECIMAL(12,5),
flete DECIMAL(12,5),
imp_colect DECIMAL(12,5),
imp_aduana DECIMAL(12,5),
tasa DECIMAL(8,2),
cost_std LIKE intb00013.costo_st
END RECORD
DEFINE valor DECIMAL(12,2)
DEFINE variacion,precio_std,fob,c_f,seguro,cost_pl,
t_fob,t_flete,t_seguro,t_cf,t_impcol,t_impaduana,t_dollar,
t_costopl,t_recibida,t_precio,o_variacion
DECIMAL(12,2)
DEFINE no_reg SMALLINT
DEFINE total_cf,t_costo, costo_unit DECIMAL(12,2),
o_impaduana,o_impcolect,o_dollar,o_cf
DECIMAL(12,2)
DEFINE ot_fob,
ot_flete,
ot_cf,
ot_seguro,
ot_impcol,
ot_impaduana,
ot_dollar,
ot_costopl,
ot_costo,
ot_precio,
ot_costst,
ot_variacion DECIMAL(12,2)
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE hora CHAR(5)
DEFINE fechaActual, orden_tipo CHAR(12)
DEFINE codigo CHAR(25)
DEFINE codigos_sp, tituloFecha CHAR(25)
DEFINE material,titulo STRING
{OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 3
PAGE LENGTH 150}
FORMAT
PAGE HEADER
LET hora = TIME
LET fechaActual = today using "dd/mm/yy"
IF tipo_inventario = '2' THEN
LET titulo = 'Liquidacion Mercancias Productos Terminados'
ELSE
LET titulo = 'Liquidacion Mercancias Materia Prima'
END IF
IF primera = "S" THEN
LET t_fob = 0
LET t_flete = 0
LET t_seguro = 0
LET t_cf = 0
LET t_impcol = 0
LET t_impaduana = 0
LET t_dollar = 0
LET t_costopl = 0
LET t_recibida = 0
LET t_costo = 0
LET t_precio = 0
LET t_costst = 0
LET t_variacion = 0
LET o_variacion = 0
LET primera = "N"
LET idz = 1
END IF
BEFORE GROUP OF x.num_oc
IF total_cf is null THEN
LET total_cf = 0
END IF
LET ot_fob =0
LET ot_flete =0
LET ot_cf =0
LET ot_seguro =0
LET ot_impcol =0
LET ot_impaduana =0
LET ot_dollar =0
LET ot_costopl =0
LET ot_costo =0
LET ot_precio =0
LET ot_costst =0
LET ot_variacion =0
LET tituloFecha = "Del ",fecha_inicial USING "dd/mm/yy"," Al ", fecha_final USING "dd/mm/yy"
## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
PRINTX p_compania.nombre, hora,tituloFecha, fechaActual,fecha_inicial USING "dd/mm/yy",
fecha_final USING "dd/mm/yy",titulo
ON EVERY ROW
LET seguro = 0
LET codigo = x.cod_n using "&&&&&","-",x.cod_grupo using "&&&&&","-",
x.cod_tipo using "&&&&&","-",x.cod_sec using "&&&&&"
LET codigos_sp = x.cod_sp using "&&","-",x.cod_sp_sec using "&&&&"
LET orden_tipo = x.num_oc using "&&&&&","-",x.tipo
SELECT CONVERT(CHAR(10),MIN(a.fecha),101) INTO p_fecha FROM iptb00006 a
WHERE a.num_doc = x.num_doc and cod_mov in (10) AND status_t IS NULL
LET fob = x.precio
LET c_f = fob + x.flete
LET valor = c_f * x.tasa
IF elije = "L" THEN
LET seguro = 0
END IF
IF no_reg > 1 THEN
LET x.imp_aduana = (x.imp_aduana / total_cf) * c_f
LET x.imp_colect = (x.imp_colect / total_cf) * c_f
END IF
LET cost_pl = seguro + c_f + x.imp_colect + x.imp_aduana + valor
LET costo_unit = cost_pl / x.cantidad
LET precio_std = x.cantidad * x.cost_std
LET variacion = cost_pl - precio_std
LET material = "(",codigo,")","-",x.descripcion CLIPPED
PRINTX material, codigos_sp,x.proveedor, orden_tipo,
fob, x.flete, c_f, seguro, x.imp_colect, x.imp_aduana,
valor, cost_pl, x.cantidad, costo_unit, x.cost_std, precio_std,
variacion
IF tipo_inventario = '2' THEN
IF chstd = "YES" THEN
SELECT UNIQUE a.cod_n FROM iptb00004 a
WHERE a.cod_n = x.cod_n AND
a.cod_grupo = x.cod_grupo AND
a.cod_tipo = x.cod_tipo AND
a.cod_sec = x.cod_sec AND
a.ano = p_ano and
a.mes_ini = 1 AND
a.mes_fin = 12
IF STATUS = NOTFOUND THEN
INSERT INTO iptb00004 (ventas,mes_ini,mes_fin,ano,cod_n,cod_grupo,cod_tipo,cod_Sec,material,labor,gastos,us_crea,fech_crea)
VALUES ('1','01','12',p_ano,x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec,costo_unit,0,0,SUSER_SNAME(),GETDATE())
END IF
END IF
ELSE
IF chstd = "YES" THEN
SELECT UNIQUE a.cod_n FROM intb00013 a
WHERE a.cod_n = x.cod_n AND
a.cod_grupo = x.cod_grupo AND
a.cod_tipo = x.cod_tipo AND
a.cod_sec = x.cod_sec AND
a.ano = p_ano AND
a.mes_ini = 1 AND
a.mes_fin = 12
IF STATUS = NOTFOUND THEN
INSERT INTO intb00013 VALUES ('01','12',p_ano,x.cod_n,x.cod_grupo,x.cod_tipo,
x.cod_sec,costo_unit,null,SUSER_SNAME(),GETDATE(),null,
NULL)
END IF
END IF
END IF
INSERT INTO cttb00013 (fecha_lq,fecha,tipo_lq,num_oc,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,costo_lq,status_t,us_crea,fech_crea,tipo_orden)
VALUES (fecha_final,p_fecha,elije,x.num_oc,x.cod_n,x.cod_grupo,x.cod_tipo,
x.cod_sec,x.cantidad,costo_unit,null,usuarios,GETDATE(),x.tipo)
INSERT INTO cttb000log2
(fecha_lq,fecha,tipo_lq,num_oc,cod_n,cod_grupo,cod_tipo,cod_sec)
VALUES (fecha_final,p_fecha,elije,x.num_oc,x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec)
# Acumulacion de totales
IF o_impaduana is null THEN
LET o_impaduana = 0
END IF
IF o_variacion is null THEN
LET o_variacion = 0
END IF
IF o_impcolect is null THEN
LET o_impcolect = 0
END IF
IF o_dollar is null THEN
LET o_dollar = 0
END IF
IF o_cf is null THEN
LET o_cf = 0
END IF
LET t_fob = t_fob + fob
LET t_flete = t_flete + x.flete
LET t_seguro = t_seguro + seguro
LET t_cf = t_cf + c_f
LET t_impcol = t_impcol + x.imp_colect
LET t_impaduana = t_impaduana + x.imp_aduana
LET t_dollar = t_dollar + valor
LET t_costopl = t_costopl + cost_pl
LET t_costo = t_costo + costo_unit
LET t_precio = t_precio + x.cost_std
LET t_costst = t_costst + precio_std
LET t_variacion = t_variacion + variacion
LET o_variacion = o_variacion + cost_pl
LET o_impaduana = o_impaduana + x.imp_aduana + seguro
LET o_impcolect = o_impcolect + x.imp_colect
LET o_dollar = o_dollar + valor
LET o_cf = o_cf + c_f
LET ot_fob = ot_fob + fob
LET ot_flete = ot_flete + x.flete
LET ot_cf = ot_cf + c_f
LET ot_seguro = ot_seguro + seguro
LET ot_impcol = ot_impcol + x.imp_colect
LET ot_impaduana = ot_impaduana + x.imp_aduana
LET ot_dollar = ot_dollar + valor
LET ot_costopl = ot_costopl + cost_pl
LET ot_costo = ot_costo + costo_unit
LET ot_precio = ot_precio + x.cost_std
LET ot_costst = ot_costst + precio_std
LET ot_variacion = ot_variacion + variacion
AFTER GROUP OF x.num_oc
# Validacion del arreglo para imprimir la entrada 27
IF imp_entrada = "S" THEN
LET entrada27[idz].cuenta_no = "1161"
LET entrada27[idz].cod_aux = x.cod_sp
LET entrada27[idz].cod_sec = x.cod_sp_sec
LET entrada27[idz].num_doc = x.num_oc
LET entrada27[idz].valor = o_impaduana
LET o_impaduana = 0
LET idz = idz + 1
LET entrada27[idz].cuenta_no = "1161-01"
LET entrada27[idz].cod_aux = x.cod_sp
LET entrada27[idz].cod_sec = x.cod_sp_sec
LET entrada27[idz].num_doc = x.num_oc
LET entrada27[idz].valor = o_impcolect
LET o_impcolect = 0
LET idz = idz + 1
LET entrada27[idz].cuenta_no = "1161-02"
LET entrada27[idz].cod_aux = x.cod_sp
LET entrada27[idz].cod_sec = x.cod_sp_sec
LET entrada27[idz].num_doc = x.num_oc
LET entrada27[idz].valor = o_dollar
LET o_dollar = 0
LET idz = idz + 1
LET entrada27[idz].cuenta_no = "1161-03"
LET entrada27[idz].cod_aux = x.cod_sp
LET entrada27[idz].cod_sec = x.cod_sp_sec
LET entrada27[idz].num_doc = x.num_oc
LET entrada27[idz].valor = o_cf
LET o_cf = 0
LET idz = idz + 1
END IF
PRINTX ot_fob,ot_flete,ot_cf,ot_seguro,ot_impcol,ot_impaduana, ot_dollar,
ot_costopl,ot_costo, ot_precio,ot_costst,ot_variacion
ON LAST ROW
PRINTX t_fob, t_flete, t_cf,t_seguro,t_impcol,t_impaduana,t_dollar,
t_costopl,t_costo,t_precio,t_costst,t_variacion
LET o_impaduana = 0
LET o_impcolect = 0
LET o_dollar = 0
LET o_cf = 0
END REPORT
{-------------------------------------------------------------------------------
PROGRAMA : EDPRRP027
OBJETIVO : Listar las Entrada de Diario Productos Terminados
PROGRAMADOR : Juan F. Soto
FECHA REALIZACION : Mayo 20, 1994.
-------------------------------------------------------------------------------}
FUNCTION edprrp0271()
#WHENEVER ERROR CONTINUE
DEFINE longitud,u_mes,numero_ent,i SMALLINT,
ch_ano CHAR(4)
LET r_filename ="lqprrp004b.4rp"
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
##### Abriendo y desplegando el formulario de captura de datos
OPEN FORM edfmrp027 FROM "edfmrp027"
DISPLAY FORM edfmrp027
{ DISPLAY "edprrp027" AT 4,3
DISPLAY "Entrada de Diario Mat. Importada Rec." AT 6,21}
{ LET tipo_papel = 1
CALL msgrp000(tipo_papel)}
###### Aceptando los valores para el rango de fecha
INPUT BY NAME entra,fecha1,fecha2,afecta,detalla
BEFORE INPUT
LET numero_ent = 27
LET fecha1 =fecha_inicial
LET fecha2 =fecha_final
DISPLAY BY NAME fecha1,fecha2
CALL controlNumericoED(numero_ent, fecha1, NULL) RETURNING entra
DISPLAY BY NAME entra
AFTER FIELD entra
LET longitud = LENGTH(entra)
IF longitud != 16 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD entra
END IF
LET existe = "N"
SELECT unique a.ref FROM cgtb00004 a WHERE a.ref = entra
IF STATUS != NOTFOUND THEN
LET existe = "S"
END IF
AFTER FIELD fecha1
IF fecha1 IS NULL THEN
ERROR "(16) CAMPO EN BLANCO"
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
AFTER INPUT
IF int_flag THEN
ERROR "(2) OPERACION CANCELADA"
LET int_flag = false
RETURN
END IF
IF fecha2 > TODAY THEN
CALL msg(57)
END IF
END INPUT
##### Creando la facilidad para cancelar proceso con DELETE O SUPR
LET i = 1
{CALL configureoutput("XLS") RETURNING handler
START REPORT entrada271 TO XML HANDLER handler}
IF i = 1 THEN
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview=1
CALL seleccionarsalida() RETURNING r_output -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
LET i = 2
START REPORT entrada271 TO XML HANDLER HANDLER
END IF
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
##### Loop para enviar informacion al reporte
LET diario1.debito = t_costst
IF tipo_inventario = "2" THEN
LET diario1.cuenta_no = "1131-02"
ELSE
LET diario1.cuenta_no = "1151"
END IF
OUTPUT TO REPORT entrada271(diario1.*,fecha1,fecha2,detalla,entra)
IF i > 1 THEN
FINISH REPORT entrada271
END IF
END FUNCTION
#### Funcion para dar salida ordenada a la informacion requerida de
#### una entrada de diario de nominas local
REPORT entrada271(x,fecha1,fecha2,detalle1,entrada)
DEFINE x RECORD
cuenta_no LIKE cgtb00001.cuenta_no,
debito DECIMAL(10,2)
END RECORD
### Acumula los valores de las diferentes cuentas para entrada diario de nomina
DEFINE debito,credito DECIMAL(12,2)
DEFINE detalle1 CHAR(30)
DEFINE fecha1,fecha2 DATE #### Almacena las fecha del rango de busqueda
DEFINE cod_aux_sec CHAR(6)
DEFINE doce CHAR(2)
DEFINE hora,referencia CHAR(5)
DEFINE entrada CHAR(25),
nombre_cta LIKE cgtb00001.descripcion
DEFINE fechaActual CHAR(12)
{ OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
PAGE LENGTH 150}
FORMAT
PAGE HEADER
LET hora = TIME
LET fechaActual = today using "dd/mm/yy"
##### Selecionado la descripcion del fecha
BEFORE GROUP OF x.cuenta_no
PRINTX p_compania.nombre,hora,fechaActual,fecha1,fecha2,entrada,doce
ON EVERY ROW
SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a
WHERE a.cuenta_no = x.cuenta_no
IF debito is null THEN
LET debito = 0
END IF
PRINTX x.cuenta_no, x.debito, nombre_cta
LET debito = debito + x.debito
IF afecta = "S" THEN
IF x.cuenta_no IS NOT NULL THEN
BEGIN WORK
CALL controlNumericoED(numero_ent, fecha1, usuarios) RETURNING entra
DISPLAY BY NAME entra
LET entrada = entra
INSERT INTO cgtb00004
(fecha,tipo,ref,cuenta_no,detalle_1,debito,credito,us_crea,fech_crea)
VALUES(fecha2,1,entrada,x.cuenta_no,detalle1,x.debito,0,usuarios,GETDATE())
END IF
END IF
ON LAST ROW
IF tipo_inventario = "2" THEN
SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a
WHERE a.cuenta_no = "5615"
LET debe = 0
LET haber = 0
LET referencia = "5615"
ELSE
SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a
WHERE a.cuenta_no = "1152"
LET debe = 0
LET haber = 0
LET referencia = "1152"
END IF
IF credito is null THEN
LET credito = 0
END IF
IF debito is null THEN
LET debito = 0
END IF
IF t_variacion > 0 THEN
LET debito = debito + t_variacion
LET debe = t_variacion
IF afecta = "S" THEN
IF tipo_inventario = "2" THEN
INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito
,credito,us_crea,fech_crea)
VALUES(fecha2,1,entrada,"5615",detalle1,t_variacion,0,usuarios,GETDATE())
ELSE
INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito
,credito,us_crea,fech_crea)
VALUES(fecha2,1,entrada,"1152",detalle1,t_variacion,0,usuarios,GETDATE())
END IF
END IF
ELSE
LET t_variacion = t_variacion * -1
LET credito = credito + t_variacion
LET haber = t_variacion
IF afecta = "S" THEN
INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito
,credito,us_crea,fech_crea)
VALUES(fecha2,1,entrada,"5615",detalle1,0,t_variacion,SUSER_SNAME(),GETDATE() )
END IF
END IF
###### Acumulando totales por columna
PRINTX referencia, nombre_cta, debe, haber
LET credito = 0
# Impresion detalle de la entrada con ordenes de compras
FOR i = 1 TO idz
# IF entrada27[i].cuenta_no IS NOT NULL THEN
# IF entrada27[i].cod_aux is not null THEN
IF entrada27[i].valor < 0 THEN
LET entrada27[i].valor = entrada27[i].valor * -1
END IF
LET cod_aux_sec = entrada27[i].cod_aux using "&&","-",entrada27[i].cod_sec using "&&&&"
IF cod_aux_sec IS NULL THEN
LET cod_aux_sec = ' '
END IF
# DISPLAY "datos ",i USING "<<<"," ",entrada27[i].cod_aux using "&&","-",entrada27[i].cod_sec using "&&&&"
PRINTX entrada27[i].cuenta_no, cod_aux_sec, entrada27[i].num_doc,
entrada27[i].valor
IF entrada27[i].valor IS NULL THEN
LET entrada27[i].valor=0
END IF
LET credito = credito + entrada27[i].valor
IF afecta = "S" THEN
IF entrada27[i].valor < 0 THEN
LET entrada27[i].valor = entrada27[i].valor * -1
END IF
IF entrada27[i].cuenta_no IS NOT NULL THEN
INSERT INTO cgtb00004 (fecha,tipo,ref,cuenta_no,num_doc,cod_aux
,cod_sec,detalle_1,debito,credito,us_crea,fech_crea)
VALUES (fecha2,1,entrada,entrada27[i].cuenta_no,
entrada27[i].num_doc,entrada27[i].cod_aux,
entrada27[i].cod_sec,detalle1,0,
entrada27[i].valor,SUSER_SNAME(),GETDATE())
END IF
END IF
# END IF
#END IF
END FOR
IF afecta = "S" THEN
COMMIT WORK
END IF
###### Imprime total DEBITO y total CREDITO
PRINTX debito,credito,detalle1
LET debito = 0
LET credito = 0
END REPORT
+{==============================================================================
+ PROGRAMA : LQPRRP004
+ SISTEMA : Sistema de Liquidacion Materiales
+ Objetivo : Liquidacion Mercancia Compras Exterior Prod. Terminados
+ PROGRAMADOR : Juan F. Soto
+ FECHA : Mayo 13, 1994
+ MODIFICADO : VALENTIN RODRIGUEZ
+ FECHA : MAYO, 2019
+==============================================================================}
+GLOBALS "lqprgb000.4gl" ###### Variables para busqueda de rango de fecha
+DEFINE elije,imp,afecta,tipo_inventario CHAR(1)
+DEFINE p_ano,m_mes SMALLINT
+DEFINE fecha1, fecha2 DATE ,
+ p_fecha CHAR(10)
+DEFINE entra CHAR(25)
+DEFINE t_costst DECIMAL(12,2)
+DEFINE detalla CHAR(30)
+DEFINE orden CHAR(10)
+DEFINE t_variacion DECIMAL(12,2)
+DEFINE debe, haber DECIMAL(12,2),
+ idz INT
+
+###### Variables que la almacenan la informacion enviada al reporte
+DEFINE diario1 RECORD
+ cuenta_no LIKE cgtb00001.cuenta_no,
+ debito DECIMAL(18,2)
+END RECORD
+
+DEFINE i SMALLINT
+DEFINE fecha_inicial,fecha_final DATE
+DEFINE primera,imp_entrada CHAR(1)
+
+MAIN
+ DEFER INTERRUPT
+ CALL ARG_VAL(1) RETURNING usuarios
+ CALL ARG_VAL(2) RETURNING clave
+ CALL ARG_VAL(3) RETURNING impresor
+
+ CONNECT to "smarmotech" USER usuarios USING clave
+ SELECT a.* INTO p_compania.* FROM companias a
+ CALL lqprrp004()
+END MAIN
+
+ FUNCTION lqprrp004()
+
+ DEFINE busca_datos RECORD
+ cod_n SMALLINT,
+ cod_grupo SMALLINT,
+ cod_tipo SMALLINT,
+ cod_sec SMALLINT,
+ descripcion CHAR(30),
+ unidad CHAR(3),
+ cod_sp SMALLINT,
+ cod_sp_sec SMALLINT,
+ proveedor CHAR(7),
+ num_doc INTEGER,
+ num_oc INTEGER,
+ tipo CHAR(2),
+ cantidad DECIMAL(12,5),
+ precio DECIMAL(12,5),
+ flete DECIMAL(12,5),
+ imp_colect DECIMAL(12,5),
+ imp_aduana DECIMAL(12,5),
+ tasa DECIMAL(8,2),
+ cost_std LIKE intb00013.costo_st
+ END RECORD
+
+ LET int_flag = FALSE
+
+ OPTIONS
+ FORM LINE 8
+
+ OPEN FORM lqfmrp004 FROM "lqfmrp004"
+ DISPLAY FORM lqfmrp004
+ DISPLAY "lqprrp004" AT 4,3
+ DISPLAY "Liquidacion Mercancia pt" AT 6,28
+
+ LET tipo_papel = 2
+ CALL msgrp000(tipo_papel)
+
+ CONSTRUCT criterio ON c.num_oc,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec
+ FROM num_oc,cod_n,cod_grupo,cod_tipo,cod_sec
+ AFTER CONSTRUCT
+ IF INT_FLAG THEN
+ CALL msg(2)
+ LET INT_FLAG = FALSE
+ EXIT PROGRAM
+ END IF
+ EXIT CONSTRUCT
+ END CONSTRUCT
+ INPUT BY NAME tipo_inventario, p_ano,m_mes,elije,imp_entrada,imp
+
+ AFTER FIELD m_mes
+ SELECT fecha_inicio, fecha_corte INTO fecha_inicial,fecha_final
+ FROM prdtable where mes = m_mes AND ano = p_ano
+
+ DISPLAY BY NAME fecha_inicial,fecha_final
+
+ LET p_fechas = fecha_final using "ddmmyyyy"
+ CALL prd(p_fechas,usuarios) RETURNING bandera
+ IF bandera = 1 THEN
+ LET bandera = 0
+ # NEXT FIELD p_ano
+ END IF
+
+ AFTER INPUT
+ EXIT INPUT
+ END INPUT
+ IF int_flag THEN
+ LET numero_msg = 2
+ CALL msg(numero_msg)
+ LET int_flag = FALSE
+ RETURN
+ END IF
+ LET chstd = FGL_WINQUESTION("PREGUNTA","Actualiza Costos STD?","yes","Yes|no","question",0)
+
+ LET chstd = UPSHIFT(chstd)
+
+
+ LET primera = "S"
+ IF tipo_inventario = '2' THEN
+ LET selec =
+ "SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
+ " a.unidad_med,b.cod_sp,b.cod_sp_sec,b.nom_sp,c.rep_entrada,c.num_oc, ",
+ " c.tipo,c.cantidad_oc,c.cantidad_oc*c.fob,c.costo_flete,c.impuesto,c.otros_g,d.prima_us ",
+ "FROM iptb00002 a,cotb00001 b,cgtb00018 c,cgtb00017 d ",
+ "WHERE (a.cod_n = c.cod_n and a.cod_grupo = c.cod_grupo and ",
+ " a.cod_tipo = c.cod_tipo and a.cod_sec = c.cod_sec) AND ",
+ " (d.fecha between '", fecha_inicial USING "MM/DD/YYYY","' and '",
+ fecha_final USING "MM/DD/YYYY","') and ",
+ " (c.num_oc = d.num_oc) and (c.tipo=d.tipo) and (d.cod_sp=b.cod_sp AND ",
+ " d.cod_sp_sec = b.cod_sp_sec) and (c.rep_entrada = d.rep_entrada) and ",
+ " (c.status_t is null) and d.liquidada='",elije,"' and c.tipo = '2' ",
+ " AND (a.status_t IS NULL) AND (d.status_t IS NULL) and ",
+ criterio CLIPPED,
+ " ORDER BY c.num_oc,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
+ ELSE
+ LET selec =
+ "SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
+ " a.unidad_med,b.cod_sp,b.cod_sp_sec,b.nom_sp,c.rep_entrada,c.num_oc, ",
+ " c.tipo,c.cantidad_oc,c.cantidad_oc*c.fob,c.costo_flete,c.impuesto,c.otros_g,d.prima_us ",
+ "FROM intb00001 a,cotb00001 b,cgtb00018 c,cgtb00017 d ",
+ "WHERE (a.cod_n = c.cod_n and a.cod_grupo = c.cod_grupo and ",
+ " a.cod_tipo = c.cod_tipo and a.cod_sec = c.cod_sec) AND ",
+ " (d.fecha between '", fecha_inicial USING "MM/dd/YYYY","' and '",
+ fecha_final USING "MM/dd/YYYY","') and ",
+ " (c.num_oc = d.num_oc) and (c.tipo=d.tipo) and (d.cod_sp=b.cod_sp AND ",
+ " d.cod_sp_sec = b.cod_sp_sec) and (c.rep_entrada = d.rep_entrada) and ",
+ " (c.status_t is null) and d.liquidada='",elije,"' and c.tipo = 1 ",
+ " AND (a.status_t IS NULL) AND (d.status_t IS NULL) and ",
+ criterio CLIPPED,
+ " ORDER BY c.num_oc,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
+ END IF
+ DISPLAY selec
+ DISPLAY "elije ",elije
+ LET idx = 1
+ PREPARE comando FROM selec
+ DECLARE busca CURSOR FOR comando
+
+ INSERT INTO cttb000log1 VALUES (GETDATE(),usuarios,'lqprrp004','ELIMINO')
+ FOREACH busca INTO busca_datos.*
+ DISPLAY "datos ",busca_datos.cod_sp_sec," ",busca_datos.descripcion
+ LET orden = busca_datos.num_oc USING "<<<<<<"
+
+ IF busca_datos.imp_colect is null THEN
+ LET busca_datos.imp_colect = 0
+ END IF
+
+ IF busca_datos.imp_colect < 0 THEN
+ LET busca_datos.imp_colect = busca_datos.imp_colect * -1
+ END IF
+
+ IF busca_datos.imp_aduana is null THEN
+ LET busca_datos.imp_aduana = 0
+ END IF
+
+ IF busca_datos.imp_aduana < 0 THEN
+ LET busca_datos.imp_aduana = busca_datos.imp_aduana * -1
+ END IF
+
+ # Busca el costos standard
+ LET busca_datos.cost_std = 0
+ IF tipo_inventario = '2' THEN
+ SELECT AVG(a.material+a.labor+a.gastos) INTO busca_datos.cost_std
+ FROM iptb00004 a
+ WHERE a.ventas = "1" and
+ a.ano = year(fecha_inicial) and a.cod_n = busca_datos.cod_n and
+ a.cod_grupo = busca_datos.cod_grupo and
+ a.cod_tipo = busca_datos.cod_tipo and
+ a.cod_sec = busca_datos.cod_sec and a.status_t is NULL
+ ELSE
+ SELECT AVG(a.costo_st) INTO busca_datos.cost_std
+ FROM intb00013 a
+ WHERE a.ano = year(fecha_inicial) and a.cod_n = busca_datos.cod_n and
+ a.cod_grupo = busca_datos.cod_grupo and
+ a.cod_tipo = busca_datos.cod_tipo and
+ a.cod_sec = busca_datos.cod_sec and a.status_t is NULL
+
+ END IF
+ IF STATUS = NOTFOUND THEN
+ LET busca_datos.cost_std = 0
+ END IF
+
+ IF busca_datos.cost_std is null THEN
+ LET busca_datos.cost_std = 0
+ END IF
+
+ IF chstd = "yes" THEN
+
+ DELETE FROM cttb00013 WHERE (fecha_lq = fecha_final AND
+ tipo_lq = elije AND
+ tipo_orden = 2 AND
+ num_oc = busca_datos.num_oc)
+ END IF
+
+ IF imp="S" THEN
+ LET r_filename ="lqprrp004.4rp"
+ IF idx = 1 THEN
+ IF fgl_report_loadCurrentSettings(r_filename) THEN
+ LET preview=1
+ CALL seleccionarsalida() RETURNING r_output -- load the .4rp file
+ CALL fgl_report_selectDevice(r_output) -- changing default
+ CALL fgl_report_selectPreview(preview) -- changing default
+ # CALL fgl_report_configurexlsxdevice(null,null,null,false,false,null,1)
+ LET handler = fgl_report_commitCurrentSettings() -- commit changes
+ END IF
+ LET idx = 2
+ START REPORT liquida1 TO XML HANDLER HANDLER
+ END IF
+ DISPLAY "DATOS "
+ OUTPUT TO REPORT liquida1(busca_datos.*)
+ END IF
+ END FOREACH
+
+ IF imp = "S" THEN
+ IF idx > 1 THEN
+ FINISH REPORT liquida1
+ ELSE
+ CALL fgl_winmessage("INFO","NO ENCONTRE INFORMACION CON ESOS PARAMETROS","INFO")
+ END IF
+ END IF
+
+ IF imp_entrada = "S" THEN
+ CALL edprrp0271()
+ END IF
+END FUNCTION
+
+REPORT liquida1(x)
+ DEFINE x RECORD
+ cod_n SMALLINT,
+ cod_grupo SMALLINT,
+ cod_tipo SMALLINT,
+ cod_sec SMALLINT,
+ descripcion CHAR(30),
+ unidad CHAR(3),
+ cod_sp SMALLINT,
+ cod_sp_sec SMALLINT,
+ proveedor CHAR(7),
+ num_doc INTEGER,
+ num_oc INTEGER,
+ tipo CHAR(2),
+ cantidad DECIMAL(12,5),
+ precio DECIMAL(12,5),
+ flete DECIMAL(12,5),
+ imp_colect DECIMAL(12,5),
+ imp_aduana DECIMAL(12,5),
+ tasa DECIMAL(8,2),
+ cost_std LIKE intb00013.costo_st
+ END RECORD
+
+ DEFINE valor DECIMAL(12,2)
+ DEFINE variacion,precio_std,fob,c_f,seguro,cost_pl,
+ t_fob,t_flete,t_seguro,t_cf,t_impcol,t_impaduana,t_dollar,
+ t_costopl,t_recibida,t_precio,o_variacion
+ DECIMAL(12,2)
+
+ DEFINE no_reg SMALLINT
+ DEFINE total_cf,t_costo, costo_unit DECIMAL(12,2),
+ o_impaduana,o_impcolect,o_dollar,o_cf
+ DECIMAL(12,2)
+ DEFINE ot_fob,
+ ot_flete,
+ ot_cf,
+ ot_seguro,
+ ot_impcol,
+ ot_impaduana,
+ ot_dollar,
+ ot_costopl,
+ ot_costo,
+ ot_precio,
+ ot_costst,
+ ot_variacion DECIMAL(12,2)
+
+ ## DEFINICION DE LAS VARIABLES DE IMPRESION
+ DEFINE hora CHAR(5)
+ DEFINE fechaActual, orden_tipo CHAR(12)
+ DEFINE codigo CHAR(25)
+ DEFINE codigos_sp, tituloFecha CHAR(25)
+ DEFINE material,titulo STRING
+
+ {OUTPUT
+ ## DEFINICION DE LOS MARGENES DE IMPRESION
+ TOP MARGIN 0
+ LEFT MARGIN 0
+ BOTTOM MARGIN 3
+ PAGE LENGTH 150}
+ FORMAT
+ PAGE HEADER
+ LET hora = TIME
+ LET fechaActual = today using "dd/mm/yy"
+ IF tipo_inventario = '2' THEN
+ LET titulo = 'Liquidacion Mercancias Productos Terminados'
+ ELSE
+ LET titulo = 'Liquidacion Mercancias Materia Prima'
+ END IF
+ IF primera = "S" THEN
+ LET t_fob = 0
+ LET t_flete = 0
+ LET t_seguro = 0
+ LET t_cf = 0
+ LET t_impcol = 0
+ LET t_impaduana = 0
+ LET t_dollar = 0
+ LET t_costopl = 0
+ LET t_recibida = 0
+ LET t_costo = 0
+ LET t_precio = 0
+ LET t_costst = 0
+ LET t_variacion = 0
+ LET o_variacion = 0
+ LET primera = "N"
+ LET idz = 1
+ END IF
+
+BEFORE GROUP OF x.num_oc
+
+ IF total_cf is null THEN
+ LET total_cf = 0
+ END IF
+
+ LET ot_fob =0
+ LET ot_flete =0
+ LET ot_cf =0
+ LET ot_seguro =0
+ LET ot_impcol =0
+ LET ot_impaduana =0
+ LET ot_dollar =0
+ LET ot_costopl =0
+ LET ot_costo =0
+ LET ot_precio =0
+ LET ot_costst =0
+ LET ot_variacion =0
+ LET tituloFecha = "Del ",fecha_inicial USING "dd/mm/yy"," Al ", fecha_final USING "dd/mm/yy"
+ ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
+ PRINTX p_compania.nombre, hora,tituloFecha, fechaActual,fecha_inicial USING "dd/mm/yy",
+ fecha_final USING "dd/mm/yy",titulo
+ ON EVERY ROW
+
+ LET seguro = 0
+ LET codigo = x.cod_n using "&&&&&","-",x.cod_grupo using "&&&&&","-",
+ x.cod_tipo using "&&&&&","-",x.cod_sec using "&&&&&"
+ LET codigos_sp = x.cod_sp using "&&","-",x.cod_sp_sec using "&&&&"
+ LET orden_tipo = x.num_oc using "&&&&&","-",x.tipo
+
+ SELECT CONVERT(CHAR(10),MIN(a.fecha),101) INTO p_fecha FROM iptb00006 a
+ WHERE a.num_doc = x.num_doc and cod_mov in (10) AND status_t IS NULL
+
+ LET fob = x.precio
+
+ LET c_f = fob + x.flete
+ LET valor = c_f * x.tasa
+
+ IF elije = "L" THEN
+ LET seguro = 0
+ END IF
+
+ IF no_reg > 1 THEN
+ LET x.imp_aduana = (x.imp_aduana / total_cf) * c_f
+ LET x.imp_colect = (x.imp_colect / total_cf) * c_f
+ END IF
+
+ LET cost_pl = seguro + c_f + x.imp_colect + x.imp_aduana + valor
+ LET costo_unit = cost_pl / x.cantidad
+ LET precio_std = x.cantidad * x.cost_std
+ LET variacion = cost_pl - precio_std
+ LET material = "(",codigo,")","-",x.descripcion CLIPPED
+
+ PRINTX material, codigos_sp,x.proveedor, orden_tipo,
+ fob, x.flete, c_f, seguro, x.imp_colect, x.imp_aduana,
+ valor, cost_pl, x.cantidad, costo_unit, x.cost_std, precio_std,
+ variacion
+
+ IF tipo_inventario = '2' THEN
+ IF chstd = "YES" THEN
+ SELECT UNIQUE a.cod_n FROM iptb00004 a
+ WHERE a.cod_n = x.cod_n AND
+ a.cod_grupo = x.cod_grupo AND
+ a.cod_tipo = x.cod_tipo AND
+ a.cod_sec = x.cod_sec AND
+ a.ano = p_ano and
+ a.mes_ini = 1 AND
+ a.mes_fin = 12
+ IF STATUS = NOTFOUND THEN
+ INSERT INTO iptb00004 (ventas,mes_ini,mes_fin,ano,cod_n,cod_grupo,cod_tipo,cod_Sec,material,labor,gastos,us_crea,fech_crea)
+ VALUES ('1','01','12',p_ano,x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec,costo_unit,0,0,SUSER_SNAME(),GETDATE())
+ END IF
+ END IF
+ ELSE
+ IF chstd = "YES" THEN
+ SELECT UNIQUE a.cod_n FROM intb00013 a
+ WHERE a.cod_n = x.cod_n AND
+ a.cod_grupo = x.cod_grupo AND
+ a.cod_tipo = x.cod_tipo AND
+ a.cod_sec = x.cod_sec AND
+ a.ano = p_ano AND
+ a.mes_ini = 1 AND
+ a.mes_fin = 12
+ IF STATUS = NOTFOUND THEN
+ INSERT INTO intb00013 VALUES ('01','12',p_ano,x.cod_n,x.cod_grupo,x.cod_tipo,
+ x.cod_sec,costo_unit,null,SUSER_SNAME(),GETDATE(),null,
+ NULL)
+ END IF
+ END IF
+
+ END IF
+
+ INSERT INTO cttb00013 (fecha_lq,fecha,tipo_lq,num_oc,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,costo_lq,status_t,us_crea,fech_crea,tipo_orden)
+ VALUES (fecha_final,p_fecha,elije,x.num_oc,x.cod_n,x.cod_grupo,x.cod_tipo,
+ x.cod_sec,x.cantidad,costo_unit,null,usuarios,GETDATE(),x.tipo)
+
+ INSERT INTO cttb000log2
+ (fecha_lq,fecha,tipo_lq,num_oc,cod_n,cod_grupo,cod_tipo,cod_sec)
+ VALUES (fecha_final,p_fecha,elije,x.num_oc,x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec)
+
+ # Acumulacion de totales
+ IF o_impaduana is null THEN
+ LET o_impaduana = 0
+ END IF
+ IF o_variacion is null THEN
+ LET o_variacion = 0
+ END IF
+ IF o_impcolect is null THEN
+ LET o_impcolect = 0
+ END IF
+ IF o_dollar is null THEN
+ LET o_dollar = 0
+ END IF
+ IF o_cf is null THEN
+ LET o_cf = 0
+ END IF
+
+ LET t_fob = t_fob + fob
+ LET t_flete = t_flete + x.flete
+ LET t_seguro = t_seguro + seguro
+ LET t_cf = t_cf + c_f
+ LET t_impcol = t_impcol + x.imp_colect
+ LET t_impaduana = t_impaduana + x.imp_aduana
+ LET t_dollar = t_dollar + valor
+ LET t_costopl = t_costopl + cost_pl
+ LET t_costo = t_costo + costo_unit
+ LET t_precio = t_precio + x.cost_std
+ LET t_costst = t_costst + precio_std
+ LET t_variacion = t_variacion + variacion
+
+ LET o_variacion = o_variacion + cost_pl
+ LET o_impaduana = o_impaduana + x.imp_aduana + seguro
+ LET o_impcolect = o_impcolect + x.imp_colect
+ LET o_dollar = o_dollar + valor
+ LET o_cf = o_cf + c_f
+
+ LET ot_fob = ot_fob + fob
+ LET ot_flete = ot_flete + x.flete
+ LET ot_cf = ot_cf + c_f
+ LET ot_seguro = ot_seguro + seguro
+ LET ot_impcol = ot_impcol + x.imp_colect
+ LET ot_impaduana = ot_impaduana + x.imp_aduana
+ LET ot_dollar = ot_dollar + valor
+ LET ot_costopl = ot_costopl + cost_pl
+ LET ot_costo = ot_costo + costo_unit
+ LET ot_precio = ot_precio + x.cost_std
+ LET ot_costst = ot_costst + precio_std
+ LET ot_variacion = ot_variacion + variacion
+
+ AFTER GROUP OF x.num_oc
+ # Validacion del arreglo para imprimir la entrada 27
+
+ IF imp_entrada = "S" THEN
+ LET entrada27[idz].cuenta_no = "1161"
+ LET entrada27[idz].cod_aux = x.cod_sp
+ LET entrada27[idz].cod_sec = x.cod_sp_sec
+ LET entrada27[idz].num_doc = x.num_oc
+ LET entrada27[idz].valor = o_impaduana
+ LET o_impaduana = 0
+ LET idz = idz + 1
+
+ LET entrada27[idz].cuenta_no = "1161-01"
+ LET entrada27[idz].cod_aux = x.cod_sp
+ LET entrada27[idz].cod_sec = x.cod_sp_sec
+ LET entrada27[idz].num_doc = x.num_oc
+ LET entrada27[idz].valor = o_impcolect
+ LET o_impcolect = 0
+ LET idz = idz + 1
+
+ LET entrada27[idz].cuenta_no = "1161-02"
+ LET entrada27[idz].cod_aux = x.cod_sp
+ LET entrada27[idz].cod_sec = x.cod_sp_sec
+ LET entrada27[idz].num_doc = x.num_oc
+ LET entrada27[idz].valor = o_dollar
+ LET o_dollar = 0
+ LET idz = idz + 1
+
+ LET entrada27[idz].cuenta_no = "1161-03"
+ LET entrada27[idz].cod_aux = x.cod_sp
+ LET entrada27[idz].cod_sec = x.cod_sp_sec
+ LET entrada27[idz].num_doc = x.num_oc
+ LET entrada27[idz].valor = o_cf
+ LET o_cf = 0
+ LET idz = idz + 1
+
+ END IF
+
+ PRINTX ot_fob,ot_flete,ot_cf,ot_seguro,ot_impcol,ot_impaduana, ot_dollar,
+ ot_costopl,ot_costo, ot_precio,ot_costst,ot_variacion
+
+ ON LAST ROW
+
+ PRINTX t_fob, t_flete, t_cf,t_seguro,t_impcol,t_impaduana,t_dollar,
+ t_costopl,t_costo,t_precio,t_costst,t_variacion
+
+ LET o_impaduana = 0
+ LET o_impcolect = 0
+ LET o_dollar = 0
+ LET o_cf = 0
+ END REPORT
+
+{-------------------------------------------------------------------------------
+PROGRAMA : EDPRRP027
+OBJETIVO : Listar las Entrada de Diario Productos Terminados
+PROGRAMADOR : Juan F. Soto
+FECHA REALIZACION : Mayo 20, 1994.
+-------------------------------------------------------------------------------}
+
+FUNCTION edprrp0271()
+
+ #WHENEVER ERROR CONTINUE
+ DEFINE longitud,u_mes,numero_ent,i SMALLINT,
+ ch_ano CHAR(4)
+ LET r_filename ="lqprrp004b.4rp"
+
+ OPTIONS
+ FORM LINE 8,
+ ERROR LINE 23,
+ COMMENT LINE 21
+
+ ##### Abriendo y desplegando el formulario de captura de datos
+ OPEN FORM edfmrp027 FROM "edfmrp027"
+ DISPLAY FORM edfmrp027
+
+ { DISPLAY "edprrp027" AT 4,3
+ DISPLAY "Entrada de Diario Mat. Importada Rec." AT 6,21}
+
+ { LET tipo_papel = 1
+ CALL msgrp000(tipo_papel)}
+
+ ###### Aceptando los valores para el rango de fecha
+
+ INPUT BY NAME entra,fecha1,fecha2,afecta,detalla
+ BEFORE INPUT
+ LET numero_ent = 27
+ LET fecha1 =fecha_inicial
+ LET fecha2 =fecha_final
+ DISPLAY BY NAME fecha1,fecha2
+
+ CALL controlNumericoED(numero_ent, fecha1, NULL) RETURNING entra
+ DISPLAY BY NAME entra
+
+ AFTER FIELD entra
+ LET longitud = LENGTH(entra)
+ IF longitud != 16 THEN
+ LET numero_msg = 77
+ CALL msg(numero_msg)
+ NEXT FIELD entra
+ END IF
+ LET existe = "N"
+ SELECT unique a.ref FROM cgtb00004 a WHERE a.ref = entra
+
+ IF STATUS != NOTFOUND THEN
+ LET existe = "S"
+ END IF
+
+ AFTER FIELD fecha1
+ IF fecha1 IS NULL THEN
+ ERROR "(16) CAMPO EN BLANCO"
+ 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
+
+ AFTER INPUT
+
+ IF int_flag THEN
+ ERROR "(2) OPERACION CANCELADA"
+ LET int_flag = false
+ RETURN
+ END IF
+ IF fecha2 > TODAY THEN
+ CALL msg(57)
+ END IF
+ END INPUT
+ ##### Creando la facilidad para cancelar proceso con DELETE O SUPR
+
+ LET i = 1
+
+ {CALL configureoutput("XLS") RETURNING handler
+ START REPORT entrada271 TO XML HANDLER handler}
+ IF i = 1 THEN
+
+ IF fgl_report_loadCurrentSettings(r_filename) THEN
+
+ LET preview=1
+ CALL seleccionarsalida() RETURNING r_output -- load the .4rp file
+ CALL fgl_report_selectDevice(r_output) -- changing default
+ CALL fgl_report_selectPreview(preview) -- changing default
+ LET handler = fgl_report_commitCurrentSettings() -- commit changes
+
+ END IF
+ LET i = 2
+ START REPORT entrada271 TO XML HANDLER HANDLER
+ END IF
+
+ DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
+ AT 19,14 ATTRIBUTE (REVERSE)
+
+ ##### Loop para enviar informacion al reporte
+
+ LET diario1.debito = t_costst
+ IF tipo_inventario = "2" THEN
+ LET diario1.cuenta_no = "1131-02"
+ ELSE
+ LET diario1.cuenta_no = "1151"
+ END IF
+ OUTPUT TO REPORT entrada271(diario1.*,fecha1,fecha2,detalla,entra)
+
+ IF i > 1 THEN
+ FINISH REPORT entrada271
+ END IF
+ END FUNCTION
+
+#### Funcion para dar salida ordenada a la informacion requerida de
+#### una entrada de diario de nominas local
+
+REPORT entrada271(x,fecha1,fecha2,detalle1,entrada)
+
+ DEFINE x RECORD
+ cuenta_no LIKE cgtb00001.cuenta_no,
+ debito DECIMAL(10,2)
+ END RECORD
+
+ ### Acumula los valores de las diferentes cuentas para entrada diario de nomina
+ DEFINE debito,credito DECIMAL(12,2)
+ DEFINE detalle1 CHAR(30)
+ DEFINE fecha1,fecha2 DATE #### Almacena las fecha del rango de busqueda
+ DEFINE numero_ent SMALLINT
+ DEFINE cod_aux_sec CHAR(6)
+ DEFINE doce CHAR(2)
+ DEFINE hora,referencia CHAR(5)
+ DEFINE entrada CHAR(25),
+ nombre_cta LIKE cgtb00001.descripcion
+ DEFINE fechaActual CHAR(12)
+
+ { OUTPUT
+ TOP MARGIN 0
+ LEFT MARGIN 0
+ BOTTOM MARGIN 2
+ PAGE LENGTH 150}
+
+ FORMAT
+ PAGE HEADER
+ LET hora = TIME
+ LET fechaActual = today using "dd/mm/yy"
+
+ ##### Selecionado la descripcion del fecha
+
+ BEFORE GROUP OF x.cuenta_no
+ PRINTX p_compania.nombre,hora,fechaActual,fecha1,fecha2,entrada,doce
+
+ ON EVERY ROW
+ SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a
+ WHERE a.cuenta_no = x.cuenta_no
+
+ IF debito is null THEN
+ LET debito = 0
+ END IF
+
+ PRINTX x.cuenta_no, x.debito, nombre_cta
+
+ LET debito = debito + x.debito
+
+ IF afecta = "S" THEN
+ IF x.cuenta_no IS NOT NULL THEN
+ BEGIN WORK
+
+ LET numero_ent = 27
+ CALL controlNumericoED(numero_ent, fecha1, usuarios) RETURNING entra
+ DISPLAY BY NAME entra
+
+ LET entrada = entra
+
+ INSERT INTO cgtb00004
+ (fecha,tipo,ref,cuenta_no,detalle_1,debito,credito,us_crea,fech_crea)
+ VALUES(fecha2,1,entrada,x.cuenta_no,detalle1,x.debito,0,usuarios,GETDATE())
+ END IF
+ END IF
+
+ ON LAST ROW
+ IF tipo_inventario = "2" THEN
+ SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a
+ WHERE a.cuenta_no = "5615"
+
+ LET debe = 0
+ LET haber = 0
+ LET referencia = "5615"
+ ELSE
+ SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a
+ WHERE a.cuenta_no = "1152"
+
+ LET debe = 0
+ LET haber = 0
+ LET referencia = "1152"
+ END IF
+ IF credito is null THEN
+ LET credito = 0
+ END IF
+ IF debito is null THEN
+ LET debito = 0
+ END IF
+
+ IF t_variacion > 0 THEN
+ LET debito = debito + t_variacion
+ LET debe = t_variacion
+ IF afecta = "S" THEN
+ IF tipo_inventario = "2" THEN
+ INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito
+ ,credito,us_crea,fech_crea)
+ VALUES(fecha2,1,entrada,"5615",detalle1,t_variacion,0,usuarios,GETDATE())
+ ELSE
+ INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito
+ ,credito,us_crea,fech_crea)
+ VALUES(fecha2,1,entrada,"1152",detalle1,t_variacion,0,usuarios,GETDATE())
+ END IF
+ END IF
+ ELSE
+ LET t_variacion = t_variacion * -1
+ LET credito = credito + t_variacion
+ LET haber = t_variacion
+
+ IF afecta = "S" THEN
+ INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito
+ ,credito,us_crea,fech_crea)
+ VALUES(fecha2,1,entrada,"5615",detalle1,0,t_variacion,SUSER_SNAME(),GETDATE() )
+ END IF
+ END IF
+
+ ###### Acumulando totales por columna
+ PRINTX referencia, nombre_cta, debe, haber
+ LET credito = 0
+ # Impresion detalle de la entrada con ordenes de compras
+ FOR i = 1 TO idz
+ # IF entrada27[i].cuenta_no IS NOT NULL THEN
+ # IF entrada27[i].cod_aux is not null THEN
+
+ IF entrada27[i].valor < 0 THEN
+ LET entrada27[i].valor = entrada27[i].valor * -1
+ END IF
+
+ LET cod_aux_sec = entrada27[i].cod_aux using "&&","-",entrada27[i].cod_sec using "&&&&"
+ IF cod_aux_sec IS NULL THEN
+ LET cod_aux_sec = ' '
+ END IF
+ # DISPLAY "datos ",i USING "<<<"," ",entrada27[i].cod_aux using "&&","-",entrada27[i].cod_sec using "&&&&"
+ PRINTX entrada27[i].cuenta_no, cod_aux_sec, entrada27[i].num_doc,
+ entrada27[i].valor
+ IF entrada27[i].valor IS NULL THEN
+ LET entrada27[i].valor=0
+ END IF
+ LET credito = credito + entrada27[i].valor
+
+ IF afecta = "S" THEN
+ IF entrada27[i].valor < 0 THEN
+ LET entrada27[i].valor = entrada27[i].valor * -1
+ END IF
+ IF entrada27[i].cuenta_no IS NOT NULL THEN
+ INSERT INTO cgtb00004 (fecha,tipo,ref,cuenta_no,num_doc,cod_aux
+ ,cod_sec,detalle_1,debito,credito,us_crea,fech_crea)
+ VALUES (fecha2,1,entrada,entrada27[i].cuenta_no,
+ entrada27[i].num_doc,entrada27[i].cod_aux,
+ entrada27[i].cod_sec,detalle1,0,
+ entrada27[i].valor,SUSER_SNAME(),GETDATE())
+ END IF
+ END IF
+ # END IF
+ #END IF
+ END FOR
+ IF afecta = "S" THEN
+ COMMIT WORK
+ END IF
+ ###### Imprime total DEBITO y total CREDITO
+ PRINTX debito,credito,detalle1
+ LET debito = 0
+ LET credito = 0
+END REPORT
+
diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw
index 94f33d5..9ece224 100644
--- a/PROYECTO/mbsERP.4pw
+++ b/PROYECTO/mbsERP.4pw
@@ -365,7 +365,7 @@
-
+
@@ -768,33 +768,40 @@
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+
@@ -814,7 +821,7 @@
-
+
@@ -881,10 +888,12 @@
+
+
diff --git a/PROYECTO/otrodir/autorizacioncontado.4gl b/PROYECTO/otrodir/autorizacioncontado.4gl
index 3ec80be..2d38dfe 100644
--- a/PROYECTO/otrodir/autorizacioncontado.4gl
+++ b/PROYECTO/otrodir/autorizacioncontado.4gl
@@ -39,7 +39,7 @@ FUNCTION autorizacioncontado(pcotizacion,valor_cotizado,pagado,usuarios,xmonto_a
xfecha_oc,psecvend,usuarios)
RETURNING xnum_req,valor_requisicion
END IF
- IF xnum_req IS NULL THEN
+ IF xnum_req IS NULL OR xnum_req = 0 THEN
SELECT MAX(a.num_req) INTO xnum_req FROM cctb00026 a WHERE a.cotizacion_no = pcotizacion
AND a.status_t IS NULL
END IF
diff --git a/PROYECTO/otrodir/autorizacioncontado.4gl.bak20261005 b/PROYECTO/otrodir/autorizacioncontado.4gl.bak20261005
new file mode 100644
index 0000000..3ec80be
--- /dev/null
+++ b/PROYECTO/otrodir/autorizacioncontado.4gl.bak20261005
@@ -0,0 +1,90 @@
+FUNCTION autorizacioncontado(pcotizacion,valor_cotizado,pagado,usuarios,xmonto_avance,xnum_doc,xtipo_doc,xnombre_cliente)
+ DEFINE pcotizacion,xnum_oc,pcondpago,ptipocliente,psecliente,xnum_req,psecvend,xnum_doc INT,
+ xfecha_oc,xtipo_Doc CHAR(10),
+ usuarios,xestado VARCHAR(50),
+ valor_cotizado,xmonto_avance,pagado,valor_requisicion DEC(12,2),
+ descripcion_estado,nombre_ven,xnombre_cliente,estado VARCHAR(100)
+
+
+ SELECT a.num_oc,a.tipo_cliente,a.sec_cliente,a.cond_pago,a.sec_vend, CONVERT(CHAR(10),a.fecha_oc,103)
+ INTO xnum_oc,ptipocliente,psecliente,pcondpago,psecvend,xfecha_oc
+ FROM prtb00012 a WHERE a.cotizacion_no = pcotizacion AND a.status_t IS NULL
+
+ IF STATUS = NOTFOUND THEN
+ LET descripcion_estado = 'REQUISICION ',xnum_req USING "<<<<<<<<",
+ ' NO AUTORIZADA POR SISTEMA, LA COTIZACION NO TIENE ORDEN, CONDICION AL CONTADO'
+ LET xestado = 'NO AUTORIZADA'
+ LET estado = descripcion_estado
+ INSERT INTO cctb00031 (fecha,us_crea,sec_vend,tipo_cliente,
+ sec_cliente,nombreCliente,num_req,limite_cr,monto_cotizacion,
+ balance,estado,tipo_doc_ref,monto_req,num_recibo,tipo_doc,
+ monto_avance,valor_cotizacion,descrip_estado,cotizacion_no,nombrevendedor,num_oc)
+
+ VALUES (getdate(),'MBS',psecvend,ptipocliente,psecliente,
+ xnombre_cliente,xnum_req,'0',valor_cotizado,'0',xestado,
+ xtipo_Doc,valor_cotizado,xnum_doc,xtipo_Doc,
+ xmonto_avance,valor_cotizado,descripcion_estado,xnum_oc,nombre_ven,xnum_oc )
+
+ RETURN
+ END IF
+
+ SELECT RTRIM(a.nom1_emp)+ISNULL(a.apell1_Emp,'') INTO nombre_ven
+ FROM adtb00003 a WHERE a.num_emp = psecvend
+
+ SELECT DISTINCT a.cotizacion_no FROM cctb00026 a WHERE a.cotizacion_no = pcotizacion
+ AND a.status_t IS NULL
+## CUANDO NO TIENE LA REQUISICION DE DESPACHOS
+ IF STATUS = NOTFOUND THEN
+ CALL requisiciondespacho(xnum_oc,ptipocliente,psecliente,Pcondpago,valor_cotizado,
+ xfecha_oc,psecvend,usuarios)
+ RETURNING xnum_req,valor_requisicion
+ END IF
+ IF xnum_req IS NULL THEN
+ SELECT MAX(a.num_req) INTO xnum_req FROM cctb00026 a WHERE a.cotizacion_no = pcotizacion
+ AND a.status_t IS NULL
+ END IF
+ LET estado ="LA REQUISICION ",xnum_req USING "<<<<<<<<", " NO AUTORIZADA"
+ UPDATE cctb00001 SET num_req = xnum_req
+ WHERE tipo_doc =xtipo_Doc AND num_doc = xnum_doc AND
+ tipo_cliente =ptipocliente AND
+ sec_cliente = psecliente
+
+
+ IF xmonto_avance +pagado >= valor_cotizado THEN
+ LET xestado = 'AUTORIZADA'
+
+ UPDATE cctb00025 SET estado =xestado,us_mod = 'MBS',fech_mod = getdate()
+ WHERE num_req = xnum_req
+
+
+ LET descripcion_estado = 'REQUISICION ',xnum_req USING "<<<<<<<<",
+ ' AUTORIZADA POR SISTEMA, LA COTIZACION ES AL CONTADO'
+ LET estado = descripcion_estado
+ INSERT INTO cctb00031 (fecha,us_crea,sec_vend,tipo_cliente,
+ sec_cliente,nombreCliente,num_req,limite_cr,monto_cotizacion,
+ balance,estado,tipo_doc_ref,monto_req,num_recibo,tipo_doc,
+ monto_avance,valor_cotizacion,descrip_estado,cotizacion_no,nombrevendedor,num_oc)
+
+ VALUES (getdate(),'MBS',psecvend,ptipocliente,psecliente,
+ xnombre_cliente,xnum_req,'0',valor_cotizado,'0',xestado,
+ xtipo_Doc,valor_cotizado,xnum_doc,xtipo_Doc,
+ xmonto_avance,valor_cotizado,descripcion_estado,xnum_oc,nombre_ven,xnum_oc )
+
+ ELSE
+ LET descripcion_estado = 'REQUISICION ',xnum_req USING "<<<<<<<<",
+ ' NO AUTORIZADA POR SISTEMA, LA COTIZACION ES AL CONTADO'
+ LET xestado = 'NO AUTORIZADA'
+ LET estado = descripcion_estado
+ INSERT INTO cctb00031 (fecha,us_crea,sec_vend,tipo_cliente,
+ sec_cliente,nombreCliente,num_req,limite_cr,monto_cotizacion,
+ balance,estado,tipo_doc_ref,monto_req,num_recibo,tipo_doc,
+ monto_avance,valor_cotizacion,descrip_estado,cotizacion_no,nombrevendedor,num_oc)
+
+ VALUES (getdate(),'MBS',psecvend,ptipocliente,psecliente,
+ xnombre_cliente,xnum_req,'0',valor_cotizado,'0',xestado,
+ xtipo_Doc,valor_cotizado,xnum_doc,xtipo_Doc,
+ xmonto_avance,valor_cotizado,descripcion_estado,xnum_oc,nombre_ven,xnum_oc )
+
+ END IF
+ RETURN estado
+END FUNCTION
\ No newline at end of file
diff --git a/PROYECTO/otrodir/autorizarequisicion.4gl b/PROYECTO/otrodir/autorizarequisicion.4gl
index 003128c..cc9dd56 100644
--- a/PROYECTO/otrodir/autorizarequisicion.4gl
+++ b/PROYECTO/otrodir/autorizarequisicion.4gl
@@ -6,13 +6,24 @@
ACTUALIZA LA REQUISICION DE DESPACHO
}
-FUNCTION autorizarequisicion(balance,monto_actual_req, monto_req_autorizadas, limite_cr,tienefactura,factura)
- DEFINE balance,monto_actual_req, monto_req_autorizadas, limite_cr,valor_total DEC(12,2),
+FUNCTION autorizarequisicion(balance,monto_actual_req, monto_req_autorizadas, limite_cr,tienefactura,factura,ztipocliente)
+ DEFINE balance,monto_actual_req, monto_req_autorizadas, limite_cr,valor_total,tasa,
+ monto_control DEC(12,2),
string_estado STRING,
tienefactura VARCHAR(2),
autoriza BOOLEAN,
- factura INT
+ factura,ztipocliente INT
+
+ # BUSCA TASA
+ SELECT a.ultima_tasa INTO tasa FROM vetb00060 a
+ WHERE a.tipo_cliente = ztipocliente
+ IF tasa > 1 THEN
+ LET monto_control = 1.60 * tasa
+ ELSE
+ LET monto_control = 100
+ END IF
+
LET valor_total = monto_req_autorizadas+monto_actual_req
IF tienefactura = "SI" THEN
LET string_estado = "ESTA REQUISICION NO FUE AUTORIZADA, TIENE FACTURAS VENCIDAS EL CLIENTE, UNA DE LAS FACTURAS ES ",factura USING "<<<<<<<<"
@@ -23,7 +34,7 @@ FUNCTION autorizarequisicion(balance,monto_actual_req, monto_req_autorizadas, li
#CUANDO EL CLIENTE TIENE SALDO A FAVOR
IF balance < 0 THEN
- IF ((balance * -1)) >=valor_total THEN
+ IF ((balance * -1))+monto_control >=valor_total THEN
LET autoriza = TRUE
LET string_estado = "ESTA REQUISICION ESTA AUTORIZADA, PORQUE EL BALANCE DE ",balance USING "##,###,###.##",
diff --git a/PROYECTO/otrodir/evaluaclientes.4gl b/PROYECTO/otrodir/evaluaclientes.4gl
index 8ce17e5..4dd0362 100644
--- a/PROYECTO/otrodir/evaluaclientes.4gl
+++ b/PROYECTO/otrodir/evaluaclientes.4gl
@@ -146,15 +146,15 @@ FUNCTION evaluaclientes
FOREACH busca_vencido INTO xaplicacion,xpendiente
IF xpendiente > 0 THEN
- SELECT MAX( a.tipo_doc),MAX(a.fecha_ven)
- INTO Xtipodoc,Xfechavence
- FROM cctb00001 a
- WHERE a.status_t IS NULL AND a.num_doc = a.aplica_a AND
+ SELECT MAX( a.tipo_doc),MAX(a.fecha_ven)
+ INTO Xtipodoc,Xfechavence
+ FROM cctb00001 a
+ WHERE a.status_t IS NULL AND a.num_doc = a.aplica_a AND
a.num_doc=xaplicacion AND
- a.tipo_doc not in ("PG","NC","PC","OC","DV","AV","AP") and
- a.tipo_cliente=xtipocliente AND
+ a.tipo_doc not in ("PG","NC","PC","OC","DV","AV","AP") and
+ a.tipo_cliente=xtipocliente AND
a.sec_cliente=xseccliente
-
+
LET dias = 0
IF xfechavence IS NULL THEN
CONTINUE FOREACH
@@ -174,8 +174,8 @@ FUNCTION evaluaclientes
EXIT FOREACH
END IF
END IF
- END IF
- # OUTPUT TO REPORT prueba(xaplicacion,xpendiente,xfechavence,dias)
+ END IF
+ # OUTPUT TO REPORT prueba(xaplicacion,xpendiente,xfechavence,dias)
END FOREACH
END IF
@@ -188,7 +188,7 @@ FUNCTION evaluaclientes
LET monto_cotizacion = 0
END IF
#FUNCTION PARAMETROS AUTORIZACIONES DESPACHO
- CALL autorizarequisicion(balance,xmonto,monto_cotizacion,xlimite,tienefactura,facturas) RETURNING autoriza,string_estado
+ CALL autorizarequisicion(balance,xmonto,monto_cotizacion,xlimite,tienefactura,facturas,xtipocliente) RETURNING autoriza,string_estado
SELECT a.correo INTO emailto FROM seg0003 a,seg0000 b
WHERE b.sec_vend = xsec_vend AND
diff --git a/PROYECTO/otrodir/requisiciondespacho.4gl b/PROYECTO/otrodir/requisiciondespacho.4gl
index 37253d9..0106c47 100644
--- a/PROYECTO/otrodir/requisiciondespacho.4gl
+++ b/PROYECTO/otrodir/requisiciondespacho.4gl
@@ -18,37 +18,38 @@
pusuarios CHAR(50),
selec STRING,
txtmensaje VARCHAR(200),
- pubicacion VARCHAR(170)
+ pubicacion VARCHAR(170),
+ idx_max INT
- DEFINE arr_requisicion DYNAMIC ARRAY OF RECORD
- procesa CHAR(3),
- num_oc INT,
- fecha CHAR(10),
- cotizacion_no INT,
- tipo_cliente SMALLINT,
- sec_cliente INT,
- nombre CHAR(30),
- cantidad_1 DEC(12,5),
+ DEFINE arr_requisicion DYNAMIC ARRAY OF RECORD
+ procesa CHAR(3),
+ num_oc INT,
+ fecha CHAR(10),
+ cotizacion_no INT,
+ tipo_cliente SMALLINT,
+ sec_cliente INT,
+ nombre CHAR(30),
+ cantidad_1 DEC(12,5),
cantidad DEC(12,5),
- area SMALLINT,
- cod_n SMALLINT,
- cod_grupo SMALLINT,
- cod_tipo SMALLINT,
- cod_sec SMALLINT,
- descripcion CHAR(30),
- unidad_med CHAR(3),
- cantidad_ord1 DEC(12,5),
- cantidad_ord DEC(12,5),
- cantidad_pendiente DEC(12,5),
- precio DEC(12,2),
- descuento DEC(12,2),
- descvalor DEC(12,2),
- valor DEC(12,2)
+ area SMALLINT,
+ cod_n SMALLINT,
+ cod_grupo SMALLINT,
+ cod_tipo SMALLINT,
+ cod_sec SMALLINT,
+ descripcion CHAR(30),
+ unidad_med CHAR(3),
+ cantidad_ord1 DEC(12,5),
+ cantidad_ord DEC(12,5),
+ cantidad_pendiente DEC(12,5),
+ precio DEC(12,2),
+ descuento DEC(12,2),
+ descvalor DEC(12,2),
+ valor DEC(12,2)
END RECORD,
pitbis,xmonto,monto_cotizacion DEC(12,2),
estado_req varchar(30),
cuenta smallint
-
+
SET CONNECTION "MSSQL"
LET monto_cotizacion = xmonto
@@ -61,16 +62,37 @@
# PREPARE s FROM "SELECT @@IDENTITY"
- SELECT a.num_req INTO xnumreq FROM cctb00019 a
- IF xnumreq IS NULL THEN
- LET xnumreq = 0
- END IF
- LET xnumreq = xnumreq + 1
-
+ # 05/10/2026 - Error -268 PK_cctb00025 duplicada: el consecutivo se leia
+ # fuera de la transaccion y sin bloqueo (con RCSI dos usuarios leen el mismo
+ # num_req). Ahora se lee DENTRO de BEGIN WORK con UPDLOCK,HOLDLOCK y se
+ # compara contra MAX(cctb00025) por si el contador quedo atrasado.
+ WHENEVER ERROR CONTINUE
BEGIN WORK
+ PREPARE p_numreq FROM "SELECT ISNULL(MAX(num_req),0) FROM cctb00019 WITH (UPDLOCK, HOLDLOCK)"
+ EXECUTE p_numreq INTO xnumreq
+ IF STATUS < 0 THEN
+ ROLLBACK WORK
+ CALL fgl_winmessage("ERROR",SQLERRMESSAGE,"STOP")
+ RETURN 0,0
+ END IF
+ PREPARE p_maxreq FROM "SELECT ISNULL(MAX(num_req),0) FROM cctb00025 WITH (UPDLOCK, HOLDLOCK)"
+ EXECUTE p_maxreq INTO idx_max
+ IF xnumreq IS NULL THEN
+ LET xnumreq = 0
+ END IF
+ IF idx_max > xnumreq THEN
+ LET xnumreq = idx_max
+ END IF
+ LET xnumreq = xnumreq + 1
+
UPDATE cctb00019 SET num_req = xnumreq,us_crea=pusuarios,fech_crea=getdate()
# EXECUTE s INTO xnumreq
-
+ IF STATUS < 0 THEN
+ ROLLBACK WORK
+ CALL fgl_winmessage("ERROR",SQLERRMESSAGE,"STOP")
+ RETURN 0,0
+ END IF
+
LET selec =
"INSERT INTO cctb00034 (id_kit,cotizacion_no,num_oc,num_req,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad)",
"SELECT a.id_kit,a.cotizacion_no,a.num_oc,'",xnumreq USING "<<<<<<","',a.secuencia,a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad ",
@@ -82,8 +104,8 @@ BEGIN WORK
IF STATUS < 0 THEN
ROLLBACK WORK
- CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
- RETURN xnumreq,xmonto
+ CALL fgl_winmessage("ERROR",SQLERRMESSAGE,"STOP")
+ RETURN 0,0
END IF
LET estado_req = 'NO AUTORIZADA'
@@ -169,8 +191,8 @@ BEGIN WORK
IF STATUS < 0 THEN
ROLLBACK WORK
- CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
- RETURN xnumreq,xmonto
+ CALL fgl_winmessage("ERROR",SQLERRMESSAGE,"STOP")
+ RETURN 0,0
END IF
@@ -208,8 +230,8 @@ BEGIN WORK
EXECUTE comando
IF STATUS < 0 THEN
ROLLBACK WORK
- CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
- RETURN xnumreq,xmonto
+ CALL fgl_winmessage("ERROR",SQLERRMESSAGE,"STOP")
+ RETURN 0,0
END IF
@@ -221,8 +243,8 @@ BEGIN WORK
"NO DESPACHADA",xmonto)
IF STATUS < 0 THEN
ROLLBACK WORK
- CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
- RETURN xnumreq,xmonto
+ CALL fgl_winmessage("ERROR",SQLERRMESSAGE,"STOP")
+ RETURN 0,0
END IF
COMMIT WORK
@@ -246,5 +268,6 @@ BEGIN WORK
# subject, procedimiento )
# CALL fgl_Winmessage("INFORMACION",chmensaje,"STOP")
+ WHENEVER ERROR STOP
RETURN xnumreq,xmonto
END FUNCTION
diff --git a/PROYECTO/otrodir/requisiciondespacho.4gl.bak20261005 b/PROYECTO/otrodir/requisiciondespacho.4gl.bak20261005
new file mode 100644
index 0000000..37253d9
--- /dev/null
+++ b/PROYECTO/otrodir/requisiciondespacho.4gl.bak20261005
@@ -0,0 +1,250 @@
+{
+ FUNCION : requisiciondespacho()
+ OBJETIVO : hacer la requisicion de despacho automatica
+ FECHA : 27/08/2011
+ DESARROLLADO POR : Ing. Juan Soto
+ }
+ SCHEMA smarmotech
+ FUNCTION requisiciondespacho(xnum_oc,xtipo_cliente,xsec_cliente,xcondpago,xmonto,xfecha_oc,
+ xsec_vend,pusuarios)
+
+ DEFINE xnum_oc INT,
+ xfecha_oc DATE,
+ xsec_vend,xkit INT,
+ xnumreq,xtipo_cliente,xsec_cliente,pcotizacion INT,
+ idx,xcondpago smallint,
+ chmensaje,procedimiento,cuerpo_correo,subject STRING,
+ vendedorEmail,nombre_vendedor CHAR(60),
+ pusuarios CHAR(50),
+ selec STRING,
+ txtmensaje VARCHAR(200),
+ pubicacion VARCHAR(170)
+
+ DEFINE arr_requisicion DYNAMIC ARRAY OF RECORD
+ procesa CHAR(3),
+ num_oc INT,
+ fecha CHAR(10),
+ cotizacion_no INT,
+ tipo_cliente SMALLINT,
+ sec_cliente INT,
+ nombre CHAR(30),
+ cantidad_1 DEC(12,5),
+ cantidad DEC(12,5),
+ area SMALLINT,
+ cod_n SMALLINT,
+ cod_grupo SMALLINT,
+ cod_tipo SMALLINT,
+ cod_sec SMALLINT,
+ descripcion CHAR(30),
+ unidad_med CHAR(3),
+ cantidad_ord1 DEC(12,5),
+ cantidad_ord DEC(12,5),
+ cantidad_pendiente DEC(12,5),
+ precio DEC(12,2),
+ descuento DEC(12,2),
+ descvalor DEC(12,2),
+ valor DEC(12,2)
+ END RECORD,
+ pitbis,xmonto,monto_cotizacion DEC(12,2),
+ estado_req varchar(30),
+ cuenta smallint
+
+ SET CONNECTION "MSSQL"
+
+ LET monto_cotizacion = xmonto
+
+ SELECT b.nom1_emp || ' '||b.apell1_emp,a.email
+ INTO nombre_vendedor,vendedorEmail
+ FROM seg0000 a,adtb00003 b
+ WHERE a.sec_vend = xsec_vend and
+ a.sec_vend = b.num_emp
+
+# PREPARE s FROM "SELECT @@IDENTITY"
+
+ SELECT a.num_req INTO xnumreq FROM cctb00019 a
+ IF xnumreq IS NULL THEN
+ LET xnumreq = 0
+ END IF
+ LET xnumreq = xnumreq + 1
+
+BEGIN WORK
+ UPDATE cctb00019 SET num_req = xnumreq,us_crea=pusuarios,fech_crea=getdate()
+ # EXECUTE s INTO xnumreq
+
+ LET selec =
+ "INSERT INTO cctb00034 (id_kit,cotizacion_no,num_oc,num_req,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad)",
+ "SELECT a.id_kit,a.cotizacion_no,a.num_oc,'",xnumreq USING "<<<<<<","',a.secuencia,a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad ",
+ "FROM prtb00031 a ",
+ " WHERE ",
+ " a.num_oc ='", xnum_oc USING "<<<<<<","'"
+ PREPARE xcctb34 FROM selec
+ EXECUTE xcctb34
+
+ IF STATUS < 0 THEN
+ ROLLBACK WORK
+ CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
+ RETURN xnumreq,xmonto
+ END IF
+
+ LET estado_req = 'NO AUTORIZADA'
+ DECLARE insertaReq CURSOR FOR
+ SELECT a.num_oc,a.cotizacion_no,b.secuencia,b.area,b.cod_n,b.cod_grupo,b.cod_tipo,
+ b.cod_Sec,b.cantidad_1,b.cantidad,b.cantidad_1,b.cantidad,c.precio,
+ c.porc_Desc,(c.precio*c.cantidad) * (c.porc_desc/100),a.tipo_cliente,a.sec_cliente,
+ d.nombre_cliente,d.porc_itbi,c.id_kit,a.ubicacion,d.direccion_proyecto
+ FROM prtb00012 a,prtb00023 b,vetb00051 c,vetb00050 d
+ WHERE a.num_oc = b.num_oc and
+ a.cotizacion_no = c.cotizacion_no and
+ a.cotizacion_no = d.cotizacion_no and
+ a.num_oc = xnum_oc and
+ b.cod_n = c.cod_n and
+ b.cod_grupo = c.cod_grupo and
+ b.cod_tipo = c.cod_tipo and
+ b.cod_sec = c.cod_sec AND
+ b.area = c.area
+ UNION
+ SELECT a.num_oc,a.cotizacion_no,b.secuencia,b.area,b.cod_n,b.cod_grupo,b.cod_tipo,
+ b.cod_Sec,b.cantidad_1,b.cantidad,b.cantidad_1,b.cantidad,c.precio,
+ c.porc_Desc,(c.precio*c.cantidad) * (c.porc_desc/100),a.tipo_cliente,a.sec_cliente,
+ d.nombre_cliente,d.porc_itbi,c.id_kit,a.ubicacion,d.direccion_proyecto
+ FROM prtb00012 a,prtb00023 b,vetb00031 c,vetb00050 d
+ WHERE a.num_oc = b.num_oc and
+ a.cotizacion_no = c.cotizacion_no and
+ a.cotizacion_no = d.cotizacion_no and
+ a.num_oc = xnum_oc and
+ b.cod_n = c.cod_n and
+ b.cod_grupo = c.cod_grupo and
+ b.cod_tipo = c.cod_tipo and
+ b.cod_sec = c.cod_sec AND
+ b.area = c.area
+
+
+ LET idx = 1
+ LET pcotizacion = 0
+ LET xmonto = 0
+ # DISPLAY " ESTOY EN ESTO ",xnum_oc
+ FOREACH insertareq INTO 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_1,
+ arr_requisicion[idx].cantidad,
+ arr_requisicion[idx].cantidad_ord,
+ arr_requisicion[idx].cantidad_ord1,
+ arr_requisicion[idx].precio,
+ arr_requisicion[idx].descuento,
+ arr_requisicion[idx].descvalor,
+ arr_requisicion[idx].tipo_cliente,
+ arr_requisicion[idx].sec_cliente,
+ arr_requisicion[idx].nombre,
+ pitbis,xkit,
+ pubicacion
+
+ #DISPLAY " VOY PARA LA 26, en el foreach cantidad ",arr_requisicion[idx].cantidad_ord
+ IF arr_requisicion[idx].cantidad_ord IS NOT NULL THEN
+ LET pcotizacion = arr_requisicion[idx].cotizacion_no
+ IF arr_requisicion[idx].descvalor IS NULL THEN
+ LET arr_requisicion[idx].descvalor=0
+ END IF
+ LET arr_requisicion[idx].valor = (arr_requisicion[idx].cantidad *arr_requisicion[idx].precio) -
+ arr_requisicion[idx].descvalor
+ LET arr_requisicion[idx].valor = arr_requisicion[idx].valor + (arr_requisicion[idx].valor * (pitbis/100))
+ LET xmonto = arr_requisicion[idx].valor + xmonto
+ 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 (xnumreq,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(),estado_req,xkit)
+
+ IF STATUS < 0 THEN
+ ROLLBACK WORK
+ CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
+ RETURN xnumreq,xmonto
+
+ END IF
+
+ # EXECUTE xcctb34 USING xkit
+ # IF STATUS < 0 THEN
+ # ROLLBACK WORK
+ # RETURN xnumreq,xmonto
+ # END IF
+
+ END IF
+ LET idx = idx +1
+ END FOREACH
+
+ # CONTROL MONTO REQUISION
+ { IF xmonto > monto_cotizacion THEN
+ # ROLLBACK WORK
+
+ LET xnumreq = 0
+ LET xmonto=0
+ RETURN xnumreq,xmonto
+ END IF
+ }
+ IF pcotizacion IS NOT NULL THEN
+ SELECT DISTINCT a.cotizacion_no FROM vetb00022 a WHERE a.cotizacion_no = pcotizacion
+ IF STATUS <> NOTFOUND THEN
+ LET selec =
+ "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)",
+ " SELECT '",xnumreq,"',etiqueta,'",xnum_oc,"',secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,lado_1,lado_2,lado_3,",
+ "ISNULL(cantidad,0),medida,ISNULL(cantidad,0),medida,'",pusuarios CLIPPED,"',getdate() FROM vetb00022 WHERE cotizacion_no= ",
+ pcotizacion USING "<<<<<<<<"
+
+ PREPARE comando FROM selec
+ EXECUTE comando
+ IF STATUS < 0 THEN
+ ROLLBACK WORK
+ CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
+ RETURN xnumreq,xmonto
+
+ END IF
+
+ END IF
+ END IF
+ INSERT INTO cctb00025 (num_req,fecha,sec_vend,sec_vend_aprobado,us_crea,fech_crea,
+ estado,fecha_autorizacion,estado_despacho,monto_req)
+ VALUES (xnumreq,today,xsec_vend,null,SUSER_NAME(),GETDATE(),estado_req,getdate(),
+ "NO DESPACHADA",xmonto)
+ IF STATUS < 0 THEN
+ ROLLBACK WORK
+ CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
+ RETURN xnumreq,xmonto
+
+ END IF
+ COMMIT WORK
+
+
+ IF xcondpago <> 4 and xcondpago<> 10 THEN
+ CALL entramensaje(xnumreq,pcotizacion,"A",pusuarios)
+ END IF
+ IF xcondpago = 4 OR xcondpago = 10 THEN
+ INSERT INTO cctb00029 (num_req,mensaje,us_crea,fech_crea) VALUES (xnumreq,pubicacion,pusuarios,getdate())
+ END IF
+ LET chmensaje = "NUMERO DE REQUISICION: ",xnumreq USING "<<<<<<"
+ LET subject = "AVISO REQUISICION DESPACHO NO. ",xnumreq USING "&&&&&&"
+ LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
+ LET cuerpo_correo = "VENDEDOR : ",nombre_vendedor CLIPPED
+ LET cuerpo_correo = cuerpo_correo CLIPPED," FECHA REQUISICION : ",xfecha_oc USING "DD/MM/YYYY"
+ LET cuerpo_correo = cuerpo_correo CLIPPED," NUMERO DE ORDEN: ",xnum_oc USING "&&&&&&"
+ LET cuerpo_correo = cuerpo_correo CLIPPED," CLIENTE: ",arr_requisicion[1].nombre
+
+ # CALL envia_correo('rantonio@marmotech.com.do;jsantelises@marmotech.com.do',vendedorEmail,cuerpo_correo,
+ # subject, procedimiento )
+
+ # CALL fgl_Winmessage("INFORMACION",chmensaje,"STOP")
+ RETURN xnumreq,xmonto
+END FUNCTION
diff --git a/PROYECTO/vedir/veconvierteorden.4gl b/PROYECTO/vedir/veconvierteorden.4gl
index ea4753d..3e9a5f4 100644
--- a/PROYECTO/vedir/veconvierteorden.4gl
+++ b/PROYECTO/vedir/veconvierteorden.4gl
@@ -55,6 +55,7 @@ FUNCTION convierteorden(
pprecio, monto_cotizacion DEC(12, 2),
pdesc DEC(8, 2),
pkit INT,
+ existe_oc INT,
pfecha_compromiso DATE
CALL STARTLOG("veconvierte.txt")
@@ -71,11 +72,8 @@ FUNCTION convierteorden(
LET pcantidad = 0
LET pcantidad1 = 0
- SELECT num_oc INTO ult_numero FROM prtb00020
- IF ult_numero IS NULL THEN
- LET ult_numero = 0
- END IF
- LET ult_numero = ult_numero + 1
+ # El consecutivo num_oc se toma DENTRO de la transaccion (ver BEGIN WORK)
+ LET ult_numero = 0
LET xsecvend_a = NULL
SELECT a.tipo_cliente,
@@ -122,8 +120,20 @@ FUNCTION convierteorden(
WHENEVER ANY ERROR STOP
BEGIN WORK
+ # CONSECUTIVO ATOMICO: el UPDATE incrementa y bloquea la fila de prtb00020
+ # hasta el COMMIT/ROLLBACK, asi dos usuarios no pueden tomar el mismo num_oc
+ # (antes se leia fuera de la transaccion -> PK_prtb00012 duplicada)
UPDATE prtb00020
- SET num_oc = ult_numero, us_crea = xusuario, fech_crea = GETDATE()
+ SET num_oc = ISNULL(num_oc, 0) + 1, us_crea = xusuario, fech_crea = GETDATE()
+ SELECT num_oc INTO ult_numero FROM prtb00020
+ # AUTOCORRECCION: si el contador quedo por detras de prtb00012
+ # (otro programa creo ordenes sin avanzarlo), salta al siguiente libre
+ LET existe_oc = 0
+ SELECT COUNT(*) INTO existe_oc FROM prtb00012 WHERE num_oc = ult_numero
+ IF existe_oc > 0 THEN
+ SELECT MAX(num_oc) + 1 INTO ult_numero FROM prtb00012
+ UPDATE prtb00020 SET num_oc = ult_numero
+ END IF
IF xsecvend_a IS NULL OR xsecvend_a = 0 THEN
diff --git a/WEBSERVICES/orden_e.4gl b/WEBSERVICES/orden_e.4gl
index 62376e0..7456328 100644
--- a/WEBSERVICES/orden_e.4gl
+++ b/WEBSERVICES/orden_e.4gl
@@ -43,7 +43,7 @@ FUNCTION orden_e(sorden)
tipo_cliente INT
END RECORD,
s,url, selec,ret,res STRING,
- ult_numero,vendedor,i,ultimo_req INT,
+ ult_numero,vendedor,i,ultimo_req,existe_oc INT,
pprima,pitbis,valor_orden DEC(12,2),
puser,pfecha_crea VARCHAR(50),
cmd,r_cmd t_sync_cmd,
@@ -108,8 +108,15 @@ FUNCTION orden_e(sorden)
SELECT num_oc FROM marmotech.dbo.prtb00020"
PREPARE ordencmd FROM selec
- LET selec = "UPDATE marmotech.dbo.prtb00020 set num_oc = ?,us_crea='ECOMMERCE',fech_crea = getdate()"
+ # Incremento atomico (bloquea la fila hasta el COMMIT); ver BEGIN WORK
+ LET selec = "UPDATE marmotech.dbo.prtb00020 set num_oc = ISNULL(num_oc,0)+1,us_crea='ECOMMERCE',fech_crea = getdate()"
PREPARE updateprtb20 FROM selec
+ LET selec = "SELECT COUNT(*) FROM marmotech.dbo.prtb00012 WHERE num_oc = ?"
+ PREPARE existeprtb12 FROM selec
+ LET selec = "SELECT MAX(num_oc) + 1 FROM marmotech.dbo.prtb00012"
+ PREPARE maxprtb12 FROM selec
+ LET selec = "UPDATE marmotech.dbo.prtb00020 set num_oc = ?"
+ PREPARE fijaprtb20 FROM selec
LET selec = "SELECT cod_n,cod_grupo,cod_tipo,cod_sec FROM marmotech.dbo.iptb00002 WHERE codid = ?"
PREPARE buscaprod FROM selec
@@ -136,7 +143,8 @@ FUNCTION orden_e(sorden)
PREPARE buscacot FROM selec
- LET selec = "UPDATE marmotech.dbo.vetb00053 SET cotizacion_no = ?"
+ # Incremento atomico del consecutivo de cotizacion (bloquea la fila hasta el COMMIT)
+ LET selec = "UPDATE marmotech.dbo.vetb00053 SET cotizacion_no = ISNULL(cotizacion_no,0)+1"
PREPARE actualizacot FROM selec
@@ -179,22 +187,20 @@ FUNCTION orden_e(sorden)
BEGIN WORK
+ # CONSECUTIVOS ATOMICOS: primero se incrementa (UPDATE bloquea la fila hasta
+ # el COMMIT) y despues se lee; antes se leia y luego se escribia -> duplicados
+ EXECUTE actualizacot
EXECUTE buscacot INTO orden.encabezado.cotizacion_no
- IF orden.encabezado.cotizacion_no IS NULL THEN
- LET orden.encabezado.cotizacion_no = 0
- END IF
- LET orden.encabezado.cotizacion_no = orden.encabezado.cotizacion_no + 1
- EXECUTE actualizacot USING orden.encabezado.cotizacion_no
-
+ EXECUTE updateprtb20
EXECUTE ordencmd INTO ult_numero
-
- IF ult_numero IS NULL THEN
- LET ult_numero = 0
- END IF
- LET ult_numero = ult_numero + 1
-
- EXECUTE updateprtb20 USING ult_numero
+ # AUTOCORRECCION: si el contador quedo por detras de prtb00012, salta al siguiente libre
+ LET existe_oc = 0
+ EXECUTE existeprtb12 USING ult_numero INTO existe_oc
+ IF existe_oc > 0 THEN
+ EXECUTE maxprtb12 INTO ult_numero
+ EXECUTE fijaprtb20 USING ult_numero
+ END IF
LET orden.encabezado.num_oc = ult_numero
LET orden.encabezado.fecha_orden = TODAY
diff --git a/WEBSERVICES/tiendaonline/apiorden.4gl b/WEBSERVICES/tiendaonline/apiorden.4gl
index fa1daaa..720c90f 100644
--- a/WEBSERVICES/tiendaonline/apiorden.4gl
+++ b/WEBSERVICES/tiendaonline/apiorden.4gl
@@ -63,14 +63,16 @@ FUNCTION ordenApi(xorden)
CALL crearcliente(cliente.*) RETURNING xtipocliente,xseccliente
- SELECT ISNULL(a.num_oc,0) INTO ult_numero FROM prtb00020
-
- IF ult_numero = 0 THEN
- INSERT INTO prtb00020 (num_oc,us_crea) VALUES (ult_numero,orden.credenciales.usuario)
-
+ # CONSECUTIVO ATOMICO: incrementa prtb00020 (antes nunca lo avanzaba y solo
+ # leia +1 -> el contador quedaba atrasado y se duplicaba PK_prtb00012)
+ BEGIN WORK
+ UPDATE prtb00020 SET num_oc = ISNULL(num_oc,0) + 1, us_crea = orden.credenciales.usuario, fech_crea = GETDATE()
+ IF SQLCA.SQLERRD[3] = 0 THEN
+ INSERT INTO prtb00020 (num_oc,us_crea) VALUES (1,orden.credenciales.usuario)
END IF
- LET ult_numero = ult_numero + 1
-
+ SELECT num_oc INTO ult_numero FROM prtb00020
+ COMMIT WORK
+
INSERT INTO prtb00012 (ventas,tipo_orden,num_oc,fecha,tipo_cliente,sec_cliente,telefono,direccion,ubicacion,
cerrada,cond_pago,itbis, valor_bruto,monto_desc,sub_total,neto,us_crea,fech_crea,num_oc_r)
VALUES ('1','ECOMMERCE',ult_numero,orden.encabezado.fecha_orden,xtipocliente,xseccliente,
diff --git a/WEBSERVICES/veconvierteorden.4gl b/WEBSERVICES/veconvierteorden.4gl
index cd57455..7eff0f2 100644
--- a/WEBSERVICES/veconvierteorden.4gl
+++ b/WEBSERVICES/veconvierteorden.4gl
@@ -37,6 +37,7 @@ END GLOBALS
FUNCTION convierteorden(xcotizacion_no,xorden,xusuario,xclave,ximpresor,xcopia,xtipo_orden,xcomentario,xnosolicitud,archivos)
DEFINE xcotizacion_no,xsecvend_a INT,
+ existe_oc INT,
actualizar STRING,
psolicitud_sql STRING,
sb_sol base.StringBuffer,
@@ -130,16 +131,21 @@ FUNCTION convierteorden(xcotizacion_no,xorden,xusuario,xclave,ximpresor,xcopia,x
xcotizacion_no)
RETURN 0,false
END IF
- SELECT num_oc INTO ult_numero FROM prtb00020
- IF ult_numero IS NULL THEN
- LET ult_numero = 0
- END IF
- LET ult_numero = ult_numero + 1
-
BEGIN WORK
- UPDATE prtb00020 set num_oc = ult_numero,
+ # CONSECUTIVO ATOMICO: el UPDATE incrementa y bloquea la fila de prtb00020
+ # hasta el COMMIT/ROLLBACK, asi dos usuarios no pueden tomar el mismo num_oc
+ # (antes se leia fuera de la transaccion -> PK_prtb00012 duplicada)
+ UPDATE prtb00020 SET num_oc = ISNULL(num_oc, 0) + 1,
us_crea = xusuario,
fech_crea = GETDATE()
+ SELECT num_oc INTO ult_numero FROM prtb00020
+ # AUTOCORRECCION: si el contador quedo por detras de prtb00012, salta al siguiente libre
+ LET existe_oc = 0
+ SELECT COUNT(*) INTO existe_oc FROM prtb00012 WHERE num_oc = ult_numero
+ IF existe_oc > 0 THEN
+ SELECT MAX(num_oc) + 1 INTO ult_numero FROM prtb00012
+ UPDATE prtb00020 SET num_oc = ult_numero
+ END IF
DISPLAY "ACTUALICE ULTIMO NUMERO: ",ult_numero USING "<<<<<<<"," ",CURRENT
LET p_prtb14.observacion = xcomentario CLIPPED