- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Consulta Padrão Especifica, Retorno de Informação para a Tela
×
Linguagem de Programação ADVPL
Perguntas Consulta Padrão Especifica, Retorno de Informação para a Tela
- matera
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 3
- Obrigados Recebidos: 0
9 anos 5 meses atrás #28315
por matera
Boa Noite Pessoal.
Estou com um problema com o retorno da informação para a tela.
Ela pesquisa o codigo, armazena na variavel _cod, faço a busca pela SB1 e encontro, porém mesmo setando para retornar o valor, quando o oDLG fecha o campo do codigo do produto fica sem preencher. Não sei para onde correr mais..
Na Pesquisa padrão o retorno esta setado para ser SB1->SB1_COD.
A pesquisa padrão foi modificada para o campo SD3->SD3_COD (Movimentos Internos Modelo II).
Segue o programa abaixo:
#Include "PROTHEUS.CH"
#INCLUDE "TOPCONN.CH"
//
/*/{Protheus.doc} TECP008
Description
@param xParam Parameter Description
@return xRet Return Description
@author -
@since 26/05/2015
/*/
//
User Function TECP008()
Local oButton1
Local oButton2
Local oButton3
Local oFont1 := TFont():New("MS Sans Serif",,022,,.T.,,,,,.F.,.F.)
Local oSay1
Local oSay2
Static oDlg
Static _COD := Space(Len(SB1->B1_COD))
Private oComboBo1
Private oComboBo2
nComboBo1 := SPACE(10)
aComboBo1 :={}
nComboBo2 := SPACE(10)
aComboBo2 :={}
//Pesquisa Grupo
cquery := " Select BM_DESC FROM " +RetSQLName("SBM")"
cquery += " WHERE bm_grupo>='0301' and bm_grupo<='0399' AND D_E_L_E_T_ = ' ' "
cquery += " order by bm_desc"
cQuery := ChangeQuery(cQuery)
TCQUERY cQuery NEW ALIAS "ARY1"
//Pesquisa Espessura
cquery := " Select Z1_ESPESS FROM " +RetSQLName("SZ1")"
cquery += " WHERE D_E_L_E_T_ = ' ' "
cquery += " order by Z1_ESPESS"
cQuery := ChangeQuery(cQuery)
TCQUERY cQuery NEW ALIAS "TMP"
DEFINE MSDIALOG oDlg TITLE "Pesquisa de Materiais" FROM 000, 000 TO 520, 1000 COLORS 0, 16777215 PIXEL
@ 007, 011 SAY oSay1 PROMPT "Grupo" SIZE 031, 013 OF oDlg FONT oFont1 COLORS 0, 16777215 PIXEL
@ 007, 182 SAY oSay2 PROMPT "Espessura" SIZE 053, 013 OF oDlg FONT oFont1 COLORS 0, 16777215 PIXEL
@ 008, 044 MSCOMBOBOX oComboBo1 VAR nComboBo1 ITEMS aComboBo1 SIZE 120, 010 OF oDlg COLORS 0, 16777215 PIXEL
@ 008, 236 MSCOMBOBOX oComboBo2 VAR nComboBo2 ITEMS aComboBo2 SIZE 082, 010 OF oDlg COLORS 0, 16777215 PIXEL
TECP008_A()
TECP008_B()
fMSNewGe1()
@ 006, 440 BUTTON oButton3 PROMPT "Pesquisar" SIZE 038, 012 OF oDlg ACTION (TECP008_C()) PIXEL
@ 237, 440 BUTTON oButton1 PROMPT "Selecionar" SIZE 038, 012 OF oDlg ACTION (TECP008_D(),oDlg:End()) PIXEL
@ 237, 390 BUTTON oButton2 PROMPT "Cancelar" SIZE 038, 012 OF oDlg ACTION (oDlg:End()) PIXEL
ACTIVATE MSDIALOG oDlg CENTERED
Return
Static Function TECP008_A()//PREENCHE A ARRAY DA ESPESSURA
dbSelectArea("TMP")
dbgotop()
DO WHILE !EOF()
AADD(aCombobo2 , TMP->Z1_ESPESS )
nCombobo2 := IIF(EMPTY(nCombobo2) , (TMP->Z1_ESPESS) , nCombobo2 )
ObjectMethod(oComboBo2,"SetItems(aComboBo2)")
dbSkip()
ENDDO
TMP->(dbclosearea())
Return
Static Function TECP008_B()//PREENCHE A ARRAY DO GRUPO
dbSelectArea("ARY1")
dbgotop()
DO WHILE !EOF()
AADD(aCombobo1 , ARY1->BM_DESC )
nCombobo1 := IIF(EMPTY(nCombobo1) , (ARY1->BM_DESC) , nCombobo1 )
ObjectMethod(oComboBo1,"SetItems(aComboBo1)")
dbSkip()
ENDDO
ARY1->(dbclosearea())
Return
Static Function TECP008_C()//SELECT FEITO COM OS DADOS PROVENIENTES DOS ARRAYS
//Limpa o aCols para caso de selecao de outros pedidos.
aColsEx := {}
oMSNewGe1:Refresh()
//Seleciona os Codigos do Produtos da pesquisa.
_codespess := POSICIONE("SZ1",3,xFilial("SZ1")+nComboBo2,"Z1_CODIGO")
_codgrupo := POSICIONE("SBM",2,xFilial("SBM")+nComboBo1,"BM_GRUPO")
cquery := " Select a.b1_cod,a.b1_desc,d.b8_lotectl,d.b8_saldo2,a.b1_segum,d.b8_saldo,a.B1_UM,d.b8_local FROM " +RetSQLName("SB1")+ " a inner join " +RetSQLName("SBM")
cquery += " b on a.b1_grupo=b.bm_grupo inner join " +RetSQLName("SZ1")+ " c on a.b1_uesp=c.z1_codigo inner join " +RetSQLName("SB8")+ " d on d.b8_produto=a.b1_cod "
cquery += " WHERE b.bm_grupo= "+_codgrupo+" and c.z1_codigo= "+_codespess+ " and a.D_E_L_E_T_=' ' and d.D_E_L_E_T_=' ' and (d.b8_saldo2>0 or d.b8_saldo>0) order by a.b1_cod "
cQuery := ChangeQuery(cQuery)
TCQUERY cQuery NEW ALIAS "PROD"
DbSelectArea("PROD")
While !EOF()
Aadd(aColsEx, {B1_COD,B1_DESC,B8_LOTECTL,B8_SALDO2,B1_SEGUM,B8_SALDO,B1_UM,B8_LOCAL,.F.} )
dbskip()
Enddo
oMSNewGe1:aCols := aColsEx
oMSNewGe1:Refresh()
PROD->(dbclosearea())
Return
Static Function TECP008_D()
_COD := oMSNewGe1:acols[oMSNewGe1:nAt][1] // AQUI ELE ENCONTRA A INFORMACAO, ARMAZENA E FICA OK.
SB1->(dbSetOrder(1), dbSeek(xFilial("SB1")+_cod)) //PROCURAR O CAMPO E POSICIONAR.
Return(.T.)
//
Static Function fMSNewGe1()
//
Local nX
Local aHeaderEx := {}
Local aColsEx := {}
Local aFieldFill := {}
Local aFields := {"B1_COD","B1_DESC","B8_LOTECTL","B8_SALDO2","B1_SEGUM","B8_SALDO","B1_UM","B8_LOCAL"}
Local aAlterFields := {}
Static oMSNewGe1
// Define field properties
DbSelectArea("SX3")
SX3->(DbSetOrder(2))
For nX := 1 to Len(aFields)
If SX3->(DbSeek(aFields[nX]))
If Alltrim(SX3->X3_CAMPO) = "B1_DESC"
Aadd(aHeaderEx, {AllTrim(X3Titulo()),SX3->X3_CAMPO,SX3->X3_PICTURE,60,SX3->X3_DECIMAL,SX3->X3_VALID,;
SX3->X3_USADO,SX3->X3_TIPO,SX3->X3_F3,SX3->X3_CONTEXT,SX3->X3_CBOX,SX3->X3_RELACAO})
ELSE
Aadd(aHeaderEx, {AllTrim(X3Titulo()),SX3->X3_CAMPO,SX3->X3_PICTURE,SX3->X3_TAMANHO,SX3->X3_DECIMAL,SX3->X3_VALID,;
SX3->X3_USADO,SX3->X3_TIPO,SX3->X3_F3,SX3->X3_CONTEXT,SX3->X3_CBOX,SX3->X3_RELACAO})
Endif
Endif
Next nX
oMSNewGe1 := MsNewGetDados():New( 022, 010, 225, 485, GD_UPDATE, "AllwaysTrue", "AllwaysTrue", "+Field1+Field2", aAlterFields,, 999, "AllwaysTrue", "", "AllwaysTrue", oDlg, aHeaderEx, aColsEx)
Return
Estou com um problema com o retorno da informação para a tela.
Ela pesquisa o codigo, armazena na variavel _cod, faço a busca pela SB1 e encontro, porém mesmo setando para retornar o valor, quando o oDLG fecha o campo do codigo do produto fica sem preencher. Não sei para onde correr mais..
Na Pesquisa padrão o retorno esta setado para ser SB1->SB1_COD.
A pesquisa padrão foi modificada para o campo SD3->SD3_COD (Movimentos Internos Modelo II).
Segue o programa abaixo:
#Include "PROTHEUS.CH"
#INCLUDE "TOPCONN.CH"
//
/*/{Protheus.doc} TECP008
Description
@param xParam Parameter Description
@return xRet Return Description
@author -
@since 26/05/2015
/*/
//
User Function TECP008()
Local oButton1
Local oButton2
Local oButton3
Local oFont1 := TFont():New("MS Sans Serif",,022,,.T.,,,,,.F.,.F.)
Local oSay1
Local oSay2
Static oDlg
Static _COD := Space(Len(SB1->B1_COD))
Private oComboBo1
Private oComboBo2
nComboBo1 := SPACE(10)
aComboBo1 :={}
nComboBo2 := SPACE(10)
aComboBo2 :={}
//Pesquisa Grupo
cquery := " Select BM_DESC FROM " +RetSQLName("SBM")"
cquery += " WHERE bm_grupo>='0301' and bm_grupo<='0399' AND D_E_L_E_T_ = ' ' "
cquery += " order by bm_desc"
cQuery := ChangeQuery(cQuery)
TCQUERY cQuery NEW ALIAS "ARY1"
//Pesquisa Espessura
cquery := " Select Z1_ESPESS FROM " +RetSQLName("SZ1")"
cquery += " WHERE D_E_L_E_T_ = ' ' "
cquery += " order by Z1_ESPESS"
cQuery := ChangeQuery(cQuery)
TCQUERY cQuery NEW ALIAS "TMP"
DEFINE MSDIALOG oDlg TITLE "Pesquisa de Materiais" FROM 000, 000 TO 520, 1000 COLORS 0, 16777215 PIXEL
@ 007, 011 SAY oSay1 PROMPT "Grupo" SIZE 031, 013 OF oDlg FONT oFont1 COLORS 0, 16777215 PIXEL
@ 007, 182 SAY oSay2 PROMPT "Espessura" SIZE 053, 013 OF oDlg FONT oFont1 COLORS 0, 16777215 PIXEL
@ 008, 044 MSCOMBOBOX oComboBo1 VAR nComboBo1 ITEMS aComboBo1 SIZE 120, 010 OF oDlg COLORS 0, 16777215 PIXEL
@ 008, 236 MSCOMBOBOX oComboBo2 VAR nComboBo2 ITEMS aComboBo2 SIZE 082, 010 OF oDlg COLORS 0, 16777215 PIXEL
TECP008_A()
TECP008_B()
fMSNewGe1()
@ 006, 440 BUTTON oButton3 PROMPT "Pesquisar" SIZE 038, 012 OF oDlg ACTION (TECP008_C()) PIXEL
@ 237, 440 BUTTON oButton1 PROMPT "Selecionar" SIZE 038, 012 OF oDlg ACTION (TECP008_D(),oDlg:End()) PIXEL
@ 237, 390 BUTTON oButton2 PROMPT "Cancelar" SIZE 038, 012 OF oDlg ACTION (oDlg:End()) PIXEL
ACTIVATE MSDIALOG oDlg CENTERED
Return
Static Function TECP008_A()//PREENCHE A ARRAY DA ESPESSURA
dbSelectArea("TMP")
dbgotop()
DO WHILE !EOF()
AADD(aCombobo2 , TMP->Z1_ESPESS )
nCombobo2 := IIF(EMPTY(nCombobo2) , (TMP->Z1_ESPESS) , nCombobo2 )
ObjectMethod(oComboBo2,"SetItems(aComboBo2)")
dbSkip()
ENDDO
TMP->(dbclosearea())
Return
Static Function TECP008_B()//PREENCHE A ARRAY DO GRUPO
dbSelectArea("ARY1")
dbgotop()
DO WHILE !EOF()
AADD(aCombobo1 , ARY1->BM_DESC )
nCombobo1 := IIF(EMPTY(nCombobo1) , (ARY1->BM_DESC) , nCombobo1 )
ObjectMethod(oComboBo1,"SetItems(aComboBo1)")
dbSkip()
ENDDO
ARY1->(dbclosearea())
Return
Static Function TECP008_C()//SELECT FEITO COM OS DADOS PROVENIENTES DOS ARRAYS
//Limpa o aCols para caso de selecao de outros pedidos.
aColsEx := {}
oMSNewGe1:Refresh()
//Seleciona os Codigos do Produtos da pesquisa.
_codespess := POSICIONE("SZ1",3,xFilial("SZ1")+nComboBo2,"Z1_CODIGO")
_codgrupo := POSICIONE("SBM",2,xFilial("SBM")+nComboBo1,"BM_GRUPO")
cquery := " Select a.b1_cod,a.b1_desc,d.b8_lotectl,d.b8_saldo2,a.b1_segum,d.b8_saldo,a.B1_UM,d.b8_local FROM " +RetSQLName("SB1")+ " a inner join " +RetSQLName("SBM")
cquery += " b on a.b1_grupo=b.bm_grupo inner join " +RetSQLName("SZ1")+ " c on a.b1_uesp=c.z1_codigo inner join " +RetSQLName("SB8")+ " d on d.b8_produto=a.b1_cod "
cquery += " WHERE b.bm_grupo= "+_codgrupo+" and c.z1_codigo= "+_codespess+ " and a.D_E_L_E_T_=' ' and d.D_E_L_E_T_=' ' and (d.b8_saldo2>0 or d.b8_saldo>0) order by a.b1_cod "
cQuery := ChangeQuery(cQuery)
TCQUERY cQuery NEW ALIAS "PROD"
DbSelectArea("PROD")
While !EOF()
Aadd(aColsEx, {B1_COD,B1_DESC,B8_LOTECTL,B8_SALDO2,B1_SEGUM,B8_SALDO,B1_UM,B8_LOCAL,.F.} )
dbskip()
Enddo
oMSNewGe1:aCols := aColsEx
oMSNewGe1:Refresh()
PROD->(dbclosearea())
Return
Static Function TECP008_D()
_COD := oMSNewGe1:acols[oMSNewGe1:nAt][1] // AQUI ELE ENCONTRA A INFORMACAO, ARMAZENA E FICA OK.
SB1->(dbSetOrder(1), dbSeek(xFilial("SB1")+_cod)) //PROCURAR O CAMPO E POSICIONAR.
Return(.T.)
//
Static Function fMSNewGe1()
//
Local nX
Local aHeaderEx := {}
Local aColsEx := {}
Local aFieldFill := {}
Local aFields := {"B1_COD","B1_DESC","B8_LOTECTL","B8_SALDO2","B1_SEGUM","B8_SALDO","B1_UM","B8_LOCAL"}
Local aAlterFields := {}
Static oMSNewGe1
// Define field properties
DbSelectArea("SX3")
SX3->(DbSetOrder(2))
For nX := 1 to Len(aFields)
If SX3->(DbSeek(aFields[nX]))
If Alltrim(SX3->X3_CAMPO) = "B1_DESC"
Aadd(aHeaderEx, {AllTrim(X3Titulo()),SX3->X3_CAMPO,SX3->X3_PICTURE,60,SX3->X3_DECIMAL,SX3->X3_VALID,;
SX3->X3_USADO,SX3->X3_TIPO,SX3->X3_F3,SX3->X3_CONTEXT,SX3->X3_CBOX,SX3->X3_RELACAO})
ELSE
Aadd(aHeaderEx, {AllTrim(X3Titulo()),SX3->X3_CAMPO,SX3->X3_PICTURE,SX3->X3_TAMANHO,SX3->X3_DECIMAL,SX3->X3_VALID,;
SX3->X3_USADO,SX3->X3_TIPO,SX3->X3_F3,SX3->X3_CONTEXT,SX3->X3_CBOX,SX3->X3_RELACAO})
Endif
Endif
Next nX
oMSNewGe1 := MsNewGetDados():New( 022, 010, 225, 485, GD_UPDATE, "AllwaysTrue", "AllwaysTrue", "+Field1+Field2", aAlterFields,, 999, "AllwaysTrue", "", "AllwaysTrue", oDlg, aHeaderEx, aColsEx)
Return
Por favor Acessar ou Registrar para participar da conversa.
- haikal
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 4
- Obrigados Recebidos: 0
9 anos 5 meses atrás #28318
por haikal
Respondido por haikal no tópico Consulta Padrão Especifica, Retorno de Informação para a Tela
Eu não tenho certeza, mas vamos lá.
Static _COD := Space(Len(SB1->B1_COD))
por se tratar de variável statica ela não mudará seu valor após a primeira atribuição. Não tenho certeza mas verifica isso.
Static _COD := Space(Len(SB1->B1_COD))
por se tratar de variável statica ela não mudará seu valor após a primeira atribuição. Não tenho certeza mas verifica isso.
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Consulta Padrão Especifica, Retorno de Informação para a Tela
Tempo para a criação da página:0.094 segundos