CREATE OR REPLACE PROCEDURE REPLICDADOS_SERVICO(
   P_REPLICADADOS IN VARCHAR,
   P_NMPRODUTO    IN VARCHAR,
   P_CDPRODUTO    IN VARCHAR,
   P_OPERACAO     IN VARCHAR,
   P_CDCIA        IN VARCHAR,
   P_CDCLASSE     IN VARCHAR,
   P_CDCICLO      IN VARCHAR,
   P_IDERRO       OUT VARCHAR)
AS
   V_CDARVPROD    PRODUTO.CDARVPROD%TYPE;
   V_CDNVPRODUTO  PRODUTO.CDNVPRODUTO%TYPE;
   V_CDPICTPROD   PARAMGERAL.CDPICTPROD%TYPE;
   V_CDPICTPRODR  PARAMGERAL.CDPICTPROD%TYPE;
   V_CDPRODUTO    PRODUTO.CDPRODUTO%TYPE;
   V_CDSETOR      SETOR.CDSETOR%TYPE;
   V_CDCIA        COMPANHIA.CDCIA%TYPE;
   V_CDCLASSE     CLASSE.CDCLASSE%TYPE;
   V_CDCICLO      CICLO.CDCICLO%TYPE;
   V_CDPADSERV    PADSERVICO.CDPADSERV%TYPE;
   V_PADSERV      PADSERVICO.CDPADSERV%TYPE;
   V_CDPRODFATURA PRODUTO.CDPRODFATURA%TYPE;
   V_PRODFATURA PRODUTO.CDPRODFATURA%TYPE;
   V_SETOR        SETOR.CDSETOR%TYPE;
   V_SGUNIDADE    UNIDMEDIDA.SGUNIDADE%TYPE;
   V_UNIDADE      UNIDMEDIDA.SGUNIDADE%TYPE;
   V_CDESPEPROD   ESPEPROD.CDESPEPROD%TYPE;
   V_TIPOCOMP     TCOMPPRO.CDTIPOCOMP%TYPE;
   V_CDTIPOINSU   TIPOINSU.CDTIPOINSU%TYPE;

   V_SELECT_TEXT  VARCHAR2(1000);
   V_IDERRO       VARCHAR2(200);
   C_SELECT       INTEGER;
   V_RESULT       INTEGER;

