Advertisement
pipook

Funcion 1

Apr 19th, 2011
445
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION LLENAR_PKDEXAUXILIAR2 (fecha VARCHAR2)
  2. RETURN VARCHAR2
  3. IS
  4. RES VARCHAR2(2000);
  5.  
  6. CURSOR RI IS
  7.   SELECT punto_id, id_med, TO_DATE(TO_CHAR(fecha_sol,'dd/mm/yyyy')) AS fech,
  8.         TO_DATE(TO_CHAR(fecha_sol,'dd/mm/yyyy')) AS hora, SUM(cant_sol) AS cantsol, fue,
  9.         '1' AS n_fue, ope, lote_id, 'A' AS estado
  10.   FROM ripsmedicamentos
  11.   WHERE ripsmedicamentos.fecha_sol <= TO_DATE(fecha) AND estado = 0
  12.   GROUP BY punto_id, id_med, lote_id, fue, ope, TO_CHAR(fecha_sol,'dd/mm/yyyy'), valor_tipo_entrega
  13.   ORDER BY TO_CHAR(fecha_sol,'dd/mm/yyyy');
  14.   PE      RI%ROWTYPE;
  15.   -------------
  16.  
  17. --sacando datos de la entrega para enviarselos al procedimiento llevar_kardex  
  18. CURSOR LK IS
  19.     SELECT DISTINCT PEVIR.BOD AS BODP, CCOST.C_COS AS CCOSTP, PEVIR.FECHA AS FECP, PEVIR.BOD AS BOD1, CUENTAS_VAL.CUENTA AS CUENP,
  20.                 PEVIR.VALOR_TIPO_ENTREGA AS PKVTE, PEVIR.VALOR_TIPO_ENTREGA AS VTEP, PEVIR.OPE AS OPEP, PEVIR.N_FUE AS NFUEP
  21.     FROM (SELECT punto_id AS BOD, id_med AS COD, TO_DATE(TO_CHAR(fecha_sol,'dd/mm/yyyy')) AS FECHA,
  22.                 TO_DATE(TO_CHAR(fecha_sol,'dd/mm/yyyy')) AS HORA, SUM(cant_sol) AS CAN, FUE,
  23.                 '1' AS N_FUE, OPE, lote_id AS LOTE,
  24.                 'A' AS ESTADO,'03' AS TIPO_ENTREGA, valor_tipo_entrega
  25.         FROM ripsmedicamentos
  26.         WHERE ripsmedicamentos.fecha_sol <= TO_DATE(fecha) AND estado = 0
  27.         GROUP BY punto_id, id_med, lote_id, fue, ope, TO_CHAR(fecha_sol,'dd/mm/yyyy'), valor_tipo_entrega
  28.         ORDER BY TO_CHAR(fecha_sol,'dd/mm/yyyy'))
  29.     PEVIR, CCOST, BODEGA, CUENTAS_VAL
  30.     WHERE CCOST.NOM = BODEGA.NOM
  31.     AND PEVIR.BOD = BODEGA.C_BOD
  32.     AND CUENTAS_VAL.VAL1 = PEVIR.VALOR_TIPO_ENTREGA
  33.     ORDER BY TO_CHAR(PEVIR.FECHA,'dd/mm/yyyy');
  34.   LKE      LK%ROWTYPE;
  35.   -------
  36.  
  37.  
  38. BODP2   RIPSMEDICAMENTOS.PUNTO_ID%TYPE;--bodega2 para procedimiento
  39. GEMPP   VARCHAR2(20);--global empresa para procedimiento
  40. GUSRP   VARCHAR2(20);--global usuario para procedimiento
  41. CCLAP   VARCHAR2(20);
  42. BOD1    RIPSMEDICAMENTOS.PUNTO_ID%TYPE;--bodega
  43.  
  44. NIT      PE_KARDEX_AUXILIAR.BOD%TYPE;
  45.  
  46. CRLK   NUMBER;--Controlador de error en el momento de generar los datos para la funcion llevar_kardex
  47. CRLK2   NUMBER;--Controlador de error en el momento de generar los datos para la funcion llevar_kardex
  48. COUNTGOOD   NUMBER;--Controlador de error en el momento de generar los datos para la funcion llevar_kardex
  49. COUNTBAD   NUMBER;--Controlador de error en el momento de generar los datos para la funcion llevar_kardex
  50.  
  51. MSG_LK       VARCHAR2(2000);
  52. TEST_MSG_LK  VARCHAR2(200);
  53.  
  54. FECHAB  DATE;
  55.  
  56. BEGIN
  57.   CRLK:=0;
  58.   CRLK2:=0;
  59.   COUNTGOOD:=0;
  60.   COUNTBAD:=0;
  61.   --FECHAB:=TO_DATE(fecha);
  62.   BODP2:='01';
  63.   GEMPP:='01';
  64.   GUSRP:='PHARMAWEB';
  65.  
  66.   DELETE FROM PE_KARDEX;
  67.  
  68. --insertar datos en pe_kardex
  69.   OPEN RI;
  70.   LOOP
  71.     FETCH RI INTO PE;
  72.     EXIT WHEN RI%NOTFOUND; -- Último registro.
  73.     BEGIN
  74.       --dbms_output.put_line('ENTRO'||fecha);
  75.       INSERT INTO pe_kardex
  76.       (BOD,COD,FECHA,
  77.       HORA,CAN,FUE,
  78.       N_FUE,OPE,LOTE,ESTADO)
  79.       VALUES
  80.       (PE.punto_id,PE.id_med,PE.fech,
  81.        PE.hora,PE.cantsol,PE.fue,
  82.       '1',PE.ope,PE.lote_id, 'A');
  83.     EXCEPTION
  84.       WHEN OTHERS THEN
  85.         CRLK2:= CRLK2 + 1;
  86.         --RES:='error al insertar datos en pe_kardex: '||SQLERRM;
  87.         --dbms_output.put_line(RES);
  88.         --RETURN RES;
  89.     END;
  90.   END LOOP;
  91.   CLOSE RI;
  92.   ----------------------
  93.   dbms_output.put_line('Errores de insercion en pe_kardex: '||CRLK2);
  94.   COMMIT;
  95.  
  96.   IF CRLK = 0 THEN  
  97.     OPEN LK;
  98.     LOOP
  99.       FETCH LK INTO LKE;
  100.       EXIT WHEN LK%NOTFOUND; -- Último registro.
  101.       NIT := LKE.BOD1;      
  102.       IF (SUBSTR(LKE.BOD1,0,1) = '0') THEN
  103.         NIT := SUBSTR(LKE.BOD1,2);
  104.       END IF;
  105.       dbms_output.put_line('NIT: '||NIT);
  106.       MSG_LK := LLEVAR_KARDEX(LKE.BODP,BODP2,GEMPP,GUSRP,LKE.CCOSTP,TO_CHAR(LKE.FECP,'DDMMYYYY'),'406',NIT,LKE.CUENP,LKE.PKVTE,'03',NULL,NULL,NULL,NULL,LKE.OPEP);
  107.       TEST_MSG_LK := SUBSTR(MSG_LK,0,21);
  108.  
  109.       IF TEST_MSG_LK = 'Proceso Terminado con' THEN
  110.         COUNTGOOD:=COUNTGOOD+1;
  111.         dbms_output.put_line(''||MSG_LK);
  112.         --return 'termino';        
  113.       ELSE
  114.         dbms_output.put_line('Ocurrio el siguiente error: '||MSG_LK);
  115.         COUNTBAD:=COUNTBAD+1;
  116.         deshacer;      
  117.       END IF;
  118.     END LOOP;
  119.     CLOSE LK;
  120.   ELSE
  121.     dbms_output.put_line('Ocurrio un error al momento de generar los datos para el procedimiento almacenado, no se ejecuto ninguna transaccion...');
  122.   END IF;
  123.   RETURN 'Procedimiento ejecutado correctamente '||COUNTGOOD||' veces, errores de ejecucion '||COUNTBAD;
  124. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement