Categorias

Consulta Padrão Personalizada

Este é um exemplo de consulta padrão personalizada.

#include "Protheus.ch"
#include "Topconn.ch"
 
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Consulta Especifica de Marcas - ZZY³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
User Function ConsZZY()
 
Local bRet := .F.
 
Private nPosProd   := aScan(aHeader, {|x| alltrim(x[2]) == "C1_PRODUTO"})
Private nPosMarca  := aScan(aHeader, {|x| alltrim(x[2]) == "C1_MARCA"})
Private cCodigo    := Alltrim(&(ReadVar()))
 
bRet := FiltraZZY()
 
Return(bRet)
 
Static Function FiltraZZY()
 
Local cQuery
Local oLstSB1 := nil
Private oDlgZZY := nil
Private _bRet := .F.
Private aDadosZZY := {}
 
//Query de marca x produto x referencia
cQuery := " SELECT ZZY_CODPRO, ZZY_ITEM, ZZY_CODMAR, ZZZ_DESC, ZZY_CODREF, ZZX_DESC "
cQuery += " FROM "+RetSQLName("ZZY") + " AS ZZY WITH (NOLOCK) "
cQuery += " INNER JOIN "+RetSQLName("ZZZ") + " AS ZZZ WITH (NOLOCK) ON ZZY.ZZY_CODMAR = ZZZ.ZZZ_COD "
cQuery += " INNER JOIN "+RetSQLName("ZZX") + " AS ZZX WITH (NOLOCK) ON ZZY.ZZY_CODREF = ZZX.ZZX_COD "
cQuery += " WHERE ZZY_FILIAL = '" + xFilial("ZZY") + "' AND ZZY_CODPRO = '" + aCols[n,nPosProd ] + "'"
cQuery += " AND ZZY.D_E_L_E_T_= ' ' "
cQuery += " ORDER BY ZZY_FILIAL, ZZY_CODPRO "
cAlias1:= CriaTrab(Nil,.F.)
DbUseArea(.T.,"TOPCONN", TCGENQRY(,,cQuery),cAlias1, .F., .T.)
 
(cAlias1)->(DbGoTop())
If (cAlias1)->(Eof())
Aviso( "Cadastro de Produtos x Marca X Referencia", "Não existe dados a consultar", {"Ok"} )
Return .F.
Endif
 
Do While (cAlias1)->(!Eof())
 
aAdd( aDadosZZY, { (cAlias1)->ZZY_CODPRO, (cAlias1)->ZZY_ITEM, (cAlias1)->ZZY_CODMAR, (cAlias1)->ZZZ_DESC, (cAlias1)->ZZY_CODREF, (cAlias1)->ZZX_DESC} )
 
(cAlias1)->(DbSkip())
 
Enddo
 
DbCloseArea(cAlias1)
 
nList := aScan(aDadosZZY, {|x| alltrim(x[3]) == alltrim(cCodigo)})
 
iif(nList = 0,nList := 1,nList)
 
//--Montagem da Tela
Define MsDialog oDlgZZY Title "Busca de Produtos x Marca X Referencia" From 0,0 To 280, 500 Of oMainWnd Pixel
 
@ 5,5 LISTBOX oLstZZY ;
VAR lVarMat ;
Fields HEADER "Cod. Produto", "Item", "Cod. Marca", "Desc. Marca", "Cod. Ref.", "Desc. Ref" ;
SIZE 245,110 On DblClick ( ConfZZY(oLstZZY:nAt, @aDadosZZY, @_bRet) ) ;
OF oDlgZZY PIXEL
 
oLstZZY:SetArray(aDadosZZY)
oLstZZY:nAt := nList
oLstZZY:bLine := { || {aDadosZZY[oLstZZY:nAt,1], aDadosZZY[oLstZZY:nAt,2], aDadosZZY[oLstZZY:nAt,3], aDadosZZY[oLstZZY:nAt,4], aDadosZZY[oLstZZY:nAt,5], aDadosZZY[oLstZZY:nAt,6]}}
 
DEFINE SBUTTON FROM 122,5 TYPE 1 ACTION ConfZZY(oLstZZY:nAt, @aDadosZZY, @_bRet) ENABLE OF oDlgZZY
DEFINE SBUTTON FROM 122,40 TYPE 2 ACTION oDlgZZY:End() ENABLE OF oDlgZZY
 
Activate MSDialog oDlgZZY Centered
 
Return _bRet
 
Static Function ConfZZY(_nPos, aDadosZZY, _bRet)
 
cCodigo := aDadosZZY[_nPos,3]
 
aCols[n,nPosMarca] := cCodigo
 
aCpoRet[1] := cCodigo    //Não esquecer de alimentar essa variável quando for f3 pois ela e o retorno e se estiver com valor diferente complica.
 
_bRet := .T.
 
oDlgZZY:End()
 
Return