- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Consulta Específica
×
Linguagem de Programação ADVPL
Perguntas Consulta Específica
- beandrielli
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 3
- Obrigados Recebidos: 0
12 anos 1 semana atrás #7828
por beandrielli
Consulta Específica foi criado 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:
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.
- oliveira3220
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 7
- Obrigados Recebidos: 0
11 anos 10 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
Conseguiu resolver esta situação? estou passando por algo parecido.
Obrigado
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
11 anos 10 meses atrás #9637
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
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
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.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Consulta Específica
Tempo para a criação da página:0.112 segundos