Geração de Pedidos de Venda

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
the jack
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 01 Set 2008 2:10 pm
Localização: sp
Obrigado

Att.

Carlos Alberto

Boa Tarde,

Meus amigos, estou precisando integrar pedidos de venda e clientes do sistema Starcorp para o da Gemco.
Receberei os dados via Webservice da Starcorp arquivos estes em xml. e terei que integrar os dados do pedido no Sistema Gemco.
Como poderei fazer isto, alguém teria alguma dica para me ajudar...
the jack
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 01 Set 2008 2:10 pm
Localização: sp
Obrigado

Att.

Carlos Alberto

Tenho está procedure mais ela quando tenho mais de um item no pedido elá gera vários pedidos, e o certo seria colocar todos os itens em um único pedido.

-----------------------------------------------------------------------------------

Selecionar tudo

create or replace procedure copiagemco as
        cursor pedido is
                select  NOME,
                        CGCCPF,
                        RG,
                        ORGAOEMISSOR,
                        DTNASC,
                        SEXO,
                        NATJUR,
                        ENDERECO,
                        COMPLEMENTO,
                        NUMERO,
                        BAIRRO,
                        MUNICIPIO,
                        CEP,
                        UF,
                        DDD,
                        TELEFONE,
                        DTPEDIDO
                from    int_pedido
                where   integra = 'N'
                GROUP BY NOME,
                        CGCCPF,
                        RG,
                        ORGAOEMISSOR,
                        DTNASC,
                        SEXO,
                        NATJUR,
                        ENDERECO,
                        COMPLEMENTO,
                        NUMERO,
                        BAIRRO,
                        MUNICIPIO,
                        CEP,
                        UF,
                        DDD,
                        TELEFONE,
                        DTPEDIDO
                ORDER BY NOME;

       v_codcli   cad_cliente.codcli%type;
       v_codcli1  cad_cliente.codcli%type;
       v_digcli   cad_cliente.digcli%type;
       v_numped   mov_pedido.numpedven%type;
       v_preço    cad_preço.preço%type;
       v_fisico   cad_prodloc.fisico%type;
       v_aliq     cad_imptribut.aliquota%type;
       v_valor    number(9,3):=0;
       v_item     cad_itprod.coditprod%type;
       flag       number:=0;
       flag_est   number:=0;
       flag_pre   number:=0;
       flag_aliq  number:=0;
               

       CODCLI_AUX  CHAR(8);
       SOMA_AUX    NUMBER;
       CONT_AUX    NUMBER;
       DIGCLI_AUX  NUMBER(2);
       ERRO        CHAR(1);
       CONT_ITEM   NUMBER:=0;
--       CONT        NUMBER:=0;


begin

   for ped in pedido loop

       begin
         select nvl(codcli,0)
         into   v_codcli1
         from   cad_cliente
         where  cgccpf = ped.cgccpf;
       exception
         WHEN no_data_found THEN
              v_codcli1 := 0;
         WHEN OTHERS THEN
              RAISE_APPLICATION_ERROR(-20002,to_char(SQLCODE)||SQLERRM);
       end;

       if v_codcli1 = 0 then

          begin
           select seqcliente.nextval
           into   v_codcli
           from   dual;
          end;

          BEGIN
	         SOMA_AUX := 0;
	         CONT_AUX := 1;
	         DIGCLI_AUX := 0;
	         ERRO := 'N';

           SELECT LPAD(TO_CHAR(v_CODCLI1), 8, 0) INTO CODCLI_AUX FROM DUAL;

           WHILE CONT_AUX <= 8 LOOP
	          SOMA_AUX := SOMA_AUX + ((10 - CONT_AUX ) *  TO_NUMBER(SUBSTR(CODCLI_AUX, CONT_AUX, 1 )));
	          CONT_AUX := CONT_AUX + 1;
           END LOOP;

          SELECT MOD((SOMA_AUX * 10 ), 11) INTO DIGCLI_AUX FROM DUAL ;

          IF DIGCLI_AUX = 10 THEN
             DIGCLI_AUX := 0;
          END IF;

          V_DIGCLI := DIGCLI_AUX;
         END;

--         dbms_output.put_line ('vou inserir cliente novo');
--         dbms_output.put_line ('v_codcli =' || to_char(v_codcli));
--         dbms_output.put_line ('v_digcli =' || to_char(v_digcli));

         begin

           INSERT INTO CAD_CLIENTE
              (CODCLI,
               DIGCLI,
               CGCCPF,
               NOMCLI,
               NUMDOC,
               EMISSOR,
               DTNASC,
               DTCADAST,
               SEXO,
               NATJUR)
           VALUES
              (V_CODCLI,
               V_DIGCLI,
               ped.CGCCPF,
               ped.NOME,
               ped.rg,
               ped.orgaoemissor,
               ped.dtnasc,
               sysdate,
               ped.sexo,
               ped.natjur) ;
          exception
            WHEN OTHERS THEN
                 RAISE_APPLICATION_ERROR(-20004,to_char(SQLCODE)||SQLERRM);

          END;

          BEGIN

           INSERT INTO CAD_ENDCLI
              (CODCLI,
               CODEND,
               TPENDER,
               CODLOGRAD,
               ENDERECO,
               BAIRRO,
               CIDADE,
               ESTADO,
               CEP,
               STATUS,
               COMPLEMENTO,
               DDDFONE1,
               FONE1,
               NUMERO,
               FLINT,
               CODPAIS)
           VALUES
              (V_CODCLI,
                0,
               'E',
               'R',
                ped.ENDERECO,
                ped.BAIRRO,
                ped.municipio,
                ped.uf,
                ped.CEP,
               '1',
                ped.COMPLEMENTO,
                ped.DDD,
                ped.telefone,
                ped.numero,
               'N',
               '55');
          EXCEPTION
      	     WHEN OTHERS THEN
      	          RAISE_APPLICATION_ERROR(-20006,to_char(SQLCODE)||SQLERRM);
         END;

         BEGIN

         INSERT INTO CAD_CLIENTE_COMPL
             (CODCLI,
              FLZFM,
              FLINT)
         VALUES
             (v_codcli,
              'N',
              'N');
         EXCEPTION
            WHEN OTHERS THEN
                 RAISE_APPLICATION_ERROR(-20008,to_char(SQLCODE)||SQLERRM);
         END;

      end if;

      begin

        SELECT SEQPED.NEXTVAL INTO V_NUMPED FROM DUAL;

      end;

--      dbms_output.put_line ('v_numped =' || to_char(v_numped));
--      dbms_output.put_line ('ped.dtpedido =' || to_char(ped.dtpedido, 'dd/mm/yyyy'));

      FLAG := 0;

      begin
 
         insert into MOV_PEDIDO
             (CODFIL,TIPOPED,NUMPEDVEN,TPPED,CONDPGTO,
              CODVENDR,CODCLI,CODCLIPRES,
              DTPEDIDO,DTPAGTO,DTENTREGA,
              ENDCOB,ENDENT,PRACA,
              FILORIG, FLUTILPEDIDO,
              VLDESPACES,VLOUTDESP,VLDESPFIN,VLDESCONTO,VLENTRADA,VLFRETE,VLSEGURO,
              VLMERCAD,SITCARGA,STATUS,NPEDCLI,
              VLJUROSFIN,TPNOTA,VLBASEIPI,VLTOTAL)

         values
             (41,0,v_numped,'E','DJ1',195,
              157262,decode(v_codcli1,0,v_codcli,v_codcli1),
              to_char(ped.dtpedido,'DD/MM/YYYY'),
              to_char(ped.dtpedido+28,'DD/MM/YYYY'),
              to_char(ped.dtpedido+10,'DD/MM/YYYY'),
              0,0,0,
              41, NULL,
              0,0,0,0,0,0,0,
              v_valor,0,4,v_numped,
              0,111,0,v_valor);
        exception
           when others then
       	          begin
                    insert into log_jequiti
                      (codfil, coditprod, erro, dterro)
                    values
                      (41, 0,'ERRO NA INSERCAO DO PEDIDO', sysdate);
                  end;
                  flag:=1;

        end;

      --   CONT := NVL(CONT,0) + 1;

        begin
         INSERT INTO CXA_LANCTO 
          ( CODFIL, DATENT, NUMCXA, NUMMOV, NUMPED, CODOPER, TIPOPED, DATREF, CODEVE, NUMLAN,
            VALLAN, NUMORP, INDCAR, CONDPGTO, FORMA, FILORI,FILDES, CODCLI, NUMTIT, DESTIT,  
            FILPED, CODORI, NUMNOT, DEPCHQ, OBSLAN, SITCXA,  VALREAL, STATUS, NUMCARTAO, VALIDCARTAO,
            FILNOT, SERIE, NUMPRC, DTVCTO, FLFINANC, INTEGRACRC, VLTOTAL, FLOPERAUTOM,
            TPNOTA, FLDEBCRED, NUMCONTRAFIN, DIGCONTRAFIN, FLGERAER, FLREPLICA, FLINT, CODFILCRC, CODORIGCRC, 
            TPCLICRC,FLRECONC,FLTPCOBRANCA,VLPRINC, DTDIGIT, FLLISTCHEQ, FLENVBCO, FLDEVOLCHQCXA, FLGERAREEMB,
            CODFILCXA)
          values  
           (41,to_char(ped.dtpedido,'DD/MM/YYYY'),0,0,v_numped,0,0,to_char(ped.dtpedido,'DD/MM/YYYY'),32,0,
            0,'N','N','DJ1', 32,41,41,157262,NULL,NULL,     
            41,NULL,0,'N','N',0,0,2,'N','N',
            NULL,0,1,to_char(ped.dtpedido+28,'DD/MM/YYYY'),'N','N',0,'N',
            111,'N',NULL,NULL,'N','N','N',41,19,
            1,'N','N',0,to_char(ped.dtpedido,'DD/MM/YYYY'),'N','N','N','N',41);
          exception
           when others then
       	          begin
                    insert into log_jequiti
                      (codfil, coditprod, erro, dterro)
                    values
                      (41, 0,'ERRO NA INSERCAO DA CXA_LANCTO', sysdate);
                  end;
                  flag:=1;

        end;
        

      declare

       cursor item is

        select produto, dtpedido, sum(qtd) qtde
        from   int_pedido
        where  integra = 'N'
        and    cgccpf = ped.cgccpf
        group  by produto, dtpedido;

       begin

        CONT_ITEM := 0;

        for ite in item loop
        
        
        begin
           select coditprod
           into   v_item
           from   cad_itprod
           where  coditprod = ite.produto;
         EXCEPTION
      	     WHEN NO_DATA_FOUND THEN
       	          begin
                   insert into log_jequiti
                     (codfil, coditprod, erro, dterro )
                   values
                     (41, ite.produto, 'PRODUTO não ENCONTRADO', sysdate);
                  end;
                  flag:=1;
      	     WHEN OTHERS THEN
      	          RAISE_APPLICATION_ERROR(-20011,to_char(SQLCODE)||SQLERRM);
        end;

        begin
           select (nvl(fisico,0) - nvl(resfis,0) - nvl(mostruario,0))
           into   v_fisico
           from   cad_prodloc
           where  codfil = 41
           and    coditprod = ite.produto;
         EXCEPTION
      	     WHEN NO_DATA_FOUND THEN
       	          begin
                   insert into log_jequiti
                     (codfil, coditprod, erro, dterro )
                   values
                     (41, ite.produto, 'ERRO - PRODUTO SEM ESTOQUE', sysdate);
                  end;
                  flag_est :=1;
      	     WHEN OTHERS THEN
      	          RAISE_APPLICATION_ERROR(-20011,to_char(SQLCODE)||SQLERRM);
         end;

         if v_fisico <= 0 then 
            begin
              insert into log_jequiti
                 (codfil, coditprod, erro, dterro )
              values
                 (41, ite.produto, 'ERRO - PRODUTO SEM ESTOQUE', sysdate);
            end;
            flag_est :=1;
         end if;

         begin
           select preço
           into   v_preço
           from   cad_preço
           where  codfil = 41
           and    coditprod = ite.produto
           and    codembal = 0;
         EXCEPTION
      	     WHEN NO_DATA_FOUND THEN
       	          begin
                   insert into log_jequiti
                     (codfil, coditprod, erro, dterro)
                   values
                     (41, ite.produto, 'ERRO - PRODUTO SEM preço', sysdate);
                  end;
                  flag_pre :=1;
      	     WHEN OTHERS THEN
      	          RAISE_APPLICATION_ERROR(-20011,to_char(SQLCODE)||SQLERRM);
         end;
         
         if v_preço <= 0 then 
            begin
              insert into log_jequiti
                 (codfil, coditprod, erro, dterro )
              values
                 (41, ite.produto, 'ERRO - PRODUTO SEM preço', sysdate);
            end;
            flag_pre :=1;
         end if;        
         
         begin
           select aliquota
           into   v_aliq
           from   cad_imptribut c
           where  c.tpimp = 'I'
           and    c.codimp = 1
           and    c.estorig = 'SP'
           and    c.estdest = 'SP'
           and    c.codgrptpnota = 2;
         exception
      	     WHEN NO_DATA_FOUND THEN
       	          begin
                   insert into log_jequiti
                     (codfil, coditprod, erro, dterro)
                   values
                     (41, ite.produto, 'ERRO - PRODUTO SEM ALIQUOTA', sysdate);
                  end;
                  flag_aliq :=1;
      	     WHEN OTHERS THEN
      	          RAISE_APPLICATION_ERROR(-20013,to_char(SQLCODE)||SQLERRM);
         end;

         if flag <> 1 and flag_est <> 1 and flag_pre <> 1 and flag_aliq <> 1 then 
         
            CONT_ITEM := NVL(CONT_ITEM,0) + 1;

