- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Montagem MsNewGetDados com tabela temporária
×
Linguagem de Programação ADVPL
Perguntas Montagem MsNewGetDados com tabela temporária
- rafael163
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 11
- Obrigados Recebidos: 0
11 anos 8 meses atrás #11145
por rafael163
Montagem MsNewGetDados com tabela temporária foi criado por rafael163
Bom dia.
Estou tentando preencher o conteúdo de um MsNewGetDados através do resultado de um select, já debuguei o código e tentei várias coisas, mas não consegui. Alguém poderia me ajudar indicando o meu erro ou me enviando um exemplo que monte um MsNewGetDados através de um select? Sou novato em ADVPL.
Muito Obrigado.
User Function TBrw1()
Local oDlg := NIL
Local oGet := NIL
Local aHeader := {}
Local aCols := {}
Local aColsAux := {}
Local cQuery := ""
Local cCadastro := "Pedidos - MsNewGetDados"
Local nOpc := ( GD_INSERT + GD_UPDATE + GD_DELETE )
Local icont := 0
Local cLinOk := "AllwaysTrue()"
Local cTudOk := "AllwaysTrue()"
Local cFieldOk := "AllwaysTrue()"
Local nSuperior := 145
Local nEsquerda := 010
Local nInferior := 260
Local nDireita := 400
Local nFreeze := 000
Local nMax := 999
Local nI := 0
Local nPosDel := 0
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aAlterGDa := {}
Local cIniCpos := ""
Local nLinhas := 99
//MONTAGEM DA SQL
cQuery := "SELECT DISTINCT SC5010.C5_NUM,SA1010.A1_COD,SA1010.A1_LOJA, SA1010.A1_NOME,SC5010.C5_EMISSAO,SC6010.C6_ENTREG " + CRLF
cQuery += " FROM SC5010, SA1010, SC6010 " + CRLF
cQuery += " WHERE " + CRLF
cQuery += " C5_CLIENTE = A1_COD " + CRLF
cQuery += " AND C5_LOJACLI = A1_LOJA " + CRLF
cQuery += " AND C5_NUM = C6_NUM "
// Colocar D_E_L_E_T_
// Colocar FILIAL
// Colocar xFilial
// Colocar RetSqlName
cQuery := ChangeQuery(cQuery)
DbUseArea(.T., "TopConn", TCGenQry(,,cQuery),"TMP", .F., .T.)
// MONTAGEM DO AHEADER
aAdd(aHeader, { "Num. Pedido" ,"C5_NUM" })
aAdd(aHeader, { "Cod. Cliente" ,"A1_COD" })
aAdd(aHeader, { "Loja" ,"A1_LOJA" })
aAdd(aHeader, { "Nome do Cliente" ,"A1_NOME" })
aAdd(aHeader, { "Dt. Emissao" ,"C5_EMISSAO" })
aAdd(aHeader, { "Dt. Entrega" ,"C6_ENTREG" })
//GERAÇÃO DO AHEADER
For icont := 1 To Len(aHeader)
aAdd(aHeader, { AllTrim(X3Titulo()) ,; // 01
SX3->X3_CAMPO ,; // 02
SX3->X3_PICTURE ,; // 03
SX3->X3_TAMANHO ,; // 04
SX3->X3_DECIMAL ,; // 05
"AllwaysTrue()" ,; // 06 - SX3->X3_VALID
SX3->X3_USADO ,; // 07
SX3->X3_TIPO ,; // 08
SX3->X3_F3 ,; // 09
SX3->X3_CONTEXT }) // 10
Next icont
nPosDel := Len(aHeader) + 1
aAlterGDa := aClone(aHeader)
// MONTAGEM DO ACOLS
While !TMP->(!Eof())
// Inicializa os vetores auxiliares
aColsAux := {}
// Preenche os campos no vetor auxiliar
For icont := 1 To Len(aHeader)
aAdd(aColsAux, (TMP)->&(aHeader[nI,2]))
Next icont
// Deletado
aAdd(aColsAux, .F.)
// Adiciona a linha no aCols
aAdd(aCols, aClone(aColsAux))
(TMP)->(DbSkip())
EndDo
TMP->(DbCloseArea())
If Empty(aCols)
// aAdd(aColsAux,Array(Len(aHeader)) + 1)
aColsAux := Array(Len(aHeader) + 1)
For nI := 1 To Len(aHeader)
aColsAux[nI] := CriaVar(aHeader[nI,2], .F.)
Next nI
aColsAux[nPosDel] := .F.
aadd(aCols,aclone(AcolsAux))
EndIf
Define Dialog oDlg title cCadastro from 8,0 to 28,80 of oMainWnd
oGet:= MsNewGetDados():New( nSuperior,nEsquerda,nInferior,nDireita,nOpc,;
/*cLinOk*/,/*cTudOk*/,/*cIniCpos*/,/*aAlterGDa*/,/*nFreeze*/,/*nMax*/,/*cFieldOk*/,;
/*cSuperDel*/,/*cDelOk*/,oDlg,aHeader,aCols)
oGet:Refresh()
Activate Dialog oDlg CENTERED
Return Nil
Estou tentando preencher o conteúdo de um MsNewGetDados através do resultado de um select, já debuguei o código e tentei várias coisas, mas não consegui. Alguém poderia me ajudar indicando o meu erro ou me enviando um exemplo que monte um MsNewGetDados através de um select? Sou novato em ADVPL.
Muito Obrigado.
User Function TBrw1()
Local oDlg := NIL
Local oGet := NIL
Local aHeader := {}
Local aCols := {}
Local aColsAux := {}
Local cQuery := ""
Local cCadastro := "Pedidos - MsNewGetDados"
Local nOpc := ( GD_INSERT + GD_UPDATE + GD_DELETE )
Local icont := 0
Local cLinOk := "AllwaysTrue()"
Local cTudOk := "AllwaysTrue()"
Local cFieldOk := "AllwaysTrue()"
Local nSuperior := 145
Local nEsquerda := 010
Local nInferior := 260
Local nDireita := 400
Local nFreeze := 000
Local nMax := 999
Local nI := 0
Local nPosDel := 0
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aAlterGDa := {}
Local cIniCpos := ""
Local nLinhas := 99
//MONTAGEM DA SQL
cQuery := "SELECT DISTINCT SC5010.C5_NUM,SA1010.A1_COD,SA1010.A1_LOJA, SA1010.A1_NOME,SC5010.C5_EMISSAO,SC6010.C6_ENTREG " + CRLF
cQuery += " FROM SC5010, SA1010, SC6010 " + CRLF
cQuery += " WHERE " + CRLF
cQuery += " C5_CLIENTE = A1_COD " + CRLF
cQuery += " AND C5_LOJACLI = A1_LOJA " + CRLF
cQuery += " AND C5_NUM = C6_NUM "
// Colocar D_E_L_E_T_
// Colocar FILIAL
// Colocar xFilial
// Colocar RetSqlName
cQuery := ChangeQuery(cQuery)
DbUseArea(.T., "TopConn", TCGenQry(,,cQuery),"TMP", .F., .T.)
// MONTAGEM DO AHEADER
aAdd(aHeader, { "Num. Pedido" ,"C5_NUM" })
aAdd(aHeader, { "Cod. Cliente" ,"A1_COD" })
aAdd(aHeader, { "Loja" ,"A1_LOJA" })
aAdd(aHeader, { "Nome do Cliente" ,"A1_NOME" })
aAdd(aHeader, { "Dt. Emissao" ,"C5_EMISSAO" })
aAdd(aHeader, { "Dt. Entrega" ,"C6_ENTREG" })
//GERAÇÃO DO AHEADER
For icont := 1 To Len(aHeader)
aAdd(aHeader, { AllTrim(X3Titulo()) ,; // 01
SX3->X3_CAMPO ,; // 02
SX3->X3_PICTURE ,; // 03
SX3->X3_TAMANHO ,; // 04
SX3->X3_DECIMAL ,; // 05
"AllwaysTrue()" ,; // 06 - SX3->X3_VALID
SX3->X3_USADO ,; // 07
SX3->X3_TIPO ,; // 08
SX3->X3_F3 ,; // 09
SX3->X3_CONTEXT }) // 10
Next icont
nPosDel := Len(aHeader) + 1
aAlterGDa := aClone(aHeader)
// MONTAGEM DO ACOLS
While !TMP->(!Eof())
// Inicializa os vetores auxiliares
aColsAux := {}
// Preenche os campos no vetor auxiliar
For icont := 1 To Len(aHeader)
aAdd(aColsAux, (TMP)->&(aHeader[nI,2]))
Next icont
// Deletado
aAdd(aColsAux, .F.)
// Adiciona a linha no aCols
aAdd(aCols, aClone(aColsAux))
(TMP)->(DbSkip())
EndDo
TMP->(DbCloseArea())
If Empty(aCols)
// aAdd(aColsAux,Array(Len(aHeader)) + 1)
aColsAux := Array(Len(aHeader) + 1)
For nI := 1 To Len(aHeader)
aColsAux[nI] := CriaVar(aHeader[nI,2], .F.)
Next nI
aColsAux[nPosDel] := .F.
aadd(aCols,aclone(AcolsAux))
EndIf
Define Dialog oDlg title cCadastro from 8,0 to 28,80 of oMainWnd
oGet:= MsNewGetDados():New( nSuperior,nEsquerda,nInferior,nDireita,nOpc,;
/*cLinOk*/,/*cTudOk*/,/*cIniCpos*/,/*aAlterGDa*/,/*nFreeze*/,/*nMax*/,/*cFieldOk*/,;
/*cSuperDel*/,/*cDelOk*/,oDlg,aHeader,aCols)
oGet:Refresh()
Activate Dialog oDlg CENTERED
Return Nil
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 8 meses atrás #11149
por kanaamlrr
Respondido por kanaamlrr no tópico Montagem MsNewGetDados com tabela temporária
Cara, você tá se perdendo na criação do aHeaders e do aCols.
Segue abaixo uma função que eu montei aqui uma função que atendia uma necessidade minha, da uma olhada nela e ve se entende como funciona a criação desses dois arrays.
Qualquer dúvida posta ai pra gente.
Segue:
Segue abaixo uma função que eu montei aqui uma função que atendia uma necessidade minha, da uma olhada nela e ve se entende como funciona a criação desses dois arrays.
Qualquer dúvida posta ai pra gente.
Segue:
/*
Funcao : BuscaDados
Objetivos : Busca dados necessários e já cria aHeader e aCols
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 13/08/2012
*/
*--------------------------------*
Static Function BuscaDados(cAlias)
*--------------------------------*
Local cQry := ""
Local aCpoD4 := {"D4_COD","D4_LOCAL","D4_OP",;
"D4_DATA","D4_QTDEORI","D4_QUANT",;
"D4_TRT","D4_LOTECTL","D4_NUMLOTE",;
"D4_DTVALID","D4_QTSEGUM","D4_POTENCI"}
If cAlias == "SD4"
//DEFINIÇÃO DO AHEADERS
SX3->(dbSetOrder(1))
SX3->(dbSeek(cAlias))
While !SX3->(Eof()) .AND. SX3->X3_ARQUIVO == cAlias
If X3Uso(SX3->X3_USADO) .AND. cNivel >= SX3->X3_NIVEL .AND.;
(aScan(aCpoD4,{|x| x==AllTrim(SX3->X3_CAMPO)})>0)
If SX3->X3_CAMPO != "D4_QUANT"
aAdd(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
""})
Else
aAdd(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
"U_ValD4Qnt()",;
"",;
SX3->X3_TIPO,;
"",;
""})
aAdd(aHeader,{Trim("Diferença"),;
"DIFERE",;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
"",;
"",;
SX3->X3_TIPO,;
"",;
""})
EndIf
EndIf
SX3->(dbSkip())
EndDo
//ADICIONA CAMPOS QUE PODERÃO SER ALTERADOS
aAdd(aAlter, "D4_QUANT")
//CRIA ACOLS COM OS DADOS RETORNADOS DA QUERY
cQry += "SELECT SD4.D_E_L_E_T_, SD4.D4_FILIAL, SD4.D4_OP, SD4.D4_COD, "
cQry += " SD4.D4_LOCAL, SD4.D4_DATA, SD4.D4_QTDEORI, SD4.D4_QUANT, "
cQry += " SD4.D4_TRT, SD4.D4_LOTECTL, SD4.D4_NUMLOTE, "
cQry += " SD4.D4_DTVALID, SD4.D4_QTSEGUM, SD4.D4_POTENCI "
cQry += "FROM "+RetSqlName("SD4")+" SD4 "
cQry += "WHERE SD4.D_E_L_E_T_ <> '*' AND "
cQry += " SD4.D4_FILIAL = '"+xFilial("SD4")+"' AND "
cQry += " SD4.D4_OP = '"+cOP+"' AND "
cQry += " SD4.D4_X_DOC = '' "
cQry += "ORDER BY SD4.D4_OP, SD4.D4_COD"
PlsQuery(cQry, "TRB")
TRB->(dbGoTop())
While TRB->(!Eof())
aAdd(aCols,{TRB->D4_COD,;
TRB->D4_LOCAL,;
TRB->D4_OP,;
TRB->D4_DATA,;
TRB->D4_QTDEORI,;
TRB->D4_QUANT,;
TRB->(D4_QTDEORI-D4_QUANT),;
TRB->D4_TRT,;
TRB->D4_LOTECTL,;
TRB->D4_NUMLOTE,;
TRB->D4_DTVALID,;
TRB->D4_QTSEGUM,;
TRB->D4_POTENCI,;
.F.})
aAdd(aQtx, {TRB->D4_QTDEORI,;
TRB->D4_QUANT})
TRB->(dbSkip())
EndDo
TRB->(dbCloseArea())
aColsAux := aClone(aCols)
Else
aTam := TamSX3('D3_COD' ); Aadd(aHeader2, {"Prod.Orig." , 'D3_COD' , PesqPict('SD3', 'D3_COD' , aTam[1] ), aTam[1], aTam[2], 'A261VldCod(1)' , USADO, 'C', 'SD3', ''}) // 'Prod.Orig.'
aTam := TamSX3('D3_DESCRI' ); Aadd(aHeader2, {"Desc.Orig." , 'D3_DESCRI' , PesqPict('SD3', 'D3_DESCRI' , aTam[1] ), aTam[1], aTam[2], '' , USADO, 'C', 'SD3', ''}) // 'Desc.Orig.'
aTam := TamSX3('D3_UM' ); Aadd(aHeader2, {"UM Orig." , 'D3_UM' , PesqPict('SD3', 'D3_UM' , aTam[1], aTam[1]), aTam[1], aTam[2], '' , USADO, 'C', 'SD3', ''}) // 'UM Orig.'
aTam := TamSX3('D3_LOCAL' ); Aadd(aHeader2, {"Armazem Orig." , 'D3_LOCAL' , PesqPict('SD3', 'D3_LOCAL' , aTam[1] ), aTam[1], aTam[2], 'A261Almox(1)' , USADO, 'C', 'SD3', ''}) // 'Almox Orig.'
aTam := TamSX3('D3_LOCAL' ); Aadd(aHeader2, {"Armazem Destino" , 'D3_LOCAL' , PesqPict('SD3', 'D3_LOCAL' , aTam[1] ), aTam[1], aTam[2], 'A261Almox(2)' , USADO, 'C', 'SD3', ''}) // 'Almox Destino'
aTam := TamSX3('D3_QUANT' ); Aadd(aHeader2, {"Quantidade" , 'D3_QUANT' , PesqPict('SD3', 'D3_QUANT' , ), aTam[1], aTam[2], 'A261QtdGra(1).and.A261Quant(.T.)' , USADO, 'N', 'SD3', ''}) // 'Quantidade'
aTam := TamSX3('D3_LOCALIZ'); Aadd(aHeader2, {"Endereco Orig." , 'D3_LOCALIZ', PesqPict('SD3', 'D3_LOCALIZ', aTam[1] ), aTam[1], aTam[2], 'A261Locali(1)' , USADO, 'C', 'SD3', ''}) // 'Localiz.Orig.'
aTam := TamSX3('D3_COD' ); Aadd(aHeader2, {"Prod.Destino" , 'D3_COD' , PesqPict('SD3', 'D3_COD' , aTam[1] ), aTam[1], aTam[2], 'A261VldCod(2)' , USADO, 'C', 'SD3', ''}) // 'Prod.Destino'
aTam := TamSX3('D3_DESCRI' ); Aadd(aHeader2, {"Desc.Destino" , 'D3_DESCRI' , PesqPict('SD3', 'D3_DESCRI' , aTam[1] ), aTam[1], aTam[2], '' , USADO, 'C', 'SD3', ''}) // 'Desc.Destino'
aTam := TamSX3('D3_UM' ); Aadd(aHeader2, {"UM Destino" , 'D3_UM' , PesqPict('SD3', 'D3_UM' , aTam[1], aTam[1]), aTam[1], aTam[2], '' , USADO, 'C', 'SD3', ''}) // 'UM Destino'
aTam := TamSX3('D3_LOCALIZ'); Aadd(aHeader2, {"Endereco Destino", 'D3_LOCALIZ', PesqPict('SD3', 'D3_LOCALIZ', aTam[1] ), aTam[1], aTam[2], 'A261Locali(2)' , USADO, 'C', 'SD3', ''}) // 'Localiz.Destino'
aTam := TamSX3('D3_NUMSERI'); Aadd(aHeader2, {"Numero Serie" , 'D3_NUMSERI', PesqPict('SD3', 'D3_NUMSERI', aTam[1] ), aTam[1], aTam[2], '' , USADO, 'C', 'SD3', ''}) // 'N£mero Serie'
aTam := TamSX3('D3_LOTECTL'); Aadd(aHeader2, {"Lote" , 'D3_LOTECTL', PesqPict('SD3', 'D3_LOTECTL', aTam[1] ), aTam[1], aTam[2], 'A261Lote()' , USADO, 'C', 'SD3', ''}) // 'Lote'
aTam := TamSX3('D3_NUMLOTE'); Aadd(aHeader2, {"Sub-Lote" , 'D3_NUMLOTE', PesqPict('SD3', 'D3_NUMLOTE', aTam[1] ), aTam[1], aTam[2], 'A261Lote()' , USADO, 'C', 'SD3', ''}) // 'Sub-Lote'
aTam := TamSX3('D3_DTVALID'); Aadd(aHeader2, {"Validade" , 'D3_DTVALID', PesqPict('SD3', 'D3_DTVALID', aTam[1] ), aTam[1], aTam[2], '' , USADO, 'D', 'SD3', ''}) // 'Validade'
aTam := TamSX3('D3_POTENCI'); Aadd(aHeader2, {"Potencia" , 'D3_POTENCI', PesqPict('SD3', 'D3_POTENCI', aTam[1] ), aTam[1], aTam[2], '' , USADO, 'N', 'SD3', ''}) // 'Potencia'
aTam := TamSX3('D3_QTSEGUM'); Aadd(aHeader2, {"Qt 2aUM" , 'D3_QTSEGUM', PesqPict('SD3', 'D3_QTSEGUM', ), aTam[1], aTam[2], 'A261QtdGra(1).and.A261Quant(.T.)' , USADO, 'N', 'SD3', ''}) // 'Qt 2aUM'
aTam := TamSX3('D3_ESTORNO'); Aadd(aHeader2, {"Estornado" , 'D3_ESTORNO', PesqPict('SD3', 'D3_ESTORNO', aTam[1] ), aTam[1], aTam[2], '' , USADO, 'C', 'SD3', ''}) // 'Estornado'
aTam := TamSX3('D3_NUMSEQ' ); Aadd(aHeader2, {"Sequencia" , 'D3_NUMSEQ' , PesqPict('SD3', 'D3_NUMSEQ' , aTam[1] ), aTam[1], aTam[2], '' , USADO, 'C', 'SD3', ''}) // 'Sequencia'
aTam := TamSX3('D3_LOTECTL'); Aadd(aHeader2, {"Lote Destino" , 'D3_LOTECTL', PesqPict('SD3', 'D3_LOTECTL', aTam[1] ), aTam[1], aTam[2], '' , USADO, 'C', 'SD3', ''})
aTam := TamSX3('D3_DTVALID'); Aadd(aHeader2, {"Validade Destino", 'D3_DTVALID', PesqPict('SD3', 'D3_DTVALID', aTam[1] ), aTam[1], aTam[2], 'A261DtPot(3)' , USADO, 'D', 'SD3', ''}) // 'Validade Destino'
aTam := TamSX3('D3_ITEMGRD'); Aadd(aHeader2, {"Item Grade" , 'D3_ITEMGRD', PesqPict('SD3', 'D3_ITEMGRD', aTam[1] ), aTam[1], aTam[2], '' , USADO, 'C', 'SD3', ''}) // 'Sequencia'
For i:=1 To Len(aCols)
SB1->(dbSeek(xFilial("SB1")+AvKey(aCols[i][nPosCod],"B1_COD")))
aAdd(aCols2, {aCols[i][nPosCod],; //Prod Origem
SB1->B1_DESC,; //Descrição
SB1->B1_UM,; //Unid Medida
cArmOri,; //Armazem origem
cArmDes,; //Armazém destino
aCols[i][nPosQuant],;//Quantidade
"",; //End. Origem
aCols[i][nPosCod],; //Prod Dest.
SB1->B1_DESC,; //Descrição
SB1->B1_UM,; //Unid Medida
"",; //End. Dest.
"",; //Num. Serie
"",; //Lote
"",; //Sub-Lote
STOD(""),; //Validade
0,; //Potencia
0,; //Qtde 2ª UM
"",; //Estornado
"",; //Seq.
"",; //Lote Dest.
STOD(""),; //Valid Dest.
"",; //Item Grade
.F.}) //Delete
Next i
EndIf
//
Return
Por favor Acessar ou Registrar para participar da conversa.
- rafael163
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 11
- Obrigados Recebidos: 0
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 8 meses atrás #11320
por kanaamlrr
Respondido por kanaamlrr no tópico Montagem MsNewGetDados com tabela temporária
Se precisar de ajuda ou tiver alguma dúvida posta ai que a gente vai te ajudando na medida do possível.
Depois posta ai como ficou.
Coloca uma foto sua também pra galera te conhecer melhor e indique o fórum para os amigos.
Valeu!
Depois posta ai como ficou.
Coloca uma foto sua também pra galera te conhecer melhor e indique o fórum para os amigos.
Valeu!
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Montagem MsNewGetDados com tabela temporária
Tempo para a criação da página:0.094 segundos