BEGIN
   V_IDERRO := '';
   IF P_OPERACAO = '1' THEN

      SELECT CDPICTPROD INTO V_CDPICTPROD
      FROM PARAMGERAL;

      V_SELECT_TEXT := '';
      V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPICTPROD)';
      V_SELECT_TEXT := V_SELECT_TEXT||' FROM PARAMGERAL@ '||P_REPLICADADOS;
      C_SELECT := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
      DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDPICTPRODR,30);
      V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
         DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDPICTPRODR);
      END IF;
      DBMS_SQL.CLOSE_CURSOR(C_SELECT);


      IF V_CDPICTPROD <> V_CDPICTPRODR THEN
         V_IDERRO := V_IDERRO||'Mascaradiferente_';
      END IF;

      SELECT MAX(CDARVPROD), MAX(CDNVPRODUTO) INTO V_CDARVPROD, V_CDNVPRODUTO
      FROM PRODUTO
      WHERE (CDPRODUTO = P_CDPRODUTO) AND
            (IDPRODCOMISS = '1');


      IF V_CDNVPRODUTO > 1 THEN
         V_SELECT_TEXT := '';
         V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPRODUTO)';
         V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO@'||P_REPLICADADOS;
         V_SELECT_TEXT := V_SELECT_TEXT||' WHERE ('''||V_CDARVPROD||''' LIKE CDARVPROD || ''%'')  AND';
         V_SELECT_TEXT := V_SELECT_TEXT||'       ('||V_CDNVPRODUTO||' -1 = CDNVPRODUTO)  AND';
         V_SELECT_TEXT := V_SELECT_TEXT||'       (IDPRODCOMISS = ''1'')';
         C_SELECT := DBMS_SQL.OPEN_CURSOR;
         DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
         DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDPRODUTO,30);
         V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
         IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
            DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDPRODUTO);
         END IF;
         DBMS_SQL.CLOSE_CURSOR(C_SELECT);

         IF V_CDPRODUTO IS NULL THEN
            V_IDERRO  := V_IDERRO||'ProdNivel_';
         END IF;
      END IF;

      V_SELECT_TEXT := '';
      V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPRODUTO)';
      V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO@'||P_REPLICADADOS;
      V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDPRODUTO = '''||P_CDPRODUTO||''') AND';
      V_SELECT_TEXT := V_SELECT_TEXT||'       (IDPRODCOMISS = ''1'')';
      C_SELECT := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
      DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDPRODUTO,30);
      V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
         DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDPRODUTO);
      END IF;
      DBMS_SQL.CLOSE_CURSOR(C_SELECT);

      IF V_CDPRODUTO IS NOT NULL THEN
         V_IDERRO := V_IDERRO||'ProdCad_';
      END IF;

      IF P_CDCIA IS NOT NULL THEN
         V_SELECT_TEXT := '';
   	 V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDCIA)';
      	 V_SELECT_TEXT := V_SELECT_TEXT||' FROM COMPANHIA@'||P_REPLICADADOS;
	 V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDCIA = '''||P_CDCIA||''')';
   	 C_SELECT := DBMS_SQL.OPEN_CURSOR;
      	 DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
	 DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDCIA,30);
   	 V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      	 IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
            DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDCIA);
	 END IF;
   	 DBMS_SQL.CLOSE_CURSOR(C_SELECT);

	 IF V_CDCIA IS NULL THEN
            V_IDERRO  := V_IDERRO||'CompanhiaNCad_';
      	 END IF;
      END IF;

      IF P_CDCLASSE IS NOT NULL THEN
         V_SELECT_TEXT := '';
   	 V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDCLASSE)';
      	 V_SELECT_TEXT := V_SELECT_TEXT||' FROM CLASSE@'||P_REPLICADADOS;
	 V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDCLASSE = '''||P_CDCLASSE||''')';
   	 C_SELECT := DBMS_SQL.OPEN_CURSOR;
      	 DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
	 DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDCLASSE,30);
   	 V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      	 IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
            DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDCLASSE);
	 END IF;
   	 DBMS_SQL.CLOSE_CURSOR(C_SELECT);

	 IF V_CDCLASSE IS NULL THEN
            V_IDERRO  := V_IDERRO||'ClasseNCad_';
      	 END IF;
      END IF;

      IF P_CDCICLO IS NOT NULL THEN
         V_SELECT_TEXT := '';
   	 V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDCICLO)';
      	 V_SELECT_TEXT := V_SELECT_TEXT||' FROM CICLO@'||P_REPLICADADOS;
	 V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDCICLO = '''||P_CDCICLO||''')';
   	 C_SELECT := DBMS_SQL.OPEN_CURSOR;
      	 DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
	 DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDCICLO,30);
   	 V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      	 IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
            DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDCICLO);
	 END IF;
   	 DBMS_SQL.CLOSE_CURSOR(C_SELECT);

	 IF V_CDCICLO IS NULL THEN
            V_IDERRO  := V_IDERRO||'CicloNCad_';
      	 END IF;
      END IF;

      SELECT MAX(CDPADSERV) INTO V_CDPADSERV
      FROM PRODUTO
      WHERE (CDPRODUTO    = P_CDPRODUTO ) AND
            (IDPRODCOMISS = '1'         );

      IF V_CDPADSERV IS NOT NULL THEN
	 V_SELECT_TEXT := '';
   	 V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPADSERV)';
      	 V_SELECT_TEXT := V_SELECT_TEXT||' FROM PADSERVICO@'||P_REPLICADADOS;
	 V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDPADSERV = '''||V_CDPADSERV||''')';
         C_SELECT := DBMS_SQL.OPEN_CURSOR;
      	 DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
	 DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_PADSERV,30);
   	 V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      	 IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
            DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_PADSERV);
	 END IF;
   	 DBMS_SQL.CLOSE_CURSOR(C_SELECT);
         IF V_PADSERV IS NULL THEN
            V_IDERRO  := V_IDERRO||'SiglaNCad_';
      	 END IF;
      END IF;

      SELECT MAX(CDPRODFATURA) INTO V_CDPRODFATURA
      FROM PRODUTO
      WHERE (CDPRODUTO    = P_CDPRODUTO) AND
            (IDPRODCOMISS = '1');

      IF V_CDPRODFATURA IS NOT NULL THEN
	 V_SELECT_TEXT := '';
   	 V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPRODUTO)';
      	 V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO@'||P_REPLICADADOS;
	 V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDPRODUTO = '''||V_CDPRODFATURA||''')';
   	 C_SELECT := DBMS_SQL.OPEN_CURSOR;
      	 DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
	 DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_PRODFATURA,30);
   	 V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      	 IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
            DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_PRODFATURA);
	 END IF;
   	 DBMS_SQL.CLOSE_CURSOR(C_SELECT);
	 IF V_PRODFATURA IS NULL THEN
            V_IDERRO  := V_IDERRO||'ProdFatNCad_';
      	 END IF;
      END IF;

      SELECT MAX(CDSETOR) INTO V_CDSETOR
      FROM PRODUTO
      WHERE (CDPRODUTO    = P_CDPRODUTO) AND
            (IDPRODCOMISS = '1');

      IF V_CDSETOR IS NOT NULL THEN
	 V_SELECT_TEXT := '';
   	 V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDSETOR)';
      	 V_SELECT_TEXT := V_SELECT_TEXT||' FROM SETOR@'||P_REPLICADADOS;
	 V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDSETOR = '''||V_CDSETOR||''')';
   	 C_SELECT := DBMS_SQL.OPEN_CURSOR;
      	 DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
	 DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_SETOR,30);
   	 V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      	 IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
            DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_SETOR);
	 END IF;
   	 DBMS_SQL.CLOSE_CURSOR(C_SELECT);

	 IF V_SETOR IS NULL THEN
            V_IDERRO  := V_IDERRO||'SetorNCad_';
      	 END IF;
      END IF;

      SELECT MAX(SGUNIDADE) INTO V_SGUNIDADE
      FROM PRODUTO
      WHERE (CDPRODUTO    = P_CDPRODUTO) AND
            (IDPRODCOMISS = '1');

      IF V_SGUNIDADE IS NOT NULL THEN
	 V_SELECT_TEXT := '';
   	 V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(SGUNIDADE)';
      	 V_SELECT_TEXT := V_SELECT_TEXT||' FROM UNIDMEDIDA@'||P_REPLICADADOS;
	 V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (SGUNIDADE = '''||V_SGUNIDADE||''')';
   	 C_SELECT := DBMS_SQL.OPEN_CURSOR;
      	 DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
	 DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_UNIDADE,30);
   	 V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      	 IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
	    DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_UNIDADE);
   	 END IF;
      	 DBMS_SQL.CLOSE_CURSOR(C_SELECT);

	 IF V_UNIDADE IS NULL THEN
            V_IDERRO  := V_IDERRO||'UnidadeNCad_';
      	 END IF;
      END IF;


      IF V_IDERRO IS NULL THEN
         V_SELECT_TEXT := '';
         V_SELECT_TEXT := V_SELECT_TEXT||' INSERT INTO PRODUTO@'||P_REPLICADADOS;
         V_SELECT_TEXT := V_SELECT_TEXT||' (CDARVPROD,    CDPRODUTO,    CDNVPRODUTO,  CDPRODESTO,   NMPRODUTO,';
         V_SELECT_TEXT := V_SELECT_TEXT||'  CDSETOR,      SGUNIDADE,    NMPRODESPANH, NMPRODINGLES, CDCIA,';
         V_SELECT_TEXT := V_SELECT_TEXT||'  IDPRODCOMISS, IDPRODPROD,   CDPADSERV,    VRPESOUNID,   CDEXTSERV,';
         V_SELECT_TEXT := V_SELECT_TEXT||'  DSEXTSERV,    TXCOMENTSERV, IDSERVICO,    IDSERVESP,    IDFATSERV,';
         V_SELECT_TEXT := V_SELECT_TEXT||'  IDNACPRODUTO, CDCLASSE,     CDCICLO,      CDPRODFATURA)';
         V_SELECT_TEXT := V_SELECT_TEXT||' SELECT';
         V_SELECT_TEXT := V_SELECT_TEXT||'  CDARVPROD,    CDPRODUTO,            CDNVPRODUTO,            CDPRODESTO,     '''||P_NMPRODUTO||''',';
         V_SELECT_TEXT := V_SELECT_TEXT||'  CDSETOR,      SGUNIDADE,            NMPRODESPANH,           NMPRODINGLES,   '''||P_CDCIA||''',';
         V_SELECT_TEXT := V_SELECT_TEXT||'  IDPRODCOMISS, IDPRODPROD,           CDPADSERV,            VRPESOUNID,     CDEXTSERV,';
         V_SELECT_TEXT := V_SELECT_TEXT||'  DSEXTSERV,    TXCOMENTSERV,         IDSERVICO,              IDSERVESP,      IDFATSERV,';
         V_SELECT_TEXT := V_SELECT_TEXT||'  IDNACPRODUTO, '''||P_CDCLASSE||''', '''||P_CDCICLO||''',    CDPRODFATURA';
         V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO';
         V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDPRODUTO = '''||P_CDPRODUTO||''') AND';
         V_SELECT_TEXT := V_SELECT_TEXT||'       (IDPRODCOMISS = ''1'')';
         C_SELECT := DBMS_SQL.OPEN_CURSOR;
         DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
         V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
         DBMS_SQL.CLOSE_CURSOR(C_SELECT);
      END IF;
   END IF;

   IF P_OPERACAO = '2' THEN
      V_SELECT_TEXT := '';
      V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPRODUTO)';
      V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO@'||P_REPLICADADOS;
      V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDPRODUTO = '''||P_CDPRODUTO||''') AND';
      V_SELECT_TEXT := V_SELECT_TEXT||'       (IDPRODCOMISS = ''1'')';
      C_SELECT := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
      DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDPRODUTO,30);
      V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
         DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDPRODUTO);
      END IF;
      DBMS_SQL.CLOSE_CURSOR(C_SELECT);

      IF V_CDPRODUTO IS NULL THEN
         V_IDERRO  := V_IDERRO||'ServicoNCad_';
      END IF;

      SELECT MAX(CDARVPROD), MAX(CDNVPRODUTO) INTO V_CDARVPROD, V_CDNVPRODUTO
      FROM PRODUTO
      WHERE (CDPRODUTO = P_CDPRODUTO) AND
            (IDPRODCOMISS = '1');

      V_SELECT_TEXT := '';
      V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPRODUTO)';
      V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO@'||P_REPLICADADOS;
      V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDARVPROD LIKE '''||V_CDARVPROD||''' || ''%'')  AND';
      V_SELECT_TEXT := V_SELECT_TEXT||'       ('||V_CDNVPRODUTO||' +1 = CDNVPRODUTO)  AND';
      V_SELECT_TEXT := V_SELECT_TEXT||'       (IDPRODCOMISS = ''1'')';
      C_SELECT := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
      DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDPRODUTO,30);
      V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
         DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDPRODUTO);
      END IF;
      DBMS_SQL.CLOSE_CURSOR(C_SELECT);

      IF V_CDPRODUTO IS NOT NULL THEN
         V_IDERRO  := V_IDERRO||'ExcluirNaoPer_';
      END IF;

      IF V_IDERRO IS NULL THEN
         V_SELECT_TEXT := '';
         V_SELECT_TEXT := V_SELECT_TEXT||' DELETE FROM PRODUTO@'||P_REPLICADADOS;
         V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDPRODUTO = '''||P_CDPRODUTO||''')';
         C_SELECT := DBMS_SQL.OPEN_CURSOR;
         DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
         V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
         DBMS_SQL.CLOSE_CURSOR(C_SELECT);
      END IF;
   END IF;
   IF V_IDERRO IS NULL THEN
      V_IDERRO := 'OK';
      COMMIT;
   END IF;
   P_IDERRO := V_IDERRO;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('REPLICDADOS_SERVICO','4.07.040'); END;
/
