{ -------------------------------------------------------------------------- PROGRAMA : INPRMT066 OBJETIVO : Programa Para Anular en Forma Logica Movimientos de Inventario de Materia Prima. PROGRAMADOR : Tadeo A. Ferreras F. -------------------------------------------------------------------------- } GLOBALS "inprgb000.4gl" DEFINE anular RECORD cod_mov SMALLINT, num_doc INTEGER, bodega SMALLINT, fecha CHAR(10), cod_sp SMALLINT, cod_sp_sec SMALLINT END RECORD DEFINE descrip_mov CHAR(30) DEFINE opc1 CHAR(1) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave SELECT * INTO p_companias.* FROM companias CALL inprmt066() END MAIN FUNCTION inprmt066() DEFINE fecha CHAR(8) DEFINE hora CHAR(5), pnumdoc INT, pcodmov SMALLINT, cherror STRING CLEAR SCREEN OPTIONS ERROR LINE 24, FORM LINE 4, COMMENT LINE 22, PROMPT LINE 23 OPEN WINDOW anular AT 8,4 WITH FORM "infmwd005" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,PROMPT LINE LAST) INPUT BY NAME anular.bodega, anular.cod_mov,anular.num_doc BEFORE INPUT CALL bodegas('1') AFTER FIELD cod_mov IF anular.cod_mov is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT a.descrip_mov INTO descrip_mov FROM intb00005 a WHERE a.cod_mov = anular.cod_mov AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov END IF DISPLAY BY NAME descrip_mov AFTER FIELD num_doc IF anular.num_doc is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF SELECT UNIQUE a.num_doc FROM intb00006 a WHERE a.cod_mov = anular.cod_mov AND a.num_doc = anular.num_doc AND a.bodega = anular.bodega AND a.status_t IS NULL IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT CONVERT(CHAR(10),MAX(a.fecha),103),MAX(a.cod_sp),MAX(a.cod_sp_sec) INTO anular.fecha,anular.cod_sp,anular.cod_sp_sec FROM intb00006 a WHERE a.cod_mov = anular.cod_mov AND a.num_doc = anular.num_doc AND a.bodega = anular.bodega and a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD num_doc END IF DISPLAY BY NAME anular.fecha,anular.cod_sp,anular.cod_sp_sec LET p_fechas = anular.fecha LET pnumdoc = anular.num_doc LET pcodmov = anular.cod_mov CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN EXIT INPUT END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT INPUT END IF END INPUT IF int_flag THEN LET int_flag = FALSE ELSE PROMPT "Quiere Proceder Anulacion de Este Dcto. (S/N)? " FOR CHAR opc1 LET opc1 = upshift(opc1) IF opc1 = "S" THEN SELECT a.status_mov INTO status_m FROM intb00005 a WHERE a.cod_mov = pcodmov DECLARE busca CURSOR FOR SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad_2 FROM intb00006 a WHERE a.num_doc=pnumdoc and a.cod_mov=pcodmov and CONVERT(CHAR(10),a.fecha,103) > "01/08/2009" AND a.bodega = anular.bodega LET decide = "N" LET idx = 1 FOREACH busca INTO movi2[idx].cod_n,movi2[idx].cod_grupo, movi2[idx].cod_tipo,movi2[idx].cod_sec, movi2[idx].cantidad_2 IF status_m = "1" THEN SELECT SUM(a.cantidad_2) INTO chequea.existe FROM intb00006 a WHERE a.cod_n = movi2[idx].cod_n and a.cod_grupo = movi2[idx].cod_grupo and a.cod_tipo=movi2[idx].cod_tipo and a.cod_sec = movi2[idx].cod_sec AND a.bodega = anular.bodega and a.status_t is null LET chequea.existe = chequea.existe - movi2[idx].cantidad_2 IF chequea.existe < 0 THEN LET cherror = "NO PUEDE ANULAR DOCUMENTO, LA EXISTENCIA SERA NEGATIVA EN EL CODIGO: ", movi2[idx].cod_n USING "<<<<","-",movi2[idx].cod_grupo USING "<<<<","-", movi2[idx].cod_tipo USING "<<<<","-",movi2[idx].cod_sec USING "<<<<"," Ext. ",chequea.existe USING "--<,--<.##" CALL fgl_winmessage("ERROR",cherror,"INFO") RETURN END IF END IF LET idx = idx + 1 END FOREACH UPDATE intb00006 set status_t = "E", us_mod = usuarios, fech_mod = GETDATE() WHERE intb00006.cod_mov = pcodmov AND intb00006.num_doc = pnumdoc AND intb00006.bodega = anular.bodega UPDATE intb00018 set status_t = "E" WHERE intb00018.cod_mov = pcodmov AND intb00018.documento = pnumdoc AND intb00018.bodega = anular.bodega #AND #CONVERT(CHAR(10),intb00006.fecha,103) > "01/08/2009" UPDATE cotb00038 set status_t = "E",us_mod = SUSER_NAME(),fech_mod = GETDATE() WHERE @cod_mov = anular.cod_mov AND @num_doc = anular.num_doc AND CONVERT(CHAR(10),fecha,103) > "01/08/2009" CALL fgl_winmessage("INFO","DOCUMENTO ANULADO","INFO") END IF END IF CLOSE WINDOW anular END FUNCTION