--      dbms_output.put_line ('v_numped1 =' || to_char(v_numped));
--      dbms_output.put_line ('coditprod =' || to_char(ite.produto));
--      dbms_output.put_line ('item  =' || to_char(cont_item));
--      dbms_output.put_line ('qtd =' || to_char(ite.qtde));



            begin

--      dbms_output.put_line ('VOU GRAVAR MOV_ITPED');

              insert into mov_itped
                (codfil,tipoped,numpedven,coditprod,item,codcli,qtcomp,aliqicm,
                 precounit, dtpedido, qtreceb,sitcarga,qtemb,vlmontagem,
                 qtcompanexo,flentparc,fllibfat,flsepararetdep,flpedvenender,
                 fltransflog,flsegterceiro,fltrocabonif,filorig,status,codembal)
                values
                (41,0,v_numped,ite.produto,cont_item,157262,ite.qtde,v_aliq,
                 v_preço,ped.dtpedido,0,0,1,0,0,'N','S','N','N','N','N','N',41,4,0);
            exception
      	      WHEN OTHERS THEN
       	          begin
                   insert into log_jequiti
                     (codfil, coditprod, erro, dterro)
                   values
                     (41, ite.produto,'ERRO NA INSERCAO DO ITEM DO PEDIDO', sysdate);
                  end;
                  flag :=1;
            end;

 --           if flag <> 1 and flag_est  <> 1 and flag_pre <> 1 and flag_aliq <> 1 then 

               begin
       
                update cad_prodloc
                set    resfis = nvl(resfis,0) + ite.qtde
                where  codfil = 41
                and    coditprod = ite.produto;
              
               end;
            
--            end if;

         end if;

         v_valor := nvl(v_valor,0) + (nvl(v_preço,0) * nvl(ite.qtde,0));
         
        end loop;

      end;

--      dbms_output.put_line ('VALOR =' || to_char(V_VALOR));

      if flag <> 1 and flag_est  <> 1 and flag_pre <> 1 and flag_aliq <> 1 then

      
      begin

       update mov_pedido
       set    vlmercad = v_valor,
              vltotal = v_valor
       where  codfil = 41
       and    numpedven = v_numped;

      end;
 
      begin

       update cxa_lancto
       set    vallan = v_valor,
              vltotal = v_valor
       where  codfil = 41
       and    numped = v_numped;

      end;

      v_valor := 0;


--      dbms_output.put_line ('flag =' || to_char(flag));
--      dbms_output.put_line ('flag_est =' || to_char(flag_est));
--      dbms_output.put_line ('flag_pre =' || to_char(flag_pre));
--      dbms_output.put_line ('flag_aliq =' || to_char(flag_aliq));

         begin
          update int_pedido
          set   integra = 'S'
          where  cgccpf = ped.cgccpf;
         end;

      else

         begin
          delete mov_pedido_compl where codfil = 41 and numpedven = v_numped;
          delete mov_itped where  codfil = 41 and numpedven = v_numped;
          delete mov_pedido where codfil = 41 and numpedven = v_numped;
          delete cxa_lancto where codfil = 41 and numped = v_numped;
         end;

      end if;

      commit;
      
       flag       :=0;
       flag_est   :=0;
       flag_pre   :=0;
       flag_aliq  :=0;



      END LOOP;

  

END;
/
jucruzjc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 57
Registrado em: Qui, 11 Jan 2007 10:26 am
Localização: Santa Bárbaba d'Oeste
--
Juliana Cr. Cruz
Analista Desenvolvedor Oracle

Oi the jack!

Olhando por cima do seu código, aparentemente ele deveria funcionar...

Eu só colocaria todas as declarações de cursores antes da declaração das variáveis...e dpois chamaria-os usando o open cursor... mas isso não interfere em nada no código...

Tenta executa-lo colocando return, incluindo as mesagens... executando passo a passou ou até mesmo fazendo um teste de mesa....

Num ajudei muito... mas enfim! :cry:

Até mais!!

:D
the jack
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 01 Set 2008 2:10 pm
Localização: sp
Obrigado

Att.

Carlos Alberto

Olá Juliana.

Valeu pela dica...

:)
NaPraia
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 88
Registrado em: Sex, 22 Fev 2008 8:24 am
Localização: Floripa - SC

desculpa, mas não entendi qual o problema que você está tendo.
uma coisa que reparei é que você faz várias vezes consulta na tabela dual e poderia fazer uma única vez e jogar em várias variáveis.
angelica
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qui, 29 Jan 2009 2:18 pm
Localização: SP

Trabalho em uma empresa que presta serviços www.retailsolutions.com.br
Vi a mensagem contando sua dificuldade em relação a replicação das informações ao Gemco e caso tenha interesse em nos contactar estamos a disposição.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes