Arregar Catalogo de Cuentas Contables

De CidesaWiki

Saltar a navegación, buscar

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)

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas