Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Atualização de vendas diárias


Mateus Furrier

Pergunta

Bom dia Pessoal.

Tenho uma procedure aqui que roda diariamente para inserir as vendas diárias, com as informações de NF, data de emissão, PIS, COfins, Valor da NF e etc etc etc.

O desenvolvedor deste código não trabalha mais na empresa e hoje, o procedure demora muito para finalizar pois, ele apaga o mês corrente na tabela e insere novamente com todas as vendas do mês mais o dia atual.

O que eu queria fazer é o seguinte...que o procedure apenas inserisse o dia da venda anterior, mas não corresse o risco de duplicar as linhas.

Abaixo segue a linha que apaga o mês anterior:

--deleta o mes correte
delete from user_vendapura
where cast(SUBSTRING(user_vendapura.DATAEMISSAO,4,2) as int) = cast(MONTH(GETDATE()-1) as varchar(10)) and
      cast(SUBSTRING(user_vendapura.DATAEMISSAO,7,4) as int) = cast(year(GETDATE()-1) as varchar(10))
e Abaixo, onde seleciono apenas os itens do mês corrente:
--seleciona somente as notas fiscais autorizadas e do mes corrente para fazer parte do insert do select                    
(SELECT COUNT(*)
 FROM FISCALDOCJOUR_BR, EFDOCUMENT_BR 
 WHERE FISCALDOCJOUR_BR.INVENTSITEID = SALESTABLE.INVENTSITEID AND 
       FISCALDOCJOUR_BR.DATAAREAID = SALESLINE.DATAAREAID and 
       EFDOCUMENT_BR.RETURNCODEDESCRIPTION LIKE('%100%') AND
       EFDOCUMENT_BR.ProtocolNumber <> '' AND
       FISCALDOCJOUR_BR.TRANSREFID = SALESTABLE.SALESID AND
       MONTH(EFDOCUMENT_BR.DATE) = MONTH(GETDATE()-1) AND
       YEAR(EFDOCUMENT_BR.DATE) = YEAR(GETDATE()-1) AND
       EFDOCUMENT_BR.INVENTSITEID  = FISCALDOCJOUR_BR.INVENTSITEID AND
       EFDOCUMENT_BR.REFRECID = FISCALDOCJOUR_BR.RECID)     > 0

Alguém pode me dar um help ??

Abraços

Editado por Mateus Furrier
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Mateus,

Para melhorar a performance, o interessante seria apenas inserir as novas vendas, ajuntando os dois scripts. Ai ficaria um select pegando todas as vendas, excluindo as vendas que já esteja inserido na tabela. Desta forma você pegará apenas as vendas que realmente deverá inserir, não precisando deletar / inserir registros já existentes.

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde Mateus,

Para melhorar a performance, o interessante seria apenas inserir as novas vendas, ajuntando os dois scripts. Ai ficaria um select pegando todas as vendas, excluindo as vendas que já esteja inserido na tabela. Desta forma você pegará apenas as vendas que realmente deverá inserir, não precisando deletar / inserir registros já existentes.

Fulvio, boa tarde.

Mas aí eu teria que colocar no "where" correto ?

E você tem alguma idéia de como posso fazer essa comparação ?

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Mateus,

Não sei ao certo a estrutura das tabelas, mas ficaria mais ou menos assim:

-- fazendo o insert
(SELECT COUNT(*)
FROM FISCALDOCJOUR_BR, EFDOCUMENT_BR
WHERE FISCALDOCJOUR_BR.INVENTSITEID = SALESTABLE.INVENTSITEID AND
       FISCALDOCJOUR_BR.DATAAREAID = SALESLINE.DATAAREAID and
       EFDOCUMENT_BR.RETURNCODEDESCRIPTION LIKE('%100%') AND
       EFDOCUMENT_BR.ProtocolNumber <> '' AND
       FISCALDOCJOUR_BR.TRANSREFID = SALESTABLE.SALESID AND
       MONTH(EFDOCUMENT_BR.DATE) = MONTH(GETDATE()-1) AND
       YEAR(EFDOCUMENT_BR.DATE) = YEAR(GETDATE()-1) AND
       EFDOCUMENT_BR.INVENTSITEID  = FISCALDOCJOUR_BR.INVENTSITEID AND
       EFDOCUMENT_BR.REFRECID = FISCALDOCJOUR_BR.RECID)     > 0
       AND notafiscal NOT IN (SELECT das notas fiscais que já existem)

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde Mateus,

Não sei ao certo a estrutura das tabelas, mas ficaria mais ou menos assim:

-- fazendo o insert
(SELECT COUNT(*)
FROM FISCALDOCJOUR_BR, EFDOCUMENT_BR
WHERE FISCALDOCJOUR_BR.INVENTSITEID = SALESTABLE.INVENTSITEID AND
       FISCALDOCJOUR_BR.DATAAREAID = SALESLINE.DATAAREAID and
       EFDOCUMENT_BR.RETURNCODEDESCRIPTION LIKE('%100%') AND
       EFDOCUMENT_BR.ProtocolNumber <> '' AND
       FISCALDOCJOUR_BR.TRANSREFID = SALESTABLE.SALESID AND
       MONTH(EFDOCUMENT_BR.DATE) = MONTH(GETDATE()-1) AND
       YEAR(EFDOCUMENT_BR.DATE) = YEAR(GETDATE()-1) AND
       EFDOCUMENT_BR.INVENTSITEID  = FISCALDOCJOUR_BR.INVENTSITEID AND
       EFDOCUMENT_BR.REFRECID = FISCALDOCJOUR_BR.RECID)     > 0
       AND notafiscal NOT IN (SELECT das notas fiscais que já existem)

Valeu pela força.

Consegui colocar a sentença, porém, hoje o pessoal me explicou o porque de excluir o mês todo e depois inserir novamente.

Pode acontecer de surgirem NF's canceladas e estas devem ser retiradas na data de seu faturamento, que está dentro do mês sempre.

Agora preciso pensar noutra alternativa para tornar mais rápido estas execuções.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Mateus,

O certo seria então retirar as NF´s canceladas. O mais fácil é sempre contar o menor grupo.... Se você tem 100 pessoas e apenas 2 opções (sim ou não): você nota que tem mais pessoas levantando a mão para o SIM. O mais fácil é perguntar quem é NÃO e contar... rs.

Da mesma forma são as NF´s. Se o conjunto todo são NF´s que irão permanecer, é melhor manipular as possíveis exclusões.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...