Pular para o conteúdo
  • Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 8 anos, 3 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #108325
    Avatar de Marco Antonio BorgesMarco Antonio Borges
    Participante

      Necessidade:
      Colocar nas colunas das tabelas valores de comissões com base no numero de parcelas.

      Exemplo:
      VALOR DA VENDA = R$ 2.673,00 * 55/100 = R$ 1.470,15 /*VALOR REAL DA VENDA */

      VALOR REAL DA VENDA = R$ 1.470,15 * 5,5% = R$ 80,86 /*COMISSAO */

      Se a pessoa pagou em NRO_PARCELAS >=2

      ENTÃO:

      NUMERO DE VEZES: V_NROPARCELAS

      MES ATUAL + nº de vezes ate completar
      ex.
      Nº DE VEZES = 3
      Janeiro 2016 =R$ 80,86
      Fevereiro 2016 =R$ 80,86
      Março 2016 =R$ 80,86

      TENHO QUE FAZER UM INSERT NA TABELA DE VENDAS QUE FIQUE, COMO O EXEMPLO ASSIM:

      NRO_PARCELAS | VALOR_TOTAL | VALOR_REAL | VL_COMISSAO | MES_1 | MES_2 | MES_3 ….
      3 2.673,00 1.470,15 80,86 80,86 80,86 80,86

      Qual seria a melhor abordagem para ele fazer um insert na tabela de vendas com meses a frente
      completando com o valor da comissão?

      #108326
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Colega, ** primeira coisa ** que eu TENHO que dizer é qaue essa modelagem que vc propõe, com MES_1, MES_2, MES_3, é Horrivelmente Inadequada para um RDBMS – entre outras coisas isso pode levar a necessidade de se ficar alterando estrutura/adicionando colunas quando qtdade de meses se alterar, pode levar à QUEBRA DE LINHAS em múltiplos blocos cfrme https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:53174778859588 lembra, E imho o pior de tudo : cfrme abudantemente documentado nos manuais de Concepts e de SQL, as recursos ** QUASE TODOS ** da linguagem SQL, os conceitos quase todos fundamentam filtragem de dados POR REGISTROS, e junção de múltiplas tabelas… A hora que vc começa colocar dados novos e independentes entre si num só registro, não só vc está Violando a normalização de dados mas também está Jogando Fora pela janela muitos dos built-ins do RDBMS que (insisto) visam a fazer JOIN e filtragens entre múltiplos registros de múltiplas tabelas, E NÃO a processar dados/extrair informação do mesmo registro…. Reveja isso plz….
        Isso posto, pra podermos entender o seu problema vc TEM que não só nos dar as estruturas das tabelas envolvidas MAS TAMBÈM precisa nos dar uma massinha de dados-exemplo refletindo a sua situação : por exemplo, quando uma venda a prazo é feita, Existem registros com os dados das prestações futuras ou não, vc quer “gerar” dados que não estão inseridos e que devem ser DEDUZIDOS a partir do que existe (o TOTAL e a QTDADE DE PARCELAS no caso) ??? SE for isso, ** provavelmente ** vc vai precisar usar alguma lógica de geração de dados, por exemplo o truque do connect by mostrado em https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:40476301944675 , ou fazer join com ula tabela que sempre tenha mais dados do que a qtdade de linhas a se gerar, como por exemplo a ALL_OBJECTS talvez – mas ** INSISTO **, para podermos te ajudar precisamos da sua Estrutura de dados, de alguns INSERTs que montem uma massa de dados apropriada E de uma expplicação das suas regras de negócio…. okdoc ?? Sem isso estaríamos CHUTANDO A ESMO aqui….

        []s

        Chiappa

        #108335
        Avatar de Marco Antonio BorgesMarco Antonio Borges
        Participante

          Opa!

          Tens razão meu caro, mas quando perguntei qual o melhor cenario tentei passar uma idéia de que nao tinha nada pronto ainda.
          Somente escrevi do que tinha em mente como iria aparecer no ambiente , entende.

          Exemplo de dados de uma tabela excel recebida do vendedor:

          Nome_Cliente Valor_Compra Pgto(x) Valor_Real_produto Valor Total Comissao
          ANTONIO 3570,00 6 1963,50 107,99
          CARLOS 3117,00 3 1714,35 94,29

          Obviamente, com tempo, criarei um modelo ER que mantenha critérios e regras que conhecemos.
          O que preciso no fim:

          > No caso do ANTONIO, ele pagou 3570,00 no produto
          > Para a empresa o valor do produto é: 1963,50.
          Logo
          > Ele efetuou a compra em 6 vezes, então para o vendedor, no fim das contas
          o valor da sua comissão, será 107,99 que, por regra de negocio, tem que ser diluida
          nos meses a frente da data da compra.

          Então seria 107,99 / 6 que daria em torno de 17,98 à receber em 6 parcelas a frente.

          Se comprou em JAN/2016 a comissão irá de FEV À JUL/2016.

          E a pergunta é:
          Qual a melhor abordagem, por experiencia que voces tem, poderiam me dar?

          #108336
          Avatar photoJosé Laurindo Chiappa
          Moderador

            Então : pra podermos indicar a abordagem programática, temos que codificar e NECESSARIAMENTE, antes de sair programando, vc TEM QUE TER DEFINIDAS as estruturas físicas, ok ?? Não tem como vc colocar a carroça na frente dos bois, PRIMEIRO vc modela e DEPOIS vc programa, sim sim sim ???? não é viável vc querer programar/codificar COISA NENHUMA antes de ter definida E criada a sua modelagem lógica e física….
            ASSUMINDO que vc vai ter uma modelagem Relacional adequada, Primeiro creio vc vai ter uma tabela de Prestações, com 1 registro para cada prestação… A Segunda coisa que eu tinha perguntado é a apresentação dos dados – ie, se temos os N pagamentos ou não, se só temos a qtdade de pagamentos e o valor total : baseado na Planilha que vc mostra, assumo que só temos o valor total e qtdade de pagamentos…

            Sendo isso que supus acima, a sua pergunta se torna : como fazer N inserts numa tabela, baseado na informação de qtdade de parcelas, sendo que só temos o Total ? É plenamente possível fazer em SQL mas (por comodidade) eu faria em PL/SQL mesmo… O pseudocódigo (PSEUDO, porque, INSISTO, sem estrutura física Não tem Como programar de verdade) seria :


            for i in 1..qtdade de parcelas loop
            insert into tabela de prestações (coluna nro do pagamento, valor) values(i, totaldopagamento/total de parcelas);
            end loop;
            ….

            Uma vez corretamente Preenchida a tabela de prestações, é ** Trivial ** vc abrir um cursor nela para fazer qualquer análise necessária, okdoc ???

            []s

            Chiappa

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress