PE M310FILTRO - Transferência entre Filiais (MATA310)


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. Pergunta MTA310 Configurador 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. Pergunta MTA310 Configurador 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
Fonte completo:
#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. Pergunta MTA310 Configurador 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.