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

1079 lines
37 KiB
Plaintext

{
--------------------------------------------------------------------------------
PROGRAMA : cgprmt023
OBJETIVO : CREAR SOLICITUDES DE PAGOS PARA TRANSFERENCIAS BANCARIAS.
FECHA DESARROLLO: 02/04/2024
DESARROLLADO POR: LUIS MIGUEL
--------------------------------------------------------------------------------
}
IMPORT util
GLOBALS "cgprgb000.4gl"
DEFINE usuario, clave VARCHAR(50),
tt_pen,db,cr DEC(12,2),acceso,usada CHAR(2),
us_crea CHAR(50),fech_crea DATETIME YEAR TO MINUTE ,
opt1 CHAR(3),pperfil,nivel INT
DEFINE supl DYNAMIC ARRAY OF RECORD
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nom_sp CHAR(100)
END RECORD
DEFINE solicitud RECORD
numDoc INT,
tipoSolicitud VARCHAR(50),
fecha DATE,
cod_sp SMALLINT,
cod_sp_Sec INT,
portador VARCHAR(100),
codigo CHAR(10),
cuenta_no1 VARCHAR(25),
monto DECIMAL(18, 2),
observacion STRING,
autorizacion CHAR(2)
END RECORD,
cdoc1 DYNAMIC ARRAY OF RECORD
num_doc3 INT,
fecha DATE
,cuenta_no3 CHAR(19)
,cod_sp1 int
,cod_sp_sec1 int
,suplidor CHAR(100),
tiposolicitud1 int
,monto DEC(12,2),
usada CHAR(2)
END RECORD,
scr_l,curr,numero_msg INTEGER,selec CHAR(250)
DEFINE SaldarDocs DYNAMIC ARRAY OF RECORD
tipo VARCHAR(2),
num_oc INT,
num_doc CHAR(10),
valor_pendiente DECIMAL(18, 2),
valor_pagado DECIMAL(18, 2)
END RECORD
DEFINE CuentasAfectar DYNAMIC ARRAY OF RECORD
cuenta_no VARCHAR(19),
departamento INT,
cod_aux SMALLINT,
cod_sec SMALLINT,
nom_cuenta VARCHAR(100),
debito DECIMAL(18, 2),
credito DECIMAL(18, 2)
END RECORD
DEFINE GlobalIdx INT
DEFINE idx INT
MAIN
DEFER INTERRUPT
CALL STARTLOG("CGPRMT037.TXT")
CALL ARG_VAL(1) RETURNING usuario
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" AS "MARMOTECH" USER usuario USING clave
SELECT a.cod_perfil
INTO pperfil
FROM seg0001 a
WHERE a.usuario = usuario
CALL cgprmt037()
END MAIN
FUNCTION cgprmt037()
# CALL fgl_settitle("SOLICITUD PAGO PROVEEDORES")
OPEN WINDOW w1 WITH FORM "cgfmmt037"
MENU
ON ACTION adicionar
CALL cgprad037()
CLEAR FORM
CLEAR record2.*
CALL SaldarDocs.clear()
CALL CuentasAfectar.clear()
ON ACTION consulta_modifica
CALL cgprmf037()
ON ACTION salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION cgprad037()
INITIALIZE solicitud.* TO null
INITIALIZE GlobalIdx TO NULL
LET solicitud.fecha=today
SELECT TOP(1) numDoc INTO GlobalIdx FROM cgtb00037 ORDER BY numDoc DESC
IF GlobalIdx IS NULL THEN
LET GlobalIdx = 1;
ELSE
LET GlobalIdx = GlobalIdx + 1;
END IF
LET solicitud.numDoc = GlobalIdx USING "&&&&&&" --999999 DOCUMENTS
DIALOG ATTRIBUTES(unBUFFERED)
INPUT BY NAME solicitud.* ATTRIBUTES (WITHOUT DEFAULTS)
BEFORE INPUT
LET solicitud.fecha =TODAY
CALL busca_monedas()
CALL cuenta("formonly.cuenta_no1")
CALL solicitud()
NEXT FIELD tipoSolicitud
DISPLAY solicitud.cuenta_no1
ON ACTION suplidor
CALL busca_suplidor()
LET int_flag = FALSE
IF solicitud.cod_sp_sec IS NULL OR solicitud.cod_sp_sec = 0 THEN
NEXT FIELD cod_sp
ELSE
DISPLAY BY NAME solicitud.cod_sp,solicitud.cod_sp_sec,solicitud.portador
NEXT FIELD monto
END IF
AFTER FIELD tipoSolicitud
CALL CuentasAfectar.clear()
IF solicitud.tipoSolicitud IS NOT NULL THEN
DECLARE buscara CURSOR FOR
SELECT a.cuenta_no,a.descripcion
FROM cptb00009 a
WHERE a.status_t IS NULL AND a.tipo = solicitud.tipoSolicitud
LET idx = 1
FOREACH buscara INTO CuentasAfectar[idx].cuenta_no,CuentasAfectar[idx].nom_cuenta
DISPLAY CuentasAfectar[idx].cuenta_no
LET idx = idx + 1
END FOREACH
NEXT FIELD cod_sp
ELSE
NEXT FIELD tipoSolicitud
END IF
AFTER FIELD cod_sp
NEXT FIELD cod_sp_Sec
CALL solicitud()
AFTER FIELD cod_sp_Sec
IF solicitud.cod_sp_Sec IS NULL THEN
NEXT FIELD portador
ELSE
IF solicitud.cod_sp IS NOT NULL
AND solicitud.cod_sp_Sec IS NOT NULL THEN
SELECT nom_sp
INTO solicitud.portador
FROM cotb00001
WHERE cod_sp = solicitud.cod_sp
AND cod_sp_sec = solicitud.cod_sp_Sec
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
END IF
NEXT FIELD portador
END IF
AFTER FIELD portador
NEXT FIELD codigo
AFTER FIELD codigo
NEXT FIELD cuenta_no1
AFTER FIELD cuenta_no1
NEXT FIELD monto
AFTER FIELD monto
NEXT FIELD observacion
AFTER FIELD observacion
AFTER INPUT
IF solicitud.monto IS NULL OR solicitud.monto=0 THEN
CALL fgl_winmessage("ERROR","MONTO NO PUEDE ESTAR VACIO NI VALOR 0","stop")
NEXT FIELD monto
END IF
IF solicitud.cuenta_no1 IS NULL THEN
CALL fgl_winmessage("errro","EL NUMERO DE CUENTA NO PUEDE QUEDARSE EN BLANCO","STOP")
END IF
END INPUT
INPUT ARRAY SaldarDocs FROM SaldarDocs.*
BEFORE INPUT
LET curr = arr_curr()
LET scr_l = scr_line()
{ IF solicitud.cod_sp IS NOT NULL
AND solicitud.cod_sp_Sec IS NOT NULL THEN
LABEL vuelta:
PROMPT "Afecta Cuentas Por Pagar?(S/N) " FOR CHAR opcion
LET opcion = upshift(opcion)
IF opcion != "S" AND
opcion != "N" THEN
LET numero_msg = -1301
CALL msg(numero_msg)
GOTO vuelta
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
IF opcion = "N" THEN
CALL SaldarDocs.clear()
END IF
IF opcion = "N" THEN
EXIT INPUT
END IF
END IF }
ON ACTION busca_aplicacion
LET curr = arr_curr()
LET scr_l = scr_line()
###### Proceso para abrir window en caso de desconocer el numero de orden
###### perteneciente a la factura que se aplicara el pago.
CALL busca_aplicacion1(solicitud.cod_sp,solicitud.cod_sp_Sec) RETURNING SaldarDocs[curr].num_doc,SaldarDocs[curr].valor_pendiente
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD num_doc
END IF
AFTER FIELD num_oc
IF SaldarDocs[curr].num_oc != 999999 THEN #IS NOT NULL THEN
IF solicitud.cod_sp IS NULL THEN
##### Chequeando que el numero de orden a digitar exista en la maestra de pago[
SELECT UNIQUE a.tipo,a.orden_no,a.cod_sp,a.cod_sp_sec
INTO p_tipo,p_orden,solicitud.cod_sp,solicitud.cod_sp_sec
FROM cptb00001 a WHERE a.tipo = SaldarDocs[curr].tipo AND
a.orden_no = SaldarDocs[curr].num_oc
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
ELSE
###### Chequeando que el numero de orden exista en la maestra de orden
SELECT b.num_oc
FROM cotb00014 b WHERE b.tipo = SaldarDocs[curr].tipo AND
b.num_oc = SaldarDocs[curr].num_oc AND
b.cod_sp = solicitud.cod_sp AND
b.cod_sp_sec = solicitud.cod_sp_sec
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
END IF
END IF
AFTER FIELD num_doc
SELECT a.aplica_a,SUM(a.valor) INTO SaldarDocs[curr].num_doc,SaldarDocs[curr].valor_pendiente FROM cptb00001 a
WHERE a.cod_sp = solicitud.cod_sp AND a.cod_sp_sec = solicitud.cod_sp_sec AND
a.status_t IS NULL AND a.aplica_a =SaldarDocs[curr].num_doc
GROUP BY aplica_a HAVING SUM(a.valor) != 0 ORDER BY 1
IF status = notfound THEN
LET numero_msg = 126
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
DISPLAY SaldarDocs[curr].num_doc TO SaldarDocs[scr_l].num_doc
DISPLAY SaldarDocs[curr].valor_pendiente TO SaldarDocs[scr_l].valor_pendiente
AFTER FIELD valor_pagado
IF saldardocs[curr].valor_pagado>saldardocs[curr].valor_pendiente THEN
CALL fgl_winmessage("error","Valor Pagado No Puede ser Mayor Al Valor Pendiente","stop")
NEXT FIELD valor_pagado
END IF
AFTER INPUT
LET curr = arr_curr()
LET scr_l = scr_line()
LET tt_pen=0
FOR idx=1 TO SaldarDocs.getLength()
LET tt_pen=tt_pen+SaldarDocs[curr].valor_pagado
DISPLAY tt_pen
END FOR
IF tt_pen<solicitud.monto THEN
DISPLAY "mayor",tt_pen
CALL fgl_winmessage("error","Valor Pagado es Menor al Monto Solicitud","stop")
NEXT FIELD valor_pagado
END IF
IF tt_pen>solicitud.monto THEN
DISPLAY "menor",tt_pen
CALL fgl_winmessage("error ","Valor Pagado es Mayor al Monto Solicitud","stop")
NEXT FIELD valor_pagado
END IF
END INPUT
INPUT ARRAY CuentasAfectar FROM CuentasAfectar.*
BEFORE INPUT
LET curr = arr_curr()
LET scr_l = scr_line()
ON ACTION bcuenta
CALL busca_cuenta() RETURNING CuentasAfectar[curr].cuenta_no,CuentasAfectar[curr].nom_cuenta
DISPLAY CuentasAfectar[curr].cuenta_no TO CuentasAfectar[scr_l].cuenta_no
DISPLAY CuentasAfectar[curr].nom_cuenta TO CuentasAfectar[scr_l].nom_cuenta
AFTER FIELD cuenta_no
LET curr = arr_curr()
LET scr_l = scr_line()
IF CuentasAfectar[curr].cuenta_no IS NOT NULL THEN
SELECT a.descripcion,a.nivel INTO CuentasAfectar[curr].nom_cuenta,nivel FROM cgtb00001 a
WHERE a.cuenta_no=CuentasAfectar[curr].cuenta_no AND status_t IS NULL
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
IF nivel < 3 THEN
LET numero_msg = 175
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
END IF
DISPLAY CuentasAfectar[curr].nom_cuenta TO CuentasAfectar[scr_l].nom_cuenta
AFTER INPUT
END INPUT
ON ACTION guardar
LET valor=0
LET monto=0
LET remanente=0
FOR idx=1 TO CuentasAfectar.getLength()
IF CuentasAfectar[idx].debito IS NULL THEN
LET CuentasAfectar[idx].debito =0
END IF
IF CuentasAfectar[idx].credito IS NULL THEN
LET CuentasAfectar[idx].credito =0
END IF
LET valor = valor + CuentasAfectar[idx].debito
LET monto = CuentasAfectar[idx].credito + monto
END FOR
LET db=valor
LET cr=monto
LET monto = valor - monto
LET remanente=monto-solicitud.monto
DISPLAY BY NAME db,cr,remanente
DISPLAY "monto",monto
IF monto != solicitud.monto THEN
LET numero_msg = 178
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
IF solicitud.numDoc IS NULL OR solicitud.numDoc=1 THEN
DISPLAY "num",solicitud.numDoc
LET solicitud.numDoc =1
INSERT INTO cgtb00037 (numdoc,us_crea,fech_crea)
VALUES(solicitud.numDoc,usuario,getdate())
DISPLAY "num1",solicitud.numDoc
ELSE
#LET solicitud.numDoc=solicitud.numDoc+1
UPDATE cgtb00037
SET numdoc=solicitud.numDoc,
us_mod=usuario,
fech_mod=getdate()
END IF
BEGIN WORK
INSERT INTO cgtb00040
(numdoc,cuenta_no,tipo_solicitud,monto,cod_sp,cod_sp_Sec,portador,observacion,moneda,us_crea,fech_crea,autorizar,fecha,usada)
VALUES(solicitud.numDoc,solicitud.cuenta_no1,solicitud.tipoSolicitud,solicitud.monto,solicitud.cod_sp,solicitud.cod_sp_Sec,
solicitud.portador,solicitud.observacion,solicitud.codigo,usuario,getdate(),solicitud.autorizacion,solicitud.fecha,"N")
FOR idx=1 TO SaldarDocs.getLength()
IF SaldarDocs[idx].num_doc IS NOT NULL THEN
INSERT INTO cgtb00039
(numdoc,tipo,num_oc,num_doc,valor_pendiente,valor_pagado,us_crea,fech_Crea)
VALUES(Solicitud.numDoc,SaldarDocs[idx].tipo,SaldarDocs[idx].num_oc,SaldarDocs[idx].num_doc,SaldarDocs[idx].valor_pendiente,
SaldarDocs[idx].valor_pagado,usuario,getdate())
END IF
END FOR
FOR idx=1 TO CuentasAfectar.getLength()
IF CuentasAfectar[idx].cuenta_no is NOT NULL THEN
INSERT INTO cgtb00041
(numdoc,cuenta_no,departamento,id_auxiliar,cod_sec,nom_cuenta,debito,credito,us_crea,fech_crea)
VALUES(solicitud.numDoc,CuentasAfectar[idx].cuenta_no,CuentasAfectar[idx].departamento,CuentasAfectar[idx].cod_aux,CuentasAfectar[idx].cod_sec,
CuentasAfectar[idx].nom_cuenta,CuentasAfectar[idx].debito,CuentasAfectar[idx].credito,usuario,getdate())
END IF
END FOR
IF status<0 THEN
ROLLBACK WORK
CALL fgl_winmessage("error","NO SE PUDO INSERTAR LA DATA","STOP")
ELSE
COMMIT WORK
LET r_filename ="cgprmt037.4rp"
LET r_output = "SVG"
#LET preview = 1
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(true)
LET handler = fgl_report_commitCurrentSettings() -- commit changes
ELSE
EXIT PROGRAM
END IF
START REPORT solicitud1 TO XML HANDLER handler
FOR idx = 1 TO CuentasAfectar.getLength()
IF CuentasAfectar[idx].cuenta_no IS NOT NULL THEN
OUTPUT TO REPORT solicitud1(solicitud.numdoc, CuentasAfectar[idx].cuenta_no,CuentasAfectar[idx].departamento,
CuentasAfectar[idx].cod_aux,CuentasAfectar[idx].cod_sec,CuentasAfectar[idx].nom_cuenta,CuentasAfectar[idx].debito,
CuentasAfectar[idx].credito,solicitud.observacion)
END IF
END FOR
FINISH REPORT solicitud1
LET numero_msg = 13
CALL msg(numero_msg)
CLEAR FORM
RETURN
END IF
ON ACTION CANCEL
LET int_flag = FALSE
CLEAR FORM
EXIT DIALOG
BEFORE DIALOG
CALL seg000(usuario,pperfil,'autoriza.cgprmt037') RETURNING acceso
DISPLAY "usuario ",usuario," ",pperfil
IF acceso = "SI" THEN
CALL dialog.setFieldActive("autorizacion", TRUE )
ELSE
CALL DIALOG.setFieldActive("autorizacion",false)
END IF
END DIALOG
END FUNCTION
FUNCTION cuenta(cuentaForm)
DEFINE
kcuenta VARCHAR(20),
kdescripcion CHAR(80),
cuenta_no ui.ComboBox,
cuentaForm STRING
{ IF flag THEN
LET cuentaForm = "formonly.cuenta_no"
ELSE
LET cuentaForm = "cuenta_no1"
END IF}
LET cuenta_no = ui.combobox.forname(cuentaForm)
DECLARE busca_cuenta CURSOR FOR
SELECT RTRIM(a.cuenta_no),
'(' + RTRIM(a.cuenta_no) + ')'+ RTRIM(a.descripcion)
FROM cgtb00001 a
WHERE a.status_t IS NULL AND a.banco='SI'
ORDER BY a.descripcion
CALL cuenta_no.clear()
FOREACH busca_cuenta INTO kcuenta, kdescripcion
CALL cuenta_no.additem(kcuenta, kdescripcion)
END FOREACH
END FUNCTION
FUNCTION busca_aplicacion1(pcod,pcodsec)
DEFINE pcod,pcodsec INT
OPEN WINDOW busqueda1 AT 10,10 WITH FORM "cgfmwd006"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last)
LET selec = "SELECT a.aplica_a,SUM(a.valor) FROM cptb00001 a ",
"WHERE a.cod_sp = ? AND a.cod_sp_sec = ? AND ",
" a.status_t IS NULL AND a.aplica_a IS NOT NULL ",
"GROUP BY aplica_a HAVING SUM(a.valor) != 0 ORDER BY 1"
PREPARE comando1 FROM selec
DECLARE aplicar CURSOR FOR comando1
OPEN aplicar USING pcod,pcodsec
LET existe = "N"
LET idx = 1
WHILE STATUS != NOTFOUND
FETCH aplicar INTO aplica_wd[idx].*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
LET aplica_wd[idx].pendiente = aplica_wd[idx].pendiente #* -1
LET existe = "S"
LET idx = idx + 1
END WHILE
IF existe = "N" AND idx = 1 THEN
LET numero_msg = 127
CALL msg(numero_msg)
GOTO salir
END IF
CALL SET_COUNT(idx-1)
DISPLAY ARRAY aplica_wd TO consart.*
LET curr1 = arr_curr()
LET SaldarDocs[curr].num_doc = aplica_wd[curr].aplica_a
LET SaldarDocs[curr].valor_pendiente = aplica_wd[curr].pendiente
LABEL salir:
CLOSE WINDOW busqueda1
RETURN SaldarDocs[curr].num_doc,SaldarDocs[curr].valor_pendiente
END FUNCTION
FUNCTION cgprmf037()
CLEAR FORM
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM )
CONSTRUCT criterio ON a.numdoc,a.cuenta_no
FROM numdoc1,cuenta_no2
BEFORE CONSTRUCT
AFTER CONSTRUCT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
END CONSTRUCT
ON ACTION buscar
CALL cdoc1.clear()
LET curr=arr_curr()
LET SELEC = " SELECT UNIQUE a.numdoc,a.fecha,a.cuenta_no,a.cod_sp,a.cod_sp_sec,
portador,a.tipo_solicitud,a.monto,a.usada FROM cgtb00040 a WHERE a.status_t is null and ",
criterio clipped,
" ORDER BY a.numdoc asc"
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR WITH HOLD FOR busca
LET idx=1
FOREACH datos INTO cdoc1[idx].num_doc3,cdoc1[idx].fecha,cdoc1[idx].cuenta_no3,cdoc1[idx].cod_sp1
,cdoc1[idx].cod_sp_sec1,cdoc1[idx].suplidor,cdoc1[idx].tiposolicitud1,cdoc1[idx].monto,cdoc1[idx].usada
LET idx=idx+1
END FOREACH
IF idx=1 THEN
CALL FGL_winmessage("error","NO HAY REGISTROS CON ESA CONDICION","STOP")
EXIT DIALOG
END IF
DISPLAY ARRAY cdoc1 TO cdoc.*
BEFORE ROW
ON ACTION Escoger
LET curr=arr_curr()
LET scr_l = scr_line()
SELECT a.usada INTO usada FROM cgtb00040 a
WHERE a.numdoc=cdoc1[curr].num_doc3
IF cdoc1[curr].usada ="N" OR cdoc1[curr].usada IS NULL THEN
LET solicitud.numDoc=cdoc1[curr].num_doc3
IF cdoc1[curr].num_doc3 IS NOT NULL THEN
LET selec1 =
" SELECT a.tipo,a.num_oc,a.num_doc,a.valor_pagado ",
"FROM cgtb00039 a ",
"WHERE a.numdoc=",cdoc1[curr].num_doc3," and status_t is null "
PREPARE comand4 FROM selec1
DECLARE busca1 CURSOR FOR comand4
LET idx=1
FOREACH busca1 INTO SaldarDocs[idx].tipo,SaldarDocs[idx].num_oc,
SaldarDocs[idx].num_doc,SaldarDocs[idx].valor_pagado
DISPLAY SaldarDocs[idx].num_doc TO SaldarDocs[idx].num_doc
DISPLAY SaldarDocs[idx].num_oc TO SaldarDocs[idx].num_oc
DISPLAY SaldarDocs[idx].tipo TO SaldarDocs[idx].tipo
DISPLAY SaldarDocs[idx].valor_pagado TO SaldarDocs[idx].valor_pagado
LET idx=idx=1
END FOREACH
LET selec1 =
" SELECT a.cuenta_no,a.departamento,a.id_auxiliar,a.cod_sec,a.nom_cuenta,a.debito,a.credito ",
"FROM cgtb00041 a ",
"WHERE a.numdoc=",cdoc1[curr].num_doc3," and status_t is null "
PREPARE comand5 FROM selec1
DECLARE busca2 CURSOR FOR comand5
LET idx=1
FOREACH busca2 INTO CuentasAfectar[idx].cuenta_no,CuentasAfectar[idx].departamento,
CuentasAfectar[idx].cod_aux,CuentasAfectar[idx].cod_sec,CuentasAfectar[idx].nom_cuenta,CuentasAfectar[idx].debito,
CuentasAfectar[idx].credito
DISPLAY CuentasAfectar[idx].cod_aux TO CuentasAfectar[idx].cod_aux
DISPLAY CuentasAfectar[idx].cod_sec TO CuentasAfectar[idx].cod_sec
DISPLAY CuentasAfectar[idx].credito TO CuentasAfectar[idx].credito
DISPLAY CuentasAfectar[idx].debito TO CuentasAfectar[idx].debito
DISPLAY CuentasAfectar[idx].cuenta_no TO CuentasAfectar[idx].cuenta_no
DISPLAY CuentasAfectar[idx].departamento TO CuentasAfectar[idx].departamento
DISPLAY CuentasAfectar[idx].nom_cuenta TO CuentasAfectar[idx].nom_cuenta
LET idx=idx+1
END FOREACH
END IF
CALL actualizar()
ELSE
CALL fgl_winmessage("ERROR","Solicitud Se Le Hizo Transferencia","STOP")
END IF
ON ACTION eLiminar
LET curr=arr_curr()
LET OPT1 = FGL_WINQUESTION("WARNING","ESTA SEGURO DE ELIMINAR ESTE REGISTRO?","NO","YES|NO","QUESTION",0)
IF OPT1 = "YES" THEN
UPDATE cgtb00040 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE @numdoc=cdoc1[curr].num_doc3
UPDATE cgtb00039 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE @numdoc=cdoc1[curr].num_doc3
UPDATE cgtb00041 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE @numdoc=cdoc1[curr].num_doc3
LET numero_msg = 39
CALL msg(numero_msg)
END IF
END DISPLAY
ON ACTION CANCEL
LET int_flag= FALSE
call cdoc1.clear()
CLEAR FORM
EXIT DIALOG
END DIALOG
END FUNCTION
FUNCTION actualizar()
DEFINE num_doc1 INT
DEFINE cuenta_no2 CHAR(19)
DIALOG ATTRIBUTES (UNBUFFERED,FIELD ORDER FORM )
INPUT BY NAME solicitud.* ATTRIBUTES (WITHOUT DEFAULTS)
BEFORE INPUT
LET scr_l = scr_line()
LET idx = arr_curr()
CALL cuenta("formonly.cuenta_no1")
CALL solicitud()
LET selec= "SELECT a.numdoc,a.cuenta_no,a.fecha,a.tipo_solicitud,a.monto,a.cod_sp,a.cod_sp_Sec,a.portador, ",
"a.observacion,a.moneda,a.autorizar",
" FROM cgtb00040 a ",
" WHERE a.numdoc=", cdoc1[idx].num_doc3," and a.status_t is null",
" ORDER BY a.numdoc"
PREPARE comando FROM selec
DECLARE accion5 SCROLL CURSOR FOR comando
OPEN accion5
FETCH FIRST accion5 INTO solicitud.numDoc,solicitud.cuenta_no1,solicitud.fecha,solicitud.tipoSolicitud,solicitud.monto,
solicitud.cod_sp,solicitud.cod_sp_Sec,solicitud.portador,solicitud.observacion,solicitud.codigo,solicitud.autorizacion
AFTER FIELD cod_sp
NEXT FIELD cod_sp_Sec
AFTER FIELD cod_sp_Sec
IF solicitud.cod_sp_Sec IS NULL THEN
NEXT FIELD portador
ELSE
IF solicitud.cod_sp IS NOT NULL
AND solicitud.cod_sp_Sec IS NOT NULL THEN
SELECT nom_sp
INTO solicitud.portador
FROM cotb00001
WHERE cod_sp = solicitud.cod_sp
AND cod_sp_sec = solicitud.cod_sp_Sec
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
END IF
NEXT FIELD portador
END IF
END INPUT
INPUT ARRAY SaldarDocs FROM SaldarDocs.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
ON ACTION busca_aplicacion
LET curr = arr_curr()
LET scr_l = scr_line()
###### Proceso para abrir window en caso de desconocer el numero de orden
###### perteneciente a la factura que se aplicara el pago.
CALL busca_aplicacion1(solicitud.cod_sp,solicitud.cod_sp_Sec) RETURNING SaldarDocs[curr].num_doc,SaldarDocs[curr].valor_pendiente
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD num_doc
END IF
AFTER FIELD num_oc
IF SaldarDocs[curr].num_oc != 999999 THEN #IS NOT NULL THEN
IF solicitud.cod_sp IS NULL THEN
##### Chequeando que el numero de orden a digitar exista en la maestra de pago[
SELECT UNIQUE a.tipo,a.orden_no,a.cod_sp,a.cod_sp_sec
INTO p_tipo,p_orden,solicitud.cod_sp,solicitud.cod_sp_sec
FROM cptb00001 a WHERE a.tipo = SaldarDocs[curr].tipo AND
a.orden_no = SaldarDocs[curr].num_oc
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
ELSE
###### Chequeando que el numero de orden exista en la maestra de orden
SELECT b.num_oc
FROM cotb00014 b WHERE b.tipo = SaldarDocs[curr].tipo AND
b.num_oc = SaldarDocs[curr].num_oc AND
b.cod_sp = solicitud.cod_sp AND
b.cod_sp_sec = solicitud.cod_sp_sec
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
END IF
END IF
AFTER FIELD num_doc
SELECT a.aplica_a,SUM(a.valor) INTO SaldarDocs[curr].num_doc,SaldarDocs[curr].valor_pendiente FROM cptb00001 a
WHERE a.cod_sp = solicitud.cod_sp AND a.cod_sp_sec = solicitud.cod_sp_sec AND
a.status_t IS NULL AND a.aplica_a =SaldarDocs[curr].num_doc
GROUP BY aplica_a HAVING SUM(a.valor) != 0 ORDER BY 1
IF status = notfound THEN
LET numero_msg = 126
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
DISPLAY SaldarDocs[curr].num_doc TO SaldarDocs[scr_l].num_doc
DISPLAY SaldarDocs[curr].valor_pendiente TO SaldarDocs[scr_l].valor_pendiente
AFTER FIELD valor_pagado
IF saldardocs[curr].valor_pagado>saldardocs[curr].valor_pendiente THEN
CALL fgl_winmessage("error","Valor Pagado No Puede ser Mayor Al Valor Pendiente","stop")
NEXT FIELD valor_pagado
END IF
AFTER INPUT
LET curr = arr_curr()
LET scr_l = scr_line()
LET tt_pen=0
FOR idx=1 TO SaldarDocs.getLength()
LET tt_pen=tt_pen+SaldarDocs[curr].valor_pagado
DISPLAY tt_pen
END FOR
IF tt_pen<solicitud.monto THEN
DISPLAY "mayor",tt_pen
CALL fgl_winmessage("error","Valor Pagado es Menor al Monto Solicitud","stop")
NEXT FIELD valor_pagado
END IF
IF tt_pen>solicitud.monto THEN
DISPLAY "menor",tt_pen
CALL fgl_winmessage("error ","Valor Pagado es Mayor al Monto Solicitud","stop")
NEXT FIELD valor_pagado
END IF
END INPUT
ON ACTION imprimir
LET r_filename ="cgprmt037.4rp"
LET r_output = "SVG"
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(true)
LET handler = fgl_report_commitCurrentSettings() -- commit changes
ELSE
EXIT PROGRAM
END IF
START REPORT solicitud1 TO XML HANDLER handler
FOR idx = 1 TO CuentasAfectar.getLength()
IF CuentasAfectar[idx].cuenta_no IS NOT NULL THEN
OUTPUT TO REPORT solicitud1(solicitud.numdoc, CuentasAfectar[idx].cuenta_no,CuentasAfectar[idx].departamento,
CuentasAfectar[idx].cod_aux,CuentasAfectar[idx].cod_sec,CuentasAfectar[idx].nom_cuenta,CuentasAfectar[idx].debito,
CuentasAfectar[idx].credito,solicitud.observacion)
END IF
END FOR
FINISH REPORT solicitud1
ON ACTION guardar
BEGIN WORK
SELECT a.us_crea,a.fech_crea INTO us_crea,fech_crea FROM cgtb00040
WHERE a.numdoc=solicitud.numDoc
UPDATE cgtb00040 SET cuenta_no=solicitud.cuenta_no1,fecha=solcitud.fecha,tipo_solcitud=solicitud.tipoSolicitud,
monto=solicitud.monto,cod_sp=solicitud.cod_sp,cod_sp_sec=solicitud.cod_sp_Sec,portador=solicitud.portador,
observacion=solicitud.observacion,moneda=solicitud.codigo,autorizar=solicitud.autorizacion,us_mod=usuario,fech_mod=getdate()
WHERE numdoc=solicitud.numDoc
FOR idx=1 TO SaldarDocs.getLength()
IF SaldarDocs[idx].num_doc IS NOT NULL THEN
DELETE FROM cgtb00039
WHERE numdoc=solicitud.numDoc
INSERT INTO cgtb00039
(tipo,num_oc,num_doc,valor_pagado,us_crea,fech_crea,us_mod,fech_mod)
VALUES (SaldarDocs[idx].tipo,SaldarDocs[idx].num_oc,SaldarDocs[idx].num_doc,SaldarDocs[idx].valor_pagado,
us_crea,fech_crea,usuario,getdate())
END IF
END FOR
FOR idx=1 TO CuentasAfectar.getLength()
IF CuentasAfectar[idx].cuenta_no IS NOT NULL THEN
DELETE FROM cgtb00041
WHERE numdoc=solicitud.numDoc
INSERT INTO cgtb00041
(cuenta_no,departamento,id_auxiliar,cod_sec,nom_cuenta,debito,credito,us_crea,fech_crea,us_mod,fech_mod)
VALUES(CuentasAfectar[idx].cuenta_no,CuentasAfectar[idx].departamento,CuentasAfectar[idx].cod_aux,
CuentasAfectar[idx].cod_sec,CuentasAfectar[idx].nom_cuenta,CuentasAfectar[idx].debito,CuentasAfectar[idx].credito,
us_crea,fech_crea,usuario,getdate())
END IF
END FOR
IF status<0 THEN
ROLLBACK WORK
CALL fgl_winmessage("error","NO SE PUDO ACTUALIZAR LA DATA","STOP")
ELSE
COMMIT WORK
LET r_filename ="cgprmt037.4rp"
LET r_output = "SVG"
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(true)
LET handler = fgl_report_commitCurrentSettings() -- commit changes
ELSE
EXIT PROGRAM
END IF
START REPORT solicitud1 TO XML HANDLER handler
DISPLAY "report"
FOR idx = 1 TO CuentasAfectar.getLength()
IF CuentasAfectar[idx].cuenta_no IS NOT NULL THEN
OUTPUT TO REPORT solicitud1(solicitud.numdoc, CuentasAfectar[idx].cuenta_no,CuentasAfectar[idx].departamento,
CuentasAfectar[idx].cod_aux,CuentasAfectar[idx].cod_sec,CuentasAfectar[idx].nom_cuenta,CuentasAfectar[idx].debito,
CuentasAfectar[idx].credito,solicitud.observacion)
END IF
END FOR
FINISH REPORT solicitud1
LET numero_msg = 13
CALL msg(numero_msg)
CLEAR FORM
RETURN
END IF
ON ACTION CANCEL
LET int_flag = FALSE
CLEAR FORM
EXIT DIALOG
BEFORE DIALOG
CALL seg000(usuario,pperfil,'autoriza.cgprmt037') RETURNING acceso
DISPLAY "usuario ",usuario," ",pperfil
IF acceso = "SI" THEN
CALL dialog.setFieldActive("autorizacion", TRUE )
ELSE
CALL DIALOG.setFieldActive("autorizacion",false)
END IF
END DIALOG
END FUNCTION
REPORT solicitud1(x)
DEFINE x RECORD
numdoc INT,
cuenta_no VARCHAR(19),
departamento INT,
cod_aux SMALLINT,
cod_sec SMALLINT,
nom_cuenta VARCHAR(100),
debito DECIMAL(18, 2),
credito DECIMAL(18, 2),
xcomentario CHAR(150)
END RECORD
DEFINE t_debito,t_credito,total_aplica DECIMAL(12,2),
total_registro SMALLINT,
fecha CHAR(40)
ORDER BY x.numdoc
FORMAT
FIRST PAGE HEADER
LET total_registro = 0
LET t_debito = 0
LET t_credito = 0
LET fecha = TODAY USING "dd/mm/yyyy",":",TIME
SELECT a.nombre INTO p_compania.nombre FROM companias a
ON EVERY ROW
LET t_credito = t_credito + x.credito
LET t_debito = t_debito + x.debito
LET total_registro = total_registro + 1
PRINTX x.*,p_compania.nombre,solicitud.*,
fecha,total_registro,t_credito,t_debito
AFTER GROUP OF x.numdoc
LET total_aplica = 0
FOR idx = 1 TO SaldarDocs.getLength()
LET total_aplica = total_aplica + SaldarDocs[idx].valor_pagado
PRINTX SaldarDocs[idx].num_doc,SaldarDocs[idx].num_oc,SaldarDocs[idx].tipo,SaldarDocs[idx].valor_pagado
END FOR
PRINTX total_aplica
END REPORT
#### Busqueda de datos generales referente a un suplidor
FUNCTION busca_suplidor()
LET int_flag = FALSE
OPEN WINDOW busca_sp AT 10,3 WITH FORM "cpfmwd001"
ATTRIBUTE(BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST)
CONSTRUCT criterio ON a.nom_sp FROM nom_sp
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLOSE WINDOW busca_sp
RETURN
END IF
LET selec = "SELECT a.cod_sp,a.cod_sp_sec,a.nom_sp FROM cotb00001 a ",
"WHERE a.status_t IS NULL AND ",criterio CLIPPED," ORDER BY 3 "
PREPARE comando3 FROM selec
DECLARE busc CURSOR FOR comando3
LET idx = 1
FOREACH busc INTO supl[idx].*
LET idx = idx + 1
END FOREACH
CALL SET_COUNT(idx -1)
DISPLAY ARRAY supl TO s_suplid.*
LET curr = ARR_CURR()
LET solicitud.cod_sp = supl[curr].cod_sp
LET solicitud.cod_sp_sec = supl[curr].cod_sp_sec
LET solicitud.portador = supl[curr].nom_sp
CLOSE WINDOW busca_sp
END FUNCTION
FUNCTION busca_monedas()
DEFINE pmoneda ui.combobox,
kmoneda SMALLINT,kdescripcion CHAR(30)
DECLARE moneda CURSOR FOR
SELECT a.cod_mon,a.descrip_mon FROM cotb00031 a
WHERE a.status_t is null
ORDER BY a.descrip_mon
LET pmoneda = ui.combobox.forname("formonly.codigo")
CALL pmoneda.clear()
FOREACH moneda INTO kmoneda,kdescripcion
CALL pmoneda.additem(kmoneda,kdescripcion)
END FOREACH
END FUNCTION