1: #include "totvs.ch"
2: Static __aF3Ret
3: /*
4: Programa : f3f_Opcoes
5: Funcao : f3fOpcSX5
6: Data : 16/06/2014
7: Autor : Marinaldo de Jesus ( http://www.blacktdn.com.br )
8: Descricao : Programa para retornar Consulta Padrao "Específica" baseada em f_Opcoes
9: Uso : Consulta F3 (%F3SIT) para as situacoes da Folha de Pagamento
10: Sintaxe : StaticCall(F3F_OPCOES,f3fOpcSX5,cTabela,nSize,cF3,cF3Name)
11: */
12: Static Function f3fOpcSX5(cTabela,nSize,cF3,cF3Name)
13:
14: //------------------------------------------------------------------------------------------------
15: // Salva os Dados de Entrada que serao restaurados antes do Retorno do Procedimento
16: Local aArea := GetArea()
17: Local aAreaSX5 := SX5->(GetArea())
18:
19: Local aOpcoes := Array(0)
20:
21: Local cKey
22: Local cDes
23:
24: //------------------------------------------------------------------------------------------------
25: // Obtem um alias válido par uso
26: Local cAlias := GetNextAlias()
27:
28: Local cTitulo := ""
29: Local cOpcoes := ""
30:
31: //------------------------------------------------------------------------------------------------
32: // Obtem a Variavel de Memória que será utilizada como Referencia à Consulta
33: Local cReadVar := ReadVar()
34:
35: Local nCnt := 0
36:
37: Local nRecno
38: Local nF3Ret
39: Local nTamKey
40: Local nElemRet
41:
42: //------------------------------------------------------------------------------------------------
43: // Obtem a Ordem para a tabela SX5
44: Local nSX5Order := RetOrder("SX5","X5_FILIAL+X5_TABELA+X5_CHAVE")
45:
46: Local uVarRet
47:
48: //------------------------------------------------------------------------------------------------
49: // Obtem o conteúdo do campo utilizado na Consulta Padrao Customizada
50: uVarRet := GetMemVar(cReadVar)
51:
52: //------------------------------------------------------------------------------------------------
53: // Valor padrão para Tamanho do Campo
54: DEFAULT nSize := Len(uVarRet)
55:
56: //------------------------------------------------------------------------------------------------
57: // Obtem o conteúdo do campo utilizado na Consulta Padrao Customizada
58: nTamKey := nSize
59:
60: //------------------------------------------------------------------------------------------------
61: // Verifica o Máximo de Elementos para Retorno/Seleção
62: nElemRet := Int(Len(uVarRet)/nTamKey)
63:
64: //------------------------------------------------------------------------------------------------
65: // Obtem a Descrição, conforme tabela
66: SX5->(dbSetOrder(nSX5Order))
67: IF SX5->(dbSeek(xFilial("SX5")+"00"+cTabela))
68: cTitulo := SX5->(X5Descri())
69: EndIF
70:
71: //------------------------------------------------------------------------------------------------
72: // Seleciona os Registros
73: BEGINSQL ALIAS cAlias
74: COLUMN R_E_C_N_O_ AS NUMERIC(16,0)
75: SELECT SX5.R_E_C_N_O_
76: FROM %table:SX5% SX5
77: WHERE SX5.%notDel%
78: AND SX5.X5_FILIAL=%xFilial:SX5%
79: AND SX5.X5_TABELA=%exp:cTabela%
80: ENDSQL
81:
82: //------------------------------------------------------------------------------------------------
83: // Obtem a Chave e Descricao
84: While (cAlias)->(.NOT.(Eof()))
85: nRecno := (cAlias)->R_E_C_N_O_
86: SX5->(dbGoto(nRecno))
87: cKey := SX5->(Left(X5_CHAVE,nTamKey))
88: cDes := SX5->(Alltrim(X5Descri()))
89: aAdd(aOpcoes,cKey+" - "+cDes)
90: cOpcoes += cKey
91: ++nCnt
92: (cAlias)->(dbSkip())
93: End While
94:
95: //------------------------------------------------------------------------------------------------
96: // Libera o Alias da Memoria
97: (cAlias)->(dbCloseArea())
98:
99: //------------------------------------------------------------------------------------------------
100: // Redefine o Máximo de Elementos para Retorno/Seleção
101: nElemRet := Min(nCnt,nElemRet)
102:
103: //------------------------------------------------------------------------------------------------
104: // Executa f_Opcoes para Selecionar ou Mostrar os Registros Selecionados
105: IF f_Opcoes( @uVarRet ,; //Variavel de Retorno
106: cTitulo ,; //Titulo da Coluna com as opcoes
107: @aOpcoes ,; //Opcoes de Escolha (Array de Opcoes)
108: @cOpcoes ,; //String de Opcoes para Retorno
109: NIL ,; //Nao Utilizado
110: NIL ,; //Nao Utilizado
111: .F. ,; //Se a Selecao sera de apenas 1 Elemento por vez
112: nTamKey ,; //Tamanho da Chave
113: nElemRet ,; //No maximo de elementos na variavel de retorno
114: .T. ,; //Inclui Botoes para Selecao de Multiplos Itens
115: .F. ,; //Se as opcoes serao montadas a partir de ComboBox de Campo ( X3_CBOX )
116: NIL ,; //Qual o Campo para a Montagem do aOpcoes
117: .F. ,; //Nao Permite a Ordenacao
118: .F. ,; //Nao Permite a Pesquisa
119: .F. ,; //Forca o Retorno Como Array
120: cF3 ; //Consulta F3
121: )
122: //------------------------------------------------------------------------------------------------
123: // Atualiza a Variável de Retorno
124: cF3Ret := uVarRet
125: //------------------------------------------------------------------------------------------------
126: // Atualiza a Variável de Memória com o Conteúdo do Retorno
127: SetMemVar(cReadVar,cF3Ret)
128: //------------------------------------------------------------------------------------------------
129: // Força a atualização dos Componentes (Provavelmente não irá funcionar). A solução. ENTER
130: SysRefresh(.T.)
131: Else
132: //------------------------------------------------------------------------------------------------
133: // Se nao confirmou a f_Opcoes retorna o Conteudo de entrada
134: cF3Ret := uVarRet
135: EndIF
136:
137: //------------------------------------------------------------------------------------------------
138: // Alimenta a variável Static para uso no Retorno da Consulta Padrao.
139: DEFAULT __aF3Ret := Array(0)
140: nF3Ret := aScan(__aF3Ret,{|e|e[1]==cF3Name})
141: IF (nF3Ret==0)
142: aAdd(__aF3Ret,{cF3Name,NIL})
143: nF3Ret := Len(__aF3Ret)
144: EndIF
145: __aF3Ret[nF3Ret][2] := cF3Ret
146:
147: //------------------------------------------------------------------------------------------------
148: // Restaura os Dados de Entrada
149: RestArea(aAreaSX5)
150: RestArea(aArea)
151:
152: Return(cF3Ret)
153:
154: /*
155: Programa : f3f_Opcoes
156: Funcao : f3fOpcSitF
157: Data : 16/06/2014
158: Autor : Marinaldo de Jesus ( http://www.blacktdn.com.br )
159: Descricao : Programa para retornar Consulta Padrao "Específica" baseada em f_Opcoes
160: Uso : Consulta F3 (%F3SIT) para as situacoes da Folha de Pagamento
161: Sintaxe : StaticCall(F3F_OPCOES,f3fOpcSitF)
162: */
163: Static Function f3fOpcSitF()
164: Return(f3fOpcSX5("31",1,"31","%F3SIT"))
165:
166: /*
167: Programa : f3f_Opcoes
168: Funcao : f3fOpcCatF
169: Data : 16/06/2014
170: Autor : Marinaldo de Jesus ( http://www.blacktdn.com.br )
171: Descricao : Programa para retornar Consulta Padrao "Específica" baseada em f_Opcoes
172: Uso : Consulta F3 (%F3CAT) para as Categoria da Folha de Pagamento
173: Sintaxe : StaticCall(F3F_OPCOES,f3fOpcCatF)
174: */
175: Static Function f3fOpcCatF()
176: Return(f3fOpcSX5("28",1,"28","%F3CAT"))
177:
178: /*
179: Programa : f3f_Opcoes
180: Funcao : f3fOpcRetD
181: Data : 10/06/2014
182: Autor : Marinaldo de Jesus
183: Descricao : Retornar a ultima opção selecionada na Consulta Customizada
184: Uso : Retorno da Consulta F3
185: Sintaxe : StaticCall(F3F_OPCOES,f3fOpcRetD,cF3Name)
186: */
187: Static Function f3fOpcRetD(cF3Name)
188: Local uF3Ret
189: Local nF3Ret
190: IF(__aF3Ret==NIL)
191: __aF3Ret := Array(0)
192: EndIF
193: nF3Ret := aScan(__aF3Ret,{|e|e[1]==cF3Name})
194: IF (nF3Ret>0)
195: cF3Ret := __aF3Ret[nF3Ret][2]
196: aSize(aDel(__aF3Ret,nF3Ret),Len(__aF3Ret)-1)
197: Else
198: uF3Ret := &(ReadVar())
199: EndIF
200: Return(uF3Ret)
Pessoal, bom dia.
ResponderExcluirFiz uma tabela ZZZ da vida, e para minha customização, ela precisa ser exclusiva entre filiais.
Depois, em outra tabela, criei um campo customizado, e configurei uma consulta padrão apontando para essa tabela.
O problema, é que nessa customização específica, preciso que a F3 mostre os registros de todas as filiais. Já olhei permissões 115 e 116, e mesmo logado como Admin, não consigo burlar esse filtro interno.
Existe alguma forma de fazer isso, sem ter que criar uma tela inteira só por conta desse filtro?