Compare commits
2
Commits
f574991f0d
...
9366fc90e4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9366fc90e4 | ||
|
|
a5ccd3083f |
@@ -64,7 +64,7 @@ GLOBALS "prprgb000.4gl"
|
|||||||
nombre_vend,nombres,apellidos CHAR(40),fcalle CHAR(25),
|
nombre_vend,nombres,apellidos CHAR(40),fcalle CHAR(25),
|
||||||
fcasa_num CHAR(5), fbarrio,furbanizacion CHAR(15),
|
fcasa_num CHAR(5), fbarrio,furbanizacion CHAR(15),
|
||||||
monto_desc,total1,p_costos1,total_i,total_mo DECIMAL(12,2),
|
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.*,
|
vetb05 RECORD LIKE vetb00005.*,
|
||||||
cuenta_p,ridx SMALLINT,
|
cuenta_p,ridx SMALLINT,
|
||||||
pbalance1,pbalance2 DEC(12,2),
|
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
|
# 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
|
# SISTEMA Y LA INCLUSION DEL NCF A PARTIR DEL 01/01/2007
|
||||||
# FECHA MODIFICACION: 11/01/2007
|
# FECHA MODIFICACION: 11/01/2007
|
||||||
SELECT num_oc INTO ult_numero FROM prtb00020
|
|
||||||
IF nuevo = "S" THEN
|
IF nuevo = "S" THEN
|
||||||
IF ult_numero IS NULL THEN
|
# CONSECUTIVO ATOMICO: el UPDATE incrementa y bloquea la fila de prtb00020
|
||||||
LET ult_numero = 0
|
# hasta el COMMIT, asi dos usuarios no pueden tomar el mismo num_oc
|
||||||
END IF
|
# (antes se leia y luego se escribia -> PK_prtb00012 duplicada)
|
||||||
LET ult_numero = ult_numero + 1
|
BEGIN WORK
|
||||||
LET prtb08.num_oc = ult_numero
|
UPDATE prtb00020 SET num_oc = ISNULL(num_oc, 0) + 1,
|
||||||
DISPLAY BY NAME prtb08.num_oc
|
|
||||||
|
|
||||||
UPDATE prtb00020 set num_oc = ult_numero,
|
|
||||||
us_crea = SUSER_SNAME(),
|
us_crea = SUSER_SNAME(),
|
||||||
fech_crea = GETDATE()
|
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,
|
{ CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
|
||||||
doble_on,doble_off,comp_on,comp_off,
|
doble_on,doble_off,comp_on,comp_off,
|
||||||
doce,normal,archivo,copia1
|
doce,normal,archivo,copia1
|
||||||
@@ -851,9 +858,8 @@ CALL seleccionarsalida() RETURNING r_output
|
|||||||
fech_crea = GETDATE()
|
fech_crea = GETDATE()
|
||||||
WHERE @num_oc = prtb09.num_oc
|
WHERE @num_oc = prtb09.num_oc
|
||||||
|
|
||||||
UPDATE prtb00020 SET num_oc = ult_numero,
|
# (se elimino la re-escritura de prtb00020 aqui: el consecutivo ya se tomo
|
||||||
us_Crea = SUSER_SNAME(),
|
# arriba de forma atomica y re-escribirlo podia retroceder el contador)
|
||||||
fech_crea = GETDATE()
|
|
||||||
|
|
||||||
# ACTUALIZA NUMERO TEMPORAL PARA EL DESPIECE
|
# ACTUALIZA NUMERO TEMPORAL PARA EL DESPIECE
|
||||||
UPDATE prtb00022 SET num_oc = prtb08.num_oc WHERE num_oc = tmpnumero
|
UPDATE prtb00022 SET num_oc = prtb08.num_oc WHERE num_oc = tmpnumero
|
||||||
|
|||||||
@@ -514,19 +514,28 @@ FUNCTION req_insert()
|
|||||||
DEFINE ultimo,numeroOrden INT
|
DEFINE ultimo,numeroOrden INT
|
||||||
|
|
||||||
# WHENEVER ERROR CONTINUE
|
# 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
|
IF ultimo IS NULL THEN
|
||||||
LET ultimo = 0
|
LET ultimo = 0
|
||||||
END IF
|
END IF
|
||||||
|
IF numeroOrden > ultimo THEN
|
||||||
|
LET ultimo = numeroOrden
|
||||||
|
END IF
|
||||||
|
LET numeroOrden = NULL
|
||||||
LET ultimo = ultimo + 1
|
LET ultimo = ultimo + 1
|
||||||
LET requisicion.num_req = ultimo
|
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
|
# GUARDA MASTER TABLE
|
||||||
# PREPARE s FROM "SELECT @@IDENTITY"
|
# PREPARE s FROM "SELECT @@IDENTITY"
|
||||||
BEGIN WORK
|
|
||||||
# EXECUTE s INTO requisicion.num_req
|
# EXECUTE s INTO requisicion.num_req
|
||||||
|
|
||||||
DISPLAY BY NAME requisicion.num_req
|
DISPLAY BY NAME requisicion.num_req
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -879,10 +879,12 @@
|
|||||||
</Library>
|
</Library>
|
||||||
</Group>
|
</Group>
|
||||||
<Group id="46006545" label="RECURSOS HUMANOS">
|
<Group id="46006545" label="RECURSOS HUMANOS">
|
||||||
|
<Group id="328490448" label="ADMINISTRACION PERSONAL"/>
|
||||||
<Library binaryName="FORMULARIOS_AD" id="1612573873" label="FORMULARIOS_AD">
|
<Library binaryName="FORMULARIOS_AD" id="1612573873" label="FORMULARIOS_AD">
|
||||||
<File filePath="addir/adfmwd004.per"/>
|
<File filePath="addir/adfmwd004.per"/>
|
||||||
</Library>
|
</Library>
|
||||||
<Library binaryName="FUNCIONES_AD" id="114070979" label="FUNCIONES_AD"/>
|
<Library binaryName="FUNCIONES_AD" id="114070979" label="FUNCIONES_AD"/>
|
||||||
|
<Group id="942743738" label="NOMINA"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group id="-802694369" label="REPORTE ENTRADA">
|
<Group id="-802694369" label="REPORTE ENTRADA">
|
||||||
<Library binaryName="FORMULARIO_AL" id="267647114" label="FORMULARIO_AL"/>
|
<Library binaryName="FORMULARIO_AL" id="267647114" label="FORMULARIO_AL"/>
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ FUNCTION autorizacioncontado(pcotizacion,valor_cotizado,pagado,usuarios,xmonto_a
|
|||||||
xfecha_oc,psecvend,usuarios)
|
xfecha_oc,psecvend,usuarios)
|
||||||
RETURNING xnum_req,valor_requisicion
|
RETURNING xnum_req,valor_requisicion
|
||||||
END IF
|
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
|
SELECT MAX(a.num_req) INTO xnum_req FROM cctb00026 a WHERE a.cotizacion_no = pcotizacion
|
||||||
AND a.status_t IS NULL
|
AND a.status_t IS NULL
|
||||||
END IF
|
END IF
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -6,13 +6,24 @@
|
|||||||
ACTUALIZA LA REQUISICION DE DESPACHO
|
ACTUALIZA LA REQUISICION DE DESPACHO
|
||||||
|
|
||||||
}
|
}
|
||||||
FUNCTION autorizarequisicion(balance,monto_actual_req, monto_req_autorizadas, limite_cr,tienefactura,factura)
|
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 DEC(12,2),
|
DEFINE balance,monto_actual_req, monto_req_autorizadas, limite_cr,valor_total,tasa,
|
||||||
|
monto_control DEC(12,2),
|
||||||
string_estado STRING,
|
string_estado STRING,
|
||||||
tienefactura VARCHAR(2),
|
tienefactura VARCHAR(2),
|
||||||
autoriza BOOLEAN,
|
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
|
LET valor_total = monto_req_autorizadas+monto_actual_req
|
||||||
IF tienefactura = "SI" THEN
|
IF tienefactura = "SI" THEN
|
||||||
LET string_estado = "ESTA REQUISICION NO FUE AUTORIZADA, TIENE FACTURAS VENCIDAS EL CLIENTE, UNA DE LAS FACTURAS ES ",factura USING "<<<<<<<<"
|
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
|
#CUANDO EL CLIENTE TIENE SALDO A FAVOR
|
||||||
IF balance < 0 THEN
|
IF balance < 0 THEN
|
||||||
|
|
||||||
IF ((balance * -1)) >=valor_total THEN
|
IF ((balance * -1))+monto_control >=valor_total THEN
|
||||||
|
|
||||||
LET autoriza = TRUE
|
LET autoriza = TRUE
|
||||||
LET string_estado = "ESTA REQUISICION ESTA AUTORIZADA, PORQUE EL BALANCE DE ",balance USING "##,###,###.##",
|
LET string_estado = "ESTA REQUISICION ESTA AUTORIZADA, PORQUE EL BALANCE DE ",balance USING "##,###,###.##",
|
||||||
|
|||||||
@@ -146,15 +146,15 @@ FUNCTION evaluaclientes
|
|||||||
|
|
||||||
FOREACH busca_vencido INTO xaplicacion,xpendiente
|
FOREACH busca_vencido INTO xaplicacion,xpendiente
|
||||||
IF xpendiente > 0 THEN
|
IF xpendiente > 0 THEN
|
||||||
SELECT MAX( a.tipo_doc),MAX(a.fecha_ven)
|
SELECT MAX( a.tipo_doc),MAX(a.fecha_ven)
|
||||||
INTO Xtipodoc,Xfechavence
|
INTO Xtipodoc,Xfechavence
|
||||||
FROM cctb00001 a
|
FROM cctb00001 a
|
||||||
WHERE a.status_t IS NULL AND a.num_doc = a.aplica_a AND
|
WHERE a.status_t IS NULL AND a.num_doc = a.aplica_a AND
|
||||||
a.num_doc=xaplicacion AND
|
a.num_doc=xaplicacion AND
|
||||||
a.tipo_doc not in ("PG","NC","PC","OC","DV","AV","AP") and
|
a.tipo_doc not in ("PG","NC","PC","OC","DV","AV","AP") and
|
||||||
a.tipo_cliente=xtipocliente AND
|
a.tipo_cliente=xtipocliente AND
|
||||||
a.sec_cliente=xseccliente
|
a.sec_cliente=xseccliente
|
||||||
|
|
||||||
LET dias = 0
|
LET dias = 0
|
||||||
IF xfechavence IS NULL THEN
|
IF xfechavence IS NULL THEN
|
||||||
CONTINUE FOREACH
|
CONTINUE FOREACH
|
||||||
@@ -174,8 +174,8 @@ FUNCTION evaluaclientes
|
|||||||
EXIT FOREACH
|
EXIT FOREACH
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
# OUTPUT TO REPORT prueba(xaplicacion,xpendiente,xfechavence,dias)
|
# OUTPUT TO REPORT prueba(xaplicacion,xpendiente,xfechavence,dias)
|
||||||
END FOREACH
|
END FOREACH
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
@@ -188,7 +188,7 @@ FUNCTION evaluaclientes
|
|||||||
LET monto_cotizacion = 0
|
LET monto_cotizacion = 0
|
||||||
END IF
|
END IF
|
||||||
#FUNCTION PARAMETROS AUTORIZACIONES DESPACHO
|
#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
|
SELECT a.correo INTO emailto FROM seg0003 a,seg0000 b
|
||||||
WHERE b.sec_vend = xsec_vend AND
|
WHERE b.sec_vend = xsec_vend AND
|
||||||
|
|||||||
@@ -18,37 +18,38 @@
|
|||||||
pusuarios CHAR(50),
|
pusuarios CHAR(50),
|
||||||
selec STRING,
|
selec STRING,
|
||||||
txtmensaje VARCHAR(200),
|
txtmensaje VARCHAR(200),
|
||||||
pubicacion VARCHAR(170)
|
pubicacion VARCHAR(170),
|
||||||
|
idx_max INT
|
||||||
|
|
||||||
DEFINE arr_requisicion DYNAMIC ARRAY OF RECORD
|
DEFINE arr_requisicion DYNAMIC ARRAY OF RECORD
|
||||||
procesa CHAR(3),
|
procesa CHAR(3),
|
||||||
num_oc INT,
|
num_oc INT,
|
||||||
fecha CHAR(10),
|
fecha CHAR(10),
|
||||||
cotizacion_no INT,
|
cotizacion_no INT,
|
||||||
tipo_cliente SMALLINT,
|
tipo_cliente SMALLINT,
|
||||||
sec_cliente INT,
|
sec_cliente INT,
|
||||||
nombre CHAR(30),
|
nombre CHAR(30),
|
||||||
cantidad_1 DEC(12,5),
|
cantidad_1 DEC(12,5),
|
||||||
cantidad DEC(12,5),
|
cantidad DEC(12,5),
|
||||||
area SMALLINT,
|
area SMALLINT,
|
||||||
cod_n SMALLINT,
|
cod_n SMALLINT,
|
||||||
cod_grupo SMALLINT,
|
cod_grupo SMALLINT,
|
||||||
cod_tipo SMALLINT,
|
cod_tipo SMALLINT,
|
||||||
cod_sec SMALLINT,
|
cod_sec SMALLINT,
|
||||||
descripcion CHAR(30),
|
descripcion CHAR(30),
|
||||||
unidad_med CHAR(3),
|
unidad_med CHAR(3),
|
||||||
cantidad_ord1 DEC(12,5),
|
cantidad_ord1 DEC(12,5),
|
||||||
cantidad_ord DEC(12,5),
|
cantidad_ord DEC(12,5),
|
||||||
cantidad_pendiente DEC(12,5),
|
cantidad_pendiente DEC(12,5),
|
||||||
precio DEC(12,2),
|
precio DEC(12,2),
|
||||||
descuento DEC(12,2),
|
descuento DEC(12,2),
|
||||||
descvalor DEC(12,2),
|
descvalor DEC(12,2),
|
||||||
valor DEC(12,2)
|
valor DEC(12,2)
|
||||||
END RECORD,
|
END RECORD,
|
||||||
pitbis,xmonto,monto_cotizacion DEC(12,2),
|
pitbis,xmonto,monto_cotizacion DEC(12,2),
|
||||||
estado_req varchar(30),
|
estado_req varchar(30),
|
||||||
cuenta smallint
|
cuenta smallint
|
||||||
|
|
||||||
SET CONNECTION "MSSQL"
|
SET CONNECTION "MSSQL"
|
||||||
|
|
||||||
LET monto_cotizacion = xmonto
|
LET monto_cotizacion = xmonto
|
||||||
@@ -61,16 +62,37 @@
|
|||||||
|
|
||||||
# PREPARE s FROM "SELECT @@IDENTITY"
|
# PREPARE s FROM "SELECT @@IDENTITY"
|
||||||
|
|
||||||
SELECT a.num_req INTO xnumreq FROM cctb00019 a
|
# 05/10/2026 - Error -268 PK_cctb00025 duplicada: el consecutivo se leia
|
||||||
IF xnumreq IS NULL THEN
|
# fuera de la transaccion y sin bloqueo (con RCSI dos usuarios leen el mismo
|
||||||
LET xnumreq = 0
|
# num_req). Ahora se lee DENTRO de BEGIN WORK con UPDLOCK,HOLDLOCK y se
|
||||||
END IF
|
# compara contra MAX(cctb00025) por si el contador quedo atrasado.
|
||||||
LET xnumreq = xnumreq + 1
|
WHENEVER ERROR CONTINUE
|
||||||
|
|
||||||
BEGIN WORK
|
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()
|
UPDATE cctb00019 SET num_req = xnumreq,us_crea=pusuarios,fech_crea=getdate()
|
||||||
# EXECUTE s INTO xnumreq
|
# EXECUTE s INTO xnumreq
|
||||||
|
IF STATUS < 0 THEN
|
||||||
|
ROLLBACK WORK
|
||||||
|
CALL fgl_winmessage("ERROR",SQLERRMESSAGE,"STOP")
|
||||||
|
RETURN 0,0
|
||||||
|
END IF
|
||||||
|
|
||||||
LET selec =
|
LET selec =
|
||||||
"INSERT INTO cctb00034 (id_kit,cotizacion_no,num_oc,num_req,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad)",
|
"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 ",
|
"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
|
IF STATUS < 0 THEN
|
||||||
ROLLBACK WORK
|
ROLLBACK WORK
|
||||||
CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
|
CALL fgl_winmessage("ERROR",SQLERRMESSAGE,"STOP")
|
||||||
RETURN xnumreq,xmonto
|
RETURN 0,0
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
LET estado_req = 'NO AUTORIZADA'
|
LET estado_req = 'NO AUTORIZADA'
|
||||||
@@ -169,8 +191,8 @@ BEGIN WORK
|
|||||||
|
|
||||||
IF STATUS < 0 THEN
|
IF STATUS < 0 THEN
|
||||||
ROLLBACK WORK
|
ROLLBACK WORK
|
||||||
CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
|
CALL fgl_winmessage("ERROR",SQLERRMESSAGE,"STOP")
|
||||||
RETURN xnumreq,xmonto
|
RETURN 0,0
|
||||||
|
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
@@ -208,8 +230,8 @@ BEGIN WORK
|
|||||||
EXECUTE comando
|
EXECUTE comando
|
||||||
IF STATUS < 0 THEN
|
IF STATUS < 0 THEN
|
||||||
ROLLBACK WORK
|
ROLLBACK WORK
|
||||||
CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
|
CALL fgl_winmessage("ERROR",SQLERRMESSAGE,"STOP")
|
||||||
RETURN xnumreq,xmonto
|
RETURN 0,0
|
||||||
|
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
@@ -221,8 +243,8 @@ BEGIN WORK
|
|||||||
"NO DESPACHADA",xmonto)
|
"NO DESPACHADA",xmonto)
|
||||||
IF STATUS < 0 THEN
|
IF STATUS < 0 THEN
|
||||||
ROLLBACK WORK
|
ROLLBACK WORK
|
||||||
CALL fgl_winmessage("ERROR",SQLCA.SQLCODE,"INFO")
|
CALL fgl_winmessage("ERROR",SQLERRMESSAGE,"STOP")
|
||||||
RETURN xnumreq,xmonto
|
RETURN 0,0
|
||||||
|
|
||||||
END IF
|
END IF
|
||||||
COMMIT WORK
|
COMMIT WORK
|
||||||
@@ -246,5 +268,6 @@ BEGIN WORK
|
|||||||
# subject, procedimiento )
|
# subject, procedimiento )
|
||||||
|
|
||||||
# CALL fgl_Winmessage("INFORMACION",chmensaje,"STOP")
|
# CALL fgl_Winmessage("INFORMACION",chmensaje,"STOP")
|
||||||
|
WHENEVER ERROR STOP
|
||||||
RETURN xnumreq,xmonto
|
RETURN xnumreq,xmonto
|
||||||
END FUNCTION
|
END FUNCTION
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -55,6 +55,7 @@ FUNCTION convierteorden(
|
|||||||
pprecio, monto_cotizacion DEC(12, 2),
|
pprecio, monto_cotizacion DEC(12, 2),
|
||||||
pdesc DEC(8, 2),
|
pdesc DEC(8, 2),
|
||||||
pkit INT,
|
pkit INT,
|
||||||
|
existe_oc INT,
|
||||||
pfecha_compromiso DATE
|
pfecha_compromiso DATE
|
||||||
|
|
||||||
CALL STARTLOG("veconvierte.txt")
|
CALL STARTLOG("veconvierte.txt")
|
||||||
@@ -71,11 +72,8 @@ FUNCTION convierteorden(
|
|||||||
LET pcantidad = 0
|
LET pcantidad = 0
|
||||||
LET pcantidad1 = 0
|
LET pcantidad1 = 0
|
||||||
|
|
||||||
SELECT num_oc INTO ult_numero FROM prtb00020
|
# El consecutivo num_oc se toma DENTRO de la transaccion (ver BEGIN WORK)
|
||||||
IF ult_numero IS NULL THEN
|
LET ult_numero = 0
|
||||||
LET ult_numero = 0
|
|
||||||
END IF
|
|
||||||
LET ult_numero = ult_numero + 1
|
|
||||||
LET xsecvend_a = NULL
|
LET xsecvend_a = NULL
|
||||||
|
|
||||||
SELECT a.tipo_cliente,
|
SELECT a.tipo_cliente,
|
||||||
@@ -122,8 +120,20 @@ FUNCTION convierteorden(
|
|||||||
WHENEVER ANY ERROR STOP
|
WHENEVER ANY ERROR STOP
|
||||||
|
|
||||||
BEGIN WORK
|
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
|
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
|
IF xsecvend_a IS NULL OR xsecvend_a = 0 THEN
|
||||||
|
|
||||||
|
|||||||
+22
-16
@@ -43,7 +43,7 @@ FUNCTION orden_e(sorden)
|
|||||||
tipo_cliente INT
|
tipo_cliente INT
|
||||||
END RECORD,
|
END RECORD,
|
||||||
s,url, selec,ret,res STRING,
|
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),
|
pprima,pitbis,valor_orden DEC(12,2),
|
||||||
puser,pfecha_crea VARCHAR(50),
|
puser,pfecha_crea VARCHAR(50),
|
||||||
cmd,r_cmd t_sync_cmd,
|
cmd,r_cmd t_sync_cmd,
|
||||||
@@ -108,8 +108,15 @@ FUNCTION orden_e(sorden)
|
|||||||
SELECT num_oc FROM marmotech.dbo.prtb00020"
|
SELECT num_oc FROM marmotech.dbo.prtb00020"
|
||||||
|
|
||||||
PREPARE ordencmd FROM selec
|
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
|
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 = ?"
|
LET selec = "SELECT cod_n,cod_grupo,cod_tipo,cod_sec FROM marmotech.dbo.iptb00002 WHERE codid = ?"
|
||||||
PREPARE buscaprod FROM selec
|
PREPARE buscaprod FROM selec
|
||||||
@@ -136,7 +143,8 @@ FUNCTION orden_e(sorden)
|
|||||||
|
|
||||||
PREPARE buscacot FROM selec
|
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
|
PREPARE actualizacot FROM selec
|
||||||
|
|
||||||
@@ -179,22 +187,20 @@ FUNCTION orden_e(sorden)
|
|||||||
|
|
||||||
BEGIN WORK
|
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
|
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 updateprtb20
|
||||||
EXECUTE actualizacot USING orden.encabezado.cotizacion_no
|
|
||||||
|
|
||||||
EXECUTE ordencmd INTO ult_numero
|
EXECUTE ordencmd INTO ult_numero
|
||||||
|
# AUTOCORRECCION: si el contador quedo por detras de prtb00012, salta al siguiente libre
|
||||||
IF ult_numero IS NULL THEN
|
LET existe_oc = 0
|
||||||
LET ult_numero = 0
|
EXECUTE existeprtb12 USING ult_numero INTO existe_oc
|
||||||
END IF
|
IF existe_oc > 0 THEN
|
||||||
LET ult_numero = ult_numero + 1
|
EXECUTE maxprtb12 INTO ult_numero
|
||||||
|
EXECUTE fijaprtb20 USING ult_numero
|
||||||
EXECUTE updateprtb20 USING ult_numero
|
END IF
|
||||||
|
|
||||||
LET orden.encabezado.num_oc = ult_numero
|
LET orden.encabezado.num_oc = ult_numero
|
||||||
LET orden.encabezado.fecha_orden = TODAY
|
LET orden.encabezado.fecha_orden = TODAY
|
||||||
|
|||||||
@@ -63,14 +63,16 @@ FUNCTION ordenApi(xorden)
|
|||||||
CALL crearcliente(cliente.*) RETURNING xtipocliente,xseccliente
|
CALL crearcliente(cliente.*) RETURNING xtipocliente,xseccliente
|
||||||
|
|
||||||
|
|
||||||
SELECT ISNULL(a.num_oc,0) INTO ult_numero FROM prtb00020
|
# CONSECUTIVO ATOMICO: incrementa prtb00020 (antes nunca lo avanzaba y solo
|
||||||
|
# leia +1 -> el contador quedaba atrasado y se duplicaba PK_prtb00012)
|
||||||
IF ult_numero = 0 THEN
|
BEGIN WORK
|
||||||
INSERT INTO prtb00020 (num_oc,us_crea) VALUES (ult_numero,orden.credenciales.usuario)
|
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
|
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,
|
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)
|
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,
|
VALUES ('1','ECOMMERCE',ult_numero,orden.encabezado.fecha_orden,xtipocliente,xseccliente,
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ END GLOBALS
|
|||||||
FUNCTION convierteorden(xcotizacion_no,xorden,xusuario,xclave,ximpresor,xcopia,xtipo_orden,xcomentario,xnosolicitud,archivos)
|
FUNCTION convierteorden(xcotizacion_no,xorden,xusuario,xclave,ximpresor,xcopia,xtipo_orden,xcomentario,xnosolicitud,archivos)
|
||||||
|
|
||||||
DEFINE xcotizacion_no,xsecvend_a INT,
|
DEFINE xcotizacion_no,xsecvend_a INT,
|
||||||
|
existe_oc INT,
|
||||||
actualizar STRING,
|
actualizar STRING,
|
||||||
psolicitud_sql STRING,
|
psolicitud_sql STRING,
|
||||||
sb_sol base.StringBuffer,
|
sb_sol base.StringBuffer,
|
||||||
@@ -130,16 +131,21 @@ FUNCTION convierteorden(xcotizacion_no,xorden,xusuario,xclave,ximpresor,xcopia,x
|
|||||||
xcotizacion_no)
|
xcotizacion_no)
|
||||||
RETURN 0,false
|
RETURN 0,false
|
||||||
END IF
|
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
|
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,
|
us_crea = xusuario,
|
||||||
fech_crea = GETDATE()
|
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
|
DISPLAY "ACTUALICE ULTIMO NUMERO: ",ult_numero USING "<<<<<<<"," ",CURRENT
|
||||||
|
|
||||||
LET p_prtb14.observacion = xcomentario CLIPPED
|
LET p_prtb14.observacion = xcomentario CLIPPED
|
||||||
|
|||||||
Reference in New Issue
Block a user