× Linguagem de Programação ADVPL

Perguntas Montagem MsNewGetDados com tabela temporária

Mais
11 anos 2 meses atrás #11145 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

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 2 meses atrás #11149 por kanaamlrr
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:
/*
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.

Mais
11 anos 2 meses atrás #11310 por rafael163
Boa Noite!

Desde já obrigado pela ajuda. Vou usar o exemplo e tentar fazer o meu.

Abraço.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 2 meses atrás #11320 por kanaamlrr
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!

Por favor Acessar ou Registrar para participar da conversa.

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