× Linguagem de Programação ADVPL

Perguntas Consulta Específica

Mais
11 anos 6 meses atrás #7828 por beandrielli
Bom Dia!

Eu estou tendo problemas para disponibilizar uma consulta específica para preenchimento de um campo...
Eu já vi alguns modelos com uma tabela só, mas o problema é que eu tenho que usar duas!
No caso, a SC2 e a SB1... Eu preciso que o usuário possa selecionar o código da ordem de produção da SC2, mas que ele possa ver o Nome do produto...
Ou seja, eu preciso que esteja visível o C2_NUM, C2_EMISSAO e B1_DESC...
Eu consegui adaptar o código abaixo pra exibir o que eu quero, porém ele não retorna o valor ao campo depois de selecionada a opção! =/
Na consulta específica do cfg está assim -> Expressão: U_CNSC2SB1() Retorno: U_RPRODCOD()

E o código:
#include "Protheus.ch"
#include "Topconn.ch"
 
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Consulta Especifica de Marcas - ZZY³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 
STATIC aCpoRet[1] := '0'

User Function CNSC2SB1()

	Local aHeader 
	Local bRet := .F.
 
	Private nPosProd   := aScan(aHeader, {|x| alltrim(x[2]) == "C2_NUM"})
	Private nPosMarca  := aScan(aHeader, {|x| alltrim(x[2]) == "B1_DESC"})
	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 C2_NUM, C2_PRODUTO, B1_DESC, C2_EMISSAO  "
	cQuery += " FROM "+RetSQLName("SC2") + " AS SC2 "
	cQuery += " INNER JOIN "+RetSQLName("SB1") + " AS SB1 ON SC2.C2_PRODUTO = SB1.B1_COD "
	cQuery += " AND SC2.D_E_L_E_T_= ' ' "    
	cQuery += " AND SB1.D_E_L_E_T_= ' ' "
	cQuery += " ORDER BY C2_NUM, B1_DESC "
	cAlias1:= CriaTrab(Nil,.F.)
	DbUseArea(.T.,"TOPCONN", TCGENQRY(,,cQuery),cAlias1, .F., .T.)
 
	(cAlias1)->(DbGoTop())
	If (cAlias1)->(Eof())
		Aviso( "Consulta de Ordem de Producao x Produto", "Não existe dados a consultar", {"Ok"} )
		Return .F.
	Endif
 
	Do While (cAlias1)->(!Eof())
 
		aAdd( aDadosZZY, { (cAlias1)->C2_NUM, (cAlias1)->C2_PRODUTO,(cAlias1)->B1_DESC, STOD((cAlias1)->C2_EMISSAO)} )
 
		(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 Ordem de Produção x Produto" From 0,0 To 280, 500 Of oMainWnd Pixel
 
	@ 5,5 LISTBOX oLstZZY ;
	VAR lVarMat ;
	Fields HEADER "Cod. O.P.", "Cod. Prod." ,"Descricao", "Data";
	SIZE 245,110 On DblClick ( ConfSC2(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]}}
 
	DEFINE SBUTTON FROM 122,5 TYPE 1 ACTION ConfSC2(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 aCpoRet[1]
 
Static Function ConfSC2(_nPos, aDadosZZY, _bRet)
 
	cCodigo := aDadosZZY[_nPos,1]
 
	//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     

USER FUNCTION RPRODCOD()
	 	
RETURN aCpoRet[1]

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 3 meses atrás #9636 por oliveira3220
Respondido por oliveira3220 no tópico Re: Consulta Específica
Boa Tarde Beatriz,

Conseguiu resolver esta situação? estou passando por algo parecido.

Obrigado

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 3 meses atrás #9637 por lalberto
Respondido por lalberto no tópico Re: Consulta Específica
Faça as alterações que estão em vermelho:

No Configurador altere

Na consulta específica do cfg está assim -> Expressão: U_CNSC2SB1() Retorno: SB1->B1_COD




#include "Protheus.ch"
#include "Topconn.ch"

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Consulta Especifica de Marcas - ZZY³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
STATIC aCpoRet[1] := '0'

User Function CNSC2SB1()

Local aHeader
Local bRet := .F.

Private nPosProd := aScan(aHeader, {|x| alltrim(x[2]) == "C2_NUM"})
Private nPosMarca := aScan(aHeader, {|x| alltrim(x[2]) == "B1_DESC"})
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 C2_NUM, C2_PRODUTO, B1_DESC, C2_EMISSAO "
cQuery += " FROM "+RetSQLName("SC2") + " AS SC2 "
cQuery += " INNER JOIN "+RetSQLName("SB1") + " AS SB1 ON SC2.C2_PRODUTO = SB1.B1_COD "
cQuery += " AND SC2.D_E_L_E_T_= ' ' "
cQuery += " AND SB1.D_E_L_E_T_= ' ' "
cQuery += " ORDER BY C2_NUM, B1_DESC "
cAlias1:= CriaTrab(Nil,.F.)
DbUseArea(.T.,"TOPCONN", TCGENQRY(,,cQuery),cAlias1, .F., .T.)

(cAlias1)->(DbGoTop())
If (cAlias1)->(Eof())
Aviso( "Consulta de Ordem de Producao x Produto", "Não existe dados a consultar", {"Ok"} )
Return .F.
Endif

Do While (cAlias1)->(!Eof())

aAdd( aDadosZZY, { (cAlias1)->C2_NUM, (cAlias1)->C2_PRODUTO,(cAlias1)->B1_DESC, STOD((cAlias1)->C2_EMISSAO)} )

(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 Ordem de Produção x Produto" From 0,0 To 280, 500 Of oMainWnd Pixel

@ 5,5 LISTBOX oLstZZY ;
VAR lVarMat ;
Fields HEADER "Cod. O.P.", "Cod. Prod." ,"Descricao", "Data";
SIZE 245,110 On DblClick ( ConfSC2(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]}}

DEFINE SBUTTON FROM 122,5 TYPE 1 ACTION ConfSC2(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 aCpoRet[1]

Static Function ConfSC2(_nPos, aDadosZZY, _bRet)

cCodigo := aDadosZZY[_nPos,1]

SB1->(dbSetOrder(1), dbSeek(xFilial("SB1")+cCodigo))


//aCols[n,nPosMarca] := cCodigo

_bRet := .T.

oDlgZZY:End()

Return

Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.118 segundos
Joomla templates by a4joomla