Arregar Catalogo de Cuentas Contables
De CidesaWiki
Arreglar Catálogo Contable
El procedimiento hace lo siguiente
1.-Recorre todo el catalogo contable buscando omisiones en las rupturas de jerarquia, y una vez que consigue una omision la inserta con la descripcion de la ruptura de mayor nivel.
por ejemplo si tenemos el catalogo de esta manera
1 Activos
1-1-1-1 Caja Principal
el Procedimiento inserta los codigos
1-1 Caja principal
1-1-1 Caja principal
2.-Verifica que no existan cuantas madres(Acumuladoras) cargables, es decir Si consigue alguna cuenta con hijos pone cargable='N' y si consigue una cuenta sin hijos asigna cargable='C'.
La tabla cargables simplemente es para saber que operaciones realizo el procedimiento,
si el campo cargab de esa tabla='N' es porq estaba como "no" cargable y se cambio para cargable de manera similar con el caso contrario. Cuando el valor es igual a 'I' significa que se inserto esa nueva ruptura.
Se Debe recordar hacer los insert correspondientes en contabb1 por cada registro insertado (ruptura nueva) es decir 12 registros por cada cuenta nueva insertada. Cuando son pocas las cuentas y no se es muy ducho haciendo querys se puede optar por consultar por el sistema cada cuenta nueva creada y al darle salvar se insertaran los registros automaticamente en contabb1 para esa cuenta (version vb no me consta con php)
La manera de correr el procedimiento es la siguiente
select arreglarcuentas();
Ojo: Cambiar el schema por el del cliente
-- Table: "SIMA003".cargables -- DROP TABLE "SIMA003".cargables; CREATE TABLE "SIMA003".cargables ( cuenta varchar(32), cargab varchar(2) ) WITH OIDS; ALTER TABLE "SIMA003".cargables OWNER TO wiki;
CREATE OR REPLACE FUNCTION "SIMA003".arreglarcuentas() RETURNS "numeric" AS $BODY$ DECLARE REGISTRO RECORD; REGISTRO1 RECORD; SALDO_ANT NUMERIC; SALDO_ACT NUMERIC; CADENA VARCHAR; SALDOS CURSOR IS SELECT A.CODCTA,A.DESCTA,A.CARGAB,A.DEBCRE FROM CONTABB A ORDER BY CODCTA DESC; CUANTOS NUMERIC; I INTEGER; MONCRE NUMERIC; BEGIN set search_path to "SIMA003"; OPEN SALDOS; FETCH SALDOS INTO REGISTRO; IF FOUND THEN LOOP ------------------AGREGAR RUPTURAS FALTANTES CADENA:=RTRIM(REGISTRO.CODCTA); for I in reverse LENGTH(CADENA)..1 loop IF SUBSTR(REGISTRO.CODCTA,I,1)='-' THEN CADENA:=SUBSTR(REGISTRO.CODCTA,1,I-1); SELECT COUNT(*) INTO CUANTOS FROM CONTABB WHERE CODCTA=RPAD(CADENA,32,' '); IF CUANTOS=0 THEN-- NO LO ENCONTRO ENTONCES INSERTO INSERT INTO CARGABLES SELECT RPAD(CADENA,32,' '),'I' FROM CONTABB WHERE CODCTA=REGISTRO.CODCTA; INSERT INTO CONTABB SELECT RPAD(CADENA,32,' '),DESCTA,FECINI,FECCIE,SALANT,DEBCRE,CARGAB,SALPRGPER,SALACUPER,SALPRGPERFOR FROM CONTABB WHERE CODCTA=REGISTRO.CODCTA; --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; end loop; -----------------------FIN AGREGAR RUPTURAS -------------------DETERMINAR CARGABLES SELECT COUNT(*) INTO CUANTOS FROM CONTABB WHERE CODCTA LIKE RTRIM(REGISTRO.CODCTA)||'%' AND LENGTH(RTRIM(REGISTRO.CODCTA))<LENGTH(RTRIM(CODCTA)); IF CUANTOS=0 THEN --ENTONCES ES CARGABLE INSERT INTO CARGABLES SELECT CODCTA,CARGAB FROM CONTABB WHERE CODCTA=REGISTRO.CODCTA AND CARGAB='N'; UPDATE CONTABB SET CARGAB='C' WHERE CODCTA=REGISTRO.CODCTA; --COMMIT; ELSE INSERT INTO CARGABLES SELECT CODCTA,CARGAB FROM CONTABB WHERE CODCTA=REGISTRO.CODCTA AND CARGAB='C'; UPDATE CONTABB SET CARGAB='N' WHERE CODCTA=REGISTRO.CODCTA; --COMMIT; END IF; -------------------FIN DETERMINAR CARGABLES FETCH SALDOS INTO REGISTRO; IF NOT FOUND THEN EXIT; END IF; END LOOP; END IF; CLOSE SALDOS; RETURN 0; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION "SIMA003".arreglarcuentas() OWNER TO wiki;
--Pablosilva 17:24 9 dic 2008 (VET)