Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE FUNCTION LLEVAR_KARDEX (
- --
- -- NUEVOS PARAMETROS
- --
- CONTROL_BODEGA IN VARCHAR2, CONTROL_BODEGA2 IN VARCHAR2, GLOBAL_EMPRESA IN VARCHAR2, GLOBAL_USUARIO_SP6 IN VARCHAR2, CONTROL_C_COS IN VARCHAR2,
- CONTROL_FECHA_RECIBIDO IN VARCHAR2, CONTROL_C_CLA IN VARCHAR2, CONTROL_N_IDE IN VARCHAR2, CONTROL_C_CTA_PUENTE IN VARCHAR2,
- CONTROL_VAL_PARAM1 IN VARCHAR2, CONTROL_PARAM1 IN VARCHAR2, CONTROL_PARAM2 IN VARCHAR2,
- CONTROL_VAL_PARAM2 IN VARCHAR2, CONTROL_PARAM3 IN VARCHAR2, CONTROL_VAL_PARAM3 IN VARCHAR2, CONTROL_OPE IN VARCHAR2)
- RETURN VARCHAR2 IS
- RETORNO VARCHAR2(200);
- --
- -- SE PASAN SOLO REGISTROS QUE SEAN DE LA BODEGA Y ADEMAS NO SEAN DE RECIBO DE
- -- MEDICAMENTO (RM)
- -- EL ESTADO A CONTROL QUE SE PASEN SOLO AQUELLOS QUE NO SE HAN PASADO
- -- Y AQUELLOS QUE NO SE HAN ANULADO
- --
- CURSOR KK IS
- SELECT BOD,COD,FECHA,HORA,
- CAN,FUE,N_FUE,OPE,LOTE,ESTADO
- FROM PE_KARDEX
- WHERE BOD=CONTROL_BODEGA
- AND FUE<>'RM'
- AND ESTADO='A'
- AND OPE=CONTROL_OPE
- ORDER BY COD,TO_CHAR(FECHA,'YYYYMMDD'),TO_CHAR(HORA,'YYYYMMDD HH24:MI:SS');
- --
- A KK%ROWTYPE;
- --
- UNIDAD_PE ARTICULO.UNI%TYPE;
- UNIDAD_CEN ARTICULO.UNI%TYPE;
- FACT FACTOR.FAC%TYPE;
- COSTO_UNI COSTO_ART.C_PPO%TYPE;
- HUBO_ERROR EXCEPTION;
- SALTO_LOOP EXCEPTION;
- XCOSTO_ART COSTO_ART.C_PPO%TYPE;
- CERR NUMBER(4);
- MERR VARCHAR2(2000);
- XMON MONEDA.MON%TYPE;
- XN_FUE KARDEX.N_FUE%TYPE;
- NUM_CPTE CPTE_ENC.CPTE%TYPE;
- CUENTA_INV PLAN_CTA.C_CTA%TYPE;
- CUENTA_CONT PLAN_CTA.C_CTA%TYPE;
- XREQ1 CPTE_DET.REQ1%TYPE;
- XREQ2 CPTE_DET.REQ3%TYPE;
- XREQ3 CPTE_DET.REQ3%TYPE;
- XREQ4 CPTE_DET.REQ4%TYPE;
- XC_COS CPTE_DET.C_COS%TYPE;
- XSEQ CPTE_DET.SEQ%TYPE;
- TOTAL_CPTE CPTE_ENC.TOTDEB%TYPE;
- CONTROL_FECHA DATE;
- N_FUE_CRUCE VARCHAR2(2000);
- NUMERROR NUMBER;
- CONTER NUMBER;
- CONTER2 NUMBER;
- BEGIN
- CONTROL_FECHA := TO_DATE(CONTROL_FECHA_RECIBIDO);
- NUMERROR:=0;
- CONTER:=0;
- CONTER2:=0;
- --
- -- NOS TRAEMOS LA MONEDA POR DEFECTO...
- --
- BEGIN
- SELECT MON
- INTO XMON
- FROM MONEDA
- WHERE C_EMP=GLOBAL_EMPRESA
- AND M_DEFAULT='S';
- EXCEPTION
- WHEN OTHERS THEN
- CERR:=1;
- MERR:='Problemas al traer la moneda por defecto. '||SQLERRM;
- RETURN MERR;
- RAISE HUBO_ERROR;
- END;
- -- FIN CONSULTA MONEDA
- OPEN KK;
- LOOP
- FETCH KK INTO A;
- EXIT WHEN KK%NOTFOUND; -- Último registro.
- --------------------------------
- BEGIN
- --
- -- LA UNIDAD QUE SE TRAE ES LA UNIDAD ALTERNA DEL ARTICULO
- --
- BEGIN
- SELECT VAL_DEF
- INTO UNIDAD_PE
- FROM ART_ATRIB
- WHERE C_EMP=GLOBAL_EMPRESA
- AND COD_ART=A.COD
- AND COD_ATR='UALT';
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- MERR:='No se encontró el codigo del articulo : '||A.cod;
- RAISE SALTO_LOOP;
- END;
- -- INICIO KJM
- -- SE BUSCA UNIDAD ORIGINAL DEL ARTICULO
- BEGIN
- SELECT UNI
- INTO UNIDAD_CEN
- FROM ARTICULO
- WHERE C_EMP=GLOBAL_EMPRESA
- AND COD=A.COD;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- MERR:='No se encontró La Unidad del Articulo : '||A.cod;
- RAISE SALTO_LOOP;
- END;
- -- FIN KJM
- --
- -- AHORA NOS TRAEMOS EL COSTO DEL ARTICULO
- --
- XCOSTO_ART:=INVTRAECOSTO(GLOBAL_EMPRESA,CONTROL_BODEGA,TO_CHAR(A.FECHA,'YYYYMM'),A.COD,CERR,MERR);
- IF CERR<>0 THEN
- MERR:='Error al momento de traer el costo del articulo '||SQLERRM;
- RAISE SALTO_LOOP;
- END IF;
- -- INICIO KJM
- IF(UNIDAD_PE<>UNIDAD_CEN)THEN
- BEGIN
- SELECT FAC
- INTO FACT
- FROM FACTOR
- WHERE C_EMP=GLOBAL_EMPRESA
- AND UNI1=UNIDAD_CEN
- AND UNI2=UNIDAD_PE;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- MERR:='No se encontró El Factor De Conversión de la Unidad : '||UNIDAD_CEN ||' A La Unidad : '||UNIDAD_PE;
- RAISE SALTO_LOOP;
- END;
- IF(FACT = 0)THEN
- FACT:=1;
- END IF;
- COSTO_UNI:=XCOSTO_ART/FACT;
- ELSE
- --SI LA UNIDAD DEFINIDA EN LA TABLA ARTI ES IGUAL A LA UNIDAD ALTERNA
- COSTO_UNI:=XCOSTO_ART;
- END IF;
- --FIN KJM
- --
- -- POR ULTIMO SE INSERTA EN KARDEX
- --
- BEGIN
- XN_FUE:=CONSECINV(GLOBAL_EMPRESA,A.FUE,TO_CHAR(A.FECHA,'YYYYMM'),CONTROL_BODEGA);
- EXCEPTION
- WHEN OTHERS THEN
- MERR:='Problemas al traer el consecutivo de el fuente : '||A.FUE||'. Mensaje de Error : '||SQLERRM;
- RAISE SALTO_LOOP;
- END;
- BEGIN
- INSERT INTO KARDEX
- (C_EMP,BOD,PER,
- COD,OPE,CAN,
- UNI,P_ENT,M_ENT,
- P_SAL,M_SAL,TAS,
- FEC,FUE,
- N_FUE,OBSER,RESP,
- SEC,BOD2,LOTE,C_ARE,
- HORA,AQ_APL,N_APL)
- VALUES
- (GLOBAL_EMPRESA,CONTROL_BODEGA,TO_CHAR(A.FECHA,'YYYYMM'),
- A.COD,A.OPE,A.CAN,
- UNIDAD_PE,DECODE(A.OPE,'E',COSTO_UNI,'S',NULL),DECODE(A.OPE,'E',XMON,'S',NULL),
- DECODE(A.OPE,'S',COSTO_UNI,'E',NULL),DECODE(A.OPE,'S',XMON,'E',NULL),1,
- A.FECHA,A.FUE,
- XN_FUE,'KARDEX DE PUNTO DE ENTREGA FUENTE '||A.FUE||'. NUMERO ORIGINAL '||A.N_FUE,GLOBAL_USUARIO_SP6,
- 1,CONTROL_BODEGA2,A.LOTE,CONTROL_C_COS,
- A.HORA,A.FUE,XN_FUE);
- EXCEPTION
- WHEN OTHERS THEN
- MERR:='Problemas al insertar en kardex. Fuente : '||A.fue||'. Movimiento en el punto de entrega: '||A.n_fue||'. Movimiento a generar en Kardex : '||xn_fue||'. Mensaje de Error : '||SQLERRM;
- RAISE SALTO_LOOP;
- END;
- --
- -- GENERAMOS EL COMPROBANTE CONTABLE
- --
- IF NUM_CPTE IS NULL THEN
- NUM_CPTE:=CONSEC_CONTABLE(GLOBAL_EMPRESA, CONTROL_FECHA_RECIBIDO, CONTROL_C_CLA);
- BEGIN
- INSERT INTO CPTE_ENC
- (C_EMP,PER,C_CLA,CPTE,
- CLCONS,FEC,DES,EST,
- RESP,USR,TOTDEB,TOTCRE)
- VALUES
- (GLOBAL_EMPRESA,TO_CHAR(CONTROL_FECHA,'YYYYMM'),CONTROL_C_CLA,NUM_CPTE,
- NUM_CPTE,CONTROL_FECHA,'COMPROBANTE GENERADO PARA EL PUNTO DE ENTREGA : '||CONTROL_BODEGA,'J',
- GLOBAL_USUARIO_SP6,GLOBAL_USUARIO_SP6,0,0);
- EXCEPTION
- WHEN OTHERS THEN
- RETORNO := 'No se pudo generar el comprobante contable. Mensaje : '||SQLERRM;
- MERR:=RETORNO;
- RAISE SALTO_LOOP;
- --RETURN RETORNO;
- --DESHACER;
- --RAISE FORM_TRIGGER_FAILURE;
- END;
- END IF;
- CERR:=0;
- CUENTAS (A.COD, CUENTA_INV, CUENTA_CONT, CERR, MERR,
- --
- --NUEVOS PARAMETROS
- --
- GLOBAL_EMPRESA, CONTROL_VAL_PARAM1, CONTROL_PARAM1, CONTROL_PARAM2, CONTROL_VAL_PARAM2,
- CONTROL_PARAM3, CONTROL_VAL_PARAM3);
- IF CERR<>0 THEN
- RETORNO := MERR;
- --RAISE FORM_TRIGGER_FAILURE;
- END IF;
- TOTAL_CPTE:=NVL(TOTAL_CPTE,0)+(A.CAN*COSTO_UNI);
- IF A.OPE='S' THEN
- IF (CUENTA_INV IS NOT NULL) AND (CUENTA_CONT IS NOT NULL) THEN
- ANALIZA_REQS (CUENTA_INV,XN_FUE,A.CAN*COSTO_UNI,CONTROL_N_IDE,XREQ1,XREQ2,XREQ3,XREQ3,XC_COS,
- --
- --NUEVOS PARAMETROS
- --
- CONTROL_C_COS, GLOBAL_EMPRESA);
- XSEQ:=NVL(XSEQ,0)+1;
- --
- -- SALIDA --> ACREDITA LA CUENTA DE INVENTARIOS
- --
- BEGIN
- INSERT INTO CPTE_DET
- (C_EMP,PER,C_CLA,CPTE,
- SEQ,FEC,C_CTA,C_COS,
- REQ1,REQ2,REQ3,REQ4,
- CR,DB,DES)
- VALUES
- (GLOBAL_EMPRESA,TO_CHAR(CONTROL_FECHA,'YYYYMM'),CONTROL_C_CLA,NUM_CPTE,
- XSEQ,CONTROL_FECHA,CUENTA_INV,XC_COS,
- XREQ1,XREQ2,XREQ3,XREQ4,
- A.CAN*COSTO_UNI,0,'Bodega : '||CONTROL_BODEGA||'. Movimiento Fuente : '||A.fue||'. Numero : '||xn_fue);
- EXCEPTION
- WHEN OTHERS THEN
- RETORNO := 'Problemas al insertar la cuenta contable. '||SQLERRM;
- MERR:=RETORNO;
- RAISE SALTO_LOOP;
- END;
- --
- -- AHORA SE INSERTA LA CONTRAPARTIDA
- --
- ANALIZA_REQS (CUENTA_CONT,XN_FUE,A.CAN*COSTO_UNI,CONTROL_N_IDE,XREQ1,XREQ2,XREQ3,XREQ3,XC_COS,
- --
- --NUEVOS PARAMETROS
- --
- CONTROL_C_COS, GLOBAL_EMPRESA);
- XSEQ:=NVL(XSEQ,0)+1;
- BEGIN
- INSERT INTO CPTE_DET
- (C_EMP,PER,C_CLA,CPTE,
- SEQ,FEC,C_CTA,C_COS,
- REQ1,REQ2,REQ3,REQ4,
- CR,DB,DES)
- VALUES
- (GLOBAL_EMPRESA,TO_CHAR(CONTROL_FECHA,'YYYYMM'),CONTROL_C_CLA,NUM_CPTE,
- XSEQ,CONTROL_FECHA,CUENTA_CONT,XC_COS,
- XREQ1,XREQ2,XREQ3,XREQ4,
- 0,A.CAN*COSTO_UNI,'Bodega : '||CONTROL_BODEGA||'. Movimiento Fuente : '||A.fue||'. Numero : '||xn_fue);
- EXCEPTION
- WHEN OTHERS THEN
- --MESSAGEBOX ('Problemas al insertar la cuenta contable.');
- RETORNO := 'Problemas al insertar la cuenta contable.';
- MERR:=RETORNO;
- RAISE SALTO_LOOP;
- END;
- ELSE
- --MESSAGEBOX ('La cuenta de Inventarios o contrapartida para el codigo : '||Acod||' o su familia, no se ha definido adecuadamente.');
- RETORNO := 'La cuenta de Inventarios o contrapartida para el codigo : '||A.cod||' o su familia, no se ha definido adecuadamente.';
- END IF;
- ELSIF A.OPE='E' THEN
- IF CUENTA_INV IS NOT NULL THEN
- ANALIZA_REQS(CUENTA_INV,XN_FUE,A.CAN*COSTO_UNI,CONTROL_N_IDE,XREQ1,XREQ2,XREQ3,XREQ4,XC_COS,
- --
- --NUEVOS PARAMETROS
- --
- CONTROL_C_COS, GLOBAL_EMPRESA);
- XSEQ:=NVL(XSEQ,0)+1;
- --
- -- ENTRADA --> DEBITA LA CUENTA DE INVENTARIOS
- --
- BEGIN
- INSERT INTO CPTE_DET
- (C_EMP,PER,C_CLA,CPTE,
- SEQ,FEC,C_CTA,C_COS,
- REQ1,REQ2,REQ3,REQ4,
- CR,DB,DES)
- VALUES
- (GLOBAL_EMPRESA,TO_CHAR(CONTROL_FECHA,'YYYYMM'),CONTROL_C_CLA,NUM_CPTE,
- XSEQ,CONTROL_FECHA,CUENTA_INV,XC_COS,
- XREQ1,XREQ2,XREQ3,XREQ4,
- 0,A.CAN*COSTO_UNI,'Bodega : '||CONTROL_BODEGA||'. Movimiento Fuente : '||A.fue||'. Numero : '||xn_fue);
- EXCEPTION
- WHEN OTHERS THEN
- RETORNO := 'Problemas al insertar la cuenta contable en la salida. '||SQLERRM;
- MERR:=RETORNO;
- RAISE SALTO_LOOP;
- END;
- ANALIZA_REQS(CONTROL_C_CTA_PUENTE,XN_FUE,A.CAN*COSTO_UNI,CONTROL_N_IDE,XREQ1,XREQ2,XREQ3,XREQ4,XC_COS,
- --
- --NUEVOS PARAMETROS
- --
- CONTROL_C_COS, GLOBAL_EMPRESA);
- XSEQ:=NVL(XSEQ,0)+1;
- BEGIN
- INSERT INTO CPTE_DET
- (C_EMP,PER,C_CLA,CPTE,
- SEQ,FEC,C_CTA,C_COS,
- REQ1,REQ2,REQ3,REQ4,
- CR,DB,DES)
- VALUES
- (GLOBAL_EMPRESA,TO_CHAR(CONTROL_FECHA,'YYYYMM'),CONTROL_C_CLA,NUM_CPTE,
- XSEQ,CONTROL_FECHA,CONTROL_C_CTA_PUENTE,XC_COS,
- XREQ1,XREQ2,XREQ3,XREQ4,
- A.CAN*COSTO_UNI,0,'Bodega : '||CONTROL_BODEGA||'. Movimiento Fuente : '||A.fue||'. Numero : '||xn_fue);
- EXCEPTION
- WHEN OTHERS THEN
- RETORNO := 'Problemas al insertar la cuenta contable en la salida. '||SQLERRM;
- MERR:=RETORNO;
- RAISE SALTO_LOOP;
- END;
- ELSE
- RETORNO := 'No se ha definido la cuenta de inventarios para el código : '||A.cod;
- MERR:=RETORNO;
- RAISE SALTO_LOOP;
- END IF;
- END IF;
- N_FUE_CRUCE := A.N_FUE;
- --
- -- AHORA SE ASIENTA EL REGISTRO GENERADO EN KARDEX
- --
- ACTUALIZAKARDEX(GLOBAL_EMPRESA,CONTROL_BODEGA,TO_CHAR(A.FECHA,'YYYYMM'),A.fue,xn_fue,cerr,merr);
- IF CERR<>0 THEN
- MERR:='ACTUALIZA KARDEX . '||MERR;
- RAISE SALTO_LOOP;
- END IF;
- --
- -- POR ULTIMO SE ACTUALIZA LA TABLA DE KARDEX CON EL ESTADO P QUE INDICA QUE
- -- EL REGISTRO YA SE HALLA ASENTADO EN EL SP6
- --
- BEGIN
- UPDATE PE_KARDEX
- SET ESTADO='P'
- WHERE BOD=CONTROL_BODEGA
- AND COD=A.COD
- AND FUE=A.FUE
- AND N_FUE=A.N_FUE;
- dbms_output.put_line('PE_KARDEX: '||CONTROL_BODEGA||':.:'||A.COD||':.:'||A.FUE||':.:'||A.N_FUE);
- EXCEPTION
- WHEN OTHERS THEN
- MERR:='Problemas al actualizar el estado en la tabla de movimientos del punto de EntregA '||SQLERRM;
- RAISE SALTO_LOOP;
- END;
- BEGIN
- UPDATE RIPSMEDICAMENTOS
- SET ESTADO = 1
- WHERE id_med = A.COD
- AND punto_id = A.BOD
- AND lote_id = A.LOTE
- AND fecha_sol = A.FECHA
- AND fue = A.FUE
- AND ope = A.OPE;
- EXCEPTION
- WHEN OTHERS THEN
- dbms_output.put_line('Error al intentar actualizar el estado del medicamento '||A.COD||' en ripsmedicamento '||SQLERRM);
- END;
- EXCEPTION
- WHEN SALTO_LOOP THEN
- REGISTRAR_ERROR(A.BOD,A.COD,A.FECHA,A.HORA,A.CAN,A.FUE,A.N_FUE,A.OPE,A.LOTE,A.ESTADO,'03','CA',MERR);
- END;
- END LOOP;
- CLOSE KK;
- --
- -- ACUALIZAMOS Y ASENTAMOS EL COMPROBANTE CONTABLE
- --
- IF NVL(XSEQ,0)<>0 THEN
- BEGIN
- UPDATE CPTE_ENC
- SET TOTDEB=TOTAL_CPTE,
- TOTCRE=TOTAL_CPTE
- WHERE C_EMP=GLOBAL_EMPRESA
- AND PER=TO_CHAR(CONTROL_FECHA,'YYYYMM')
- AND C_CLA=CONTROL_C_CLA
- AND CPTE=NUM_CPTE;
- IF SQL%NOTFOUND THEN
- --MESSAGEBOX ('Comprobante contable no fue generado');
- RETORNO := 'Comprobante contable no fue generado';
- RETURN RETORNO;
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- --MESSAGEBOX ('No se pudo actualizar el comprobante contable. '||SQLERRM);
- RETORNO := 'No se pudo actualizar el comprobante contable. '||SQLERRM;
- RETURN RETORNO;
- --RAISE FORM_TRIGGER_FAILURE;
- END;
- CERR:=0;
- ASIENTOSINCOMMIT(GLOBAL_EMPRESA,TO_CHAR(CONTROL_FECHA,'YYYYMM'),CONTROL_C_CLA,NUM_CPTE,CERR,MERR);
- IF CERR<>0 THEN
- --MESSAGEBOX ('Problemas al asentar el comprobante contable. '||MERR);
- RETORNO := 'Problemas al asentar el comprobante contable. '||MERR;
- RETURN RETORNO;
- --RAISE FORM_TRIGGER_FAILURE;
- END IF;
- --MESSAGEBOX ('Proceso Terminado con éxito. Comprobante contable generado Nro : '||Num_Cpte);
- RETORNO := 'Proceso Terminado con exito. Comprobante contable generado Nro : '||Num_Cpte;
- INSERT INTO COMPROBANTE_NFUE(NFUE, COMPROBANTE) VALUES (N_FUE_CRUCE, Num_Cpte);
- COMMIT;
- --COMMIT_FORM;
- ELSE
- --MESSAGEBOX ('No existe ningun movimiento por generar.');
- RETORNO := 'No existe ningun movimiento por generar.';
- END IF;
- RETURN RETORNO;
- EXCEPTION
- WHEN HUBO_ERROR THEN
- --MESSAGEBOX(MERR);
- RETORNO := MERR;
- --DESHACER;
- --RAISE FORM_TRIGGER_FAILURE;
- RETURN RETORNO;
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement