-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathUPDCUSTOM.CH
351 lines (268 loc) · 9.78 KB
/
UPDCUSTOM.CH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
/////////////////////////////////////////////////////////////////////////////
#DEFINE CSSBOTAO "QPushButton { color: #024670; "+;
" border-image: url(rpo:fwstd_btn_nml.png) 3 3 3 3 stretch; "+;
" border-top-width: 3px; "+;
" border-left-width: 3px; "+;
" border-right-width: 3px; "+;
" border-bottom-width: 3px }"+;
"QPushButton:pressed { color: #FFFFFF; "+;
" border-image: url(rpo:fwstd_btn_prd.png) 3 3 3 3 stretch; "+;
" border-top-width: 3px; "+;
" border-left-width: 3px; "+;
" border-right-width: 3px; "+;
" border-bottom-width: 3px }"
//--------------------------------------------------------------------
/*/{Protheus.doc} EscEmpresa
Função genérica para escolha de Empresa, montada pelo SM0
@return aRet Vetor contendo as seleções feitas.
Se não for marcada nenhuma o vetor volta vazio
@author Ernani Forastieri
@since 27/09/2004
@version 1.0
/*/
//--------------------------------------------------------------------
Static Function EscEmpresa(lTodas, aMarcadas, lShared)
//---------------------------------------------
// Parâmetro nTipo
// 1 - Monta com Todas Empresas/Filiais
// 2 - Monta só com Empresas
// 3 - Monta só com Filiais de uma Empresa
//
// Parâmetro aMarcadas
// Vetor com Empresas/Filiais pré marcadas
//
// Parâmetro cEmpSel
// Empresa que será usada para montar seleção
//---------------------------------------------
Local aRet := {}
Local aSalvAmb := GetArea()
Local aSalvSM0 := {}
Local aVetor := {}
Local cMascEmp := "??"
Local cVar := ""
Local lChk := .F.
Local lOk := .F.
Local lTeveMarc := .F.
Local oNo := LoadBitmap( GetResources(), "LBNO" )
Local oOk := LoadBitmap( GetResources(), "LBOK" )
Local oDlg, oChkMar, oLbx, oMascEmp, oSay
Local oButDMar, oButInv, oButMarc, oButOk, oButCanc
Default lTodas:= .F.
Default aMarcadas := {}
Default lShared:= .F.
If !MyOpenSm0( lShared )
Return aRet
EndIf
dbSelectArea( "SM0" )
aSalvSM0 := SM0->( GetArea() )
dbSetOrder( 1 )
dbGoTop()
While !SM0->( EOF() )
If aScan( aVetor, {|x| x[2] == SM0->M0_CODIGO} ) == 0
aAdd( aVetor, { aScan( aMarcadas, {|x| x[1] == SM0->M0_CODIGO .and. x[2] == SM0->M0_CODFIL} ) > 0, SM0->M0_CODIGO, SM0->M0_CODFIL, SM0->M0_NOME, SM0->M0_FILIAL } )
If lTodas
aAdd( aRet, { aTail(aVetor)[2] , aTail(aVetor)[3], aTail(aVetor)[2] + aTail(aVetor)[3] } )
EndIf
EndIf
dbSkip()
End
RestArea( aSalvSM0 )
If ! lTodas
Define MSDialog oDlg Title "" From 0, 0 To 280, 395 Pixel
oDlg:cToolTip := "Tela para Múltiplas Seleções de Empresas/Filiais"
oDlg:cTitle := "Selecione a(s) Empresa(s) para Atualização"
@ 10, 10 Listbox oLbx Var cVar Fields Header " ", " ", "Empresa" Size 178, 095 Of oDlg Pixel
oLbx:SetArray( aVetor )
oLbx:bLine := {|| {IIf( aVetor[oLbx:nAt, 1], oOk, oNo ), ;
aVetor[oLbx:nAt, 2], ;
aVetor[oLbx:nAt, 4]}}
oLbx:BlDblClick := { || aVetor[oLbx:nAt, 1] := !aVetor[oLbx:nAt, 1], VerTodos( aVetor, @lChk, oChkMar ), oChkMar:Refresh(), oLbx:Refresh()}
oLbx:cToolTip := oDlg:cTitle
oLbx:lHScroll := .F. // NoScroll
@ 112, 10 CheckBox oChkMar Var lChk Prompt "Todos" Message "Marca / Desmarca"+ CRLF + "Todos" Size 40, 007 Pixel Of oDlg;
on Click MarcaTodos( lChk, @aVetor, oLbx )
// Marca/Desmarca por mascara
@ 113, 51 Say oSay Prompt "Empresa" Size 40, 08 Of oDlg Pixel
@ 112, 80 MSGet oMascEmp Var cMascEmp Size 05, 05 Pixel Picture "@!" Valid ( cMascEmp := StrTran( cMascEmp, " ", "?" ), oMascEmp:Refresh(), .T. ) ;
Message "Máscara Empresa ( ?? )" Of oDlg
oSay:cToolTip := oMascEmp:cToolTip
@ 128, 10 Button oButInv Prompt "&Inverter" Size 32, 12 Pixel Action ( InvSelecao( @aVetor, oLbx, @lChk, oChkMar ), VerTodos( aVetor, @lChk, oChkMar ) ) ;
Message "Inverter Seleção" Of oDlg
oButInv:SetCss( CSSBOTAO )
@ 128, 50 Button oButMarc Prompt "&Marcar" Size 32, 12 Pixel Action ( MarcaMas( oLbx, aVetor, cMascEmp, .T. ), VerTodos( aVetor, @lChk, oChkMar ) ) ;
Message "Marcar usando" + CRLF + "máscara ( ?? )" Of oDlg
oButMarc:SetCss( CSSBOTAO )
@ 128, 80 Button oButDMar Prompt "&Desmarcar" Size 32, 12 Pixel Action ( MarcaMas( oLbx, aVetor, cMascEmp, .F. ), VerTodos( aVetor, @lChk, oChkMar ) ) ;
Message "Desmarcar usando" + CRLF + "máscara ( ?? )" Of oDlg
oButDMar:SetCss( CSSBOTAO )
@ 112, 157 Button oButOk Prompt "Processar" Size 32, 12 Pixel Action ( RetSelecao( @aRet, aVetor ), oDlg:End() ) ;
Message "Confirma a seleção e efetua" + CRLF + "o processamento" Of oDlg
oButOk:SetCss( CSSBOTAO )
@ 128, 157 Button oButCanc Prompt "Cancelar" Size 32, 12 Pixel Action ( IIf( lTeveMarc, aRet := aMarcadas, .T. ), oDlg:End() ) ;
Message "Cancela o processamento" + CRLF + "e abandona a aplicação" Of oDlg
oButCanc:SetCss( CSSBOTAO )
Activate MSDialog oDlg Center
EndIf
RestArea( aSalvAmb )
dbSelectArea( "SM0" )
dbCloseArea()
Return aRet
//--------------------------------------------------------------------
/*/{Protheus.doc} MarcaTodos
Função auxiliar para marcar/desmarcar todos os ítens do ListBox ativo
@param lMarca Contéudo para marca .T./.F.
@param aVetor Vetor do ListBox
@param oLbx Objeto do ListBox
@author Ernani Forastieri
@since 27/09/2004
@version 1.0
/*/
//--------------------------------------------------------------------
Static Function MarcaTodos( lMarca, aVetor, oLbx )
Local nI := 0
For nI := 1 To Len( aVetor )
aVetor[nI][1] := lMarca
Next nI
oLbx:Refresh()
Return NIL
//--------------------------------------------------------------------
/*/{Protheus.doc} InvSelecao
Função auxiliar para inverter a seleção do ListBox ativo
@param aVetor Vetor do ListBox
@param oLbx Objeto do ListBox
@author Ernani Forastieri
@since 27/09/2004
@version 1.0
/*/
//--------------------------------------------------------------------
Static Function InvSelecao( aVetor, oLbx )
Local nI := 0
For nI := 1 To Len( aVetor )
aVetor[nI][1] := !aVetor[nI][1]
Next nI
oLbx:Refresh()
Return NIL
//--------------------------------------------------------------------
/*/{Protheus.doc} RetSelecao
Função auxiliar que monta o retorno com as seleções
@param aRet Array que terá o retorno das seleções (é alterado internamente)
@param aVetor Vetor do ListBox
@author Ernani Forastieri
@since 27/09/2004
@version 1.0
/*/
//--------------------------------------------------------------------
Static Function RetSelecao( aRet, aVetor )
Local nI := 0
aRet := {}
For nI := 1 To Len( aVetor )
If aVetor[nI][1]
aAdd( aRet, { aVetor[nI][2] , aVetor[nI][3], aVetor[nI][2] + aVetor[nI][3] } )
EndIf
Next nI
Return NIL
//--------------------------------------------------------------------
/*/{Protheus.doc} MarcaMas
Função para marcar/desmarcar usando máscaras
@param oLbx Objeto do ListBox
@param aVetor Vetor do ListBox
@param cMascEmp Campo com a máscara (???)
@param lMarDes Marca a ser atribuída .T./.F.
@author Ernani Forastieri
@since 27/09/2004
@version 1.0
/*/
//--------------------------------------------------------------------
Static Function MarcaMas( oLbx, aVetor, cMascEmp, lMarDes )
Local cPos1 := SubStr( cMascEmp, 1, 1 )
Local cPos2 := SubStr( cMascEmp, 2, 1 )
Local nPos := oLbx:nAt
Local nZ := 0
For nZ := 1 To Len( aVetor )
If cPos1 == "?" .or. SubStr( aVetor[nZ][2], 1, 1 ) == cPos1
If cPos2 == "?" .or. SubStr( aVetor[nZ][2], 2, 1 ) == cPos2
aVetor[nZ][1] := lMarDes
EndIf
EndIf
Next
oLbx:nAt := nPos
oLbx:Refresh()
Return NIL
//--------------------------------------------------------------------
/*/{Protheus.doc} VerTodos
Função auxiliar para verificar se estão todos marcados ou não
@param aVetor Vetor do ListBox
@param lChk Marca do CheckBox do marca todos (referncia)
@param oChkMar Objeto de CheckBox do marca todos
@author Ernani Forastieri
@since 27/09/2004
@version 1.0
/*/
//--------------------------------------------------------------------
Static Function VerTodos( aVetor, lChk, oChkMar )
Local lTTrue := .T.
Local nI := 0
For nI := 1 To Len( aVetor )
lTTrue := IIf( !aVetor[nI][1], .F., lTTrue )
Next nI
lChk := IIf( lTTrue, .T., .F. )
oChkMar:Refresh()
Return NIL
//--------------------------------------------------------------------
/*/{Protheus.doc} MyOpenSM0
Função de processamento abertura do SM0 modo exclusivo
@author TOTVS Protheus
@since 23/01/2017
@obs Gerado por EXPORDIC - V.5.2.1.0 EFS / Upd. V.4.20.15 EFS
@version 1.0
/*/
//--------------------------------------------------------------------
Static Function MyOpenSM0(lShared)
Local lOpen := .F.
Local nLoop := 0
For nLoop := 1 To 20
dbUseArea( .T., , "SIGAMAT.EMP", "SM0", lShared, .F. )
If !Empty( Select( "SM0" ) )
lOpen := .T.
dbSetIndex( "SIGAMAT.IND" )
Exit
EndIf
Sleep( 500 )
Next nLoop
If !lOpen
MsgStop( "Não foi possível a abertura da tabela " + ;
IIf( lShared, "de empresas (SM0).", "de empresas (SM0) de forma exclusiva." ), "ATENÇÃO" )
EndIf
Return lOpen
//--------------------------------------------------------------------
/*/{Protheus.doc} LeLog
Função de leitura do LOG gerado com limitacao de string
@author TOTVS Protheus
@since 23/01/2017
@obs Gerado por EXPORDIC - V.5.2.1.0 EFS / Upd. V.4.20.15 EFS
@version 1.0
/*/
//--------------------------------------------------------------------
Static Function LeLog()
Local cRet := ""
Local cFile := NomeAutoLog()
Local cAux := ""
FT_FUSE( cFile )
FT_FGOTOP()
While !FT_FEOF()
cAux := FT_FREADLN()
If Len( cRet ) + Len( cAux ) < 1048000
cRet += cAux + CRLF
Else
cRet += CRLF
cRet += Replicate( "=" , 128 ) + CRLF
cRet += "Tamanho de exibição maxima do LOG alcançado." + CRLF
cRet += "LOG Completo no arquivo " + cFile + CRLF
cRet += Replicate( "=" , 128 ) + CRLF
Exit
EndIf
FT_FSKIP()
End
FT_FUSE()
Return cRet
/////////////////////////////////////////////////////////////////////////////