{ ------------------------------------------------------------------ PROGRAMA : TEPRMT001 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Depositos. PROGRAMADOR : Tadeo A. Ferreras FECHA REALIZACION : Diciembre 2, 1992. ------------------------------------------------------------------ } GLOBALS "teprgb000.4gl" DEFINE proced, idx1 INTEGER, descrip_s CHAR(30), suma DEC(12, 2) DEFINE recibos DYNAMIC ARRAY OF RECORD check1 CHAR(1), fecha_doc DATE, documento1 STRING, tipo_doc CHAR(2), tipo_cliente1 INT, sec_cliente1 INT, nom_cliente VARCHAR(200), valor1 DEC(12, 2) END RECORD DEFINE bdocumento DYNAMIC ARRAY OF RECORD num_doc3 INT, fecha3 DATE, cuenta_no3 CHAR(19), valor3 DEC(12, 2) END RECORD MAIN CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(5) RETURNING impresor CALL STARTLOG("teprmt001.txt") DISPLAY usuarios DISPLAY clave CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave CALL teprmt001() END MAIN FUNCTION teprmt001() CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, MESSAGE LINE 24, COMMENT LINE 21 OPEN FORM tefmmt001 FROM "tefmmt001" DISPLAY FORM tefmmt001 # CALL pantalla() # CALL ayuda() DISPLAY "teprmt001" AT 4, 3 ATTRIBUTE(RED) DISPLAY "Mantenimiento de Depositos" AT 6, 27 ATTRIBUTE(BLACK) MENU "OPCIONES" ON ACTION Adicionar CLEAR FORM LET INT_FLAG = FALSE CALL tepcad001() ON ACTION Consulta_modifica LET int_flag = FALSE CALL tepcmf001() ON ACTION Salir EXIT MENU END MENU END FUNCTION FUNCTION tepcad001() # WHENEVER ERROR CONTINUE ## Captura los datos que va a contener el registro INITIALIZE deposito.* TO NULL LET deposito.procedencia = NULL LET descrip1 = NULL LET descrip2 = NULL DIALOG ATTRIBUTES(UNBUFFERED, FIELD ORDER FORM) INPUT BY NAME deposito.* BEFORE INPUT LET deposito.fecha = TODAY SELECT MAX(num_doc) INTO deposito.num_doc FROM tetb00001 IF deposito.num_doc IS NULL THEN LET deposito.num_doc = 0 END IF LET deposito.num_doc = deposito.num_doc + 1 DISPLAY BY NAME deposito.num_doc CALL cuenta() CALL busca_procedencia() LET deposito.procedencia = proced DISPLAY BY NAME deposito.procedencia NEXT FIELD fecha AFTER FIELD sucursal SELECT a.nombre INTO descrip_s FROM companias a WHERE a.cod_comp = deposito.sucursal IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD sucursal END IF DISPLAY BY NAME descrip_s BEFORE FIELD num_doc AFTER FIELD cuenta_no IF deposito.cuenta_no = " " OR deposito.cuenta_no IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF { LET descrip1 = NULL SELECT i.descripcion INTO descrip1 FROM cgtb00001 i,cgtb00012 b WHERE i.cuenta_no = b.cuenta_no AND i.cuenta_no= deposito.cuenta_no AND i.status_t is null IF descrip1 IS NULL THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF DISPLAY BY NAME descrip1 } AFTER FIELD procedencia IF deposito.cta_banco IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cta_banco END IF LET descrip2 = NULL { IF deposito.procedencia IS NOT NULL THEN SELECT unique a.descripcion INTO descrip2 FROM tetb00002 a WHERE a.status_t IS NULL AND a.procedencia=deposito.procedencia IF descrip2 IS NULL THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD procedencia END IF DISPLAY BY NAME descrip2 END IF} AFTER FIELD fecha IF deposito.procedencia IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD procedencia END IF IF deposito.fecha IS NOT NULL THEN IF deposito.fecha > TODAY THEN LET numero_msg = 189 CALL msg(numero_msg) NEXT FIELD fecha END IF LET p_fechas = deposito.fecha CALL prd(p_fechas, usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF END IF AFTER FIELD monto IF deposito.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF IF deposito.monto IS NULL OR deposito.monto = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF END INPUT INPUT ARRAY recibos FROM ri.* ATTRIBUTES(WITHOUT DEFAULTS) BEFORE INPUT LET selec = "select a.tipo_doc,a.num_doc,a.tipo_cliente,a.sec_cliente,b.nombre,a.fecha_orig,", " a.valor ", " from cctb00001 a,vetb00004 b", " where a.tipo_cliente=b.tipo_cliente and a.sec_cliente=b.sec_cliente and a.tipo_doc='PC'", " and a.banco is null ", " order by a.num_doc" PREPARE comando FROM selec DECLARE busca CURSOR FOR comando LET idx = 1 FOREACH busca INTO recibos[idx].tipo_doc, recibos[idx].documento1, recibos[idx].tipo_cliente1, recibos[idx].sec_cliente1, recibos[idx].nom_cliente, recibos[idx].fecha_doc, recibos[idx].valor1 LET idx = idx + 1 END FOREACH IF deposito.cta_banco IS NULL THEN CALL fgl_winmessage( "ERROR", "CUENTA DE BANCO NO PUEDE ESTAR EN BLANCO", "CUENTA") NEXT FIELD cta_banco END IF IF deposito.sucursal IS NULL THEN CALL fgl_winmessage( "ERROR", "SUCURSAL NO PUEDE ESTAR EN BLANCO", "SUCURSAL") NEXT FIELD sucursal END IF IF deposito.monto IS NULL THEN CALL fgl_winmessage( "ERROR", "MONTO NO PUEDE ESTAR EN BLANCO", "CUENTA") NEXT FIELD monto END IF END INPUT ON ACTION recibos INPUT ARRAY documentos FROM record4.* ATTRIBUTES(WITHOUT DEFAULTS) BEFORE INPUT LET idx1 = 1 LET suma = 0 FOR idx = 1 TO recibos.getLength() IF recibos[idx].check1 = "S" THEN IF recibos[idx].documento1 IS NOT NULL THEN LET documentos[idx1].fecha = recibos[idx].fecha_doc LET documentos[idx1].documento = recibos[idx].documento1 LET documentos[idx1].tipo_cliente = recibos[idx].tipo_cliente1 LET documentos[idx1].sec_cliente = recibos[idx].sec_cliente1 LET documentos[idx1].cliente = recibos[idx].nom_cliente LET documentos[idx1].valor = recibos[idx].valor1 LET documentos[idx1].tipodocumento = recibos[idx].tipo_doc LET suma = documentos[idx1].valor + suma LET idx1 = idx1 + 1 END IF # display documentos[idx].valor # END for END IF END FOR ON ACTION guardar BEGIN WORK IF suma < 0 THEN LET suma = suma * -1 END IF IF suma != deposito.monto THEN CALL fgl_winmessage( "ERROR", "EL VALOR SUMADO DE LOS RECIBOS NO PUEDE SER DIFERENTE AL MONTO DEL DEPOSITO", "STOP") NEXT FIELD documento ROLLBACK WORK END IF {INSERT INTO tetb00001 VALUES(deposito.*) UPDATE tetb00001 SET (us_crea, fech_crea) = (usuarios, getdate()) WHERE @num_doc = deposito.num_doc} INSERT INTO tetb00001( cuenta_no, cta_banco, procedencia, fecha, monto, sucursal, us_crea, fech_crea) VALUES(deposito.cuenta_no, deposito.cta_banco, deposito.procedencia, deposito.fecha, deposito.monto, deposito.sucursal, usuarios, getdate()) FOR idx = 1 TO documentos.getLength() IF documentos[idx].documento IS NOT NULL THEN INSERT INTO tetb00008( num_doc, tipo_doc, documento, fecha, tipo_cliente, sec_cliente, nombre, valor, us_crea, fech_crea) VALUES(deposito.num_doc, documentos[idx].tipodocumento, documentos[idx].documento, documentos[idx].fecha, documentos[idx].tipo_cliente, documentos[idx].sec_cliente, documentos[idx].cliente, documentos[idx].valor, usuarios, getdate()) UPDATE cctb00001 SET banco = deposito.cta_banco WHERE num_doc = documentos[idx].documento AND tipo_doc = documentos[idx].tipodocumento END IF END FOR IF status < 0 THEN ROLLBACK WORK CALL fgl_winmessage( "error", "NO SE PUDO INSERTAR LA DATA LA DATA", "STOP") ELSE COMMIT WORK LET numero_msg = 13 CALL msg(numero_msg) CALL documentos.clear() CALL recibos.clear() CLEAR FORM RETURN END IF DISPLAY ARRAY documentos TO record4.* END INPUT ON ACTION CANCEL LET int_flag = FALSE CLEAR FORM EXIT DIALOG END DIALOG { INSERT INTO tetb00001 VALUES (deposito.*) UPDATE tetb00001 SET (us_crea,fech_crea) = (usuarios,getdate()) WHERE @num_doc = deposito.num_doc} END FUNCTION FUNCTION tepcmf001() ## Aqui se prepara para la captura del criterio de seleccion DIALOG ATTRIBUTES(UNBUFFERED, FIELD ORDER FORM) CONSTRUCT criterio ON a.num_doc, a.cuenta_no FROM num_doc1, cuenta_no1 BEFORE CONSTRUCT END CONSTRUCT ON ACTION buscar DISPLAY "aqui" LET selec = " SELECT UNIQUE a.num_doc,a.fecha,a.cuenta_no,a.monto ", " FROM tetb00001 a ", " WHERE a.status_t is null AND ", criterio CLIPPED, " ORDER BY a.num_doc " PREPARE busca1 FROM selec DECLARE datos SCROLL CURSOR WITH HOLD FOR busca1 LET idx = 1 FOREACH datos INTO bdocumento[idx].num_doc3, bdocumento[idx].fecha3, bdocumento[idx].cuenta_no3, bdocumento[idx].valor3 LET idx = idx + 1 END FOREACH IF idx = 1 THEN CALL FGL_winmessage( "error", "NO HAY REGISTROS CON ESA CONDICION", "STOP") CALL b_procedencias.clear() EXIT DIALOG END IF DISPLAY ARRAY bdocumento TO bdoc.* ON ACTION actualiza LET p_fechas = deposito.fecha CALL prd(p_fechas, usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 RETURN END IF INPUT BY NAME deposito.* WITHOUT DEFAULTS BEFORE INPUT SELECT UNIQUE a.num_doc, a.cuenta_no, a.cta_banco, a.procedencia, a.fecha, a.monto, a.us_crea, fech_crea, a.us_mod, a.fech_mod, a.sucursal INTO deposito.num_doc, deposito.cuenta_no, deposito.cta_banco, deposito.procedencia, deposito.fecha, deposito.monto, deposito.us_crea, deposito.fech_crea, deposito.us_mod, deposito.fech_mod, deposito.sucursal FROM tetb00001 a WHERE a.num_doc = bdocumento[arr_curr()].num_doc3 CALL cuenta() CALL busca_procedencia() # LET deposito.procedencia = proced DISPLAY BY NAME deposito.* NEXT FIELD fecha AFTER FIELD sucursal SELECT a.nombre INTO descrip_s FROM companias a WHERE a.cod_comp = deposito.sucursal IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD sucursal END IF DISPLAY BY NAME descrip_s BEFORE FIELD num_doc AFTER FIELD cuenta_no IF deposito.cuenta_no = " " OR deposito.cuenta_no IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF LET descrip1 = NULL SELECT i.descripcion INTO descrip1 FROM cgtb00001 i, cgtb00012 b WHERE i.cuenta_no = b.cuenta_no AND i.cuenta_no = deposito.cuenta_no AND i.status_t IS NULL IF descrip1 IS NULL THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF DISPLAY BY NAME descrip1 AFTER FIELD procedencia IF deposito.cta_banco IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cta_banco END IF LET descrip2 = NULL IF deposito.procedencia IS NOT NULL THEN SELECT UNIQUE a.descripcion INTO descrip2 FROM tetb00002 a WHERE a.status_t IS NULL AND a.procedencia = deposito.procedencia IF descrip2 IS NULL THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD procedencia END IF DISPLAY BY NAME descrip2 END IF AFTER FIELD fecha IF deposito.procedencia IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD procedencia END IF IF deposito.fecha IS NOT NULL THEN IF deposito.fecha > TODAY THEN LET numero_msg = 189 CALL msg(numero_msg) NEXT FIELD fecha END IF LET p_fechas = deposito.fecha CALL prd(p_fechas, usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF END IF AFTER FIELD monto IF deposito.monto IS NULL OR deposito.monto = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF END INPUT INPUT ARRAY documentos FROM record4.* ATTRIBUTES(WITHOUT DEFAULTS) BEFORE INPUT LET selec = "select a.tipo_doc,a.documento,a.fecha,a.tipo_cliente,a.sec_cliente,a.nombre,", " a.valor", " from tetb00008 a", " where a.num_doc=", deposito.num_doc PREPARE busca2 FROM SELEC DECLARE datos1 SCROLL CURSOR WITH HOLD FOR busca2 LET idx = 1 FOREACH datos1 INTO documentos[idx].tipodocumento, documentos[idx].documento, documentos[idx].fecha, documentos[idx].tipo_cliente, documentos[idx].sec_cliente, documentos[idx].cliente, documentos[idx].valor LET idx = idx + 1 END FOREACH ON ACTION guardar BEGIN WORK IF suma < 0 THEN LET suma = suma * -1 END IF IF suma != deposito.monto THEN CALL fgl_winmessage( "ERROR", "EL VALOR SUMADO DE LOS RECIBOS NO PUEDE SER DIFERENTE AL MONTO DEL DEPOSITO", "STOP") NEXT FIELD documento END IF UPDATE tetb00001 SET (cuenta_no, cta_banco, procedencia, fecha, monto, us_mod, fech_mod) = (deposito.cuenta_no, deposito.cta_banco, deposito.procedencia, deposito.fecha, deposito.monto, usuarios, getdate()) WHERE @num_doc = deposito.num_doc { DELETE FROM tetb00008 WHERE num_doc=deposito.num_doc FOR idx=1 TO documentos.getLength() IF documentos[idx].documento IS NOT NULL THEN INSERT INTO tetb00008 (num_doc,tipo_doc,documento,fecha,tipo_cliente,sec_cliente,nombre,valor,us_mod,fech_mod) VALUES(deposito.num_doc,documentos[idx].tipodocumento,documentos[idx].documento,documentos[idx].fecha,documentos[idx].tipo_cliente, documentos[idx].sec_cliente,documentos[idx].cliente,documentos[idx].valor,usuarios,getdate()) UPDATE cctb00001 SET banco=deposito.cta_banco WHERE num_doc=documentos[idx].documento AND tipo_doc=documentos[idx].tipodocumento END IF END for} IF status < 0 THEN ROLLBACK WORK CALL fgl_winmessage( "error", "NO SE PUDO INSERTAR LA DATA LA DATA", "STOP") ELSE COMMIT WORK LET numero_msg = 13 CALL msg(numero_msg) CALL documentos.clear() CALL recibos.clear() CLEAR FORM RETURN END IF DISPLAY ARRAY documentos TO record4.* END INPUT { UPDATE tetb00001 SET (cuenta_no,cta_banco,procedencia, fecha,monto,us_mod,fech_mod) = (deposito.cuenta_no,deposito.cta_banco, deposito.procedencia,deposito.fecha, deposito.monto,USER,CURRENT) WHERE @num_doc = deposito.num_doc LET numero_msg = 13 } CALL msg(numero_msg) ON ACTION eLiminar # FOR idx=1 TO bdocumento.getLength() UPDATE tetb00001 SET status_t = "E" WHERE num_doc = bdocumento[arr_curr()].num_doc3 UPDATE tetb00008 SET status_t = "E" WHERE num_doc = bdocumento[arr_curr()].num_doc3 LET selec = "select a.tipo_doc,a.documento,a.fecha,a.tipo_cliente,a.sec_cliente,a.nombre,", " a.valor", " from tetb00008 a", " where a.num_doc=", deposito.num_doc PREPARE busca3 FROM SELEC DECLARE datos2 SCROLL CURSOR WITH HOLD FOR busca3 LET idx = 1 FOREACH datos2 INTO documentos[idx].tipodocumento, documentos[idx].documento, documentos[idx].fecha, documentos[idx].tipo_cliente, documentos[idx].sec_cliente, documentos[idx].cliente, documentos[idx].valor UPDATE cctb00001 SET banco = NULL WHERE num_doc = documentos[idx].documento LET idx = idx + 1 END FOREACH LET numero_msg = 39 CALL msg(numero_msg) # END for END DISPLAY ON ACTION CANCEL LET int_flag = FALSE CLEAR FORM EXIT DIALOG END DIALOG END FUNCTION FUNCTION busca_cuenta() # Esta funcion busca el nombre del cuenta y lo despliega en pantalla # Esta funcion es valida solamente para la consulta-modificacion. SELECT i.descripcion INTO descrip1 FROM cgtb00001 i WHERE i.cuenta_no = deposito.cuenta_no AND i.status_t IS NULL IF status >= 0 THEN IF status = NOTFOUND THEN LET numero_msg = 68 CALL msg(numero_msg) ELSE IF status_reg = "E" THEN LET numero_msg = 67 CALL msg(numero_msg) END IF END IF ELSE # CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF END FUNCTION FUNCTION busca_procedencia() # Esta funcion busca el nombre de la Procedencia DEFINE kid INT, kdescripcion CHAR(80), kprocedencia ui.ComboBox LET kprocedencia = ui.combobox.forName("formonly.procedencia") DECLARE buscador CURSOR FOR SELECT i.procedencia, i.descripcion FROM tetb00002 i WHERE i.status_t IS NULL ORDER BY 1 CALL kprocedencia.clear() FOREACH buscador INTO kid, kdescripcion CALL kprocedencia.addItem(kid, kdescripcion) END FOREACH END FUNCTION FUNCTION cuenta() DEFINE kcuenta VARCHAR(20), kdescripcion CHAR(80), cuenta_no ui.ComboBox, cuentaForm STRING LET cuentaForm = "formonly.cuenta_no" 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