Páginas filhas
  • FillGetDados

Descrição
Esta função monta o aHeader e o aCols para serem utilizados pela MsGetDados() ou MsNewGetDados(). 


Sintaxe
FillGetDados ( < nOpc>, < cAlias>, [ nOrder], [ cSeekKey], [ bSeekWhile], [ uSeekFor], [ aNoFields], [ aYesFields], [lOnlyYes], [ cQuery], [ bMontCols], [ lEmpty], [ aHeaderAux], [ aColsAux], [ bAfterCols], [ bBeforeCols], [bAfterHeader], [ cAliasQry], [ bCriaVar], [ lUserFields], [ aYesUsado] ) --> lRet


Parâmetros

NomeTipoDescriçãoObrigatório
nOpcNuméricoNúmero correspondente à operação a ser executada.X
cAliasCaracterAlias da tabela referente aos itens.X
nOrderNuméricoOrdem correspondente a chave de índice para preencher o aCols. Default é 1. 
cSeekKeyCaracterChave utilizada no posicionamento da área para preencher o aCols. 
bSeekWhileBloco de códigoBloco contendo a expressão a ser comparada com cSeekKey na condição do While. 
uSeekForQualquerCondição para execução do While.
aNoFieldsVetorArray com nome dos campos que serão excluídos na montagem do aHeader.
aYesFieldsVetorArray com nome dos campos que serão incluídos na montagem do aHeader.
lOnlyYesLógicoFlag indicando se considera somente os campos declarados no aYesFields + campos do usuário. Default é .F. 
cQueryCaracterQuery para filtro da tabela cAlias.
bMontColsBloco de códigoBloco contendo função especifica para preencher o aCols.
lEmptyLógicoSe for uma inclusão, passar .T. para que o aCols seja inicializado com 1 linha em  branco.
aHeaderAuxVetorNome do aHeader auxiliar. Caso necessite tratar o aHeader e aCols como variáveis locais (por exemplo, no uso de várias getdados).
aColsAuxVetorNome do aCols auxiliar. Caso necessite tratar o aHeader e aCols como variáveis locais (por exemplo, no uso de várias getdados).
bAfterColsBloco de códigoBloco executado após a inclusão de cada linha no aCols.
bBeforeColsBloco de códigoBloco de código contendo expressão para sair do While. É executado antes da inclusão de cada linha no aCols.
bAfterHeaderBloco de códigoBloco para manipular o aHeader após o preenchimento dos campos padrões e antes de incluir os campos reservados para o WalkThru.
cAliasQryCaracterNome do alias para a query.
bCriaVarBloco de códigoBloco de código para criar a variável de memória.
lUserFieldsLógicoDefine se inclui os campos de usuários. Default é .F.
aYesUsadoVetorArray com o nome dos campos que deverão ser apresentados.



Retorno
lRet (lógico) - Retorna se conseguiu efetuar a montagem das variáveis.


Observações
Parâmetro:

nOpc
Determina a ação que está sendo executada seguindo a seguinte definição:
2 = Visualização
3 = Inclusão
4 = Alteração
5 = Exclusão

uSeekFor
Pode ser utilizados de duas maneiras:
- Através de bloco-de-código, contendo a condição a ser utilizada para executar o Loop no While
- Array bi-dimensional contendo N.. condições, em que:
[1] - é o bloco condicional
[2] - é o bloco a ser executado se verdadeiro e;
[3] - é o bloco a ser executado se falso
Exemplo: {{bCondicao1, bTrue1, bFalse1}, {bCondicao2, bTrue2, bFalse2}.. bCondicaoN, bTrueN, bFalseN} 

cQuery
Se ambiente utilizado for TOP e cQuery estiver preenchido, desconsidera os parâmetros cSeekKey e bSeekWhile caso tenham sido informados.
Para a criação do aHeader e aCols via Query, a tabela não poderá possuir campos do tipo MEMO. Caso seja necessário incluir condições para a inclusão dos registros no aCols será necessário a utilização dos parâmetros cSeekKey e bSeekWhile.

aYesFields
Quando utilizar esse parâmetro buscando os campos do dicionário de dados (SX3), remova os espaços em branco utilizando a função AllTrim.
Exemplo: AAdd( aYesFields, AllTrim( SX3->X3_CAMPO ) )


Exemplos


#include "protheus.ch"

User Function TstFillGet()
Private cCadastro := "Atualizacaodo pedido de venda"
Private aRotina := { {"Pesquisar" ,"AxPesqui" ,0,1} , {"Visualizar" ,"U_TstFilVis" ,0,2} }
Private cDelFunc := ".T."
Private cString := "SC5"

dbSelectArea("SC5")
dbSetOrder(1)
dbSelectArea(cString)
mBrowse( 6,1,22,75,cString)
Return

