Imprimi Página | Fechar janela

Ponto de entrada MT103FIM

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=42466
Data da Impressão: domingo, 16 de junho de 2019 at 22:34


Topico: Ponto de entrada MT103FIM

Postado por: GUDEFENDI
Assunto: Ponto de entrada MT103FIM
Data Postagem: quinta-feira, 10 de janeiro de 2019 at 07:40

Bom dia,

Tenho o ponto de entrada abaixo (MT103FIM) que pega o lote do fornecedor e a data de fabricação que são inseridos na SD1 no momento da digitação do documento de entrada e os grava na SD7 em dois campos personalizados.

Só que se a nota que esta sendo digitada tiver mais de 1 item, ele grava todos os itens na SD7 com o lote e a data do ultimo item da nota digitada.

Alguém consegue me ajudar como corrigir isso?

-------------------------------------------------------------------------
#INCLUDE "RWMAKE.CH"
#INCLUDE "TOPCONN.CH"
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"

User Function MT103FIM()
Local nOpcao := PARAMIXB[1]   // Opção Escolhida pelo usuario no aRotina
Local nConfirma := PARAMIXB[2]   // Se o usuario confirmou a operação de gravação da NFECODIGO DE APLICAÇÃO DO USUARIO.....
Local cAliasTmp := GetNextAlias()
Local xnRecno := 0

//IF nOpcao = 3 .AND. nConfirma = 1
cCodEmp := FWCodEmp()
IF cCodEmp == "01"


     cQuery := "SELECT * FROM "+RetSqlName("SD1")+" D1 "
     cQuery += "WHERE D1.D_E_L_E_T_ = ‘ ‘ AND D1.D1_FILIAL = ‘"+XFILIAL("SD1")+"‘ "
     cQuery += "AND D1.D1_DOC = ‘"+SF1->F1_DOC+"‘ AND D1.D1_SERIE = ‘"+SF1->F1_SERIE+"‘AND D1.D1_FORNECE = ‘"+SF1->F1_FORNECE+"‘ AND D1.D1_LOJA = ‘"+SF1->F1_LOJA+"‘ "
     dbUseArea(.T., ‘TOPCONN‘, TCGenQry(,,cQuery),‘TSD1‘, .F., .T.)
     cQuery := ChangeQuery(cQuery)

          WHILE TSD1->(!EOF())
          
          cQuery := "SELECT D7.R_E_C_N_O_ AS REC FROM "+RetSqlName("SD7")+" D7 "
          cQuery += "WHERE D7.D_E_L_E_T_ = ‘ ‘ AND D7.D7_FILIAL = ‘"+XFILIAL("SD7")+"‘ "
          cQuery += "AND D7.D7_DOC = ‘"+TSD1->D1_DOC+"‘ AND D7.D7_SERIE = ‘"+TSD1->D1_SERIE+"‘AND D7.D7_FORNECE = ‘"+TSD1->D1_FORNECE+"‘ AND D7.D7_LOJA = ‘"+TSD1->D1_LOJA+"‘ "
          dbUseArea(.T., ‘TOPCONN‘, TCGenQry(,,cQuery),‘TSD7‘, .F., .T.)
          cQuery := ChangeQuery(cQuery)
     
          WHILE TSD7->(!EOF())
               SD7->(DBCLOSEAREA())
               SD7->(DBSETORDER(1))
               SD7->(DBGOTO(TSD7->REC))
               RECLOCK("SD7",.F.)
               SD7->D7_ZLOTEFO := TSD1->D1_LOTEFOR
               SD7->D7_ZDTFABR := STOD(TSD1->D1_DFABRIC)
               MSUNLOCK()
               TSD7->(DBSKIP())
          ENDDO
          TSD7->(DBCLOSEAREA())
          TSD1->(DBSKIP())
          TSD1->(DBCLOSEAREA())
     ENDDO
     TSD1->(DBCLOSEAREA())
//ENDIF
ENDIF

RETURN()


Respostas:

Postado Por: CRIS.POLLI
Data Postagem: quinta-feira, 10 de janeiro de 2019 at 08:30

Bom dia,
Sugiro você unir as duas querys caso a relação seja um para um, da uma olhada no campo D7_CHAVE, na minha base não achei o campo que se refere ao item D1_ITEM
Tem o campo D1_PRODUTO.
No select procure colocar somente os campos que serão utilizados, isto diminui o tamanho do retorno.



Postado Por: JUNIORPLAC
Data Postagem: quinta-feira, 10 de janeiro de 2019 at 15:13

Você é analista, consultor, trabalha com Protheus, Sistemas de informação? Se SIM! Se inscreva neste canal, conteúdo bom e de GRAÇAAAAAAAAAAAAA!

Canal Protheus e SQL - Conteúdo GRATUITO



Postado Por: JUNIORPLAC
Data Postagem: quinta-feira, 10 de janeiro de 2019 at 15:13

Você é analista, consultor, trabalha com Protheus, Sistemas de informação? Se SIM! Se inscreva neste canal, conteúdo bom e de GRAÇAAAAAAAAAAAAA!

Canal Protheus e SQL - Conteúdo GRATUITO




Imprimir Página | Fechar Janela