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

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.

About Dan_Atilio

Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor do projeto Terminal de Informação, onde são postados tutoriais e notícias envolvendo o mundo da tecnologia.

2 comentários em “Como deixar apenas uma linha por pedido no browse do Pedido de Compras

    1. Bom dia José, tudo bem?
      Nos testes que realizei não ficou lento, mas faça um teste em uma base de testes com um número elevado de pedidos, e avise se deu certo.
      Um grande abraço.

Deixe uma resposta

%d blogueiros gostam disto: