Como deixar apenas uma linha por pedido no browse do Pedido de Compras

Olá pessoal…

Hoje vou mostrar um ponto de entrada para deixar apenas uma linha por pedido de compra no browse de cadastro.

O Pedido de Compras utiliza a tabela SC7, e ela é um cadastro chamado de Modelo 2, quando se tem Pai e Filho (Cabeçalho e Grid) na mesma tabela, diferente da Modelo 3 onde se tem duas tabelas (como a Pedido de Vendas, SC5 e SC6).

Por causa desse motivo, a cada linha incluída na SC7, é uma linha a mais no browse, e com o tempo podem ficar inúmeras linhas visíveis ao usuário.

2  Pedidos com 4 Itens, 4 linhas no browse

2 Pedidos com 4 Itens, 4 linhas no browse

Foi feito o ponto de entrada MT120QRY, onde é possível fazer uma filtragem do browse, nesse caso o que fiz foi, pegar o último item, e pegar seu recno, assim a lista inteira vai ser filtrada só com os últimos recnos.

2 pedidos, apenas 2 linhas no browse

2 pedidos, apenas 2 linhas no browse

Abaixo o código fonte desenvolvido.

#Include "Protheus.ch"

/*--------------------------------------------------------------------------------------------------------------*
 | P.E.:  MT120QRY                                                                                              |
 | Desc:  Filtro na tela do pedido de compra (mostrar apenas um item do pedido no mbrowse)                      |
 | Link:  http://tdn.totvs.com/pages/releaseview.action?pageId=6787737                                          |
 *--------------------------------------------------------------------------------------------------------------*/

User Function MT120QRY()
	Local cRet := ""
	Local cQry := ""

	//Selecionando os dados
	cQry := " SELECT " + CRLF
	cQry += " 	SC7.R_E_C_N_O_ " + CRLF
	cQry += " FROM " + CRLF
	cQry += " 	"+RetSQLName('SC7')+" SC7 " + CRLF
	cQry += " 	INNER JOIN ( " + CRLF
	cQry += " 		SELECT DISTINCT " + CRLF
	cQry += " 			SC7_PRIN.C7_NUM AS PEDIDO, " + CRLF
	cQry += " 			( " + CRLF
	cQry += " 				SELECT TOP 1 " + CRLF
	cQry += " 					SC7_ITE.C7_ITEM " + CRLF
	cQry += " 				FROM " + CRLF
	cQry += " 					"+RetSQLName('SC7')+" SC7_ITE " + CRLF
	cQry += " 				WHERE " + CRLF
	cQry += " 					SC7_ITE.C7_FILIAL = SC7_PRIN.C7_FILIAL " + CRLF
	cQry += " 					AND SC7_ITE.C7_NUM = SC7_PRIN.C7_NUM " + CRLF
	cQry += " 					AND SC7_ITE.D_E_L_E_T_ = ' ' " + CRLF
	cQry += " 				ORDER BY " + CRLF
	cQry += " 					SC7_ITE.C7_ITEM DESC " + CRLF
	cQry += " 			) AS ULT_ITEM " + CRLF
	cQry += " 		FROM " + CRLF
	cQry += " 			"+RetSQLName('SC7')+" SC7_PRIN " + CRLF
	cQry += " 		WHERE " + CRLF
	cQry += " 			SC7_PRIN.C7_FILIAL = '"+FWxFilial('SC7')+"' " + CRLF
	cQry += " 			AND SC7_PRIN.D_E_L_E_T_ = ' ' " + CRLF
	cQry += " 	) TAB_AUX ON ( " + CRLF
	cQry += " 		SC7.C7_NUM  = TAB_AUX.PEDIDO " + CRLF
	cQry += " 		AND SC7.C7_ITEM = TAB_AUX.ULT_ITEM " + CRLF
	cQry += " 	) " + CRLF
	cQry += " WHERE " + CRLF
	cQry += " 	SC7.C7_FILIAL = '"+FWxFilial('SC7')+"' " + CRLF
	cQry += " 	AND SC7.D_E_L_E_T_ = ' ' " + CRLF
	
	//Montando retorno do ponto de entrada
	cRet := " R_E_C_N_O_ IN ("+cQry+") "
Return cRet 

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

4 Responses

  1. Jose Aguiar disse:

    Legal gostei muito será que não vai ficar lento não?

  2. ciro bizelli disse:

    Como que faço isso em um FWMBrowse que posterior utiliza MVC com relacionamento de Pai-Filho de uma mesma tabela.

Deixe uma resposta