{ ----------------------------------------------------------------------------- PROGRAMA : CCPRMT001 OBJETIVO : Mantenimiento de Recibo de Pago y otros Movimientos REALIZADO POR : JUAN SOTO FECHA : Enero 1997 MODIFICACION : El campo cod_emp de la tabla cctb00001 se guarda el codigo de la sucursale quien emite el recibo En el campo costo de la tabla cctb00001 seguarda 1-Si el documento debe salir en el reporte de cobros de la encargada y 0- En caso contrario ----------------------------------------------------------------------------- } GLOBALS "ccprgb000.4gl" DEFINE valor_cheque1,p_num_doc INTEGER DEFINE valor_ctrl1,valor_nc,nc_pend,valor_ctrl,p_total, remanente,val_pen,valor2 DECIMAL(12,2) DEFINE fecha1 DATE DEFINE nombre_cta,p_nombre_tipo CHAR(30) DEFINE tipo_ant,tipo_doc2,tipo_doc1 CHAR(2) DEFINE opc CHAR(1), avance BOOLEAN, navance SMALLINT, ch_itbis char(2) MAIN DEFER INTERRUPT CALL STARTLOG("ccprmt01.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "decomarmol" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a SELECT a.sucid,a.sucnombre INTO codigo_sucursal,nombre_sucursal FROM sucursales a,seg0001 b WHERE b.usuario = usuarios AND b.sucid = a.sucid IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","USTED NO TIENE LOCALIDAD ASIGNADA, CONTACTE ADMINISTRADOR SISTEMAS","STOP") EXIT PROGRAM END IF CALL ccprmt001() END MAIN ####### Funcion para agregar un recibo de pago FUNCTION ccprmt001() OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23 # CALL pantalla() OPEN FORM ccfmmt001 FROM "ccfmmt001" DISPLAY FORM ccfmmt001 DISPLAY "ccprmt001" AT 4,3 DISPLAY "Movimientos de CXC" AT 6,31 DISPLAY nombre_sucursal TO localidad LET fecha1 = today MENU "OPCION" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" CALL ccpcad001() COMMAND "Consultar-modificar" " Busca Registro Cancela Operacion" CALL ccpcmf001() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION FUNCTION ccpcad001() DEFINE emp SMALLINT DEFINE hoy DATE LET hoy = null LABEL volver: LET recibo.fecha_orig = fecha1 LET valor_ctrl = NULL LET tipo_ant = "PG" DISPLAY nombre_sucursal TO localidad INPUT BY NAME recibo.*,valor_ctrl,ch_itbis WITHOUT DEFAULTS ## VENTANAS PARA BUSCAR LOS CLIENTES Y LOS EMPLEADOS BEFORE INPUT LET ch_itbis = 'SI' DISPLAY BY NAME ch_itbis BEFORE FIELD num_doc IF recibo.tipo_doc = 'PG' THEN NEXT FIELD tipo_cliente END IF ON KEY (CONTROL-W) CASE WHEN INFIELD(tipo_cliente) CALL consulta_clientes() LET recibo.tipo_cliente = cliente_dir.tipo_cliente LET recibo.sec_cliente = cliente_dir.sec_cliente SELECT a.nombre INTO nom_cli FROM vetb00004 a WHERE a.tipo_cliente = recibo.tipo_cliente and a.sec_cliente = recibo.sec_cliente AND a.status_t IS NULL DISPLAY BY NAME recibo.tipo_cliente ATTRIBUTE (BOLD) DISPLAY BY NAME recibo.sec_cliente ATTRIBUTE(BOLD) DISPLAY BY NAME nom_cli ATTRIBUTE (BOLD) NEXT FIELD cod_emp_sec WHEN INFIELD(sec_cliente) CALL consulta_clientes() LET recibo.tipo_cliente = cliente_dir.tipo_cliente LET recibo.sec_cliente = cliente_dir.sec_cliente SELECT nombre INTO nom_cli FROM vetb00004 WHERE tipo_cliente = recibo.tipo_cliente and sec_cliente = recibo.sec_cliente DISPLAY BY NAME recibo.tipo_cliente ATTRIBUTE (BOLD) DISPLAY BY NAME recibo.sec_cliente ATTRIBUTE(BOLD) DISPLAY BY NAME nom_cli ATTRIBUTE (BOLD) NEXT FIELD cod_emp_sec WHEN INFIELD(cod_emp_sec) CALL consulta_empleados() LET recibo.cod_emp_sec = transportista.sec_transp SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec DISPLAY BY NAME recibo.cod_emp_sec ATTRIBUTE (BOLD) LET nombre_emp = descrip2 clipped," ",descrip3 clipped DISPLAY BY NAME nombre_emp ATTRIBUTE (BOLD) NEXT FIELD fecha_orig END CASE { AFTER FIELD deposito IF recibo.cuenta_no is not null THEN IF recibo.deposito is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD deposito END IF SELECT unique num_doc FROM tetb00001 WHERE cuenta_no = recibo.cuenta_no and num_doc = recibo.deposito IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD deposito END IF END IF } ## AQUI SE PREPARA PARA LA CAPTURA DE INFORMACION BEFORE FIELD tipo_doc LET recibo.tipo_doc = tipo_ant 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 LET tipo_ant = recibo.tipo_doc { IF recibo.tipo_doc = "PG" AND recibo.deposito IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD deposito ELSE IF recibo.tipo_doc != "PG" AND recibo.deposito IS NOT NULL THEN LET numero_msg = 192 CALL msg(numero_msg) LET recibo.deposito = null DISPLAY BY NAME recibo.deposito END IF END IF } CASE WHEN recibo.tipo_doc = "PG" LET nombre_tipo = "PAGOS" EXIT CASE WHEN recibo.tipo_doc = "OC" LET nombre_tipo = "OTROS CREDITOS" EXIT CASE WHEN recibo.tipo_doc = "NC" LET nombre_tipo = "NOTA CREDITO" EXIT CASE WHEN recibo.tipo_doc = "ND" LET nombre_tipo = "NOTA DEBITO" EXIT CASE WHEN recibo.tipo_doc = "PI" LET nombre_tipo = "PAGO INTER." EXIT CASE WHEN recibo.tipo_doc = "DV" LET nombre_tipo = "DEVOLUCION DINERO" EXIT CASE END CASE DISPLAY BY NAME nombre_tipo ATTRIBUTE (BOLD) LET p_nombre_tipo = nombre_tipo #IF recibo.tipo_doc <> "RM" AND recibo.tipo_doc <> 'RC' THEN SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a WHERE a.tipo_doc = recibo.tipo_doc IF STATUS = NOTFOUND THEN LET p_num_doc = 0 END IF LET p_num_doc = p_num_doc + 1 LET recibo.num_doc = p_num_doc #END IF { AFTER FIELD cuenta_no IF recibo.cuenta_no is not null THEN SELECT descripcion INTO nombre_cta FROM cgtb00001 WHERE cuenta_no = recibo.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 DISPLAY BY NAME nombre_cta ATTRIBUTE (blue) END IF } ## CHEQUEA QUE EL REGISTRO NO SE REPITA AFTER FIELD num_doc IF recibo.num_doc IS NULL or recibo.num_doc = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF SELECT UNIQUE a.num_doc FROM cctb00001 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 num_doc END IF ## CHEQUEA QUE EL CLIENTE EXISTA, SI EXISTE DESPLEGA SU NOMBRE AFTER FIELD tipo_cliente IF recibo.tipo_cliente IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF # Controla que el TIPO DE MOVIMIENTO FI solo sea a tipo clientes 13 IF recibo.tipo_doc = "FI" AND recibo.tipo_cliente = 12 THEN LET numero_msg = 240 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF AFTER FIELD sec_cliente IF recibo.sec_cliente IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_cliente END IF SELECT b.nombre INTO nom_cli FROM vetb00004 b WHERE b.tipo_cliente = recibo.tipo_cliente and b.sec_cliente = recibo.sec_cliente IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF DISPLAY BY NAME nom_cli ATTRIBUTE (BOLD) # BUSCA EL VENDEDOR PARA ESTE CLIENTE SELECT a.sec_vend INTO recibo.cod_emp_sec FROM vetb00028 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente DISPLAY BY NAME recibo.cod_emp_sec IF recibo.cod_emp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_cliente END IF SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec LET nombre_emp = descrip2 CLIPPED," ",descrip3 DISPLAY BY NAME nombre_emp ATTRIBUTE (BOLD) NEXT FIELD fecha_orig AFTER FIELD cod_emp_sec IF recibo.cod_emp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF LET nombre_emp = descrip2 clipped," ",descrip3 clipped DISPLAY BY NAME nombre_emp ATTRIBUTE (BOLD) IF recibo.tipo_doc = "ND" THEN SELECT sec_vend FROM vetb00028 WHERE tipo_cliente = recibo.tipo_cliente and sec_cliente = recibo.sec_cliente IF status != notfound THEN LET numero_msg = 357 CALL msg(numero_msg) END IF END IF ## VERIFICA EL ULTIMO NUMERO DE RECIBO DEL VENDEDOR { IF recibo.tipo_doc = "PG" THEN SELECT ult_recibo INTO p_num_doc FROM cctb00003 WHERE sec_vend = recibo.cod_emp_sec and status_t is null and tipo_doc = "PG" IF status = notfound THEN LET numero_msg = 128 CALL msg(numero_msg) SLEEP 2 RETURN END IF LET p_num_doc = p_num_doc + 1 # Chequea que el recibo del vendedor este fuera de secuencia IF recibo.num_doc != p_num_doc THEN LET numero_msg = 155 CALL msg(numero_msg) NEXT FIELD num_doc END IF DISPLAY BY NAME recibo.num_doc ATTRIBUTE (BOLD) # Controlando que el numero del recibo este dentro de la secuencia # del vendedor SELECT max(sec_de),max(sec_a),max(fecha) INTO relacion.sec_de,relacion.sec_a,relacion.fecha FROM cctb00002 WHERE sec_vend = recibo.cod_emp_sec and status_t is null IF status = notfound THEN LET numero_msg = 123 CALL msg(numero_msg) NEXT FIELD num_doc END IF IF recibo.num_doc < relacion.sec_de OR recibo.num_doc > relacion.sec_a THEN LET numero_msg = 125 CALL msg(numero_msg) NEXT FIELD num_doc END IF END IF} AFTER FIELD fecha_orig IF recibo.fecha_orig IS NULL OR recibo.fecha_orig > TODAY 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 LET fecha1 = recibo.fecha_orig BEFORE FIELD valor_ctrl LET valor_ctrl = null DISPLAY BY NAME valor_ctrl AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec LET nombre_emp = descrip2 CLIPPED," ",descrip3 { IF recibo.tipo_doc = "PG" THEN IF recibo.cuenta_no is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF } IF valor_ctrl IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_ctrl END IF EXIT INPUT END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF CALL arr_recibo.clear() LABEL arreglo1: ## AQUI SE INTRODUCEN LOS DATOS DEL ARREGLO INPUT ARRAY arr_recibo WITHOUT DEFAULTS FROM s_recibo.* BEFORE INPUT IF recibo.tipo_doc="PG" THEN LET curr=arr_curr() LET scr_l = scr_line() CALL busca_avance() RETURNING arr_recibo[curr].num_nc,arr_recibo[curr].valor_pen, arr_recibo[curr].cotizacion_no LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen DISPLAY arr_recibo[curr].num_nc to s_recibo[scr_l].num_nc DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag DISPLAY arr_recibo[curr].aplica_a to s_recibo[scr_l].aplica_a DISPLAY arr_recibo[curr].cotizacion_no to s_recibo[scr_l].cotizacion_no END IF ## VENTANA PARA BUSCAR LOS DOCUMENTOS ON KEY (CONTROL-W) 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 aplica_a 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 aplica_a END IF NEXT FIELD aplica_a WHEN INFIELD(num_nc) LET curr = arr_curr() LET scr_l = scr_line() CALL busca_avance() RETURNING arr_recibo[curr].num_nc,arr_recibo[curr].valor_pen, arr_recibo[curr].cotizacion_no LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen DISPLAY arr_recibo[curr].num_nc to s_recibo[scr_l].num_nc DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag DISPLAY arr_recibo[curr].aplica_a to s_recibo[scr_l].aplica_a DISPLAY arr_recibo[curr].cotizacion_no to s_recibo[scr_l].cotizacion_no END CASE BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD num_nc LET nc_pend = 0 IF recibo.tipo_doc = "AV" THEN LET arr_recibo[curr].num_nc = NULL DISPLAY arr_recibo[curr].num_nc TO s_recibo[scr_l].num_nc END IF IF arr_recibo[curr].num_nc IS NOT NULL THEN SELECT UNIQUE num_doc FROM cctb00001 a WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND a.num_doc = arr_recibo[curr].num_nc AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_nc END IF LET valor_nc = 0 SELECT SUM(a.valor+a.monto_desc) INTO valor_nc FROM cctb00001 a WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND a.num_doc = arr_recibo[curr].num_nc AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente IF valor_nc IS NULL THEN LET valor_nc = 0 END IF LET nc_pend = valor_nc LET arr_recibo[curr].valor_pen = nc_pend DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen DISPLAY BY NAME nc_pend END IF AFTER FIELD aplica_a IF arr_recibo[curr].num_nc IS NOT NULL THEN IF arr_recibo[curr].aplica_a IS NULL THEN CALL fgl_winmessage("ERROR","DEBE COLOCAR EL DOCUMENTO DE FACTURA APLICAR EL AVANCE","INFO") NEXT FIELD aplica_a END IF END IF IF arr_recibo[curr].aplica_a IS NOT NULL THEN LET bandera = 0 CALL repetir() IF bandera = 1 THEN NEXT FIELD aplica_a END IF IF recibo.tipo_doc = "AV" THEN IF recibo.num_doc != arr_recibo[curr].aplica_a THEN ERROR "Si Es Un Avance Debe Aplicarse a Si Mismo" NEXT FIELD aplica_a END IF END IF # Controla que el documento factura pertenezca al cliente IF recibo.tipo_doc = "PG" THEN SELECT unique a.tipo_cliente FROM cctb00001 a WHERE a.num_doc = arr_recibo[curr].aplica_a and a.tipo_cliente = recibo.tipo_cliente and a.sec_cliente = recibo.sec_cliente and (a.tipo_doc IN ("FT","FE","FI","ND")) and a.status_t is null IF status = notfound THEN LET numero_msg = 126 CALL msg(numero_msg) NEXT FIELD aplica_a END IF END IF # Busca el valor pendiente de la factura IF arr_recibo[curr].num_nc IS NULL THEN SELECT sum(a.valor+a.monto_desc) INTO valor_fac FROM cctb00001 a WHERE a.aplica_a = arr_recibo[curr].aplica_a and a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.status_t is null LET arr_recibo[curr].valor_pen = valor_fac ELSE LET arr_recibo[curr].valor_pen = 0 END IF DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen END IF BEFORE FIELD desc_p IF arr_recibo[curr].num_nc IS NOT NULL THEN LET arr_recibo[curr].desc_p = 0 NEXT FIELD valor_pag ELSE LET arr_recibo[curr].desc_p = 0 LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen DISPLAY arr_recibo[curr].desc_p to s_recibo[scr_l].desc_p END IF AFTER FIELD desc_p IF arr_recibo[curr].num_nc IS NOT NULL THEN LET arr_recibo[curr].desc_p = 0 ELSE IF arr_recibo[curr].desc_p is null THEN LET arr_recibo[curr].desc_p = 0 END IF LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pag - arr_recibo[curr].desc_p END IF DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag AFTER FIELD valor_pag IF arr_recibo[curr].aplica_a IS NULL AND arr_recibo[curr].num_nc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF IF arr_recibo[curr].valor_pag IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF LET p_total = 0 LET remanente = valor_ctrl FOR idx = 1 TO arr_count() IF arr_recibo[idx].valor_pag is not null THEN IF arr_recibo[idx].num_nc IS NULL THEN LET p_total = p_total + arr_recibo[idx].valor_pag LET remanente = remanente - arr_recibo[idx].valor_pag END IF END IF END FOR IF p_total < 0 THEN LET p_total = p_total * -1 END IF if arr_recibo[curr].num_nc is not null then IF p_total > valor_ctrl THEN LET numero_msg = 178 CALL msg(numero_msg) END IF end if DISPLAY BY NAME p_total ATTRIBUTE(BOLD) DISPLAY BY NAME remanente ATTRIBUTE(blue) # Controla que el valor aplicado a las facturas no exceda el monto del recibo AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF END INPUT LET p_companias.cod_comp = 1 { IF p_total != valor_ctrl THEN LET numero_msg = 178 CALL msg(numero_msg) LET curr = 0 LET scr_l = 0 GOTO arreglo1 END IF } LET opc = NULL LET valor_cheque1 = NULL IF recibo.tipo_doc = "ND" THEN PROMPT "NOTA DE DEBITO ES DEBIDO A CHEQUE DEVUELTO...[S/N]? " FOR CHAR opc LET opc = UPSHIFT(opc) IF opc = "S" THEN SELECT sec_vend INTO recibo.cod_emp_sec FROM vetb00028 WHERE tipo_cliente = recibo.tipo_cliente and sec_cliente = recibo.sec_cliente DISPLAY BY NAME recibo.cod_emp_sec LET valor_cheque1 = recibo.num_doc ELSE LET valor_cheque1 = NULL END IF END IF CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT cctb01 TO archivo SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a WHERE a.tipo_doc = recibo.tipo_doc IF STATUS = NOTFOUND THEN LET p_num_doc = 0 END IF LET p_num_doc = p_num_doc + 1 LET recibo.num_doc = p_num_doc DISPLAY BY NAME recibo.num_doc # INSERTA EL COMENTARIO BEGIN WORK UPDATE cctb00003 set ult_recibo = recibo.num_doc, us_crea = SUSER_SNAME(), fech_crea = GETDATE(), us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE tipo_doc = recibo.tipo_doc INSERT INTO cctb00011(cod_cia,num_doc,tipo_doc,tipo_cliente,sec_cliente,comentario,us_crea,fech_crea,SucID,chitbis, cod_emp_sec,valor_recibo) VALUES (p_companias.cod_comp,recibo.num_doc,recibo.tipo_Doc,recibo.tipo_cliente,recibo.sec_cliente, recibo.comentario,SUSER_SNAME(),GETDATE(),codigo_sucursal,ch_itbis,recibo.cod_emp_sec, valor_ctrl) IF SQLSTATE > 02 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP") RETURN END IF LET avance = FALSE LET navance = 1 ## SI NO OCURRE NINGUN ERROR SE PROCEDE A INSERTAR EL REGISTRO FOR idx = 1 to arr_count() IF arr_recibo[idx].aplica_a is not null THEN IF recibo.tipo_doc = "PG" THEN IF recibo.cod_emp_sec IS NULL OR recibo.cod_emp_sec = 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO TIENE VENDEDOR","STOP") GOTO arreglo1 END IF END IF IF recibo.tipo_doc != "ND" AND recibo.tipo_doc != "DV" THEN IF recibo.tipo_doc != "FI" THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 END IF END IF # ESTAS INSTRUCCIONES ES PARA ENTRAR LOS AV-AVANCES POR ESTE PROGRAMA # SUPONGO QUE ESTAS LINEAS SERAN TEMPORALES HASTA QUE LOS AVANCES SE # INTRODUZCAN POR OTRO MANTENIMIENTO IF recibo.tipo_doc = "AV" THEN IF arr_recibo[idx].num_nc IS NOT NULL THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","El Campo de Numero de Avancve Debe Estar En Nulo","STOP") RETURN END IF IF arr_recibo[idx].aplica_a != recibo.num_doc THEN ROLLBACK WORK CALL fgl_winmessage("ERROR", "Documento Debe Aplicarse a Si Mismo","STOP") RETURN END IF IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * - 1 END IF END IF #-------------------------------------------------------------------------- LET navance = 1 LET tipo_doc1 = NULL IF tipo_doc1 = 'PG' THEN LET navance = 1 END IF IF arr_recibo[idx].num_nc IS NOT NULL THEN LET tipo_doc1 = "AV" LET avance = TRUE LET navance = 0 ELSE LET arr_recibo[idx].num_nc = recibo.num_doc LET tipo_doc1 = recibo.tipo_doc LET avance = FALSE LET navance = 1 END IF IF recibo.tipo_doc = "DV" THEN IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag *-1 END IF END IF IF recibo.tipo_doc = "ND" THEN IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag *-1 END IF END IF LET p_companias.cod_comp = 1 INSERT INTO cctb00001 (cod_cia,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp,cod_emp_sec,fecha_orig, fecha_ven,aplica_a,num_cheque,valor,valor_cheque,costo,monto_desc,us_crea,fech_crea, banco) values (p_companias.cod_comp,tipo_doc1, arr_recibo[idx].num_nc,recibo.tipo_cliente,recibo.sec_cliente,codigo_sucursal, recibo.cod_emp_sec,recibo.fecha_orig,"010101",arr_recibo[idx].aplica_a, recibo.num_doc,arr_recibo[idx].valor_pag, valor_cheque1,navance,arr_recibo[idx].desc_p,SUSER_SNAME(),GETDATE(), arr_recibo[idx].cotizacion_no) IF SQLSTATE > 02 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP") RETURN END IF INSERT INTO cctb00005 (num_doc,tipo_Doc,aplica_a,valor_pagado) VALUES (recibo.num_doc,recibo.tipo_doc,arr_recibo[idx].aplica_a,arr_recibo[idx].valor_pag) IF SQLSTATE > 02 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP") RETURN END IF { IF tipo_doc1 = "ND" THEN UPDATE cctb00001 set valor_cheque = numero_recibo WHERE num_doc = recibo.num_doc AND tipo_doc = "ND" END IF INSERT INTO cctb00001 values (recibo.cuenta_no,null,tipo_doc1, arr_recibo[idx].num_nc,recibo.tipo_cliente,recibo.sec_cliente,null, recibo.cod_emp_sec,recibo.fecha_orig,null,arr_recibo[idx].aplica_a, recibo.deposito,recibo.num_doc,arr_recibo[idx].valor_pag,null, valor_cheque1,null,arr_recibo[idx].desc_p,null,SUSER_SNAME(),GETDATE(),null,null) } IF avance = FALSE THEN OUTPUT TO REPORT cctb01(recibo.tipo_cliente, recibo.sec_cliente,recibo.fecha_orig,recibo.num_doc, recibo.cod_emp_sec,tipo_doc1,null,null, arr_recibo[idx].aplica_a,arr_recibo[idx].desc_p,arr_recibo[idx].valor_pag, nom_cli,nombre_emp,nombre_cta,recibo.comentario) END IF END IF END FOR FINISH REPORT cctb01 RUN imprime CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF COMMIT WORK LET numero_msg = 1 CALL msg(numero_msg) LET emp = recibo.cod_emp_sec CLEAR FORM GOTO volver END FUNCTION ## Funcion para consultar/modificar un recibo de pago FUNCTION ccpcmf001() DEFINE usuario RECORD us_crea CHAR(9), fech_crea LIKE cctb00001.fech_crea END RECORD ## SE PREPARA EL CRITERIO PARA CONSULTAR/MODIFICAR UN REGISTRO CONSTRUCT CRITERIO ON b.tipo_doc,b.num_doc,b.tipo_cliente, b.sec_cliente, b.cod_emp_sec,b.fecha_orig FROM tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec, fecha_orig IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF LET selec = "SELECT b.tipo_doc,b.num_doc,b.tipo_cliente, ", " b.sec_cliente,a.cod_emp_sec,a.fecha_orig,b.comentario,b.chitbis,a.cod_emp_sec,b.valor_recibo ", "FROM cctb00011 b,cctb00001 a ", "WHERE ",criterio clipped," AND ", " a.num_cheque = b.num_doc AND ", " b.tipo_Doc = a.tipo_Doc AND ", " a.cod_emp = b.sucid AND ", " a.status_t is null ORDER BY b.tipo_Doc,b.num_doc " PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO recibo.*,ch_itbis IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL datos_doc() MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO recibo.*,ch_itbis IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL datos_doc() COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO recibo.*,ch_itbis IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL datos_doc() COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO recibo.*,ch_itbis IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL datos_doc() COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO recibo.*,ch_itbis IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL datos_doc() { COMMAND KEY("I") "re-Imprimir" CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT cctb01 TO archivo IF recibo.tipo_doc = "PG" THEN LET selec = "SELECT a.num_doc,a.aplica_a,a.valor,a.monto_desc,a.valor ", "FROM cctb00001 a ", "WHERE ((a.tipo_doc = ? OR a.tipo_doc = 'AV') AND ", " a.num_cheque = ?) AND (a.tipo_cliente = ? AND ", " a.sec_cliente = ?) ORDER BY 2,1 " ELSE LET selec = "SELECT num_doc,aplica_a,valor,monto_desc,valor FROM cctb00001 ", "WHERE (tipo_doc=? AND num_cheque=?)AND (tipo_cliente = ? AND ", " sec_cliente = ?) ORDER BY 2,1 " END IF PREPARE comando1 FROM selec DECLARE buscar11 CURSOR FOR comando1 OPEN buscar11 USING recibo.tipo_doc,recibo.num_doc,recibo.tipo_cliente, recibo.sec_cliente LET idx = 1 WHILE STATUS != NOTFOUND FETCH buscar11 INTO arr_recibo[idx].* IF STATUS = NOTFOUND THEN EXIT WHILE END IF IF arr_recibo[idx].num_nc = recibo.num_doc THEN LET arr_recibo[idx].num_nc = NULL END IF IF recibo.tipo_doc != "ND" AND recibo.tipo_doc != "OD" THEN LET arr_recibo[idx].valor_pen = arr_recibo[idx].valor_pen * -1 ELSE IF arr_recibo[idx].valor_pen < 0 THEN LET arr_recibo[idx].valor_pen = arr_recibo[idx].valor_pen *-1 END IF END IF LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pen LET arr_recibo[idx].valor_pen = 0 LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 OUTPUT TO REPORT cctb01(recibo.tipo_cliente, recibo.sec_cliente,recibo.fecha_orig,recibo.num_doc, recibo.cod_emp_sec,recibo.tipo_doc,null,null, arr_recibo[idx].aplica_a,arr_recibo[idx].desc_p,arr_recibo[idx].valor_pag, nom_cli,nombre_emp,nombre_cta,recibo.comentario) LET idx = idx + 1 END WHILE FINISH REPORT cctb01 RUN imprime COMMAND "Escoger" INPUT BY NAME recibo.tipo_cliente, recibo.sec_cliente,recibo.cod_emp_sec,valor_ctrl, recibo.comentario,ch_itbis WITHOUT DEFAULTS ## CHEQUEA QUE EL CLIENTE EXISTA, SI EXISTE DESPLEGA SU NOMBRE AFTER FIELD tipo_cliente IF recibo.tipo_cliente IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF # Controla que el TIPO DE MOVIMIENTO FI solo sea a tipo clientes 13 IF recibo.tipo_doc = "FI" AND recibo.tipo_cliente = 12 THEN LET numero_msg = 240 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF AFTER FIELD sec_cliente IF recibo.sec_cliente IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_cliente END IF SELECT b.nombre INTO nom_cli FROM vetb00004 b WHERE b.tipo_cliente = recibo.tipo_cliente and b.sec_cliente = recibo.sec_cliente IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF DISPLAY BY NAME nom_cli ATTRIBUTE (BOLD) AFTER FIELD cod_emp_sec IF recibo.cod_emp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF LET nombre_emp = descrip2 clipped," ",descrip3 clipped DISPLAY BY NAME nombre_emp ATTRIBUTE (BOLD) IF recibo.tipo_doc = "ND" THEN SELECT sec_vend FROM vetb00028 WHERE tipo_cliente = recibo.tipo_cliente and sec_cliente = recibo.sec_cliente IF status != notfound THEN LET numero_msg = 357 CALL msg(numero_msg) END IF END IF AFTER FIELD valor_ctrl IF valor_ctrl IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_ctrl END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE GO TO vuelve END IF EXIT INPUT END INPUT IF recibo.tipo_doc = "PG" THEN LET selec = "SELECT a.num_doc,a.aplica_a,a.valor,a.monto_desc,a.valor ", "FROM cctb00001 a ", "WHERE ((a.tipo_doc = ? OR a.tipo_doc = 'AV') AND ", " a.num_cheque = ?) AND (a.tipo_cliente = ? AND ", " a.sec_cliente = ?) ORDER BY 2,1 " ELSE LET selec = "SELECT num_doc,aplica_a,valor,monto_desc,valor FROM cctb00001 ", "WHERE (tipo_doc=? AND num_cheque=?)AND (tipo_cliente = ? AND ", " sec_cliente = ?) ORDER BY 2,1 " END IF PREPARE comando FROM selec DECLARE buscar1 CURSOR FOR comando OPEN buscar1 USING recibo.tipo_doc,recibo.num_doc,recibo.tipo_cliente, recibo.sec_cliente LET idx = 1 WHILE STATUS != NOTFOUND FETCH buscar1 INTO arr_recibo[idx].* IF STATUS = NOTFOUND THEN EXIT WHILE END IF IF arr_recibo[idx].num_nc = recibo.num_doc THEN LET arr_recibo[idx].num_nc = null END IF IF recibo.tipo_doc != "ND" AND recibo.tipo_doc != "OD" THEN LET arr_recibo[idx].valor_pen = arr_recibo[idx].valor_pen * -1 ELSE IF arr_recibo[idx].valor_pen < 0 THEN LET arr_recibo[idx].valor_pen = arr_recibo[idx].valor_pen *-1 END IF END IF LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pen LET arr_recibo[idx].valor_pen = 0 LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 SELECT sum(valor) INTO valor2 FROM cctb00001 WHERE tipo_cliente = recibo.tipo_cliente and sec_cliente = recibo.sec_cliente and aplica_a = arr_recibo[idx].aplica_a and status_t is null AND num_cheque = recibo.num_doc LET arr_recibo[idx].valor_pen = valor2 LET idx = idx + 1 END WHILE CALL set_count(idx - 1) LABEL arreglo2: ## AQUI SE MODIFICAN/ACTUALIZAN LOS CAMPOS DEL ARREGLO INPUT ARRAY arr_recibo WITHOUT DEFAULTS FROM s_recibo.* ## VENTANA PARA BUSCAR LOS DOCUMENTOS ON KEY (CONTROL-W) LET curr = arr_curr() LET scr_l = scr_line() 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 aplica_a 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 aplica_a END IF NEXT FIELD aplica_a END CASE BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD num_nc LET nc_pend = 0 IF recibo.tipo_doc = "AV" THEN LET arr_recibo[curr].num_nc = NULL DISPLAY arr_recibo[curr].num_nc TO s_recibo[scr_l].num_nc END IF IF arr_recibo[curr].num_nc IS NOT NULL THEN SELECT UNIQUE num_doc FROM cctb00001 a WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND a.num_doc = arr_recibo[curr].num_nc AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_nc END IF LET valor_nc = 0 SELECT SUM(a.valor+a.monto_desc) INTO valor_nc FROM cctb00001 a WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND a.num_doc = arr_recibo[curr].num_nc AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente IF valor_nc IS NULL THEN LET valor_nc = 0 END IF END IF AFTER FIELD aplica_a IF arr_recibo[curr].aplica_a IS NOT NULL THEN LET bandera = 0 CALL repetir() IF bandera = 1 THEN NEXT FIELD aplica_a END IF IF recibo.tipo_doc = "AV" THEN IF recibo.num_doc != arr_recibo[curr].aplica_a THEN ERROR "Si Es Un Avance Debe Aplicarse a Si Mismo" NEXT FIELD aplica_a END IF END IF #IF recibo.tipo_doc != "AV" AND # arr_recibo[curr].aplica_a = recibo.num_doc THEN # LET numero_msg = 131 # CALL msg(numero_msg) # NEXT FIELD aplica_a #END IF # Controla que la factura pertenezca al cliente IF recibo.tipo_doc = "PG" THEN SELECT unique tipo_cliente FROM cctb00001 WHERE num_doc = arr_recibo[curr].aplica_a and tipo_cliente = recibo.tipo_cliente and sec_cliente = recibo.sec_cliente and (tipo_doc IN ("FT","FE","FI","ND")) and status_t is null IF status = notfound THEN LET numero_msg = 126 CALL msg(numero_msg) NEXT FIELD aplica_a END IF END IF # Busca el valor pendiente de la factura IF arr_recibo[curr].num_nc IS NULL THEN SELECT sum(a.valor+a.monto_desc) INTO valor_fac FROM cctb00001 a WHERE a.aplica_a=arr_recibo[curr].aplica_a and a.status_t is null AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente LET arr_recibo[curr].valor_pen = valor_fac ELSE LET arr_recibo[curr].valor_pen = 0 END IF DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen END IF BEFORE FIELD desc_p IF arr_recibo[curr].num_nc IS NOT NULL THEN LET arr_recibo[curr].desc_p = 0 NEXT FIELD valor_pag END IF IF arr_recibo[curr].desc_p IS NULL THEN LET arr_recibo[curr].desc_p = 0 END IF DISPLAY arr_recibo[curr].desc_p to s_recibo[scr_l].desc_p AFTER FIELD desc_p IF arr_recibo[curr].num_nc IS NOT NULL THEN LET arr_recibo[curr].desc_p = 0 ELSE IF arr_recibo[curr].desc_p is null THEN LET arr_recibo[curr].desc_p = 0 END IF END IF AFTER FIELD valor_pag IF arr_recibo[curr].aplica_a IS NULL AND arr_recibo[curr].num_nc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF IF arr_recibo[curr].valor_pag IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_pag END IF LET remanente = valor_ctrl LET p_total = 0 FOR idx = 1 TO arr_count() IF arr_recibo[idx].valor_pag is not null THEN IF arr_recibo[idx].num_nc IS NULL THEN LET p_total = p_total - arr_recibo[idx].valor_pag END IF END IF END FOR IF p_total < 0 THEN LET p_total = p_total * -1 END IF DISPLAY BY NAME remanente ATTRIBUTE(blue) IF p_total != valor_ctrl THEN LET numero_msg = 178 CALL msg(numero_msg) END IF DISPLAY BY NAME p_total ATTRIBUTE(BOLD) # Controla que el valor aplicado a las facturas no exceda el monto del recibo END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF IF p_total != valor_ctrl THEN LET numero_msg = 178 CALL msg(numero_msg) GOTO arreglo2 END IF LET opc = NULL LET valor_cheque1 = NULL IF recibo.tipo_doc = "ND" THEN PROMPT "NOTA DE DEBITO ES DEBIDO A CHEQUE DEVUELTO...[S/N]? " FOR CHAR opc LET opc = UPSHIFT(opc) IF opc = "S" THEN LET valor_cheque1 = recibo.num_doc ELSE LET valor_cheque1 = NULL END IF END IF ## AQUI SE REALIZA LA MODIFICACION DEL REGISTRO IF recibo.tipo_doc = "PG" THEN BEGIN WORK DELETE FROM cctb00001 WHERE num_cheque= recibo.num_doc and tipo_doc IN ("PG","AV") AND valor < 0 AND fecha_orig = recibo.fecha_orig IF SQLSTATE > 02 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP") RETURN END IF ELSE IF recibo.tipo_doc = "ND" THEN SELECT unique a.valor_cheque INTO valor_cheque1 FROM cctb00001 a WHERE a.num_doc = recibo.num_doc AND a.tipo_doc = "ND" END IF BEGIN WORK UPDATE cctb00011 SET comentario = recibo.comentario, cod_emp_Sec = recibo.cod_emp_sec, valor_recibo = valor_ctrl, fecha_orig = recibo.fecha_orig, cctb00011.chitis = chitbis, us_mod = usuarios, fech_mod = getdate() WHERE num_doc = recibo.num_doc AND tipo_doc = recibo.tipo_doc DELETE FROM cctb00005 WHERE num_Doc = recibo.num_doc AND tipo_Doc = recibo.tipo_doc IF SQLSTATE > 02 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP") RETURN END IF DELETE FROM cctb00001 WHERE cctb00001.num_doc= recibo.num_doc and cctb00001.tipo_doc = recibo.tipo_doc and CONVERT (CHAR(10),fech_crea,101) > '01/01/2009' IF SQLSTATE > 02 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP") RETURN END IF END IF CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT cctb01 TO archivo LET avance = FALSE FOR idx = 1 to arr_count() IF arr_recibo[idx].aplica_a is not null OR arr_recibo[idx].num_nc is not null THEN IF recibo.tipo_doc != "ND" AND recibo.tipo_doc != "OD" THEN IF recibo.tipo_doc != "FI" THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 END IF END IF LET tipo_doc1 = NULL LET navance = 1 IF arr_recibo[idx].num_nc IS NOT NULL THEN LET tipo_doc1 = "AV" LET avance = TRUE LET navance = 1 ELSE LET arr_recibo[idx].num_nc = recibo.num_doc LET tipo_doc1 = recibo.tipo_doc LET avance = FALSE LET navance = 0 END IF IF recibo.tipo_doc = "DV" THEN IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag *-1 END IF END IF IF recibo.tipo_doc = "ND" THEN IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag *-1 END IF END IF IF avance = FALSE THEN # CONTROL AVANCE INSERT INTO cctb00001 VALUES (p_companias.cod_comp,null,tipo_doc1,arr_recibo[idx].num_nc, recibo.tipo_cliente,recibo.sec_cliente,codigo_sucursal,recibo.cod_emp_sec, recibo.fecha_orig,"010101",arr_recibo[idx].aplica_a,null, recibo.num_doc,arr_recibo[idx].valor_pag,null,valor_cheque1,navance, arr_recibo[idx].desc_p,null,SUSER_SNAME(),GETDATE(),null,null,NULL) IF SQLSTATE > 02 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP") RETURN END IF OUTPUT TO REPORT cctb01(recibo.tipo_cliente, recibo.sec_cliente,recibo.fecha_orig,recibo.num_doc, recibo.cod_emp_sec,tipo_doc1,null,null, arr_recibo[idx].aplica_a,arr_recibo[idx].desc_p,arr_recibo[idx].valor_pag, nom_cli,nombre_emp,nombre_cta,recibo.comentario) END IF # IF DEL AVANCE END IF END FOR COMMIT WORK FINISH REPORT cctb01 RUN imprime COMMIT WORK LET numero_msg = 13 CALL msg(numero_msg) } COMMAND KEY ("N") "aNular" ## AQUI SE REALIZA LA ANULACION DE UN REGISTRO LET p_fechas = recibo.fecha_orig CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 RETURN END IF LET respuesta = fgl_winquestion("INFO","ESTA SEGURO DE QUERER ANULAR ESTE DOCUMENTO?","NO","NO|YES","question",0) IF UPSHIFT(respuesta) = "YES" THEN IF recibo.tipo_doc = "PG" THEN UPDATE cctb00001 set status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE tipo_doc IN ("AV","PG") and num_cheque = recibo.num_doc ELSE UPDATE cctb00001 set status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE tipo_doc = recibo.tipo_doc and num_cheque = recibo.num_doc END IF LET numero_msg = 82 CALL msg(numero_msg) END IF COMMAND "Retornar" CLEAR FORM FOR idx = 1 to 3 LET arr_recibo[idx].aplica_a = null LET arr_recibo[idx].valor_pen = null LET arr_recibo[idx].valor_pag = null DISPLAY arr_recibo[idx].aplica_a to s_recibo[idx].aplica_a DISPLAY arr_recibo[idx].valor_pen to s_recibo[idx].valor_pen DISPLAY arr_recibo[idx].valor_pag to s_recibo[idx].valor_pag END FOR EXIT MENU END MENU END FUNCTION FUNCTION busca_aplicacion() OPEN WINDOW busqueda1 AT 10,10 WITH FORM "ccfmwd001" ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last) CALL ui.Interface.LoadStyles("mbsStyle") DECLARE aplicar CURSOR FOR SELECT a.aplica_a,SUM(a.valor+a.monto_desc) FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.status_t is null {and a.fech_crea > datetime (1994-01-01 08:00) year to minute} GROUP BY a.aplica_a HAVING SUM(a.valor+a.monto_desc) > 0 ORDER BY 1 LET existe = "N" LET idx = 1 FOREACH aplicar INTO aplica_wd[idx].aplica_a,aplica_wd[idx].pendiente IF status = NOTFOUND THEN LET existe = "N" EXIT FOREACH END IF CALL integridad() # Busca el tipo de movimiento SELECT unique a.tipo_doc INTO tipo_doc2 FROM cctb00001 a WHERE (a.tipo_cliente = recibo.tipo_cliente and a.sec_cliente = recibo.sec_cliente and a.tipo_doc NOT IN ("PG","AV") and a.num_doc = aplica_wd[idx].aplica_a) and a.status_t is null IF status < 0 THEN CALL integridad() LET tipo_doc2 = "SQ" END IF LET aplica_wd[idx].tipo_doc = tipo_doc2 # Busca Nota de credito LET valor_ctrl1 = 0 IF tipo_doc2 = "AV" THEN SELECT SUM(a.valor*-1) INTO valor_ctrl1 FROM cctb00001 a WHERE (a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.num_doc = aplica_wd[idx].aplica_a AND a.tipo_doc = "AV" AND a.num_doc != a.aplica_a) AND a.status_t IS NULL IF valor_ctrl1 is null THEN LET valor_ctrl1 = 0 END IF LET aplica_wd[idx].pendiente = aplica_wd[idx].pendiente - valor_ctrl1 END IF LET existe = "S" IF aplica_wd[idx].pendiente != 0 THEN LET idx = idx + 1 END IF END FOREACH 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 num_nc INTEGER, aplica_a INTEGER, valor_pag DECIMAL(12,2) END RECORD LET ant_art.num_nc = arr_recibo[curr].num_nc LET ant_art.aplica_a = arr_recibo[curr].aplica_a LET ant_art.valor_pag = arr_recibo[curr].valor_pag FOR idx = 1 to arr_count() IF idx != curr THEN IF arr_recibo[idx].aplica_a IS NOT NULL AND arr_recibo[idx].valor_pag IS NOT NULL THEN IF arr_recibo[idx].num_nc = ant_art.num_nc AND arr_recibo[idx].aplica_a = ant_art.aplica_a AND arr_recibo[idx].valor_pag = ant_art.valor_pag THEN LET numero_msg = 21 CALL msg(numero_msg) LET bandera = 1 ELSE IF bandera != 1 THEN LET bandera = 0 END IF END IF END IF END IF END FOR END FUNCTION { FUNCTION consulta_clientes() OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd002" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET int_flag = false CONSTRUCT criterio ON a.nombre FROM nombre IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_c END IF LET selec2 = "SELECT a.tipo_cliente, a.sec_cliente, a.nombre ", "FROM vetb00004 a ", "WHERE a.status_t is null AND ",criterio clipped," ORDER BY 1,2 " PREPARE busca_clientes FROM selec2 DECLARE buscar_clientes CURSOR FOR busca_clientes LET idx = 1 FOREACH buscar_clientes INTO arr_clientes[idx].* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx-1) MESSAGE " Selecciona Cliente donde esta el cursor" DISPLAY ARRAY arr_clientes TO s_clientes.* LET curr1 = arr_curr() LET cliente_dir.tipo_cliente = arr_clientes[curr1].tipo_cliente LET cliente_dir.sec_cliente = arr_clientes[curr1].sec_cliente LET descrip1 = arr_clientes[curr1].nombre LABEL salir_consulta_c: CLOSE WINDOW busqueda END FUNCTION } { FUNCTION anular() OPEN WINDOW anula AT 7,5 WITH FORM "vefmwd006" ATTRIBUTE (BORDER, COMMENT LINE LAST - 1,PROMPT LINE LAST,FORM LINE FIRST + 1) LABEL vuelve: INPUT BY NAME p_fact_no AFTER FIELD p_fact_no SELECT UNIQUE fecha_factura,orden,tipo_cliente,sec_cliente,neto INTO fact_gral.fecha_factura,fact_gral.orden,fact_gral.tipo_cliente, fact_gral.sec_cliente,fact_gral.total_fact FROM vetb00002 WHERE factura = p_fact_no AND status_t IS NULL AND fech_crea > datetime (1994-03-31 08:00) year to minute IF STATUS = NOTFOUND THEN LET numero_msg = 102 CALL msg(numero_msg) NEXT FIELD p_fact_no END IF SELECT a.nombre INTO fact_gral.nombre FROM vetb00004 a WHERE a.tipo_cliente = fact_gral.tipo_cliente AND a.sec_cliente = fact_gral.sec_cliente DISPLAY BY NAME fact_gral.tipo_cliente,fact_gral.sec_cliente, fact_gral.total_fact,fact_gral.nombre ATTRIBUTE(blue) IF fact_gral.fecha_factura < "310394" THEN LET numero_msg = 58 CALL msg(numero_msg) GOTO salir END IF LET p_fechas = fact_gral.fecha_factura IF fact_gral.fecha_factura != TODAY THEN ERROR "NO PUEDE ANULAR FACTURA QUE NO SEAN DEL DIA DE HOY" RETURN END IF CALL prd() IF bandera =1 THEN SLEEP 2 EXIT INPUT END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT INPUT END IF EXIT INPUT END INPUT IF bandera = 1 THEN LET bandera = 0 GOTO salir END IF # Este Int_flag es porque tuve que salir del input con el int_flag verdadero # y asi poder salir del window sin problemas IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false GOTO salir END IF LABEL atras: PROMPT "Esta seguro de Anular Esta Factura? (S/N)" FOR CHAR opt3 LET opt3 = UPSHIFT(opt3) IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false GOTO salir END IF IF opt3 != "S" AND opt3 != "N" THEN LET numero_msg = -1301 CALL msg(numero_msg) GOTO atras END IF IF opt3 = "N" THEN GOTO salir END IF IF opt3 = "S" THEN UPDATE vetb00002 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE factura = p_fact_no AND fech_crea > datetime (1994-03-31 08:00) year to minute UPDATE iptb00006 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_doc = p_fact_no AND cod_mov IN (30,31,32) AND fech_crea > datetime (1994-03-31 08:00) year to minute UPDATE vetb00003 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE factura = p_fact_no AND fech_crea > datetime (1994-03-31 08:00) year to minute UPDATE cctb00001 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_doc = p_fact_no AND (tipo_doc = "FT" or tipo_doc = "FE") AND fech_crea > datetime (1994-03-31 08:00) year to minute UPDATE cctb00001 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE aplica_a = p_fact_no AND tipo_doc = "PC" # ANULACION DE LAS SERIES IF fact_gral.ventas = "1" THEN LET p_codigo = 30 ELSE LET p_codigo = 31 END IF UPDATE vetb00042 set status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE factura = p_fact_no AND cod_mov = p_codigo LET numero_msg = 82 CALL msg(numero_msg) END IF LABEL salir: LET fact_gral.fecha_factura = TODAY #CLOSE FORM vefmwd006 CLOSE WINDOW anula END FUNCTION } REPORT cctb01(p_tipo_cliente,p_sec_cliente,p_fecha_orig, p_num_doc,p_cod_emp_sec,p_tipo_doc, p_cuenta_no,p_banco,p_aplica_a, p_monto_desc,p_valor,p_nombre, p_nomb_emp,p_nombre_cta,p_comentario) DEFINE p_tipo_cliente LIKE cctb00001.tipo_cliente, p_sec_cliente LIKE cctb00001.sec_cliente, p_fecha_orig LIKE cctb00001.fecha_orig, p_num_doc LIKE cctb00001.num_doc, p_cod_emp_sec LIKE cctb00001.cod_emp_sec, p_tipo_doc LIKE cctb00001.tipo_doc, p_cuenta_no LIKE cctb00001.cuenta_no, p_banco LIKE cctb00001.banco, p_aplica_a LIKE cctb00001.aplica_a, p_monto_desc LIKE cctb00001.monto_desc, p_valor LIKE cctb00001.valor, p_nomb_emp CHAR(40), p_nombre_cta CHAR(30), p_cod_cia LIKE cctb00001.cod_cia, pitbis DEC(12,2) define hora char(5), l smallint, p_nombre LIKE vetb00004.nombre, p_comentario CHAR(120), #LIKE cctb00011.comentario, ditbis DEC(12,2) output top margin 0 bottom margin 5 left margin 0 page length 33 ORDER BY p_sec_cliente,p_num_doc format page header LET hora = time LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2 print column 2, "ccprmt001", column 15, negrilla_on, column lj, p_companias.nombre, negrillas_of, column 40, "NO. DOC.: ",p_num_doc using "<<<<<<<" print column lj, "RNC: ",p_companias.rnc LET lj = (80 - LENGTH(p_companias.direccion CLIPPED))/2 print column 1, negrilla_on,TODAY USING "DD/MM/YYYY", column lj, p_companias.direccion, negrillas_of, column 73, p_fecha_orig USING "dd/mm/yyyy" IF p_tipo_doc = 'PG' THEN LET lj = (80 - LENGTH(p_nombre_tipo))/2 print column 1, negrilla_on, column lj, "RECIBO INGRESOS",negrillas_of, column 73, hora ELSE LET lj = (80 - LENGTH("DOCUMENTOS"))/2 PRINT COLUMN l,"DOCUMENTOS" END IF SKIP 1 LINES BEFORE GROUP OF p_sec_cliente SELECT a.itbi INTO pitbis FROM vetb00019 a WHERE a.disponible = "S" IF pitbis IS NULL THEN LET pitbis = 0 END IF PRINT COLUMN 5, "LOCALIDAD :",nombre_sucursal PRINT COLUMN 5, "CUENTA :",p_cuenta_no CLIPPED," - ",p_nombre_cta CLIPPED, COLUMN 50,"DEPOSITO :", p_banco PRINT COLUMN 5, "CLIENTE :",p_nombre CLIPPED,"(", p_tipo_cliente USING "<<","-", p_sec_cliente USING "<<<<<",")" PRINT COLUMN 5, "VENDEDOR :",p_cod_emp_sec USING "<<<<"," - ",p_nomb_emp CLIPPED PRINT COLUMN 5, "TIPO PAGO :",p_tipo_doc CLIPPED," - ",p_nombre_tipo CLIPPED PRINT doce print column 1, "===============================================================", "================================" print column 5, "Aplica Factura ", column 23, " Descuento", column 37, " Valor ", # column 54, " ITBIS", column 70, " TOTAL" #print column 37, " S/ITBIS" print column 1, "===============================================================", "================================" on every row {IF p_tipo_Doc = "NC" THEN IF ncr = "S" THEN LET ditbis =p_valor * (pitbis/100) ELSE LET ditbis = 0 END IF UPDATE cctb00001 SET valor_efectivo = p_valor, valor_cheque = ditbis, valor = p_valor+ditbis WHERE tipo_doc = p_tipo_Doc AND num_doc = p_num_doc AND aplica_a = p_aplica_a AND tipo_cliente =p_tipo_cliente AND sec_cliente = p_sec_cliente END IF } print column 5, p_aplica_a USING "#######", column 23, p_monto_desc USING "#,###,###.##", column 37, p_valor USING "##,###,###.##", column 54, ditbis USING "##,###,###.##", column 70, p_valor USING "###,###,###.##" let l = 12 {QUITE LA SUMATORIA DE P_VALOR + DITBIS PORQUE PARA ESTA EMPRESA NO NECESITA ESE CALCULO, SE INSTALO EL PROGRAM DE NOTAS DE CREDITOS POR VENTAS} AFTER GROUP OF p_sec_cliente PRINT COLUMN 5, "Total----> ", COLUMN 23, GROUP SUM(p_monto_desc) USING "#,###,###.##" , COLUMN 37, GROUP SUM(p_valor) USING "##,###,###.##" { IF p_tipo_doc = "NC" or p_tipo_doc = "ND" THEN SELECT a.itbi INTO pitbis FROM vetb00019 a WHERE a.disponible = "S" IF pitbis IS NULL THEN LET pitbis = 0 END IF IF ncr = "S" THEN LET ditbis =GROUP SUM(p_valor)* (pitbis/100) ELSE LET ditbis = 0 END IF SKIP 1 LINE PRINT COLUMN 37, pitbis USING "###.##","% ITBIS", COLUMN 54, ditbis USING "##,###,###.##" PRINT COLUMN 39, "TOTAL ", COLUMN 54, GROUP SUM(p_valor) USING "##,###,###.##" END IF} on last row PRINT COLUMN 2, "COMENTARIOS : " PRINT COLUMN 5, p_comentario[1,60] CLIPPED PRINT COLUMN 5, p_comentario[61,120] CLIPPED PAGE TRAILER SKIP 1 LINE PRINT COLUMN 10, "____________________________________", COLUMN 60, "____________________________________" PRINT COLUMN 10, " Preparado Por ", COLUMN 60, " Autorizado Por " print normal END REPORT FUNCTION busca_avance() DEFINE ravances DYNAMIC ARRAY OF RECORD fecha DATE, aplica_a INT, pcotizacion INT, nombre_proyecto VARCHAR(100), pendiente DEC(12,2) END RECORD, pnombre_proyecto VARCHAR(100) OPEN WINDOW busqueda1 AT 10,10 WITH FORM "ccfmwd005" ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last) CALL ui.Interface.LoadStyles("mbsStyle") DECLARE avances CURSOR FOR SELECT a.num_doc,a.banco,SUM(a.valor+a.monto_desc) FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.status_t is null AND a.tipo_Doc = 'AV' GROUP BY a.num_doc,a.banco HAVING SUM(a.valor+a.monto_desc) <> 0 ORDER BY a.num_doc LET existe = "N" LET idx = 1 FOREACH avances INTO ravances[idx].aplica_a,ravances[idx].pcotizacion,ravances[idx].pendiente IF status = NOTFOUND THEN LET existe = "N" EXIT FOREACH END IF # busca nombre del proyecto LET pnombre_proyecto = NULL SELECT a.nombre_proyecto INTO pnombre_proyecto FROM vetb00050 a WHERE a.cotizacion_no = ravances[idx].pcotizacion LET ravances[idx].nombre_proyecto = pnombre_proyecto LET ravances[idx].nombre_proyecto=pnombre_proyecto SELECT DISTINCT CONVERT(CHAR(10),a.fecha_orig,103) INTO ravances[idx].fecha FROM cctb00001 a WHERE a.tipo_doc ='AV' AND a.num_doc = ravances[idx].aplica_a AND a.num_doc = a.aplica_a AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente LET existe = "S" IF ravances[idx].pendiente != 0 THEN LET idx = idx + 1 ELSE CONTINUE FOREACH END IF END FOREACH IF existe="S" THEN DISPLAY ARRAY ravances TO savance.* END IF LET curr1= arr_curr() CLOSE WINDOW busqueda1 RETURN ravances[curr1].aplica_a, ravances[curr1].pendiente,ravances[curr1].pcotizacion END FUNCTION FUNCTION datos_doc() CASE WHEN recibo.tipo_doc = "PG" LET nombre_tipo = "PAGOS A FACTURAS" EXIT CASE WHEN recibo.tipo_doc = "OC" LET nombre_tipo = "OTROS CREDITOS" EXIT CASE WHEN recibo.tipo_doc = "NC" LET nombre_tipo = "NOTA CREDITO" EXIT CASE WHEN recibo.tipo_doc = "ND" LET nombre_tipo = "NOTA DEBITO" EXIT CASE WHEN recibo.tipo_doc = "PI" LET nombre_tipo = "PAGO INTER." EXIT CASE WHEN recibo.tipo_doc = "DV" LET nombre_tipo = "DEVOLUCION DINERO" EXIT CASE END CASE LET p_nombre_tipo = nombre_tipo IF recibo.tipo_doc = "PG" THEN SELECT SUM((a.valor)*-1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = "PG" AND a.num_doc = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL ELSE SELECT SUM((a.valor)*-1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = recibo.tipo_doc AND a.num_cheque = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL END IF IF valor_ctrl IS NULL THEN LET valor_ctrl = 0 END IF IF recibo.tipo_doc = "ND" OR recibo.tipo_doc = "OD" THEN LET valor_ctrl = valor_ctrl * -1 IF valor_ctrl < 0 THEN LET valor_ctrl = valor_ctrl * -1 END IF END IF SELECT nombre INTO nom_cli FROM vetb00004 WHERE tipo_cliente = recibo.tipo_cliente and sec_cliente = recibo.sec_cliente SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec LET nombre_emp = descrip2 clipped," ",descrip3 clipped { SELECT descripcion INTO nombre_cta FROM cgtb00001 WHERE cuenta_no = recibo.cuenta_no } DISPLAY BY NAME recibo.*,nom_cli,nombre_emp,valor_ctrl,nombre_cta IF recibo.tipo_doc = "PG" THEN LET selec = "SELECT a.num_doc,a.banco,a.aplica_a,a.valor,a.monto_desc,a.valor ", "FROM cctb00001 a ", "WHERE ((a.tipo_doc = ? OR a.tipo_doc = 'AV') AND ", " a.num_cheque = ?) AND (a.tipo_cliente = ? AND ", " a.sec_cliente = ?) ORDER BY 2,1 " ELSE LET selec = "SELECT a.num_doc,a.banco,aplica_a,valor,monto_desc,valor FROM cctb00001 a ", "WHERE (a.tipo_doc=? AND a.num_cheque=?)AND (a.tipo_cliente = ? AND ", " a.sec_cliente = ?) ORDER BY a.banco,a.num_Doc " END IF PREPARE comando FROM selec DECLARE buscar1 CURSOR FOR comando OPEN buscar1 USING recibo.tipo_doc,recibo.num_doc,recibo.tipo_cliente, recibo.sec_cliente LET idx = 1 WHILE STATUS != NOTFOUND FETCH buscar1 INTO arr_recibo[idx].* IF STATUS = NOTFOUND THEN EXIT WHILE END IF IF arr_recibo[idx].num_nc = recibo.num_doc THEN LET arr_recibo[idx].num_nc = null END IF IF recibo.tipo_doc != "ND" AND recibo.tipo_doc != "OD" THEN LET arr_recibo[idx].valor_pen = arr_recibo[idx].valor_pen * -1 ELSE IF arr_recibo[idx].valor_pen < 0 THEN LET arr_recibo[idx].valor_pen = arr_recibo[idx].valor_pen *-1 END IF END IF LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pen LET arr_recibo[idx].valor_pen = 0 LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 SELECT sum(valor) INTO valor2 FROM cctb00001 WHERE tipo_cliente = recibo.tipo_cliente and sec_cliente = recibo.sec_cliente and aplica_a = arr_recibo[idx].aplica_a and status_t is null AND num_cheque = recibo.num_doc LET arr_recibo[idx].valor_pen = valor2 LET idx = idx + 1 END WHILE DISPLAY ARRAY arr_recibo TO s_recibo.* ON ACTION imprimir CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT cctb01 TO archivo FOR idx = 1 TO arr_recibo.getLength() IF arr_recibo[idx].num_nc IS NULL THEN OUTPUT TO REPORT cctb01(recibo.tipo_cliente, recibo.sec_cliente,recibo.fecha_orig,recibo.num_doc, recibo.cod_emp_sec,recibo.tipo_doc,null,null, arr_recibo[idx].aplica_a,arr_recibo[idx].desc_p,arr_recibo[idx].valor_pag, nom_cli,nombre_emp,nombre_cta,recibo.comentario) END IF END FOR FINISH REPORT cctb01 RUN imprime AFTER DISPLAY EXIT DISPLAY END DISPLAY END FUNCTION