User Function TstFilVis(cAlias,nReg,nOpc)
Local aArea := GetArea()
Local aCpos1 := {"C6_QTDVEN ","C6_QTDLIB"}
Local aCpos2 := {}
Local aPosObj := {}
Local aObjects := {}
Local aSize := {}
Local aPosGet := {}
Local aInfo := {}
Local lContinua:= .T.
Local lGrade := MaGrade()
Local lQuery := .F.
Local lFreeze := .F.
Local nGetLin := 0
Local nOpcA := 0
Local nI := 0
Local nColFreeze:= 1
Local cArqQry := "SC6"
Local cCadastro:= OemToAnsi("Atualizaçäo de Pedidos de Venda") //"Atualizaçäo de Pedidos de Venda"
Local oGetd
Local oDlg
Local bCond := {|| .T.}
Local bAction1 := {|| .T. }
Local bAction2 := {|| .T. }
Local cSeek := ""
Local aNoFields := {"C6_NUM","C6_QTDEMP","C6_QTDENT","C6_QTDEMP2", "C6_QTDENT2"} // Campos que nao devem entrarno aHeader e aCols
Local bWhile := {|| }
Local cQuery := ""

// Inicializa a Variaveis Privates. 
PRIVATE aTrocaF3 := {}
PRIVATE aTELA[0][0],aGETS[0]
PRIVATE aHeader := {}
PRIVATE aCols := {}
PRIVATE aHeadFor := {}
PRIVATE aColsFor := {}
PRIVATE N := 1

Inclui := .F.
Altera := .F.
// Inicializa a Variaveis da Enchoice.
RegToMemory( "SC5", .F., .F. )

// Filtros para montagem do aCols
dbSelectArea("SC6")
dbSetOrder(1)

lQuery := .T.
cQuery := "SELECT * "
cQuery += "FROM "+ RetSqlName("SC6") +" SC6 "
cQuery += "WHERE SC6.C6_FILIAL='" + xFilial("SC6")+"' AND "
cQuery += "SC6.C6_NUM='" + SC5->C5_NUM+"' AND "
cQuery += "SC6.D_E_L_E_T_<>'*' "
cQuery += "ORDER BY " + SqlOrder(SC6->(IndexKey()))
dbSelectArea("SC6")
dbCloseArea()

cSeek := xFilial("SC6")+SC5->C5_NUM
bWhile := {|| C6_FILIAL+C6_NUM }

// Montagem do aHeader e aCols
FillGetDados(nOPc,"SC6",1,cSeek,bWhile,{{bCond, bAction1,bAction2}},aNoFields,/*aYesFields*/,/*lOnlyYes*/,cQuery,/*bMontCols*/,.F.,/*aHeaderAux*/,/*aColsAux*/,/*bafterCols*/,/*bBeforeCols*/,/*bAfterHeader*/,"SC6")

If lQuery
    dbSelectArea("SC6")
    dbCloseArea()
    ChkFile("SC6",.F.)
EndIf

For nI := 1 To Len(aHeader)
    If aHeader[nI][8] == "M"
        aadd(aCpos1,aHeader[nI][2])
    EndIf
Next

// Caso nao ache nenhum item , abandona rotina.
If ( Len(aCols) == 0 )
    ApMsgAlert("Não achou ositens do pedido")
    lContinua := .F.
EndIf

If (lContinua )
    // Faz o calculo automatico dedimensoes de objetos
    aSize := MsAdvSize()
    aObjects := {}
    AAdd( aObjects, { 100, 100, .t.,.t. } )
    AAdd( aObjects, { 100, 100, .t., .t. } )
    AAdd( aObjects, { 100, 020, .t., .f. } )
    aInfo := { aSize[ 1 ], aSize[ 2 ], aSize[ 3 ],aSize[ 4 ], 3, 3 }
    aPosObj := MsObjSize( aInfo, aObjects )
    aPosGet := MsObjGetPos(aSize[3]-aSize[1],315, {{003,033,160,200,240,263}} )
    DEFINE MSDIALOG oDlg TITLE cCadastro From aSize[7],0 to aSize[6],aSize[5] of oMainWnd PIXEL
    //Estabelece a Troca de Clientes conforme o Tipo do Pedido de Venda
    If ( M->C5_TIPO $ "DB" )
        aTrocaF3 := {{"C5_CLIENTE","SA2"}}
    Else
        aTrocaF3 := {}
    EndIf

    EnChoice( cAlias, nReg, nOpc, , , , , aPosObj[1],aCpos2,3)
    oGetd := MsGetDados():New(aPosObj[2,1],aPosObj[2,2],aPosObj[2,3],aPosObj[2,4],nOpc,,,"",,aCpos1,nColFreeze,,,,,,,,lFreeze)

    ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,{||oDlg:End()},{||oDlg:End()})
EndIf

Return