{ ----------------------------------------------------------------------------- PROGRAMA : CPPRMT002 OBJETIVO : Aplicacion de Notas de Debito y Credito. REALIZADO POR : Tadeo A. Ferreras FECHA : Junio 27, 1993 MODIFICADO POR : JUAN F. SOTO FECHA MODIFICA : ENERO 16, 1996 DESCRIPCION : INCLUSION DEL CAMPO MONTO Y ELIMINACION DE LOS CAMPOS TIPO DE ORDEN Y NUMERO DE ORDEN. ----------------------------------------------------------------------------- } GLOBALS "cpprgb000.4gl" DEFINE supl1 DYNAMIC ARRAY OF RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nom_sp CHAR(45) END RECORD , valor_ctrl DECIMAL(12,2) DEFINE aplicar,numero INTEGER DEFINE cod1_sp,cod1_sp_sec,p_orden SMALLINT DEFINE p_tipo CHAR(2) DEFINE val_pen,valor_fac1,valor2 DECIMAL(12,2) DEFINE nom_tipo CHAR(15) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL cpprmt002() END MAIN FUNCTION cpprmt002() #WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23 OPEN FORM cpfmmt002 FROM "cpfmmt002" DISPLAY FORM cpfmmt002 #DISPLAY "cpprmt002" AT 4,3 #DISPLAY "Aplicacion de Nota de Debito y Nota de Credito" AT 6,16 MENU "OPCION" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" CLEAR FORM CALL cppcad001() COMMAND "Consultar-modificar" " Busca Registro Cancela Operacion" CLEAR FORM CALL cppcmf001() COMMAND "Salir" EXIT MENU END MENU END FUNCTION ###### Funcion que adiciona informacion referente a la aplicacion de un pago FUNCTION cppcad001() DEFINE porc_p DECIMAL(10,2) DEFINE emp SMALLINT DEFINE hoy DATE LET hoy = NULL LABEL volver: #### Aceptando los valores a insertar referentes al pago INPUT BY NAME recibo.* WITHOUT DEFAULTS ON KEY (control-W) CASE WHEN INFIELD(cod_sp) CALL busca_suplidor1() IF recibo.cod_sp IS NULL OR recibo.cod_sp = 0 THEN NEXT FIELD cod_sp ELSE DISPLAY BY NAME recibo.cod_sp,recibo.cod_sp_sec,nom_sup NEXT FIELD fecha_orig END IF EXIT CASE WHEN INFIELD(cod_sp_sec) CALL busca_suplidor1() IF recibo.cod_sp IS NULL OR recibo.cod_sp = 0 THEN NEXT FIELD cod_sp ELSE DISPLAY BY NAME recibo.cod_sp,recibo.cod_sp_sec,nom_sup NEXT FIELD fecha_orig END IF EXIT CASE END CASE AFTER FIELD cod_sp IF recibo.cod_sp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF AFTER FIELD monto IF recibo.monto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF AFTER FIELD cod_sp_sec IF recibo.cod_sp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp_sec END IF ##### Selecionando datos referentes al suplidor SELECT a.nom_sp INTO nom_sup FROM cotb00001 a WHERE a.cod_sp = recibo.cod_sp AND a.cod_sp_sec = recibo.cod_sp_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp END IF DISPLAY BY NAME recibo.cod_sp,recibo.cod_sp_sec,nom_sup ####### Controla que el documento que digite el usuario no exista como ####### otro documento que no sea una factura SELECT unique a.num_doc FROM cptb00001 a WHERE (a.cod_sp = recibo.cod_sp and a.cod_sp_sec = recibo.cod_sp_sec and a.tipo_doc not in ("FT","CP","CK") and a.num_doc=recibo.num_doc) and a.status_t IS NULL IF status != notfound THEN LET numero_msg = 234 CALL msg(numero_msg) NEXT FIELD num_doc END IF AFTER FIELD tipo_doc IF recibo.tipo_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_doc END IF ##### Igualando la descripcion de la operacion dependiendo de la clave ##### digitada en el proceso. CASE WHEN recibo.tipo_doc = "CK" LET nom_tipo = "CHEQUE" EXIT CASE WHEN recibo.tipo_doc = "NC" LET nom_tipo = "NOTA DE CREDITO" EXIT CASE WHEN recibo.tipo_doc = "CP" LET nom_tipo = "PAGO ADELANTADO" EXIT CASE WHEN recibo.tipo_doc = "ND" LET nom_tipo = "NOTA DE DEBITO" EXIT CASE END CASE SELECT a.num_doc INTO numero FROM cptb00007 a WHERE a.tipo_doc = recibo.tipo_doc LET recibo.num_doc = numero + 1 DISPLAY BY NAME recibo.num_doc,nom_tipo ATTRIBUTE (BOLD) AFTER FIELD num_doc IF recibo.num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc ELSE ###### Chequeando que el numero de registro a procesar no exista en la ###### Maestra de pago. SELECT UNIQUE a.tipo_doc,a.num_doc FROM cptb00001 a WHERE a.tipo_doc = recibo.tipo_doc and a.num_doc = recibo.num_doc IF status != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD tipo_doc END IF END IF IF recibo.tipo_doc[1] != "C" THEN NEXT FIELD cod_sp END IF # Tiene comentario hasta que se hagan los cheques por el computador AFTER FIELD fecha_orig IF recibo.fecha_orig IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_orig END IF LET p_fechas = recibo.fecha_orig CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha_orig END IF AFTER INPUT ####### Creando la facilidad para cancelar proceso mediante DELETE o SUPR IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF EXIT INPUT END INPUT INPUT ARRAY arr_recibo FROM s_recibo.* ON KEY (CONTROL-W) 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. CASE WHEN INFIELD (aplica_a) CALL busca_aplicacion() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false NEXT FIELD orden_no END IF IF existe = "N" THEN LET existe = "S" NEXT FIELD aplica_a END IF DISPLAY arr_recibo[curr].aplica_a to s_recibo[scr_l].aplica_a DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen LET bandera = 0 CALL repetir() IF bandera = 1 THEN NEXT FIELD orden_no END IF END CASE BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() IF recibo.tipo_doc = "CP" THEN NEXT FIELD valor_pag END IF AFTER FIELD aplica_a IF arr_recibo[curr].aplica_a IS NOT NULL THEN IF arr_recibo[curr].aplica_a = recibo.num_doc THEN IF (recibo.tipo_doc != "NC" AND recibo.tipo_doc != "ND") THEN LET numero_msg = 131 CALL msg(numero_msg) NEXT FIELD aplica_a END IF END IF LET bandera = 0 CALL repetir() IF bandera = 1 THEN NEXT FIELD aplica_a END IF # Controla que la factura pertenezca al suplidor # Busca el valor pendiente de la factura IF arr_recibo[curr].aplica_a != recibo.num_doc THEN SELECT unique a.num_doc FROM cptb00001 a WHERE a.num_doc = arr_recibo[curr].aplica_a and a.cod_sp=recibo.cod_sp and a.cod_sp_sec=recibo.cod_sp_sec # AND a.tipo_doc = "FT" IF STATUS = NOTFOUND THEN LET numero_msg = 126 CALL msg(numero_msg) NEXT FIELD aplica_a END IF SELECT sum(a.valor) INTO valor_fac1 FROM cptb00001 a WHERE a.cod_sp=recibo.cod_sp AND a.cod_sp_sec=recibo.cod_sp_sec AND a.aplica_a=arr_recibo[curr].aplica_a AND a.status_t IS NULL IF valor_fac1 IS NULL THEN LET valor_fac1 = 0 END IF IF valor_fac IS NULL THEN LET valor_fac = 0 END IF IF valor_fac1 < 0 THEN LET valor_fac1 = valor_fac1 * -1 END IF ####### Calculando el valor pendiente de la factura LET arr_recibo[curr].valor_pen = (valor_fac + valor_fac1) IF arr_recibo[curr].valor_pen < 0 THEN LET arr_recibo[curr].valor_pen=arr_recibo[curr].valor_pen* -1 END IF LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen END IF END IF AFTER FIELD valor_pag IF arr_recibo[curr].aplica_a IS NOT NULL THEN IF arr_recibo[curr].valor_pag IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_pag END IF IF arr_recibo[curr].valor_pag < 0 THEN LET numero_msg = 300 CALL msg(numero_msg) NEXT FIELD valor_pag END IF END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET valor_ctrl = 0 FOR idx = 1 TO arr_count() IF arr_recibo[idx].valor_pag IS not NULL THEN LET valor_ctrl = valor_ctrl + arr_recibo[idx].valor_pag END IF END FOR IF valor_ctrl != recibo.monto THEN LET numero_msg = 168 CALL msg(numero_msg) NEXT FIELD aplica_a END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF FOR idx = 1 to arr_count() IF arr_recibo[idx].aplica_a IS NOT NULL AND arr_recibo[idx].valor_pag > 0 THEN ###### En caso de que sea una nota de credito almacenar con valor en ###### negativo. IF recibo.tipo_doc != "NC" THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF IF recibo.tipo_doc = "ND" THEN LET p_tipo = "ND" ELSE LET p_tipo = NULL END IF ##### Proceso para insertar valores INSERT INTO cptb00001 (tipo_Doc,num_doc,cod_sp,cod_sp_sec,fecha_orig,fecha_proc,aplica_a,cta_ctble, valor,detalle,us_crea,fech_crea) VALUES(recibo.tipo_doc,recibo.num_doc,recibo.cod_sp,recibo.cod_sp_sec, recibo.fecha_orig,recibo.fecha_orig, arr_recibo[idx].aplica_a,recibo.cta_ctble, arr_recibo[idx].valor_pag,recibo.detalle,SUSER_SNAME(),GETDATE()) END IF END FOR LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM GOTO volver END FUNCTION FUNCTION cppcmf001() DEFINE usuario RECORD us_crea CHAR(9), fech_crea LIKE cptb00001.fech_crea END RECORD DEFINE tipo_doc CHAR(2) #WHENEVER ERROR CONTINUE ##### Creando el criterio de busqueda CONSTRUCT CRITERIO ON b.tipo_doc,b.num_doc,b.cod_sp,b.cod_sp_sec FROM tipo_doc,num_doc,cod_sp,cod_sp_sec IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF ###### Selecionando la informacion a modificar IF tipo_doc = "CP" THEN LET selec = "SELECT UNIQUE b.tipo_doc,b.num_doc,b.cta_ctble,b.cod_sp, ", " b.cod_sp_sec,b.fecha_orig,b.detalle ", "FROM cptb00001 b ", "WHERE b.status_t IS NULL AND b.tipo_doc != 'FT' AND ", " b.aplica_a IS NULL AND ",criterio clipped," ORDER BY 1,2" ELSE LET selec = "SELECT UNIQUE b.tipo_doc,b.num_doc,b.cta_ctble,b.cod_sp, ", " b.cod_sp_sec,b.fecha_orig,b.detalle ", "FROM cptb00001 b ", "WHERE b.status_t IS NULL AND b.tipo_doc != 'FT' AND ", criterio clipped," ORDER BY 1,2" END IF PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO recibo.* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF # Busca el monto del documento SELECT SUM(@valor) INTO recibo.monto FROM cptb00001 WHERE @num_doc = recibo.num_doc and @tipo_doc = recibo.tipo_doc IF recibo.monto < 0 THEN LET recibo.monto = recibo.monto * -1 END IF ###### Selecionado datos referentes al suplidor SELECT nom_sp INTO nom_sup FROM cotb00001 WHERE cod_sp = recibo.cod_sp and cod_sp_sec = recibo.cod_sp_sec ###### Selecionando nombre de la cuenta a que afectara SELECT descripcion INTO nom_cuenta FROM cgtb00001 WHERE cuenta_no = recibo.cta_ctble DISPLAY BY NAME recibo.*,nom_sup,nom_cuenta,recibo.monto LABEL vuelve: MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO recibo.* IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF # Busca el monto del documento SELECT SUM(valor) INTO recibo.monto FROM cptb00001 WHERE num_doc = recibo.num_doc and tipo_doc = recibo.tipo_doc IF recibo.monto < 0 THEN LET recibo.monto = recibo.monto * -1 END IF SELECT nom_sp INTO nom_sup FROM cotb00001 WHERE cod_sp = recibo.cod_sp and cod_sp_sec = recibo.cod_sp_sec SELECT descripcion INTO nom_cuenta FROM cgtb00001 WHERE cuenta_no = recibo.cta_ctble DISPLAY BY NAME recibo.*,nom_sup,nom_cuenta,recibo.monto COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO recibo.* IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF # Busca el monto del documento SELECT SUM(valor) INTO recibo.monto FROM cptb00001 WHERE num_doc = recibo.num_doc and tipo_doc = recibo.tipo_doc SELECT nom_sp INTO nom_sup FROM cotb00001 WHERE cod_sp = recibo.cod_sp and cod_sp_sec = recibo.cod_sp_sec IF recibo.monto < 0 THEN LET recibo.monto = recibo.monto * -1 END IF SELECT descripcion INTO nom_cuenta FROM cgtb00001 WHERE cuenta_no = recibo.cta_ctble DISPLAY BY NAME recibo.*,nom_sup,nom_cuenta,recibo.monto COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO recibo.* IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF # Busca el monto del documento SELECT SUM(valor) INTO recibo.monto FROM cptb00001 WHERE num_doc = recibo.num_doc and tipo_doc = recibo.tipo_doc IF recibo.monto < 0 THEN LET recibo.monto = recibo.monto * -1 END IF SELECT nom_sp INTO nom_sup FROM cotb00001 WHERE cod_sp = recibo.cod_sp AND cod_sp_sec = recibo.cod_sp_sec SELECT descripcion INTO nom_cuenta FROM cgtb00001 WHERE cuenta_no = recibo.cta_ctble DISPLAY BY NAME recibo.*,nom_sup,nom_cuenta,recibo.monto COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO recibo.* IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF # Busca el monto del documento SELECT SUM(valor) INTO recibo.monto FROM cptb00001 WHERE num_doc = recibo.num_doc and tipo_doc = recibo.tipo_doc IF recibo.monto < 0 THEN LET recibo.monto = recibo.monto * -1 END IF SELECT nom_sp INTO nom_sup FROM cotb00001 WHERE cod_sp = recibo.cod_sp and cod_sp_sec = recibo.cod_sp_sec SELECT descripcion INTO nom_cuenta FROM cgtb00001 WHERE cuenta_no = recibo.cta_ctble DISPLAY BY NAME recibo.*,nom_sup,nom_cuenta,recibo.monto COMMAND "Escoger" " Actualiza Registro Cancela Operacion" ##### Aceptando los valores en los campos a modificar LET p_fechas = recibo.fecha_orig CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 RETURN END IF INPUT BY NAME recibo.fecha_orig,recibo.detalle, recibo.monto WITHOUT DEFAULTS AFTER FIELD monto IF recibo.monto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF {AFTER FIELD cod_sp_sec SELECT nom_sp INTO nom_sup FROM cotb00001 WHERE cod_sp = recibo.cod_sp AND cod_sp_sec = recibo.cod_sp_sec DISPLAY BY NAME nom_sup } AFTER FIELD fecha_orig IF recibo.fecha_orig IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_orig END IF LET p_fechas = recibo.fecha_orig CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha_orig END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF END INPUT ##### Buscando la informaciona desplegar en el arreglo DECLARE buscar2 CURSOR FOR SELECT a.aplica_a,valor*-1 FROM cptb00001 a WHERE a.tipo_doc = recibo.tipo_doc and a.num_doc = recibo.num_doc AND a.cod_sp = recibo.cod_sp AND a.cod_sp_sec = recibo.cod_sp_sec AND a.status_t IS NULL ORDER BY 1 LET idx = 1 FOREACH buscar2 INTO arr_recibo[idx].* LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pen LET arr_recibo[idx].valor_pen = NULL IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) ##### Aceptando los valores que se digitaran en el arreglo INPUT ARRAY arr_recibo WITHOUT DEFAULTS FROM s_recibo.* BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD aplica_a IF arr_recibo[curr].aplica_a IS NOT NULL THEN # Busca si el numero de factura pertenece al cliente IF arr_recibo[curr].aplica_a != recibo.num_doc THEN # Busca el valor pendiente de la factura SELECT unique a.num_doc FROM cptb00001 a WHERE a.num_doc = arr_recibo[curr].aplica_a and a.cod_sp=recibo.cod_sp and a.cod_sp_sec=recibo.cod_sp_sec #and a.tipo_doc = "FT" IF STATUS = NOTFOUND THEN LET numero_msg = 126 CALL msg(numero_msg) NEXT FIELD aplica_a END IF SELECT sum(a.valor) INTO valor_fac1 FROM cptb00001 a WHERE a.cod_sp=recibo.cod_sp AND a.cod_sp_sec=recibo.cod_sp_sec AND a.aplica_a=arr_recibo[curr].aplica_a AND a.status_t IS NULL IF valor_fac1 IS NULL THEN LET valor_fac1 = 0 END IF IF valor_fac IS NULL THEN LET valor_fac = 0 END IF IF valor_fac1 < 0 THEN LET valor_fac1 = valor_fac1 * -1 END IF ####### Calculando el valor pendiente de la factura LET arr_recibo[curr].valor_pen = (valor_fac + valor_fac1) LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen END IF # Busca el valor pendiente de la factura IF recibo.tipo_doc = "CK" THEN SELECT SUM(a.valor) INTO valor_fac1 FROM cptb00001 a WHERE a.cod_sp=recibo.cod_sp AND a.cod_sp_sec=recibo.cod_sp_sec AND a.aplica_a = arr_recibo[curr].aplica_a AND a.status_t IS NULL END IF LET arr_recibo[curr].valor_pen = valor_fac1 DISPLAY arr_recibo[curr].valor_pen TO s_recibo[scr_l].valor_pen END IF AFTER FIELD valor_pag IF arr_recibo[curr].aplica_a IS NOT NULL THEN IF arr_recibo[curr].valor_pag IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_pag END IF IF arr_recibo[curr].valor_pag < 0 THEN LET numero_msg = 300 CALL msg(numero_msg) NEXT FIELD valor_pag END IF END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET valor_ctrl = 0 FOR idx = 1 TO arr_count() IF arr_recibo[idx].valor_pag IS not NULL THEN LET valor_ctrl = valor_ctrl + arr_recibo[idx].valor_pag END IF END FOR IF valor_ctrl != recibo.monto THEN LET numero_msg = 168 CALL msg(numero_msg) NEXT FIELD aplica_a END IF EXIT INPUT END INPUT ###### Proceso de actualizacion de los datos. IF recibo.tipo_doc = "CP" THEN DELETE FROM cptb00001 WHERE @tipo_doc = recibo.tipo_doc and @num_doc = recibo.num_doc AND @cod_sp = recibo.cod_sp and @cod_sp_sec= recibo.cod_sp_sec AND @aplica_a IS NULL ELSE DELETE FROM cptb00001 WHERE @tipo_doc = recibo.tipo_doc and @num_doc = recibo.num_doc AND @cod_sp = recibo.cod_sp and @cod_sp_sec= recibo.cod_sp_sec END IF FOR idx = 1 to arr_count() IF arr_recibo[idx].aplica_a IS NOT NULL AND arr_recibo[idx].valor_pag > 0 THEN IF recibo.tipo_doc != "NC" THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF IF recibo.tipo_doc = "ND" THEN LET p_tipo = "ND" ELSE LET p_tipo = NULL END IF INSERT INTO cptb00001 (tipo_Doc,num_doc,cod_sp,cod_sp_sec,fecha_orig,fecha_proc,aplica_a,cta_ctble, valor,detalle,us_crea,fech_crea,us_mod,fech_mod) VALUES(recibo.tipo_doc,recibo.num_doc,recibo.cod_sp,recibo.cod_sp_sec, recibo.fecha_orig,recibo.fecha_orig, arr_recibo[idx].aplica_a,recibo.cta_ctble, arr_recibo[idx].valor_pag,recibo.detalle,SUSER_SNAME(),GETDATE(), SUSER_SNAME(),GETDATE()) END IF END FOR LET numero_msg = 13 CALL msg(numero_msg) ####### Proceso para anular logicamente un registro COMMAND KEY ("L") "eLiminar" UPDATE cptb00001 SET status_t ='E', us_mod = usuarios, fech_mod = getdate() WHERE @tipo_doc = recibo.tipo_doc and @num_doc = recibo.num_doc and @cod_sp = recibo.cod_sp and @cod_sp_sec=recibo.cod_sp_sec LET numero_msg = 82 CALL msg(numero_msg) COMMAND "Retornar" CLEAR FORM EXIT MENU END MENU END FUNCTION FUNCTION busca_aplicacion() OPEN WINDOW busqueda1 AT 10,10 WITH FORM "cpfmwd002" ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last) CONSTRUCT criterio ON a.aplica_a FROM aplica_a 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 AND a.tipo_doc != 'CP' AND ", criterio CLIPPED, " GROUP BY a.aplica_a ", "HAVING SUM(a.valor) != 0 ", "ORDER BY a.aplica_a " PREPARE comando1 FROM selec DECLARE aplicar CURSOR FOR comando1 OPEN aplicar USING recibo.cod_sp,recibo.cod_sp_sec 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 arr_recibo[curr].aplica_a = aplica_wd[curr1].aplica_a LET arr_recibo[curr].valor_pen = aplica_wd[curr1].pendiente LABEL salir: CLOSE WINDOW busqueda1 END FUNCTION FUNCTION repetir() DEFINE ant_art RECORD orden_no INTEGER, aplica_a CHAR(10), valor_pag INTEGER END RECORD FOR idx = 1 to arr_count() IF idx != curr THEN IF arr_recibo[idx].aplica_a IS NOT NULL THEN IF arr_recibo[curr].aplica_a = arr_recibo[idx].aplica_a THEN LET numero_msg = 21 CALL msg(numero_msg) LET bandera = 1 ELSE IF bandera != 0 THEN LET bandera = 0 END IF END IF END IF END IF END FOR END FUNCTION FUNCTION busca_suplidor1() LET int_flag = FALSE OPEN WINDOW busca_sp1 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_sp1 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 comando2 FROM selec DECLARE busc CURSOR FOR comando2 LET idx = 1 FOREACH busc INTO supl1[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx -1) DISPLAY ARRAY supl1 TO s_suplid.* LET curr = ARR_CURR() LET recibo.cod_sp = supl1[curr].cod_sp LET recibo.cod_sp_sec = supl1[curr].cod_sp_sec LET nom_sup = supl1[curr].nom_sp CLOSE WINDOW busca_sp1 END FUNCTION