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
Nome | Tipo | Descrição | Obrigatório |
---|---|---|---|
nOpc | Numérico | Número correspondente à operação a ser executada. | X |
cAlias | Caracter | Alias da tabela referente aos itens. | X |
nOrder | Numérico | Ordem correspondente a chave de índice para preencher o aCols. Default é 1. | |
cSeekKey | Caracter | Chave utilizada no posicionamento da área para preencher o aCols. | |
bSeekWhile | Bloco de código | Bloco contendo a expressão a ser comparada com cSeekKey na condição do While. | |
uSeekFor | Qualquer | Condição para execução do While. | |
aNoFields | Vetor | Array com nome dos campos que serão excluídos na montagem do aHeader. | |
aYesFields | Vetor | Array com nome dos campos que serão incluídos na montagem do aHeader. | |
lOnlyYes | Lógico | Flag indicando se considera somente os campos declarados no aYesFields + campos do usuário. Default é .F. | |
cQuery | Caracter | Query para filtro da tabela cAlias. | |
bMontCols | Bloco de código | Bloco contendo função especifica para preencher o aCols. | |
lEmpty | Lógico | Se for uma inclusão, passar .T. para que o aCols seja inicializado com 1 linha em branco. | |
aHeaderAux | Vetor | Nome do aHeader auxiliar. Caso necessite tratar o aHeader e aCols como variáveis locais (por exemplo, no uso de várias getdados). | |
aColsAux | Vetor | Nome do aCols auxiliar. Caso necessite tratar o aHeader e aCols como variáveis locais (por exemplo, no uso de várias getdados). | |
bAfterCols | Bloco de código | Bloco executado após a inclusão de cada linha no aCols. | |
bBeforeCols | Bloco de código | Bloco de código contendo expressão para sair do While. É executado antes da inclusão de cada linha no aCols. | |
bAfterHeader | Bloco de código | Bloco para manipular o aHeader após o preenchimento dos campos padrões e antes de incluir os campos reservados para o WalkThru. | |
cAliasQry | Caracter | Nome do alias para a query. | |
bCriaVar | Bloco de código | Bloco de código para criar a variável de memória. | |
lUserFields | Lógico | Define se inclui os campos de usuários. Default é .F. | |
aYesUsado | Vetor | Array 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