Crear Escalera Presupuestaria en wiki
De CidesaWiki
Revisión a fecha de 21:42 10 ene 2008; Jlobaton (Discusión | contribuciones)
CREATE OR REPLACE FUNCTION "SIMA004"."creare_scalera" () RETURNS integer AS $body$ /* Permite Crear la escalera Presupuestaria */ DECLARE cuentas_new RECORD; cadena VARCHAR; cadena1 VARCHAR; R varchar; i INTEGER; CUANTOS INTEGER; INI INTEGER; FIN INTEGER; cuentas cursor is select * from cpdeftit order by codpre DESC; DECLARE BEGIN OPEN cuentas; FETCH cuentas into cuentas_new; IF FOUND THEN LOOP cadena := trim(cuentas_new.codpre); /* FOR i in reverse 1..p LOOP IF (SUBSTR(cadena,i,1)='-') THEN cadena := SUBSTR(cadena,1,i-1); --SRW.MESSAGE(100,CADENA); SELECT COUNT(*) AS CUANTOS FROM "SIMA004".cpdeftit WHERE trim(codpre)=cadena; IF (CUANTOS=0) THEN -- NO LO ENCONTRO ENTONCES INSERTO --SRW.MESSAGE(100,'AQUI INSERTO '||CADENA); INSERT INTO "SIMA004".cpdeftit SELECT RPAD(cadena,32,' '),codpre, nompre, codcta, stacod, coduni, codtip, estatus FROM CONTABB WHERE CODCTA=cadena; COMMIT; ELSE --SRW.MESSAGE(100,'COMO CONSEGUI EL NIVEL ENTONCES NO BUSCO MAS'); EXIT; END IF; --SRW.MESSAGE(100,'AQUI BUSCO, SI NO CONSIGO INSERTO, DE LO CONTRARIO NO DEBERIA SEGUIR'); END IF; */ cadena1 := trim(cuentas_new.codpre); INI := 1; FIN := INSTR(cadena1,'-',INI,1); WHILE FIN <> 0 LOOP cadena := SUBSTR(cadena1,1,FIN-1); SELECT INTO CUANTOS COUNT(codpre) FROM cpdeftit WHERE trim(codpre)=cadena; IF (CUANTOS=0) THEN -- NO LO ENCONTRO ENTONCES INSERTO INSERT INTO cpdeftit SELECT RPAD(cadena,32,' '), nompre, codcta, stacod, coduni, codtip, estatus FROM cpdeftit WHERE trim(codpre)=cadena1; ELSE --EXIT; END IF; INI := FIN+1; FIN := INSTR(cadena1,'-',INI,1); END LOOP; FETCH cuentas into cuentas_new; IF NOT FOUND THEN EXIT; END IF; END LOOP; END IF; CLOSE cuentas; RETURN(0); END; $body$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
Este Codigo hay que Mejorarla...
--Jlobaton 17:42 10 ene 2008 (VET)