Sabia que é possível listar todos os itens de uma nota fiscal de entrada na rotina de Transferência entre Filiais (MATA310) ? Para isso, é necessário utilizar o Ponto de Entrada M310FILTRO(), ele permite que você complemente a query incluindo o filtro necessário para listar as informações que desejar. Sintaxe:
User Function M310FILTRO() Return(cRetorno)Para começar, vá no Configurador do Protheus, menu Banco de Dados, Dicionário e Base de dados. Na rotina Base de dados, no lado esquerdo, selecione o menu "Perguntas", agora pesquise pela pergunta MTA310, por padrão existem apenas 25 perguntas, para este exemplo acrescente 4 novas perguntas, vale lembrar que no fonte padrão MATA310 foi limitado em apenas 30 perguntas. Agora vamos criar as 4 perguntas:
Ordem | Pergunta | Tipo | Tamanho | Decimal | Parametro |
26 | Documento de Entrada ? | C | 9 | 0 | MV_PAR26 |
27 | Serie ? | C | 3 | 0 | MV_PAR27 |
28 | Numero Conhecimento ? | C | 17 | 0 | MV_PAR28 |
29 | Filial de Origem ? | C | 2 | 0 | V_PAR29 |
#Include 'Protheus.ch' #Include 'TopConn.ch' User Function M310FILTRO() Local cNF := MV_PAR26 Local cSerie := MV_PAR27 Local cConhecimento := MV_PAR28 Local cFilOrigem := MV_PAR29 Local lOK := .F. Local cConsulta := cOnde := cRetorno := cProdutos := "" /* +-----------------------------------------------------+ !Variaveis utilizadas para parametros (MTA310) ! +----------+------------------------------------------+ !MV_PAR24 ! Informa produtos manualmente ! !MV_PAR26 ! Documento de entrada da filial origem ! !MV_PAR27 ! Serie do documento de entrada ! !MV_PAR28 ! No. do conhecimento da filial origem ! !MV_PAR29 ! Filial de origem, usado para localizar ! ! ! os itens da NF ! ! ! ! +----------+------------------------------------------+ */ if MV_PAR24==2 .AND. !Empty(cFilOrigem) //filtrar por NF, Serie e Conhecimento if !Empty(cNF) .AND. !Empty(cSerie) .AND. !Empty(cConhecimento) cOnde += " AND D1_DOC = '" + cNF +"' " cOnde += " AND D1_SERIE = '" + cSerie +"' " cOnde += " AND D1_CONHEC = '" + cConhecimento +"' " lOK:= .T. //filtrar por NF e Serie ElseIf !Empty(cNF) .AND. !Empty(cSerie) .AND. Empty(cConhecimento) cOnde += " AND D1_DOC = '" + cNF +"' " cOnde += " AND D1_SERIE = '" + cSerie +"' " lOK:= .T. //filtrar só por Conhecimento Elseif Empty(cNF) .AND. Empty(cSerie) .AND. !Empty(cConhecimento) cOnde += " AND D1_CONHEC = '" + cConhecimento +"' " lOK:= .T. Endif If lOK cConsulta := " SELECT D1_COD FROM SD1010 " cConsulta += " WHERE D_E_L_E_T_= '' " cConsulta += " AND D1_FILIAL = '" + Alltrim(cFilOrigem) +"' " cConsulta += cOnde cConsulta += " ORDER BY D1_COD" If ( SELECT("QRYTMP") ) > 0 dbSelectArea("QRYTMP") QRYTMP->(dbCloseArea()) EndIf TcQuery cConsulta New Alias "QRYTMP" QRYTMP->(DbGoTop()) While QRYTMP->(!Eof()) cProdutos += QRYTMP->D1_COD + "," QRYTMP->(DbSkip()) EndDo cProdutos := Substr(cProdutos,1,len(cProdutos)-1) cRetorno := " SB1.B1_COD IN " + FormatIn(cProdutos,",") + " " Endif Endif Return(cRetorno)Compile seu ponto de entrada, e ao executar a rotina MATA310, as perguntas serão exibidas, informe Não para a pergunta "Abre tela da nota de Entrada?" para que não seja exibido a tela de inclusão manual de produtos, preencha as novas perguntas conforme a sua necessidade e confirme a tela. A rotina irá filtrar e exibir todos os produtos sem precisar informá-los manualmente. Lembre-se que se qualquer informação das perguntas novas estiverem preenchidas, lembre-se de colocar nas perguntas "De produto ?" com vazio e "Até produto? " preencha com a letra Z.