Acda 100

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 70

1 #INCLUDE "Acda100.

ch"
2 #INCLUDE "PROTHEUS.CH"
3 #INCLUDE "TOPCONN.CH"
4 #INCLUDE "DBTREE.CH"
5
6 /*
7 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
8 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
9 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
10 ±±³Fun‡…o ³ ACDA100 ³ Autor ³ Eduardo Motta ³ Data ³ 06/04/01 ³±±
11 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
12 ±±³Descri‡…o ³ Rotina de geracao da ordem de separacao ³±±
13 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
14 ±±³ Uso ³ SIGAACD ³±±
15 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
16 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
17 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
18 */
19 /*
20 Parametros utilizados (pergunte):
21
22 AIA101
23 MV_PAR01 - Opcao: Pedidos de Venda / Notas Fiscais / Ordens de Producao
24
25
26 Pedidos de Venda:
27 -----------------
28
29 AIA106 - Parametros - Brasil
30 MV_PAR01 - Confere Lote ? Sim/Nao
31 MV_PAR02 - Embal Simultanea ? Sim/Nao
32 MV_PAR03 - Embalagem ? Sim/Nao
33 MV_PAR04 - Gera Nota ? Sim/Nao
34 MV_PAR05 - Imprime Nota ? Sim/Nao
35 MV_PAR06 - Imprime Etiq.Volume ? Sim/Nao
36 MV_PAR07 - Embarque ? Sim/Nao
37 MV_PAR08 - Aglutina Pedido ? Sim/Nao
38 MV_PAR09 - Aglutina Armazem ? Sim/Nao
39
40 AIA106 - Parametros - Outros Países
41 MV_PAR01 - Confere Lote ? Sim/Nao
42 MV_PAR02 - Embal Simultanea ? Sim/Nao
43 MV_PAR03 - Embalagem ? Sim/Nao
44 MV_PAR04 - Imprime Etiq.Volume ? Sim/Nao
45 MV_PAR05 - Embarque ? Sim/Nao
46 MV_PAR06 - Aglutina Pedido ? Sim/Nao
47 MV_PAR07 - Aglutina Armazem ? Sim/Nao
48
49 AIA102 - Filtros
50 MV_PAR01 - Separador ?
51 MV_PAR02 - Pedido de ?
52 MV_PAR03 - Pedido ate ?
53 MV_PAR04 - Cliente de ?
54 MV_PAR05 - Loja Cliente de ?
55 MV_PAR06 - Cliente ate ?
56 MV_PAR07 - Loja Cliente ate ?
57 MV_PAR08 - Data Liberacao de ?
58 MV_PAR09 - Data Liberacao ate ?
59 MV_PAR10 - Pre-Separacao ? Sim/Nao
60
61
62 Notas Fiscais:
63 --------------
64
65 AIA107 - Parametros
66 MV_PAR01 - Embal Simultanea ? Sim/Nao
67 MV_PAR02 - Embalagem ? Sim/Nao
68 MV_PAR03 - Imprime Nota ? Sim/Nao
69 MV_PAR04 - Imprime Etiq.Volume ? Sim/Nao
70 MV_PAR05 - Embarque ? Sim/Nao
71
72 AIA103 - Filtros
73 MV_PAR01 - Separador ?
74 MV_PAR02 - Nota de ?
75 MV_PAR03 - Serie de ?
76 MV_PAR04 - Nota ate ?
77 MV_PAR05 - Serie ate ?
78 MV_PAR06 - Cliente de ?
79 MV_PAR07 - Loja Cliente de ?
80 MV_PAR08 - Cliente ate ?
81 MV_PAR09 - Loja Cliente ate ?
82 MV_PAR10 - Data emissao de ?
83 MV_PAR11 - Data emissao ate ?
84
85
86 Ordens de Producao:
87 -------------------
88
89 AIA108 - Parametros
90 MV_PAR01 - Requisita material ? Sim/Nao
91 MV_PAR02 - Aglutina Armazem ? Sim/Nao
92
93 AIA104 - Filtros
94 MV_PAR01 - Separador ?
95 MV_PAR02 - Op de ?
96 MV_PAR03 - Op ate ?
97 MV_PAR04 - Data emissao de ?
98 MV_PAR05 - Data emissao ate ?
99 MV_PAR06 - Pre-Separacao ?
100
101
102 */
103 Function ACDA100()
104 Local aCoresUsr := {}
105 PRIVATE aRotina := MenuDef()
106
107 PRIVATE cCadastro := OemtoAnsi( STR0007 ) //"Ordens de separacao"
108 PRIVATE aRecno:={}
109 PRIVATE aHeader := {}
110
111 //Configuracoes da pergunte AIA106 (Pedidos de Venda), ativado pela tecla F12:
112 PRIVATE nConfLote
113 PRIVATE nEmbSimul
114 PRIVATE nEmbalagem
115 PRIVATE nGeraNota
116 PRIVATE nImpNota
117 PRIVATE nImpEtVol
118 PRIVATE nEmbarque
119 PRIVATE nAglutPed
120 PRIVATE nAglutArm
121 //Configuracoes da pergunte AIA107 (Notas Fiscais), ativado pela tecla F12:
122 PRIVATE nEmbSimuNF
123 PRIVATE nEmbalagNF
124 PRIVATE nImpNotaNF
125 PRIVATE nImpVolNF
126 PRIVATE nEmbarqNF
127 //Configuracoes da pergunte AIA108 (Ordens de Producao), ativado pela tecla F12:
128 PRIVATE nReqMatOP
129 PRIVATE nAglutArmOP
130 PRIVATE nPreSep
131
132 //configuração das perguntas
133 STATIC aPerg100 := {}
134
135 If ExistBlock("ACD100M")
136 ExecBlock("ACD100M",.F.,.F.)
137 EndIf
138
139 aCores := { { "CB7->CB7_DIVERG == '1'", "DISABLE" },;
140 { "CB7->CB7_STATPA == '1'", "BR_CINZA" },;
141 { "CB7->CB7_STATUS == '9'", "ENABLE" },;
142 { "CB7->CB7_STATUS $ '12345678'","BR_AMARELO" },;
143 { "CB7->CB7_STATUS == '0'", "BR_AZUL" } }
144
145 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
146 //³Ponto de entrada para inclusão de nova COR da legenda ³
147 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
148 If ExistBlock("ACD100CR")
149 aCoresUsr := ExecBlock("ACD100CR",.F.,.F.,{aCores})
150 If ValType(aCoresUsr) == "A"
151 aCores := aClone(aCoresUsr)
152 EndIf
153 EndIf
154
155 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
156 //³ Ativa tecla F12 para acionar perguntas ³
157 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
158 SetKey(VK_F12,{||AtivaF12()})
159 mBrowse( 6, 1, 22, 75, "CB7", , , , , , aCores, , , ,{|x|TimerBrw(x)})
160 SetKey(VK_F12,Nil)
161
162 Return
163
164 /*
165 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
166 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
167 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
168 ±±³Fun‡…o ³ACDA100Vs ³ Autor ³ Eduardo Motta ³ Data ³ 06/04/01 ³±±
169 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
170 ±±³Descri‡…o ³ Programa de visualizacao da Ordem de Separacao ³±±
171 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
172 ±±³Sintaxe e ³ Void ACDA100Vs(ExpC1,ExpN1,ExpN2) ³±±
173 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
174 ±±³Parametros³ ExpC1 = Alias do arquivo ³±±
175 ±±³ ³ ExpN1 = Numero do registro ³±±
176 ±±³ ³ ExpN2 = Numero da opcao selecionada ³±±
177 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
178 ±±³ Uso ³ Generico ³±±
179 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
180 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
181 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
182 */
183
184 Function ACDA100Vs(cAlias,nReg,nOpcx)
185 Local oDlg
186 Local oGet
187
188 Local cSeekCB8 := CB8->(xFilial("CB8")) + CB7->CB7_ORDSEP
189 Local aSize := {}
190 Local aInfo := {}
191 Local aObjects := {}
192 Local aObj := {}
193 Local aButtons := {}
194 Local lEmbal := ("01" $ CB7->CB7_TIPEXP) .OR. ("02" $ CB7->CB7_TIPEXP)
195 Local aHeadAUX := {}
196 Local nI
197
198 Private oTimer
199 Private Altera := .F.
200 Private Inclui := .F.
201 Private aHeader := {}
202 Private aCols := {}
203 Private aTela := {},aGets := {}
204
205 Private cBmp1 := "PMSEDT3" //"PMSDOC" //"FOLDER5" //"PMSMAIS" //"SHORTCUTPLUS"
206 Private cBmp2 := "PMSDOC" //"PMSEDT3" //"FOLDER6" //"PMSMENOS" //"SHORTCUTMINUS"
207
208 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
209 //³ Verifica se existe algum dado no arquivo de Itens ³
210 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
211 CB8->(DbSetOrder(1))
212 If ! CB8->( dbSeek( cSeekCB8 ) )
213 Return .T.
214 EndIf
215
216 If lEmbal
217 aadd(aButtons, {'AVGBOX1',{||MsgRun(STR0121,STR0122,{|| ConsEmb(aHeader,aCols)
})},STR0123,STR0123}) //"Carregando consulta, aguarde..."###"Ordem de
Separação"###"Embalagens"###"Embalagens"
218 Endif
219 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
220 //³ Adiciona botoes do usuario na EnchoiceBar ³
221 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
222 If ExistBlock( "ACD100BUT" )
223 If ValType( aUsButtons := ExecBlock( "ACD100BUT", .F., .F., {nOpcx} ) ) == "A"
224 AEval( aUsButtons, { |x| AAdd( aButtons, x ) } )
225 EndIf
226 EndIf
227
228 RegToMemory("CB7")
229
230 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
231 //³ Monta o cabecalho ³
232 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
233
234 aHeadAUX := aClone(APBuildHeader("CB8"))
235 For nI := 1 to Len(aHeadAUX)
236 If X3USO(aHeadAUX[nI,7]) .and. alltrim(aHeadAUX[nI,2]) <> "CB8_ORDSEP" .and.
cNivel >= GetSx3Cache(trim(aHeadAUX[nI,2]), "X3_NIVEL")
237 Aadd(aHeader,aHeadAUX[nI])
238 EndIf
239 Next nI
240
241 MontaCols(cSeekCB8)
242
243 aSize := MsAdvSize()
244 aAdd(aObjects, {100, 130, .T., .F.})
245 aAdd(aObjects, {100, 200, .T., .T.})
246 aInfo := {aSize[1], aSize[2], aSize[3], aSize[4], 2, 2}
247 aPosObj := MsObjSize(aInfo, aObjects)
248
249 DEFINE MSDIALOG oDlg TITLE OemToAnsi(STR0008) From aSize[7],0 to aSize[6],aSize[5]
OF oMainWnd PIXEL //"Ordens de separacao - Visualizacao"
250 oEnc:=MsMget():New(cAlias,nReg,nOpcx,,,,,{aPosObj[1,1],aPosObj[1,2],aPosObj[1,3],aPosO
bj[1,4]},,3,,,,,,.t.)
251 oGet:=MSGetDados():New(aPosObj[2,1],aPosObj[2,2],aPosObj[2,3],aPosObj[2,4],
nOpcx,"AllWaysTrue","AllWaysTrue", ,.F.)
252
253 DEFINE TIMER oTimer INTERVAL 1000 ACTION MontaCols(cSeekCB8,oGet) OF oDlg
254 oTimer:Activate()
255
256 ACTIVATE MSDIALOG oDlg ON INIT
EnchoiceBar(oDlg,{||nOpca:=1,oDlg:End()},{||oDlg:End()},,aButtons)
257 Return
258
259 /*
260 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
261 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
262 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
263 ±±³Fun‡…o ³ACDA100Al ³ Autor ³ Eduardo Motta ³ Data ³ 06/04/01 ³±±
264 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
265 ±±³Descri‡…o ³ Programa de alteracao do Ordem de Separacao ³±±
266 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
267 ±±³Sintaxe e ³ Void ACDA100Al(ExpC1,ExpN1,ExpN2) ³±±
268 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
269 ±±³Parametros³ ExpC1 = Alias do arquivo ³±±
270 ±±³ ³ ExpN1 = Numero do registro ³±±
271 ±±³ ³ ExpN2 = Opcao selecionada no menu ³±±
272 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
273 ±±³ Uso ³ Generico ³±±
274 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
275 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
276 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
277 */
278
279 Function ACDA100Al(cAlias,nReg,nOpcx)
280 Local oDlg
281 Local cSeekCB8 := xFilial("CB8") + CB7->CB7_ORDSEP
282 Local nOpca := 0
283 Local nI,nJ
284 Local nPosDel:=0
285 Local lAltEmp:=(CB7->CB7_ORIGEM $ '1|3')
286 Local nDel
287 Local lContinua := .T.
288
289 Local aSize := {}
290 Local aInfo := {}
291 Local aObjects := {}
292 Local aObj := {}
293 Local aButtons := {}
294 Local aHeadAUX := {}
295 Local aHeadCBC := {}
296 Local aItensTrc := {}
297 Local nPos := 0
298 Local nX := 0
299 Local nQtdSep := 0
300 Local cItemAnt := ''
301 Local aEmpPrtBkp := {}
302
303 Private oGet
304 Private Altera := .T.
305 Private Inclui := .F.
306 Private aHeader := {}
307 Private aCols := {}
308 Private aAcolsOri := {}
309 Private lAlterouEmp := .f.
310 Private lDiverg := .f.
311 Private nItensCB8 := 0
312
313 CB8->(DbSetOrder(1))
314 If CB7->CB7_STATUS == "9" .or. ! CB8->( dbSeek( cSeekCB8 ) )
315 MsgAlert( STR0010, STR0011 ) //"Ordem de separacao concluida."###"Aviso"
316 Return
317 EndIf
318
319 If lAltEmp
320 aadd(aButtons, {'RELOAD',{||AltEmp(aHeader,aCols)},STR0124,STR0124})
//"Alt.Empenhos"###"Alt.Empenhos"
321 Endif
322 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
323 //³ Adiciona botoes do usuario na EnchoiceBar ³
324 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
325 If ExistBlock( "ACD100BUT" )
326 If ValType( aUsButtons := ExecBlock( "ACD100BUT", .F., .F., {nOpcx} ) ) == "A"
327 AEval( aUsButtons, { |x| AAdd( aButtons, x ) } )
328 EndIf
329 EndIf
330
331 RegToMemory("CB7")
332
333 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
334 //³ Monta o cabecalho ³
335 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
336 aHeadAUX := aClone(APBuildHeader("CB8"))
337 For nI := 1 to Len(aHeadAUX)
338 If X3USO(aHeadAUX[nI,7]) .and. cNivel >= GetSx3Cache(trim(aHeadAUX[nI,2]),
"X3_NIVEL")
339 Aadd (aHeadCBC,aHeadAUX[nI])
340 EndIf
341 Next nI
342
343 MontaCols(cSeekCB8)
344 aColsOri := aClone(aCols)
345
346 aSize := MsAdvSize()
347 aAdd(aObjects, {100, 130, .T., .F.})
348 aAdd(aObjects, {100, 200, .T., .T.})
349 aInfo := {aSize[1], aSize[2], aSize[3], aSize[4], 2, 2}
350 aPosObj := MsObjSize(aInfo, aObjects)
351
352 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
353 //³ Ponto de entrada para validar a abertura do dialog de alteracao ³
354 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
355 If ExistBlock("AC100VLA")
356 lContinua := ExecBlock("AC100VLA")
357 EndIf
358
359 If lContinua
360 DEFINE MSDIALOG oDlg TITLE OemToAnsi(STR0012) From aSize[7],0 to
aSize[6],aSize[5] OF oMainWnd PIXEL //"Ordens de separacao - Alteracao"
361
oEnc:=MsMget():New(cAlias,nReg,nOpcx,,,,,{aPosObj[1,1],aPosObj[1,2],aPosObj[1,3],a
PosObj[1,4]},,3,,,,,,.t.)
362 oGet:= MSGetDados():New(aPosObj[2,1],aPosObj[2,2],aPosObj[2,3],aPosObj[2,4],
nOpcx,"ACD100LinOK","ACD100TudOK",,.T.,Nil,Nil,Nil,Len(aCols))
363 ACTIVATE MSDIALOG oDlg ON INIT
EnchoiceBar(oDlg,{||nOpca:=1,if(oGet:TudoOk(),oDlg:End(),nOpca :=
0)},{||oDlg:End()},,aButtons)
364
365 If nOpca == 1
366
367 // -----------------------------------------------------------------------
368 //Valida se todas as linhas foram excluidas, nao permitindo via alteracao:
369 nPosDel := Len(aHeader)+1
370 nDel := 0
371 aEval(aCols,{|x| If(x[nPosDel],nDel++,nil)})
372
373 If nDel == Len(aCols)
374 MsgAlert( STR0125, STR0011 ) //"Para excluir todos os itens acessar a
rotina de Estorno da Ordem de Separacao!"###"Aviso"
375 Return
376 Endif
377
378 lDiverg := .F.
379 nItensCB8 := 0
380 Begin Transaction
381
382 If !lAlterouEmp
383
384
//--------------------------------------------------------------------
--------------------------
385 //Estorna as informacoes sobre a Ordem de Separacao nas tabelas do
sistema caso itens deletados:
386 LimpaInfoOS()
387
388
//--------------------------------------------------------------------
-------
389 // Caso houve apenas alteracoes em campos do CB8, sem alteracoes de
empenhos:
390 CB8->(DbSetOrder(1))
391 For nI := 1 to Len(aCols)
392 If aCols[nI,nPosDel]
393 Loop
394 Endif
395 ++nItensCB8
396 CB8->(DbGoto(aRecno[nI]))
397 CB8->(RecLock("CB8"))
398 For nJ := 1 to len(aHeader)
399 If aHeader[nJ,10] == "V"
400 Loop
401 EndIf
402 CB8->&(AllTrim(aHeader[nJ,2])) := aCols[nI,nJ]
403 Next
404 If !Empty(CB8->CB8_OCOSEP) .and.
(CB8->CB8_SALDOS-CB8->CB8_QTECAN) > 0
405 lDiverg := .T.
406 EndIf
407 CB8->(MsUnlock())
408 Next
409
410 Else
411
412
//--------------------------------------------------------------------
--------------------------
413 //Estorna as informacoes sobre a Ordem de Separacao nas tabelas do
sistema caso itens deletados:
414 LimpaInfoOS()
415
416 //--------------------------------------------
417 //Estorna os empenhos de todos os itens da OS:
418 AutoGrLog(STR0186) // " MANUTENÇÃO AUTOMÁTICA DOS EMPENHOS"
419 AutoGrLog("-------------------------------------------")
420 AutoGrLog(STR0126 + Alltrim (CB7->CB7_ORDSEP)) //"Atualizações da
Ordem de Separação: "
421 AutoGrLog(STR0127) //" *** EXCLUSÃO DOS EMPENHOS"
422 AutoGrLog(" ")
423
424 If !ProcAtuEmp(aColsOri,.t.)
425 AutoGrLog(STR0128) //"Ocorreu um erro no estorno dos empenhos da
OS!"
426 AutoGrLog(STR0129) //"Processo abortado!"
427 DisarmTransaction()
428 Break
429 EndIf
430
431
//--------------------------------------------------------------------
------------------
432 //Deleta os itens da Ordem de Separacao e grava novos registros com
base nas alteracoes:
433 GravaCB8()
434 CB8->(DbSetOrder(1))
435 CB8->(MsSeek(xFilial("CB8")+CB7->CB7_ORDSEP))
436 While !CB8->(Eof()) .And. CB8->CB8_ORDSEP == CB7->CB7_ORDSEP
437 nPos := aScan (aItensTrc,{|x| x[1]+x[2]+x[3]+x[5] ==
CB8->CB8_PEDIDO+CB8->CB8_ITEM+CB8->CB8_SEQUEN+CB8->CB8_LOTECT})
438 If nPos == 0
439 aAdd(aItensTrc, {CB8->CB8_PEDIDO, CB8->CB8_ITEM,
CB8->CB8_SEQUEN, CB8->CB8_QTDORI, CB8->CB8_LOTECT,
CB8->CB8_NUMLOT,CB8->CB8_PROD, CB8->CB8_LOCAL,{}})
440 nPos:=len(aItensTrc)
441 nQtdSep += CB8->CB8_QTDORI
442 Else
443 aItensTrc[nPos][4] += CB8->CB8_QTDORI
444 nQtdSep += CB8->CB8_QTDORI
445 EndIf
446 aAdd(aItensTrc[nPos,9],{CB8->CB8_LOTECT,
; // 1
447
CB8->CB8_NUMLOT,;
// 2
448 CB8->CB8_LCALIZ,
;
// 3
449
CB8->CB8_NUMSER,;
// 4
450
CB8->CB8_QTDORI,;
// 5
451
ConvUM(CB8->CB8_PROD,CB8->CB8_QTDORI,0,2),;
// 6
452
Posicione("SB8",3,xFilial("SB8")+CB8->CB8_PROD+
CB8->CB8_LOCAL+CB8->CB8_LOTECT+CB8->CB8_NUMLOT,
"B8_DTVALID"),; //7
453
,;
// 8
454
,;
// 9
455
,;
// 10
456
CB8->CB8_LOCAL,;
// 11
457 0})
458 CB8->(DbSkip())
459 EndDo
460
461 SC9->(DbSetOrder(1))
462
463 For nx := 1 to Len(aItensTrc)
464 If
SC9->(MsSeek(xFilial("SC9")+aItensTrc[nX][1]+aItensTrc[nX][2]+aIte
nsTrc[nX][3]))
465 If !Empty(SC9->C9_ORDSEP)
466 Reclock("SC9",.F.)
467 SC9->C9_ORDSEP := ''
468 MsUnlock()
469 EndIf
470 SC9->(a460Estorna())
471 EndIf
472 Next nX
473
474 CB8->(MsSeek(xFilial("CB8")+CB7->CB7_ORDSEP))
475 For nX := 1 to Len(aItensTrc)
476 If SC6->(MsSeek(xFilial("SC6")+aItensTrc[nX][1]+aItensTrc[nX][2]))
477 If cItemAnt != aItensTrc[nX][1]+aItensTrc[nX][2]
478 aEmpPrtBkp := aItensTrc[nX,9]
479
MaLibDoFat(SC6->(Recno()),nQtdSep,.T.,.T.,.F.,.F.,.F.,.F.,
NIL,{||SC9->C9_ORDSEP := CB7->CB7_ORDSEP},aEmpPrtBkp,.T.)
480 EndIf
481 EndIf
482 cItemAnt := aItensTrc[nX][1]+aItensTrc[nX][2]
483 Next nX
484 //---------------------------------------
485 //Refaz empenhos de todos os itens da OS:
486 AutoGrLog(STR0130) //" *** INCLUSÃO DOS EMPENHOS"
487 AutoGrLog(" ")
488
489 If !ProcAtuEmp(aCols,.f.)
490 AutoGrLog(STR0128) //"Ocorreu um erro no estorno dos empenhos da
OS!"
491 AutoGrLog(STR0129) //"Processo abortado!"
492 DisarmTransaction()
493 Break
494 EndIf
495
496 AutoGrLog(" ")
497 AutoGrLog(STR0131) //"Manutenção dos Lotes Finalizada."
498 MostraErro()
499
500 Endif
501
502 //----------------------------
503 //Atualiza informacoes em CB7:
504 AtuCB7()
505
506 End Transaction
507
508 //--- P.E. apos gravacao da alteracao O.S.
509 If ExistBlock("ACD100ALT")
510 ExecBlock("ACD100ALT",.f.,.f.)
511 EndIf
512
513 EndIf
514 EndIf
515
516 Return
517
518 /*/
519 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
520 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
521 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
522 ±±ºFun‡„o ³ A100LinOK º Autor ³ Henrique Gomes Oikawa º Data ³ 28/02/05 º±±
523 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
524 ±±ºDescri‡„o ³ Validacao da linha na alteracao da Ordem de Separacao º±±
525 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
526 ±±ºUso ³ SIGAACD º±±
527 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
528 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
529 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
530 /*/
531
532 Function ACD100LinOK()
533 Local lRet := .F.
534 Local lPreSep :=("09*" $ CB7->CB7_TIPEXP)
535 Local nPosDel:= Len(aHeader)+1
536
537 If aCols[n,nPosDel] //item deletado...
538 lRet := .F.
539 If CB7->CB7_STATUS == "0"
540 lRet := .T.
541 ElseIf CB7->CB7_STATPA == '1'
542 If aCols[n,GDFieldPos("CB8_QTDORI")] == aCols[n,GDFieldPos("CB8_SALDOS")]
//O produto ainda nao foi separado...
543 lRet := .T.
544 Else
545 If lPreSep
546 MsgAlert( STR0036+CB7->CB7_ORDSEP+STR0037, STR0011 ) //"A Ordem de
Pre-Separacao "###" possui produtos separados!"###"Aviso"
547 Else
548 MsgAlert( STR0038+CB7->CB7_ORDSEP+STR0037, STR0011 ) //"A Ordem de
Separacao "###" possui produtos separados!"###"Aviso"
549 Endif
550 Endif
551 ElseIf CB7->CB7_STATPA != '1'
552 If lPreSep
553 MsgAlert( STR0036+CB7->CB7_ORDSEP+STR0039, STR0011 ) //"A Ordem de
Pre-Separacao "###" esta em andamento!"###"Aviso"
554 Else
555 MsgAlert( STR0038+CB7->CB7_ORDSEP+STR0039, STR0011 ) //"A Ordem de
Separacao "###" esta em andamento!"###"Aviso"
556 Endif
557 Endif
558 Else
559 lRet:= .T.
560 Endif
561 Return lRet
562
563 /*/
564 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
565 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
566 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
567 ±±ºFun‡„o ³ A100TudOK º Autor ³ Henrique Gomes Oikawa º Data ³ 28/02/05 º±±
568 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
569 ±±ºDescri‡„o ³ Validacao Tudo OK na alteracao da Ordem de Separacao º±±
570 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
571 ±±ºUso ³ SIGAACD º±±
572 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
573 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
574 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
575 /*/
576
577 Function ACD100TudOK()
578 Local nX
579 Local nLinhas := 0
580 Local nPosDel := Len(aHeader)+1
581 Local lRet := .T.
582
583 For nX:= 1 to Len(aCols)
584 If ! aCols[nX,nPosDel]
585 nLinhas++
586 Endif
587 Next
588
589 If nLinhas < 1 // Tem que ter no minimo uma linha
590 lRet := .f.
591 Endif
592
593 Return lRet
594
595 /*
596 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
597 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
598 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
599 ±±³Fun‡…o ³ACDA100Et ³ Autor ³ Eduardo Motta ³ Data ³ 06/04/01 ³±±
600 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
601 ±±³Descri‡…o ³ Programa de estorno da Ordem de Separacao ³±±
602 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
603 ±±³Sintaxe e ³ Void ACDA100Et(ExpC1,ExpN1,ExpN2) ³±±
604 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
605 ±±³Parametros³ ExpC1 = Alias do arquivo ³±±
606 ±±³ ³ ExpN1 = Numero do registro ³±±
607 ±±³ ³ ExpN2 = Numero da opcao selecionada ³±±
608 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
609 ±±³ Uso ³ Generico ³±±
610 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
611 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
612 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
613 */
614
615 Function ACDA100Et(cAlias,nReg,nOpcx)
616
617 Local oDlg
618 Local oGet
619 Local aPos := { 15, 1, 57, 315 }
620 Local cSeekCB8 := xFilial("CB8") + CB7->CB7_ORDSEP
621 Local nI
622 Local cItem
623 Local cSequen
624 Local cProd
625 Local nOpca := 0
626 Local cOP
627 Local lContinua := .T.
628
629 Local aSize := {}
630 Local aInfo := {}
631 Local aObjects := {}
632 Local aObj := {}
633 Local aHeadAUX := {}
634
635 Private Altera := .F.
636 Private Inclui := .F.
637 Private aHeader := {}
638 Private aCols := {}
639 Private aTela := {},aGets := {}
640
641 CB8->(DbSetOrder(1)) // Forca a utilizacao do indice de ordem 1, pois o programa
estava se perdendo (by Erike)
642 CB9->(DbSetOrder(1))
643 If CB7->CB7_STATUS == "9"
644 MsgAlert(STR0188,STR0011) //"Esta Ordem de separação não pode ser estornada,
pois a mesma já está Finalizada."###"Aviso"
645 Return
646 ElseIf CB7->CB7_STATUS # "0" .and. Empty(CB7->CB7_STATPA)
647 MsgAlert(STR0040,STR0011) //"Esta Ordem de separacao nao pode ser estornada pois
a mesma esta sendo executada neste momento"###"Aviso"
648 Return
649 ElseIf CB7->CB7_STATUS # "0" .and. CB9->(DbSeek(xFilial("CB9")+CB7->CB7_ORDSEP))
650 MsgAlert( STR0013, STR0011 ) //"A Ordem de Separacao nao pode ter nenhuma
movimentacao para ser estornada."###"Aviso"
651 Return
652 EndIf
653
654 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
655 //³ Verifica se existe algum dado no arquivo de Itens ³
656 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
657
658 If ! CB8->( dbSeek( cSeekCB8 ) )
659 Return .T.
660 EndIf
661
662 If ExistBlock('ACD100VE')
663 lContinua := ExecBlock('ACD100VE',.F.,.F.)
664 If Valtype(lContinua)#'L'
665 lContinua := .T.
666 EndIf
667 If !lContinua
668 Return
669 EndIf
670 EndIf
671
672 RegToMemory("CB7")
673
674 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
675 //³ Monta o cabecalho ³
676 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
677 aHeadAUX := aClone(APBuildHeader("CB8"))
678 For nI := 1 to Len(aHeadAUX)
679 If X3USO(aHeadAUX[nI,7]) .and. cNivel >= GetSx3Cache(trim(aHeadAUX[nI,2]),
"X3_NIVEL") .And. AllTrim( aHeadAUX[nI,2] ) <> "CB8_ORDSEP"
680 Aadd (aHeader,aHeadAUX[nI])
681 EndIf
682 Next nI
683
684 MontaCols(cSeekCB8)
685
686 aSize := MsAdvSize()
687 aAdd(aObjects, {100, 130, .T., .F.})
688 aAdd(aObjects, {100, 200, .T., .T.})
689 aInfo := {aSize[1], aSize[2], aSize[3], aSize[4], 2, 2}
690 aPosObj := MsObjSize(aInfo, aObjects)
691
692 DEFINE MSDIALOG oDlg TITLE OemToAnsi(STR0014) From aSize[7],0 to aSize[6],aSize[5]
OF oMainWnd PIXEL //"Ordens de separacao - Estorno"
693 oEnc:=MsMget():New(cAlias,nReg,nOpcx,,,,,{aPosObj[1,1],aPosObj[1,2],aPosObj[1,3],aPosO
bj[1,4]},,3,,,,,,.t.)
694 oGet:=MSGetDados():New(aPosObj[2,1],aPosObj[2,2],aPosObj[2,3],aPosObj[2,4],
nOpcx,"AllWaysTrue","AllWaysTrue", ,.F.)
695
696 DEFINE TIMER oTimer INTERVAL 1000 ACTION MontaCols(cSeekCB8,oGet) OF oDlg
697 oTimer:Activate()
698
699 ACTIVATE MSDIALOG oDlg ON INIT
EnchoiceBar(oDlg,{||nOpca:=1,oDlg:End()},{||oDlg:End()})
700
701 dbSelectArea( cAlias )
702
703 If nOpca == 1
704
705 If ExistBlock("ACD100ET")
706 ExecBlock("ACD100ET",.F.,.F.)
707 EndIf
708
709 Begin Transaction
710
711 SC9->(DbSetOrder(1))
712 CB8->(DbSetOrder(1))
713 dbSelectArea("CB7")
714 For nI := 1 to Len(aCols)
715 CB8->(DbGoto(aRecno[nI]))
716
717 If CB7->CB7_ORIGEM == "1"
718 SC9->(DbSetOrder(1))
719 SF2->(DbSetOrder(1))
720 SD2->(DbSetOrder(3))
721 If SC9->( dbSeek(
xFilial("SC9")+CB8->CB8_PEDIDO+CB8->CB8_ITEM+CB8->CB8_SEQUEN+CB8->CB8_PROD
) )
722 If ! Empty(SC9->C9_ORDSEP)
723 SC9->(RecLock("SC9",.F.))
724 SC9->C9_ORDSEP := ""
725 SC9->(MsUnlock())
726 Endif
727 EndIf
728 If SF2->(DBSeek(xFilial("SF2")+CB7->(CB7_NOTA+CB7_SERIE)))
729 If ! Empty(SF2->F2_ORDSEP)
730 SF2->(RecLock("SF2",.F.))
731 SF2->F2_ORDSEP := ""
732 SF2->(MsUnlock())
733 EndIf
734 EndIf
735 If SD2->( DBSeek(
xFilial("SD2")+CB7->(CB7_NOTA+CB7_SERIE+CB7_CLIENTE+CB7_LOJA)+aCols[ni,GDF
ieldPos("CB8_PROD")]+aCols[ni,GDFieldPos("CB8_ITEM")] ) )
736 If !Empty(SD2->D2_ORDSEP)
737 SD2->(RecLock("SD2",.F.))
738 SD2->D2_ORDSEP := ""
739 SD2->(MsUnlock())
740 EndIf
741 EndIf
742 ElseIf CB7->CB7_ORIGEM == "2"
743 SF2->(DbSetOrder(1))
744 SD2->(DbSetOrder(3))
745 If SF2->(DBSeek(xFilial("SF2")+CB7->(CB7_NOTA+CB7_SERIE)))
746 If ! Empty(SF2->F2_ORDSEP)
747 SF2->(RecLock("SF2",.F.))
748 SF2->F2_ORDSEP := ""
749 SF2->(MsUnlock())
750 EndIf
751 EndIf
752 If SD2->( DBSeek(
xFilial("SD2")+CB7->(CB7_NOTA+CB7_SERIE+CB7_CLIENTE+CB7_LOJA)+aCols[ni,GDF
ieldPos("CB8_PROD")]+aCols[ni,GDFieldPos("CB8_ITEM")] ) )
753 If !Empty(SD2->D2_ORDSEP)
754 SD2->(RecLock("SD2",.F.))
755 SD2->D2_ORDSEP := ""
756 SD2->(MsUnlock())
757 EndIf
758 EndIf
759 ElseIf CB7->CB7_ORIGEM == "3"
760 SC2->(DbSetOrder(1))
761 If SC2->(DbSeek(xFilial("SC2")+CB8->CB8_OP))
762 If ! Empty(SC2->C2_ORDSEP)
763 SC2->(RecLock("SC2",.F.))
764 SC2->C2_ORDSEP := ""
765 SC2->(MsUnlock())
766 Endif
767 Endif
768 EndIf
769 CB8->(RecLock( "CB8",.F.))
770 CB8->(dbDelete())
771 CB8->(MsUnLock())
772
773 If !Empty(CB7->CB7_PRESEP)
774 If
CB8->(DbSeek(xFilial("CB8")+CB7->CB7_PRESEP+CB8_ITEM+CB8_SEQUEN+CB8_PROD))
775 If CB8->CB8_SLDPRE == 0
776 CB8->(RecLock( "CB8",.F.))
777 CB8->CB8_SLDPRE := CB8->CB8_QTDORI
778 CB8->(MsUnLock())
779 CB8->(DbSkip())
780 EndIf
781 EndIf
782 EndIf
783
784 Next nI
785
786 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
787 //³ Exclui linha da tabela CB7 ³
788 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
789
790 CB7->(RecLock("CB7", .F.))
791 CB7->(dbDelete())
792 CB7->(MsUnlock())
793
794 End Transaction
795
796 EndIf
797
798 Return
799
800
801 /*
802 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
803 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
804 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
805 ±±³Fun‡„o ³ACDA100Gr ³ Autor ³ Eduardo Motta ³ Data ³ 06/04/01 ³±±
806 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
807 ±±³Descri‡„o ³ Rotina de geracao das ordens de separacao ³±±
808 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
809 ±±³Uso ³ SIGAACD ³±±
810 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
811 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
812 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
813 */
814 Function ACDA100Gr()
815 Local aRotBack := {}
816 Local cCondicao := ""
817 Local aNewFil := {}
818 Local cFilSC9 := ".T."
819 Local cFilSD2 := ".T."
820 Local cFilSC2 := ".T."
821 Local cSerie := ""
822
823 Local lRet := .T.
824 Local aArea := GetArea()
825
826 Local cGetMark := Nil
827 Local cBrwAlias := Nil
828 Local cBrwCpMark:= Nil
829 Local cBrwDesc := Nil
830 Local oBrwMrk := Nil
831
832 Local aLegend := {}
833 Local aBrwButt := {}
834 Local bMark2 := { ||}
835 Local bBrwLeg := { || oFWLegend:View() }
836 Local bBrwMark := { || a100Mark( oBrwMrk, 1, cGetMark, bMark2, cBrwAlias,
cBrwCpMark ) }
837 Local bBrwMakAll:= { || FWMsgRun(, {|| a100Mark( oBrwMrk, 2, cGetMark, bMark2,
cBrwAlias, cBrwCpMark ) }, STR0196, STR0197 ) }
838 Local bBrwGrava := { || ( ACDA100_Grava( cBrwAlias, Nil, Nil, cGetMark, Nil, Nil,
oBrwMrk ), oBrwMrk:SetFilterDefault( cCondicao ) ) }
839
840 Private oFwLegend := NIl
841
842 Private nGroupLoc := 0
843 PRIVATE nOrigExp := ""
844 PRIVATE cSeparador := Space(6) //variavel utilizada para armazenar o separador da
pergunte AIA102, pois o mesmo estava sendo sobreposto por outra pergunte, ao
precionar F12 na tela de geracao
845
846 Aadd( aBrwButt, { STR0005 , bBrwGrava , Nil, 1 } )
847 Aadd( aBrwButt, { STR0190 , bBrwMakAll, Nil, 1 } )
848 Aadd( aBrwButt, { STR0189 , bBrwLeg , Nil, 1 } )
849
850 If !Pergunte("AIA101",.T.)
851 Return
852 EndIf
853 nOrigExp := MV_PAR01
854 AtivaF12(nOrigExp) // carrega os valores das perguntes relacionados a configuracoes
855 If ExistBlock("ACD100FI")
856 aNewFil := ExecBlock("ACD100FI",.F.,.F.,{nOrigExp})
857 If ValType(aNewFil) == "A"
858 If aNewFil[1] == 1
859 cFilSC9 := aNewFil[2]
860 ElseIf aNewFil[1] == 2
861 cFilSD2 := aNewFil[2]
862 ElseIf aNewFil[1] == 3
863 cFilSC2 := aNewFil[2]
864 EndIf
865 EndIf
866 EndIf
867
868 aRotBack := aClone( aRotina )
869 aRotina := {{STR0005,"ACDA100_Grava",0,1} } //"Gerar"
870 //--- P.E. utilizado para adicionar itens no Menu da MarkBrowse
871 If ExistBlock("ACD100MNU")
872 ExecBlock("ACD100MNU",.f.,.f.,{nOrigExp})
873 EndIf
874 If nOrigExp == 1
875 If !( Pergunte("AIA102",.T.) )
876 lRet := .F.
877 Else
878 Aadd(aPerg100,ACD100Perg("AIA102"))
879 cSeparador := MV_PAR01
880 nPreSep := MV_PAR10
881
882 dbSelectArea("SC9")
883 dbSetOrder(1)
884
885 cCondicao := 'C9_PEDIDO >="'+mv_par02+'".And.C9_PEDIDO <="'+mv_par03+'".And.'
886 cCondicao += 'C9_CLIENTE >="'+mv_par04+'".And.C9_CLIENTE<="'+mv_par06+'".And.'
887 cCondicao += 'C9_LOJA >="'+mv_par05+'".And.C9_LOJA <="'+mv_par07+'".And.'
888 cCondicao +=
'DTOS(C9_DATALIB)>="'+DTOS(mv_par08)+'".And.DTOS(C9_DATALIB)<="'+DTOS(mv_par09
)+'".And.'
889 cCondicao += 'Empty(C9_ORDSEP) .And.'
890 cCondicao += ' C9_FILIAL = xFilial("SC9") .And. '
891 cCondicao += cFilSC9
892
893 cBrwAlias := 'SC9'
894 cBrwCpMark := 'C9_OK'
895 bMark2 := { || Empty( C9_BLEST + C9_BLCRED ) }
896 cGetMark := GetMark( .T., cBrwAlias, cBrwCpMark )
897 cBrwDesc := OemToAnsi( STR0191 )
898
899 Aadd( aLegend,{ "Empty( C9_BLEST + C9_BLCRED )" , "ENABLE" , STR0194 } )
900 Aadd( aLegend,{ "!Empty( C9_BLEST + C9_BLCRED )", "BR_VERMELHO" , STR0195 } )
901 oFwLegend := a1002Leg( aLegend )
902
903
904 EndIf
905 ElseIf nOrigExp == 2 // nota fiscal saida
906 If !( Pergunte("AIA103",.T.) )
907 lRet := .F.
908 Else
909 Aadd(aPerg100,ACD100Perg("AIA103"))
910 cSeparador := MV_PAR01
911 dbSelectArea("SD2")
912 dbSetOrder(3)
913
914 cSerie := SerieNfId("SD2",3,"D2_SERIE")
915 cChaveInd :=
'D2_FILIAL+D2_ORDSEP+D2_DOC+D2_SERIE+D2_CLIENTE+D2_LOJA+DTOS(D2_EMISSAO)'
//IndexKey()
916 cCondicao := 'D2_DOC >="' +mv_par02+'" .And. D2_DOC<="'
+mv_par04+'"'
917 cCondicao += '.And. '+cSerie+' >="' +mv_par03+'" .And. '+cSerie+' <= "'
+mv_par05+'"'
918 cCondicao += '.And. D2_CLIENTE>="' +mv_par06+'" .And.
D2_CLIENTE<="'+mv_par08+'"'
919 cCondicao += '.And. D2_LOJA>="' +mv_par07+'" .And. D2_LOJA<="'
+mv_par09+'"'
920 cCondicao += '.And.
DTOS(D2_EMISSAO)>="'+DTOS(mv_par10)+'".And.DTOS(D2_EMISSAO)<="'+DTOS(mv_par11)
+'"'
921 cCondicao += '.And. Empty(D2_ORDSEP) .And. '
922 cCondicao += ' D2_FILIAL = xFilial("SD2") .And. '
923 cCondicao += cFilSD2
924
925 If !Pergunte("AIA107",.T.)
926 lRet := .F.
927 Else
928 Aadd(aPerg100,ACD100Perg("AIA107"))
929
930 cBrwAlias := 'SD2'
931 cBrwCpMark := 'D2_OK'
932 bMark2 := { || Empty( D2_ORDSEP ) }
933 cGetMark := GetMark( .T., cBrwAlias, cBrwCpMark )
934 cBrwDesc := OemToAnsi( STR0192 )
935
936 Aadd( aLegend,{ "Empty( D2_ORDSEP )" , "ENABLE" , STR0194 } )
937 Aadd( aLegend,{ "!Empty( D2_ORDSEP )" , "BR_VERMELHO" , STR0195 } )
938 oFwLegend := a1002Leg( aLegend )
939
940 EndIf
941 EndIf
942
943 ElseIf nOrigExp == 3 // producao
944 If !( Pergunte("AIA104",.T.) )
945 lRet := .F.
946 Else
947 Aadd(aPerg100,ACD100Perg("AIA104"))
948 cSeparador := MV_PAR01
949 nPreSep := MV_PAR06
950
951 dbSelectArea("SC2")
952 dbSetOrder(1)
953
954 cCondicao := 'C2_NUM+C2_ITEM+C2_SEQUEN+C2_ITEMGRD >="'
+mv_par02+'".And.C2_NUM+C2_ITEM+C2_SEQUEN+C2_ITEMGRD <="'+mv_par03+'"'
955 cCondicao += '.And.
DTOS(C2_EMISSAO)>="'+DTOS(mv_par04)+'".And.DTOS(C2_EMISSAO)<="'+DTOS(mv_par05)
+'"'
956 cCondicao += '.And. Empty(C2_ORDSEP)'
957 cCondicao += '.And. Empty(C2_DATRF) .And. '
958 cCondicao += ' C2_FILIAL = xFilial("SC2") .And. '
959 cCondicao += cFilSC2
960
961 If !( Pergunte("AIA108",.T.) )
962 lRet := .F.
963 Else
964 nGroupLoc := Mv_Par02
965 Aadd(aPerg100,ACD100Perg("AIA108"))
966
967 cBrwAlias := 'SC2'
968 cBrwCpMark := 'C2_OK'
969 bMark2 := { || Empty( C2_ORDSEP ) }
970 cGetMark := GetMark( .T., cBrwAlias, cBrwCpMark )
971 cBrwDesc := OemToAnsi( STR0193 )
972
973 Aadd( aLegend,{ "Empty( C2_ORDSEP )" , "ENABLE" , STR0194 } )
974 Aadd( aLegend,{ "!Empty( C2_ORDSEP )" , "BR_VERMELHO" , STR0195 } )
975 oFwLegend := a1002Leg( aLegend )
976
977
978 EndIf
979 EndIf
980 EndIf
981
982 If lRet
983 oBrwMrk := FwMarkBrowse():New()
984 oBrwMrk:SetAlias( cBrwAlias )
985 oBrwMrk:SetFieldMark( cBrwCpMark )
986 oBrwMrk:SetDescription( cBrwDesc )
987 oBrwMrk:SetFilterDefault( cCondicao )
988 oBrwMrk:bAllMark := bBrwMakAll
989 oBrwMrk:bCustomMarkRec := bBrwMark
990 oBrwMrk:SetMark( cGetMark, cBrwAlias, cBrwCpMark )
991
992 AEval( aLegend ,{ | x | oBrwMrk:AddLegend( x[ 1 ], x[ 2 ], x[ 3 ] ) } )
993 AEval( aBrwButt,{ | x | oBrwMrk:AddButton( x[ 1 ], x[ 2 ], x[ 3 ], x[ 4 ] ) } )
994
995 oBrwMrk:Activate()
996
997 FreeObj( oBrwMrk )
998 oBrwMrk := Nil
999 EndIf
1000
1001 aRotina := aClone( aRotBack )
1002 RestArea( aArea )
1003 Return( lRet )
1004
1005 /*
1006 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
1007 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
1008 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
1009 ±±³Fun‡„o ³ACDA100_Grava ³ Autor ³ Eduardo Motta ³ Data ³ 06/04/01 ³±±
1010 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
1011 ±±³Descri‡„o ³ Gravacao das ordens de separacao ³±±
1012 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
1013 ±±³Uso ³ SIGAACD ³±±
1014 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
1015 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
1016 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
1017 */
1018
1019 Function ACDA100_Grava(cAlias,cCampo,nOpcE,cMarca,lInverte,lNoDupl, oBrwMrk )
1020 If nOrigExp==1
1021 Processa( { || GeraOSepPedido( cMarca, lInverte, Nil, oBrwMrk ) } )
1022 ElseIf nOrigExp==2
1023 Processa( { || GeraOSepNota( cMarca, lInverte, Nil, oBrwMrk ) } )
1024 ElseIf nOrigExp==3
1025 Processa( { || GeraOSepProducao( cMarca, lInverte, oBrwMrk ) } )
1026 EndIf
1027 Return
1028
1029 /*
1030 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
1031 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
1032 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
1033 ±±³Fun‡„o ³GeraOSepPedido³ Autor ³ Eduardo Motta ³ Data ³ 06/04/01 ³±±
1034 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
1035 ±±³Descri‡„o ³Gera as ordens de separacao a partir dos itens da MarkBrowse³±±
1036 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
1037 ±±³Sintaxe ³GeraOrdSep( ExpC1, ExpL1 ) ³±±
1038 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
1039 ±±³Parametros³ ExpC1 -> Marca da MarkBrowse / ExpL1 -> lInverte MarkBrowse³±±
1040 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
1041 ±±³Retorno ³ Nil ³±±
1042 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
1043 ±±³Uso ³ PCHA030 ³±±
1044 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
1045 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
1046 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
1047 */
1048
1049 STATIC Function GeraOSepPedido( cMarca, lInverte, cPedidoPar, oBrwMrk )
1050 Local nI
1051 Local cCodOpe
1052 Local aRecSC9 := {}
1053 Local aOrdSep := {}
1054 Local nNumItens := 0
1055 Local cArm := Space(Tamsx3("B1_LOCPAD")[1])
1056 Local cPedido := Space(Tamsx3("C9_PEDIDO")[1])
1057 Local cCliente := Space(Tamsx3("C6_CLI")[1])
1058 Local cLoja := Space(Tamsx3("C6_LOJA")[1])
1059 Local cCondPag := Space(Tamsx3("C5_CONDPAG")[1])
1060 Local cLojaEnt := Space(Tamsx3("C5_LOJAENT")[1])
1061 Local cAgreg := Space(Tamsx3("C9_AGREG")[1])
1062 Local cOrdSep := Space(Tamsx3("CB7_ORDSEP")[1])
1063 Local cForn := ""
1064 Local cLojaForn := ""
1065
1066 Local cTipExp := ""
1067 Local nPos := 0
1068 Local nMaxItens := GETMV("MV_NUMITEN") //Numero maximo de itens por nota
(neste caso por ordem de separacao)- by Erike
1069 Local lConsNumIt:= SuperGetMV("MV_CBCNITE",.F.,.T.) //Parametro que indica se deve
ou nao considerar o conteudo do MV_NUMITEN
1070 Local lFilItens := ExistBlock("ACDA100I") //Ponto de Entrada para filtrar o
processamento dos itens selecionados
1071 Local lLocOrdSep:= .F.
1072 Local lA100CABE := ExistBlock("A100CABE")
1073 Local lACD100GI := ExistBlock("ACD100GI")
1074 Local lACDA100F := ExistBlock("ACDA100F")
1075 Local lForn := .F.
1076 Local aSc9Aux := {}
1077 Local aAux := {}
1078 Local aItens := {}
1079 Local nInd := 0
1080 Local nXnd := 0
1081 Local nPosSc9 := 0
1082 Local bAscVet := Nil
1083
1084 Private aLogOS := {}
1085 Default oBrwMrk := Nil
1086 Default cPedidoPar := Nil
1087
1088 nMaxItens := If(Empty(nMaxItens),99,nMaxItens)
1089
1090 // analisar a pergunta '00-Separacao,01-Separacao/Embalagem,02-Embalagem,03-Gera
Nota,04-Imp.Nota,05-Imp.Volume,06-embarque,07-Aglutina Pedido,08-Aglutina
Local,09-Pre-Separacao'
1091 If nEmbSimul == 1 // Separacao com Embalagem Simultanea
1092 cTipExp := "01*"
1093 Else
1094 cTipExp := "00*" // Separacao Simples
1095 EndIF
1096 If nEmbalagem == 1 // Embalagem
1097 cTipExp += "02*"
1098 EndIF
1099 If nGeraNota == 1 // Gera Nota
1100 cTipExp += "03*"
1101 EndIF
1102 If nImpNota == 1 // Imprime Nota
1103 cTipExp += "04*"
1104 EndIF
1105 If nImpEtVol == 1 // Imprime Etiquetas Oficiais de Volume
1106 cTipExp += "05*"
1107 EndIF
1108 If nEmbarque == 1 // Embarque
1109 cTipExp += "06*"
1110 EndIF
1111 If nAglutPed == 1 // Aglutina pedido
1112 cTipExp +="11*"
1113 EndIf
1114 If nAglutArm == 1 // Aglutina armazem
1115 cTipExp +="08*"
1116 EndIf
1117 If nPreSep == 1 // pre-separacao - Trocar MV_PAR10 para nPreSep
1118 cTipExp +="09*"
1119 EndIf
1120 If nConfLote == 1 // confere lote
1121 cTipExp +="10*"
1122 EndIf
1123
1124 /*Ponto de entrada, permite que o usuário realize o processamento conforme suas
particularidades.*/
1125 If ExistBlock("ACD100VG")
1126 If ! ExecBlock("ACD100VG",.F.,.F.,)
1127 Return
1128 EndIf
1129 EndIf
1130
1131 ProcRegua( SC9->( LastRec() ), "oook" )
1132 cCodOpe := cSeparador
1133
1134 SC5->(DbSetOrder(1))
1135 SC6->(DbSetOrder(1))
1136 SDC->(DbSetOrder(1))
1137 CB7->(DbSetOrder(2))
1138 CB8->(DbSetOrder(2))
1139
1140 SC9->(dbGoTop())
1141 While !SC9->(Eof())
1142 If !( oBrwMrk:IsMark() )
1143 SC9->( dbSkip() ) ; Loop
1144 IncProc()
1145 EndIf
1146
1147 If !Empty(SC9->(C9_BLEST+C9_BLCRED+C9_BLOQUEI))
1148 SC9->(DbSkip())
1149 IncProc()
1150 Loop
1151 EndIf
1152 If lFilItens
1153 If !ExecBlock("ACDA100I",.F.,.F.)
1154 SC9->(DbSkip())
1155 IncProc()
1156 Loop
1157 Endif
1158 Endif
1159 //pesquisa se este item tem saldo a separar, caso tenha, nao gera ordem de
separacao
1160 If
CB8->(DbSeek(xFilial('CB8')+SC9->C9_PEDIDO+SC9->C9_ITEM+SC9->C9_SEQUEN+SC9->C9_PRO
DUTO)) .and. CB8->CB8_SALDOS > 0
1161 //Grava o historico das geracoes:
1162
aadd(aLogOS,{"2",STR0041,SC9->C9_PEDIDO,SC9->C9_CLIENTE,SC9->C9_LOJA,SC9->C9_I
TEM,SC9->C9_PRODUTO,SC9->C9_LOCAL,STR0042,"NAO_GEROU_OS"})
//"Pedido"###"Existe saldo a separar deste item"
1163 SC9->(DbSkip())
1164 IncProc()
1165 Loop
1166 EndIf
1167
1168 If ! SC5->(DbSeek(xFilial('SC5')+SC9->C9_PEDIDO))
1169 // neste caso a base tem sc9 e nao tem sc5, problema de incosistencia de base
1170 //Grava o historico das geracoes:
1171
aadd(aLogOS,{"2",STR0041,SC9->C9_PEDIDO,SC9->C9_CLIENTE,SC9->C9_LOJA,SC9->C9_I
TEM,SC9->C9_PRODUTO,SC9->C9_LOCAL,STR0043,"NAO_GEROU_OS"})
//"Pedido"###"Inconsistencia de base (SC5 x SC9)"
1172 SC9->(DbSkip())
1173 IncProc()
1174 Loop
1175 EndIf
1176 If ! SC6->(DbSeek(xFilial("SC6")+SC9->C9_PEDIDO+SC9->C9_ITEM+SC9->C9_PRODUTO))
1177 // neste caso a base tem sc9,sc5 e nao tem sc6,, problema de incosistencia
de base
1178 //Grava o historico das geracoes:
1179
aadd(aLogOS,{"2",STR0041,SC9->C9_PEDIDO,SC9->C9_CLIENTE,SC9->C9_LOJA,SC9->C9_I
TEM,SC9->C9_PRODUTO,SC9->C9_LOCAL,STR0044,"NAO_GEROU_OS"})
//"Pedido"###"Inconsistencia de base (SC6 x SC9)"
1180 SC9->(DbSkip())
1181 IncProc()
1182 Loop
1183 EndIf
1184
1185 If !("08*" $ cTipExp) // gera ordem de separacao por armazem
1186 cArm :=SC6->C6_LOCAL
1187 Else // gera ordem de separa com todos os armazens
1188 cArm :=Space(Tamsx3("B1_LOCPAD")[1])
1189 EndIf
1190 If "11*" $ cTipExp //AGLUTINA TODOS OS PEDIDOS DE UM MESMO CLIENTE
1191 cPedido := Space(Tamsx3("C9_PEDIDO")[1])
1192 Else // Nao AGLUTINA POR PEDIDO
1193 cPedido := SC9->C9_PEDIDO
1194 EndIf
1195 If "09*" $ cTipExp // AGLUTINA PARA PRE-SEPARACAO
1196 cPedido := Space(Tamsx3("C9_PEDIDO")[1]) // CASO SEJA PRE-SEPARACAO TEM QUE
CONSIDERAR TODOS OS PEDIDOS
1197 cCliente := Space(Tamsx3("C6_CLI")[1])
1198 cLoja := Space(Tamsx3("C6_LOJA")[1])
1199 cCondPag := Space(Tamsx3("C5_CONDPAG")[1])
1200 cLojaEnt := Space(Tamsx3("C5_LOJAENT")[1])
1201 cAgreg := Space(Tamsx3("C9_AGREG")[1])
1202 cForn := SC6->C6_CLI
1203 cLojaForn := SC6->C6_LOJA
1204 cArmazem := SC6->C6_LOCAL
1205 Else // NAO AGLUTINA PARA PRE-SEPARACAO
1206 cCliente := SC6->C6_CLI
1207 cLoja := SC6->C6_LOJA
1208 cCondPag := SC5->C5_CONDPAG
1209 cLojaEnt := SC5->C5_LOJAENT
1210 cAgreg := SC9->C9_AGREG
1211 cForn := Space(Tamsx3("C6_CLI")[1])
1212 cLojaForn := Space(Tamsx3("C6_LOJA")[1])
1213 cArmazem := SC6->C6_LOCAL
1214
1215 EndIf
1216
1217 lLocOrdSep := .F.
1218 If CB7->(DbSeek(xFilial("CB7")+cPedido+cArm+"
"+cCliente+cLoja+cCondPag+cLojaEnt+cAgreg))
1219 While CB7->(!Eof() .and.
CB7_FILIAL+CB7_PEDIDO+CB7_LOCAL+CB7_STATUS+CB7_CLIENT+CB7_LOJA+CB7_COND+CB7_LO
JENT+CB7_AGREG==;
1220 xFilial("CB7")+cPedido+cArm+"
"+cCliente+cLoja+cCondPag+cLojaEnt+cAgreg)
1221 If Ascan(aOrdSep, CB7->CB7_ORDSEP) > 0
1222 lLocOrdSep := .T.
1223 Exit
1224 EndIf
1225 CB7->(DbSkip())
1226 EndDo
1227 EndIf
1228
1229 If Localiza(SC9->C9_PRODUTO)
1230 If ! SDC->(
dbSeek(xFilial("SDC")+SC9->C9_PRODUTO+SC9->C9_LOCAL+"SC6"+SC9->C9_PEDIDO+SC9->
C9_ITEM+SC9->C9_SEQUEN))
1231 // neste caso nao existe composicao de empenho
1232 //Grava o historico das geracoes:
1233
aadd(aLogOS,{"2",STR0041,SC9->C9_PEDIDO,SC9->C9_CLIENTE,SC9->C9_LOJA,SC9->
C9_ITEM,SC9->C9_PRODUTO,SC9->C9_LOCAL,STR0045,"NAO_GEROU_OS"})
//"Pedido"###"Nao existe composicao de empenho (SDC)"
1234 SC9->(DbSkip())
1235 IncProc()
1236 Loop
1237 EndIf
1238 EndIf
1239
1240 Aadd( aAux,{ IIf( "09*" $ cTipExp, cForn, cCliente ), IIf( "09*" $ cTipExp,
cLojaForn, cLoja ), cCondPag, cLojaEnt, cAgreg, cArmazem, SC9->( Recno() ),
SC9->C9_PEDIDO, cPedido } )
1241
1242 IncProc()
1243 SC9->( dbSkip() )
1244 EndDo
1245
1246 Do Case
1247 Case nAglutPed == 1 .And. nAglutArm == 1 //Aglut. Pedido e Armazem
1248 bAscVet := { || Ascan( aItens ,{ | x | AllTrim( x[ 01 ] ) == AllTrim( aAux[
nInd ][ 01 ] ) .And. AllTrim( x[ 02 ] ) == AllTrim( aAux[ nInd ][ 02 ] ) .And.
AllTrim( x[ 03 ] ) == AllTrim( aAux[ nInd ][ 06 ] ) } ) }
1249
1250 Case nAglutPed == 1 .And. nAglutArm == 2 //Aglut. Pedido
1251 bAscVet := { || Ascan( aItens ,{ | x | AllTrim( x[ 01 ] ) == AllTrim( aAux[
nInd ][ 01 ] ) .And. AllTrim( x[ 02 ] ) == AllTrim( aAux[ nInd ][ 02 ] ) } ) }
1252
1253 Case nAglutPed == 2 .And. nAglutArm == 1 //Aglut. Armazem
1254 bAscVet := { || Ascan( aItens ,{ | x | AllTrim( x[ 03 ] ) == AllTrim( aAux[
nInd ][ 06 ] ) .And. AllTrim( x[ 04 ] ) == AllTrim( aAux[ nInd ][ 08 ] ) } ) }
1255
1256 Case nAglutPed == 2 .And. nAglutArm == 2 //N?o Aglut Pedido e Armazem
1257 bAscVet := { || Ascan( aItens ,{ | x | AllTrim( x[ 01 ] ) == AllTrim( aAux[
nInd ][ 01 ] ) .And. AllTrim( x[ 02 ] ) == AllTrim( aAux[ nInd ][ 02 ] ) .And.
AllTrim( x[ 04 ] ) == AllTrim( aAux[ nInd ][ 08 ] ) } ) }
1258
1259 EndCase
1260
1261 For nInd := 1 to Len( aAux )
1262 nPosSc9 := Eval( bAscVet )
1263 If nPosSc9 == 0
1264 Aadd( aItens, { AllTrim( aAux[ nInd ][ 01 ] ), AllTrim( aAux[ nInd ][ 02 ]
), AllTrim( aAux[ nInd ][ 06 ] ), AllTrim( aAux[ nInd ][ 08 ] ), { aAux[
nInd ][ 07 ] }, AllTrim( aAux[ nInd ][ 09 ] ), AllTrim( aAux[ nInd ][ 04 ] )
} )
1265 Else
1266 Aadd( aItens[ nPosSc9 ][ 05 ], aAux[ nInd ][ 07 ] )
1267 EndIf
1268 Next nInd
1269
1270
1271 Begin Transaction
1272
1273 For nInd := 1 To Len( aItens )
1274 nNumItens := 0
1275 cArm := aItens[ nInd ][ 03 ]
1276 cPedido := aItens[ nInd ][ 06 ]
1277 cCliente := aItens[ nInd ][ 01 ]
1278 cLoja := aItens[ nInd ][ 02 ]
1279 cLojaEnt := aItens[ nInd ][ 07 ]
1280 aSc9Aux := AClone( aItens[ nInd ][ 05 ] )
1281
1282 For nXnd := 1 To Len( aSc9Aux )
1283 SC9->( dbGoto( aSc9Aux[ nXnd ] ) )
1284 If !lLocOrdSep .or. (("03*" $ cTipExp) .and. !("09*" $ cTipExp) .and.
lConsNumIt )
1285 If ( nNumItens == 0 ) .Or. ( nNumItens >= nMaxItens )
1286 nNumItens := 0
1287 cOrdSep := CB_SXESXF("CB7","CB7_ORDSEP",,1)
1288 ConfirmSX8()
1289
1290 CB7->(RecLock( "CB7",.T.))
1291 CB7->CB7_FILIAL := xFilial( "CB7" )
1292 CB7->CB7_ORDSEP := cOrdSep
1293 CB7->CB7_PEDIDO := cPedido
1294 CB7->CB7_CLIENT := cCliente
1295 CB7->CB7_LOJA := cLoja
1296 CB7->CB7_COND := cCondPag
1297 CB7->CB7_LOJENT := cLojaEnt
1298 CB7->CB7_LOCAL := cArm
1299 CB7->CB7_DTEMIS := dDataBase
1300 CB7->CB7_HREMIS := Time()
1301 CB7->CB7_STATUS := " "
1302 CB7->CB7_CODOPE := cCodOpe
1303 CB7->CB7_PRIORI := "1"
1304 CB7->CB7_ORIGEM := "1"
1305 CB7->CB7_TIPEXP := cTipExp
1306 CB7->CB7_TRANSP := Posicione( 'SC5', 1, FWxFilial( 'SC5' ) +
aItens[ nInd ][ 04 ], 'C5_TRANSP' )
1307 CB7->CB7_AGREG := cAgreg
1308 If lA100CABE
1309 ExecBlock("A100CABE",.F.,.F.)
1310 EndIf
1311 CB7->(MsUnlock())
1312
1313 aadd(aOrdSep, cOrdSep )
1314 EndIf
1315 EndIf
1316 //Grava o historico das geracoes:
1317 nPos := Ascan(aLogOS,{|x| x[01]+x[02]+x[03]+x[04]+x[05]+x[10] ==
("1"+"Pedido"+SC9->(C9_PEDIDO+C9_CLIENTE+C9_LOJA)+CB7->CB7_ORDSEP)})
1318 If nPos == 0
1319
aadd(aLogOS,{"1",STR0041,SC9->C9_PEDIDO,SC9->C9_CLIENTE,SC9->C9_LOJA,"
","",cArm,"",CB7->CB7_ORDSEP}) //"Pedido"
1320 Endif
1321
1322 If Localiza(SC9->C9_PRODUTO)
1323 SDC->(
dbSeek(xFilial("SDC")+SC9->C9_PRODUTO+SC9->C9_LOCAL+"SC6"+SC9->C9_PEDI
DO+SC9->C9_ITEM+SC9->C9_SEQUEN))
1324 While SDC->( !Eof() ) .And. SDC->DC_FILIAL == FWxFilial( "SDC" )
.And. SDC->DC_PRODUTO == SC9->C9_PRODUTO .And. SDC->DC_LOCAL ==
SC9->C9_LOCAL .And. SDC->DC_ORIGEM == 'SC6' .And. SDC->DC_PEDIDO ==
SC9->C9_PEDIDO .And. SDC->DC_ITEM == SC9->C9_ITEM .And. SDC->DC_SEQ
== SC9->C9_SEQUEN
1325 SB1->(DBSetOrder(1))
1326 If SB1->(DbSeek(xFilial("SB1")+SDC->DC_PRODUTO)) .And.
IsProdMOD(SDC->DC_PRODUTO)
1327 SDC->(DbSkip())
1328 Loop
1329 Endif
1330 CB7->( dbSetOrder( 1 ) )
1331 CB7->( dbSeek( xFilial( "CB7" ) + cOrdSep ) )
1332 CB8->(RecLock("CB8",.T.))
1333 CB8->CB8_FILIAL := xFilial("CB8")
1334 CB8->CB8_ORDSEP := CB7->CB7_ORDSEP
1335 CB8->CB8_ITEM := SC9->C9_ITEM
1336 CB8->CB8_PEDIDO := SC9->C9_PEDIDO
1337 CB8->CB8_PROD := SDC->DC_PRODUTO
1338 CB8->CB8_LOCAL := SDC->DC_LOCAL
1339 CB8->CB8_QTDORI := SDC->DC_QUANT
1340 If "09*" $ cTipExp
1341 CB8->CB8_SLDPRE := SDC->DC_QUANT
1342 EndIf
1343 CB8->CB8_SALDOS := SDC->DC_QUANT
1344 If ! "09*" $ cTipExp .AND. nEmbalagem == 1
1345 CB8->CB8_SALDOE := SDC->DC_QUANT
1346 EndIf
1347 CB8->CB8_LCALIZ := SDC->DC_LOCALIZ
1348 CB8->CB8_NUMSER := SDC->DC_NUMSERI
1349 CB8->CB8_SEQUEN := SC9->C9_SEQUEN
1350 CB8->CB8_LOTECT := SC9->C9_LOTECTL
1351 CB8->CB8_NUMLOT := SC9->C9_NUMLOTE
1352 CB8->CB8_CFLOTE := If("10*" $ cTipExp,"1","2")
1353 CB8->CB8_TIPSEP := If("09*" $ cTipExp,"1"," ")
1354 If lACD100GI
1355 ExecBlock("ACD100GI",.F.,.F.)
1356 EndIf
1357 CB8->(MsUnLock())
1358 //Atualizacao do controle do numero de itens a serem impressos
1359 nNumItens ++
1360 RecLock("CB7",.F.)
1361 CB7->CB7_NUMITE := nNumItens
1362 CB7->(MsUnLock())
1363 SDC->( dbSkip() )
1364 EndDo
1365 Else
1366 CB7->( dbSetOrder( 1 ) )
1367 CB7->( dbSeek( xFilial( "CB7" ) + cOrdSep ) )
1368
1369 CB8->(RecLock("CB8",.T.))
1370 CB8->CB8_FILIAL := xFilial("CB8")
1371 CB8->CB8_ORDSEP := CB7->CB7_ORDSEP
1372 CB8->CB8_ITEM := SC9->C9_ITEM
1373 CB8->CB8_PEDIDO := SC9->C9_PEDIDO
1374 CB8->CB8_PROD := SC9->C9_PRODUTO
1375 CB8->CB8_LOCAL := SC9->C9_LOCAL
1376 CB8->CB8_QTDORI := SC9->C9_QTDLIB
1377
1378 If "09*" $ cTipExp
1379 CB8->CB8_SLDPRE := SC9->C9_QTDLIB
1380 EndIf
1381
1382 CB8->CB8_SALDOS := SC9->C9_QTDLIB
1383 If ! "09*" $ cTipExp .AND. nEmbalagem == 1
1384 CB8->CB8_SALDOE := SC9->C9_QTDLIB
1385 EndIf
1386
1387 CB8->CB8_LCALIZ := ""
1388 CB8->CB8_NUMSER := SC9->C9_NUMSERI
1389 CB8->CB8_SEQUEN := SC9->C9_SEQUEN
1390 CB8->CB8_LOTECT := SC9->C9_LOTECTL
1391 CB8->CB8_NUMLOT := SC9->C9_NUMLOTE
1392 CB8->CB8_CFLOTE := If("10*" $ cTipExp,"1","2")
1393 CB8->CB8_TIPSEP := If("09*" $ cTipExp,"1"," ")
1394 If lACD100GI
1395 ExecBlock("ACD100GI",.F.,.F.)
1396 EndIf
1397 CB8->(MsUnLock())
1398
1399 //Atualizacao do controle do numero de itens a serem impressos
1400 nNumItens ++
1401 RecLock("CB7",.F.)
1402 CB7->CB7_NUMITE := nNumItens
1403 CB7->(MsUnLock())
1404 EndIf
1405 Aadd(aRecSC9,{ SC9->(Recno() ), cOrdSep } )
1406 Next nXnd
1407 Next nInd
1408
1409 CB7->(DbSetOrder(1))
1410 For nI := 1 to len( aOrdSep )
1411 CB7->(DbSeek(xFilial("CB7")+aOrdSep[nI]))
1412 CB7->(RecLock("CB7"))
1413 CB7->CB7_STATUS := "0" // nao iniciado
1414 CB7->(MsUnlock())
1415
1416 If lACDA100F
1417 ExecBlock("ACDA100F",.F.,.F.,{aOrdSep[nI]})
1418 EndIf
1419 Next
1420
1421 For nI := 1 to len(aRecSC9)
1422 SC9->(DbGoto(aRecSC9[nI,1]))
1423 SC9->(RecLock("SC9"))
1424 SC9->C9_ORDSEP := aRecSC9[nI,2]
1425 SC9->(MsUnlock())
1426 Next
1427
1428 If !Empty(aLogOS)
1429 LogACDA100()
1430 Endif
1431
1432 End Transaction
1433 Return
1434
1435 STATIC Function GeraOSepNota( cMarca, lInverte, cNotaSerie, oBrwMrk )
1436 Local cChaveDB
1437 Local cTipExp
1438 Local nI
1439 Local cCodOpe
1440 Local aRecSD2 := {}
1441 Local aOrdSep := {}
1442 Local lFilItens := ExistBlock("ACDA100I") //Ponto de Entrada para filtrar o
processamento dos itens selecionados
1443 Local lA100CABE := ExistBlock("A100CABE")
1444 Local lACD100GI := ExistBlock("ACD100GI")
1445 Local lACDA100F := ExistBlock("ACDA100F")
1446
1447 Private aLogOS:= {}
1448
1449 Default cNotaSerie := Nil
1450 Default oBrwMrk := Nil
1451
1452 // analisar a pergunta '00-Separcao,01-Separacao/Embalagem,02-Embalagem,03-Gera
Nota,04-Imp.Nota,05-Imp.Volume,06-embarque'
1453 If nEmbSimuNF == 1
1454 cTipExp := "01*"
1455 Else
1456 cTipExp := "00*"
1457 EndIF
1458 If nEmbalagNF == 1
1459 cTipExp += "02*"
1460 EndIF
1461 If nImpNotaNF == 1
1462 cTipExp += "04*"
1463 EndIF
1464 If nImpVolNF == 1
1465 cTipExp += "05*"
1466 EndIF
1467 If nEmbarqNF == 1
1468 cTipExp += "06*"
1469 EndIF
1470 /*Ponto de entrada, permite que o usuário realize o processamento conforme suas
particularidades.*/
1471 If ExistBlock("ACD100VG")
1472 If ! ExecBlock("ACD100VG",.F.,.F.,)
1473 Return
1474 EndIf
1475 EndIf
1476
1477 SF2->(DbSetOrder(1))
1478 SD2->(DbSetOrder(3))
1479 SD2->( dbGoTop() )
1480
1481 If cNotaSerie == Nil
1482 ProcRegua( SD2->( LastRec() ), "oook" )
1483 cCodOpe := cSeparador
1484 Else
1485 SD2->(DbSetOrder(3))
1486 SD2->(DbSeek(xFilial("SD2")+cNotaSerie))
1487 cCodOpe := Space(06)
1488 EndIf
1489
1490 ProcRegua( SD2->( LastRec() ), "oook" )
1491 cCodOpe := cSeparador
1492
1493 While !SD2->( Eof() ) .and. ( cNotaSerie == Nil .Or. cNotaSerie == SD2->( D2_DOC +
D2_SERIE ) )
1494 If ( cNotaSerie == NIL ) .And. !( oBrwMrk:IsMark() )
1495 SD2->( dbSkip() ) ; Loop
1496 EndIf
1497
1498 If lFilItens
1499 If !ExecBlock("ACDA100I",.F.,.F.)
1500 SD2->( dbSkip() ) ; Loop
1501 Endif
1502 Endif
1503
1504 cChaveDB
:=xFilial("SDB")+SD2->(D2_COD+D2_LOCAL+D2_NUMSEQ+D2_DOC+D2_SERIE+D2_CLIENTE+D2_LOJ
A)
1505 If Localiza(SD2->D2_COD)
1506 SDB->(dbSetOrder(1))
1507 If ! SDB->(dbSeek( cChaveDB ))
1508 // neste caso nao existe composicao de empenho
1509 //Grava o historico das geracoes:
1510
aadd(aLogOS,{"2",STR0046,SD2->D2_DOC,SD2->D2_SERIE,SD2->D2_CLIENTE,SD2->D2
_LOJA,STR0120,"NAO_GEROU_OS"})
//"Nota"###"Inconsistencia de base, nao existe registro de movimento
(SDB)"
1511 SD2->(DbSkip())
1512 If cNotaSerie == Nil
1513 IncProc()
1514 EndIf
1515 Loop
1516 EndIf
1517 EndIf
1518
1519 CB7->(DbSetOrder(4))
1520 If ! CB7->(DbSeek(xFilial("CB7")+SD2->D2_DOC+SD2->D2_SERIE+SD2->D2_LOCAL+" "))
1521 CB7->(RecLock( "CB7", .T. ))
1522 CB7->CB7_FILIAL := xFilial( "CB7" )
1523 CB7->CB7_ORDSEP := GetSX8Num( "CB7", "CB7_ORDSEP" )
1524 CB7->CB7_NOTA := SD2->D2_DOC
1525 //CB7->CB7_SERIE := SD2->D2_SERIE
1526 SerieNfId ("CB7",1,"CB7_SERIE",,,,SD2->D2_SERIE)
1527 CB7->CB7_CLIENT := SD2->D2_CLIENTE
1528 CB7->CB7_LOJA := SD2->D2_LOJA
1529 CB7->CB7_LOCAL := SD2->D2_LOCAL
1530 CB7->CB7_DTEMIS := dDataBase
1531 CB7->CB7_HREMIS := Time()
1532 CB7->CB7_STATUS := " " // gravar STATUS de nao iniciada somente depois do
processo
1533 CB7->CB7_CODOPE := cCodOpe
1534 CB7->CB7_PRIORI := "1"
1535 CB7->CB7_ORIGEM := "2"
1536 CB7->CB7_TIPEXP := cTipExp
1537 If SF2->(DbSeek(xFilial("SF2")+SD2->(D2_DOC+D2_SERIE+D2_CLIENTE+D2_LOJA)))
1538 CB7->CB7_TRANSP := SF2->F2_TRANSP
1539 EndIf
1540 If lA100CABE
1541 ExecBlock("A100CABE",.F.,.F.)
1542 EndIf
1543 CB7->(MsUnLock())
1544 ConfirmSX8()
1545 //Grava o historico das geracoes:
1546
aadd(aLogOS,{"1",STR0046,SD2->D2_DOC,SD2->D2_SERIE,SD2->D2_CLIENTE,SD2->D2_LOJ
A,"",CB7->CB7_ORDSEP})
1547 aadd(aOrdSep,CB7->CB7_ORDSEP)
1548 EndIf
1549 If Localiza(SD2->D2_COD)
1550 While SDB->(!Eof() .And. cChaveDB ==
DB_FILIAL+DB_PRODUTO+DB_LOCAL+DB_NUMSEQ+DB_DOC+DB_SERIE+DB_CLIFOR+DB_LOJA)
1551 If SDB->DB_ESTORNO == "S"
1552 SDB->(dbSkip())
1553 Loop
1554 EndIf
1555 CB8->(DbSetorder(4))
1556 If !
CB8->(DbSeek(xFilial("CB8")+CB7->CB7_ORDSEP+SD2->(D2_ITEM+D2_COD+D2_LOCAL+
SDB->DB_LOCALIZ+D2_LOTECTL+D2_NUMLOTE+D2_NUMSERI)))
1557 CB8->(RecLock( "CB8", .T. ))
1558 CB8->CB8_FILIAL := xFilial( "CB8" )
1559 CB8->CB8_ORDSEP := CB7->CB7_ORDSEP
1560 CB8->CB8_ITEM := SD2->D2_ITEM
1561 CB8->CB8_PEDIDO := SD2->D2_PEDIDO
1562 CB8->CB8_NOTA := SD2->D2_DOC
1563 //CB8->CB8_SERIE := SD2->D2_SERIE
1564 SerieNfId ("CB8",1,"CB8_SERIE",,,,SD2->D2_SERIE)
1565 CB8->CB8_PROD := SD2->D2_COD
1566 CB8->CB8_LOCAL := SD2->D2_LOCAL
1567 CB8->CB8_LCALIZ := SDB->DB_LOCALIZ
1568 CB8->CB8_SEQUEN := SDB->DB_ITEM
1569 CB8->CB8_LOTECT := SD2->D2_LOTECTL
1570 CB8->CB8_NUMLOT := SD2->D2_NUMLOTE
1571 CB8->CB8_NUMSER := SD2->D2_NUMSERI
1572 CB8->CB8_CFLOTE := "1"
1573 aadd(aRecSD2,{SD2->(Recno()),CB7->CB7_ORDSEP})
1574 Else
1575 CB8->(RecLock( "CB8", .f. ))
1576 EndIf
1577 CB8->CB8_QTDORI += SDB->DB_QUANT
1578 CB8->CB8_SALDOS += SDB->DB_QUANT
1579 If nEmbalagem == 1
1580 CB8->CB8_SALDOE += SDB->DB_QUANT
1581 EndIf
1582 If lACD100GI
1583 ExecBlock("ACD100GI",.F.,.F.)
1584 EndIf
1585 CB8->(MsUnLock())
1586 SDB->(dbSkip())
1587 Enddo
1588 Else
1589 CB8->(DbSetorder(4))
1590 If !
CB8->(DbSeek(xFilial("CB8")+CB7->CB7_ORDSEP+SD2->(D2_ITEM+D2_COD+D2_LOCAL+Spac
e(15)+D2_LOTECTL+D2_NUMLOTE+D2_NUMSERI)))
1591 CB8->(RecLock( "CB8", .T. ))
1592 CB8->CB8_FILIAL := xFilial( "CB8" )
1593 CB8->CB8_ORDSEP := CB7->CB7_ORDSEP
1594 CB8->CB8_ITEM := SD2->D2_ITEM
1595 CB8->CB8_PEDIDO := SD2->D2_PEDIDO
1596 CB8->CB8_NOTA := SD2->D2_DOC
1597 //CB8->CB8_SERIE := SD2->D2_SERIE
1598 SerieNfId ("CB8",1,"CB8_SERIE",,,,SD2->D2_SERIE)
1599 CB8->CB8_PROD := SD2->D2_COD
1600 CB8->CB8_LOCAL := SD2->D2_LOCAL
1601 CB8->CB8_LCALIZ := Space(15)
1602 CB8->CB8_SEQUEN := SD2->D2_ITEM
1603 CB8->CB8_LOTECT := SD2->D2_LOTECTL
1604 CB8->CB8_NUMLOT := SD2->D2_NUMLOTE
1605 CB8->CB8_NUMSER := SD2->D2_NUMSERI
1606 CB8->CB8_CFLOTE := "1"
1607 aadd(aRecSD2,{SD2->(Recno()),CB7->CB7_ORDSEP})
1608 Else
1609 CB8->(RecLock( "CB8", .f. ))
1610 EndIf
1611 CB8->CB8_QTDORI += SD2->D2_QUANT
1612 CB8->CB8_SALDOS += SD2->D2_QUANT
1613 If nEmbalagem == 1
1614 CB8->CB8_SALDOE += SD2->D2_QUANT
1615 EndIf
1616 If lACD100GI
1617 ExecBlock("ACD100GI",.F.,.F.)
1618 EndIf
1619 CB8->(MsUnLock())
1620 EndIf
1621
1622 If cNotaSerie==Nil
1623 IncProc()
1624 EndIf
1625 SD2->( dbSkip() )
1626 EndDo
1627
1628 CB7->(DbSetOrder(1))
1629 For nI := 1 to len(aOrdSep)
1630 CB7->(DbSeek(xFilial("CB7")+aOrdSep[nI]))
1631 CB7->(RecLock("CB7"))
1632 CB7->CB7_STATUS := "0" // nao iniciado
1633 CB7->(MsUnlock())
1634 If lACDA100F
1635 ExecBlock("ACDA100F",.F.,.F.,{aOrdSep[nI]})
1636 EndIf
1637 Next
1638 For nI := 1 to len(aRecSD2)
1639 SD2->(DbGoto(aRecSD2[nI,1]))
1640 SD2->(RecLock("SD2",.F.))
1641 SD2->D2_ORDSEP := aRecSD2[nI,2]
1642 SD2->(MsUnlock())
1643 Next
1644 If !Empty(aLogOS)
1645 LogACDA100()
1646 Endif
1647 Return
1648
1649
1650 STATIC Function GeraOSepProducao( cMarca, lInverte, oBrwMrk )
1651 Local cOrdSep,aOrdSep := {},nI
1652 Local cCodOpe
1653 Local aRecSC2 := {}
1654 Local cTipExp
1655 Local aItemCB8 := {}
1656 Local lSai := .f.
1657 Local cArm := Space(Tamsx3("B1_LOCPAD")[1])
1658 Local lFilItens := ExistBlock("ACDA100I") //Ponto de Entrada para filtrar o
processamento dos itens selecionados
1659 Local cTM := GetMV("MV_CBREQD3")
1660 Local lConsEst := SuperGetMV("MV_CBRQEST",,.F.) //Considera a Estrutura do Produto
x Saldo na geracao da Ordem de Separacao
1661 Local lParcial := SuperGetMV("MV_CBOSPRC",,.F.) //Permite ou nao gerar Ordens de
Separacoes parciais
1662 Local lGera := .T.
1663 Local lA100CABE := ExistBlock("A100CABE")
1664 Local lACD100GI := ExistBlock("ACD100GI")
1665 Local lACDA100F := ExistBlock("ACDA100F")
1666 Local lExtACDEMP := ExistBlock("ACD100EMP")
1667 Local nSalTotIt := 0
1668 Local nSaldoEmp := 0
1669 Local aSaldoSBF := {}
1670 Local aSaldoSDC := {}
1671 Local nSldGrv := 0
1672 Local nRetSldEnd:= 0
1673 Local nRetSldSDC:= 0
1674 Local nSldAtu := 0
1675 Local nQtdEmpOS := 0
1676 Local nPosEmp
1677 Local nX
1678 Local lGroupLoc := IIf( Type( 'nGroupLoc' ) == 'N', ( nGroupLoc == 2 ), .F. )
1679 Local lBlkPApInd:= SuperGetMv( "MV_PAPRIND", .F., .F. ) //Parametro que Indica se
Pode Ser Gerada Ordem de Separacao para Produto de Aprop. Indireta.
1680
1681 Private aLogOS := {}
1682 Private aEmp := {}
1683 Private cProdPA := Nil
1684 Private cArmPA := Nil
1685
1686 Default oBrwMrk := Nil
1687
1688
1689 // analisar a pergunta '00-Separcao,01-Separacao/Embalagem,02-Embalagem,03-Gera
Nota,04-Imp.Nota,05-Imp.Volume,06-embarque,07-Requisita'
1690 cTipExp := "00*"
1691
1692 If nReqMatOP == 1
1693 cTipExp += "07*" //Requisicao
1694 EndIf
1695
1696 If nAglutArmOP == 1 // Aglutina armazem
1697 cTipExp +="08*"
1698 EndIf
1699
1700 If nPreSep == 1 // Pre-Separacao
1701 cTipExp +="09*"
1702 EndIf
1703 /*Ponto de entrada, permite que o usuário realize o processamento conforme suas
particularidades.*/
1704 If ExistBlock("ACD100VG")
1705 If ! ExecBlock("ACD100VG",.F.,.F.,)
1706 Return
1707 EndIf
1708 EndIf
1709
1710 SC2->( dbGoTop() )
1711 ProcRegua( SC2->( LastRec() ), "oook" )
1712 cCodOpe := cSeparador
1713
1714 SB2->(DbSetOrder(1))
1715 SD4->(DbSetOrder(2))
1716 SDC->(dbSetOrder(2))
1717 CB7->(DbSetOrder(1))
1718 NNR->(dbSetOrder(1)) //NNR_FILIAL, NNR_CODIGO
1719
1720 While !SC2->( Eof() )
1721 If !( oBrwMrk:IsMark() )
1722 IncProc()
1723 SC2->( dbSkip() ) ; Loop
1724 EndIf
1725
1726 If lFilItens
1727 If !ExecBlock("ACDA100I",.F.,.F.)
1728 SC2->(DbSkip())
1729 IncProc()
1730 Loop
1731 Endif
1732 Endif
1733
1734 cProdPA := SC2->C2_PRODUTO
1735 cArmPA := SC2->C2_LOCAL
1736
1737 CB8->(DbSetOrder(6))
1738 If CB8->(DbSeek(xFilial("CB8")+SC2->C2_NUM+SC2->C2_ITEM+SC2->C2_SEQUEN))
1739 If CB7->(DbSeek(xFilial("CB7")+CB8->CB8_ORDSEP)) .and. CB7->CB7_STATUS # "9"
// Ordem em aberto
1740 //Grava o historico das geracoes:
1741
aadd(aLogOS,{"2",STR0050,SC2->(C2_NUM+C2_ITEM+C2_SEQUEN),"","",STR0049,"NA
O_GEROU_OS"}) //"Existe uma Ordem de Separacao em aberto para esta Ordem
de Producao"
1742 IncProc()
1743 SC2->(dbSkip())
1744 Loop
1745 Endif
1746 EndIf
1747
1748 lSai := .f.
1749 aEmp := {}
1750 SD4->(DbSeek(xFilial('SD4')+SC2->C2_NUM+SC2->C2_ITEM+SC2->C2_SEQUEN))
1751 While SD4->(! Eof() .And. D4_FILIAL+Left(D4_OP,11) ==
xFilial('SD4')+SC2->C2_NUM+SC2->C2_ITEM+SC2->C2_SEQUEN)
1752 If SD4->D4_QUANT <= 0
1753 SD4->(DbSkip())
1754 Loop
1755 Endif
1756
1757 If !NNR->( dbSeek( FWxFilial( 'NNR' ) + SD4->D4_LOCAL ) ) //NNR_FILIAL,
NNR_CODIGO
1758 SD4->( dbSkip() ) ; Loop
1759 EndIf
1760
1761 If lParcial .And. Localiza(SD4->D4_COD)// Se permitir parcial, controlar
localização e nao existir composição de empenho, passa para o proximo.
1762 If !CBArmProc(SD4->D4_COD,cTM)
1763 aSaldoSDC :=
RetSldSDC(SD4->D4_COD,SD4->D4_LOCAL,SD4->D4_OP,.F.,"","",SD4->D4_TRT)
1764 If Empty(aSaldoSDC)
1765 SD4->(DbSkip())
1766 Loop
1767 EndIf
1768 Else
1769 aSaldoSBF := RetSldEnd( SD4->D4_COD, .f.,, IIf( lGroupLoc,
SD4->D4_LOCAL, Nil ), lGroupLoc, cArmPA )
1770 If Empty(aSaldoSBF)
1771 SD4->(DbSkip())
1772 Loop
1773 EndIf
1774 EndIf
1775 EndIf
1776 SB1->(DBSetOrder(1))
1777 If SB1->(DbSeek(xFilial("SB1")+SD4->D4_COD)) .And. IsProdMOD(SD4->D4_COD)
1778 SD4->(DbSkip())
1779 Loop
1780 Endif
1781
1782 If IsPrdApInd( SD4->D4_COD ) .And. lBlkPApInd
1783 SD4->( dbSkip() ) ; Loop
1784 EndIf
1785
1786 If lExtACDEMP
1787 lACD100EMP :=
ExecBlock("ACD100EMP",.F.,.F.,{SD4->D4_OP,SD4->D4_COD,SD4->D4_QUANT})
1788 lACD100EMP := If(ValType(lACD100EMP)=="L",lACD100EMP,.T.)
1789 If !lACD100EMP
1790 SD4->(DbSkip())
1791 Loop
1792 Endif
1793 Endif
1794 If !Localiza(SD4->D4_COD) // Nao controla endereco
1795 SB2->(DbSeek(xFilial("SB2")+SD4->(D4_COD+D4_LOCAL)))
1796 nSldAtu := If(CBArmProc(SD4->D4_COD,cTM),SB2->B2_QATU,SaldoSB2())
1797 nPosEmp := Ascan(aEmp,{|x| x[02] == SD4->D4_COD})
1798 If nPosEmp == 0
1799 aadd(aEmp,{SD4->D4_OP,SD4->D4_COD,SD4->D4_QUANT,nSldAtu,0,0,0})
1800 Else
1801 aEmp[nPosEmp,03] += SD4->D4_QUANT
1802 Endif
1803 SD4->(DbSkip())
1804 Loop
1805 Endif
1806 If !CBArmProc(SD4->D4_COD,cTM) .AND. If(!lParcial,(SD4->D4_QUANT >
(nRetSldSDC :=
RetSldSDC(SD4->D4_COD,SD4->D4_LOCAL,SD4->D4_OP,.t.,"","",SD4->D4_TRT))),.F.)
.AND. !lConsEst
1807 //Grava o historico das geracoes:
1808
aadd(aLogOS,{"2",STR0050,SD4->D4_OP,SD4->D4_COD,"",STR0051+Alltrim(SD4->D4
_COD)+STR0052,"NAO_GEROU_OS"}) //"OP"###"O produto "###" nao encontra-se
empenhado (SD4 x SDC)"
1809 lSai := .t.
1810 ElseIf CBArmProc(SD4->D4_COD,cTM) .AND. If(!lParcial,(SD4->D4_QUANT >
(nRetSldEnd := RetSldEnd( SD4->D4_COD,.t.,, IIf( lGroupLoc, SD4->D4_LOCAL,
Nil ), lGroupLoc, cArmPA ))),.F.) .AND. !lConsEst
1811 //Grava o historico das geracoes:
1812
aadd(aLogOS,{"2",STR0050,SD4->D4_OP,SD4->D4_COD,"",STR0051+Alltrim(SD4->D4
_COD)+STR0132+CHR(13)+CHR(10)+STR0133,"NAO_GEROU_OS"}) //"OP"###"O
produto " //" nao possui saldo enderecado suficiente."###" (ou
existem Ordens de Separacao ainda nao requisitadas)"
1813 lSai := .t.
1814 EndIf
1815 nPosEmp := Ascan(aEmp,{|x| x[02] == SD4->D4_COD})
1816 If nPosEmp == 0
1817
aadd(aEmp,{SD4->D4_OP,SD4->D4_COD,SD4->D4_QUANT,If(CBArmProc(SD4->D4_COD,c
TM),nRetSldEnd,nRetSldSDC),0,0,0})
1818 Else
1819 aEmp[nPosEmp,03] += SD4->D4_QUANT
1820 Endif
1821 SD4->(DbSkip())
1822 Loop
1823 EndDo
1824 If lConsEst //Considera a Estrutura do Produto x Saldo na geracao da Ordem de
Separacao
1825 If SemSldOS()
1826 //Grava o historico das geracoes:
1827
aadd(aLogOS,{"2",STR0050,SD4->D4_OP,SD4->D4_COD,"",STR0134,"NAO_GEROU_OS"}
) //"Os itens empenhados nao possuem saldo em estoque suficiente para a
producao de uma unidade do produto da OP"
1828 lSai := .t.
1829 Endif
1830 Endif
1831 If lSai
1832 IncProc()
1833 SC2->(dbSkip())
1834 Loop
1835 EndIf
1836
1837 SD4->(DbSeek(xFilial('SD4')+SC2->C2_NUM+SC2->C2_ITEM+SC2->C2_SEQUEN))
1838 While SD4->(!Eof() .And. D4_FILIAL+Left(D4_OP,11) ==
xFilial('SD4')+SC2->C2_NUM+SC2->C2_ITEM+SC2->C2_SEQUEN)
1839 If SD4->D4_QUANT <= 0
1840 SD4->(DbSkip())
1841 Loop
1842 EndIf
1843
1844 If !NNR->( dbSeek( FWxFilial( 'NNR' ) + SD4->D4_LOCAL ) ) //NNR_FILIAL,
NNR_CODIGO
1845 SD4->( dbSkip() ) ; Loop
1846 EndIf
1847
1848 If lParcial .And. Localiza(SD4->D4_COD)// Se permitir parcial, controlar
localização e nao existir composição de empenho, passa para o proximo.
1849 If !CBArmProc(SD4->D4_COD,cTM)
1850 aSaldoSDC :=
RetSldSDC(SD4->D4_COD,SD4->D4_LOCAL,SD4->D4_OP,.F.,SD4->D4_LOTECTL,SD4
->D4_NUMLOTE,SD4->D4_TRT)
1851 If Empty(aSaldoSDC)
1852
aadd(aLogOS,{"2",STR0050,SD4->D4_OP,SD4->D4_COD,"",STR0051+Alltrim
(SD4->D4_COD)+STR0052,"NAO_GEROU_OS"}) //"OP"###"O produto "###"
nao encontra-se empenhado (SD4 x SDC)"
1853 SD4->(DbSkip())
1854 Loop
1855 EndIf
1856 Else
1857 aSaldoSBF := RetSldEnd(SD4->D4_COD, .f.,, IIf( lGroupLoc,
SD4->D4_LOCAL, Nil ), lGroupLoc, cArmPA )
1858 If Empty(aSaldoSBF)
1859
aadd(aLogOS,{"2",STR0050,SD4->D4_OP,SD4->D4_COD,"",STR0051+Alltrim
(SD4->D4_COD)+STR0132+CHR(13)+CHR(10)+STR0133,"NAO_GEROU_OS"})
//"OP"###"O produto " //" nao possui saldo enderecado
suficiente."###" (ou existem Ordens de Separacao ainda
nao requisitadas)"
1860 SD4->(DbSkip())
1861 Loop
1862 EndIf
1863 EndIf
1864 EndIf
1865 SB1->(DBSetOrder(1))
1866 If SB1->(DbSeek(xFilial("SB1")+SD4->D4_COD)) .And. IsProdMOD(SD4->D4_COD)
1867 SD4->(DbSkip())
1868 Loop
1869 Endif
1870
1871 If IsPrdApInd( SD4->D4_COD ) .And. lBlkPApInd
1872 SD4->( dbSkip() ) ; Loop
1873 EndIf
1874
1875 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
1876 //³Ponto de Entrada na Geração das Ordens de Separação.³
1877 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
1878 If lExtACDEMP
1879 lACD100EMP :=
ExecBlock("ACD100EMP",.F.,.F.,{SD4->D4_OP,SD4->D4_COD,SD4->D4_QUANT})
1880 lACD100EMP := If(ValType(lACD100EMP)=="L",lACD100EMP,.T.)
1881 If !lACD100EMP
1882 SD4->(DbSkip())
1883 Loop
1884 Endif
1885 Endif
1886
1887 If !("08*" $ cTipExp) // gera ordem de separacao por armazem
1888 cArm := If(CBArmProc(SD4->D4_COD,cTM), Posicione( 'SB1', 1, FWxFilial(
'SB1' ) + SD4->D4_COD, 'B1_LOCPAD' ), SD4->D4_LOCAL )
1889 Else // gera ordem de separa com todos os armazens
1890 cArm :=Space(Tamsx3("B1_LOCPAD")[1])
1891 EndIf
1892
1893 If "09*" $ cTipExp // AGLUTINA PARA PRE-SEPARACAO
1894 cOP:= Space(Len(SD4->D4_OP))
1895 Else
1896 cOP:= SD4->D4_OP
1897 Endif
1898
1899 CB7->(DbSetOrder(5))
1900 If ! CB7->(DbSeek(xFilial("CB7")+cOP+cArm+" "))
1901 cOrdSep := GetSX8Num( "CB7", "CB7_ORDSEP" )
1902 CB7->(RecLock( "CB7", .T. ))
1903 CB7->CB7_FILIAL := xFilial( "CB7" )
1904 CB7->CB7_ORDSEP := cOrdSep
1905 CB7->CB7_OP := cOP
1906 CB7->CB7_LOCAL := cArm
1907 CB7->CB7_DTEMIS := dDataBase
1908 CB7->CB7_HREMIS := Time()
1909 CB7->CB7_STATUS := " " // gravar STATUS de nao iniciada somente depois
do processo
1910 CB7->CB7_CODOPE := cCodOpe
1911 CB7->CB7_PRIORI := "1"
1912 CB7->CB7_ORIGEM := "3"
1913 CB7->CB7_TIPEXP := cTipExp
1914 If lA100CABE
1915 ExecBlock("A100CABE",.F.,.F.)
1916 EndIf
1917 ConfirmSX8()
1918 //Grava o historico das geracoes:
1919 aadd(aLogOS,{"1",STR0050,SD4->D4_OP,"",cArm,"",CB7->CB7_ORDSEP})
1920 aadd(aOrdSep,cOrdSep)
1921 EndIf
1922
1923 If Localiza(SD4->D4_COD) //controla endereco
1924 If !CBArmProc(SD4->D4_COD,cTM)
1925 aSaldoSDC :=
RetSldSDC(SD4->D4_COD,SD4->D4_LOCAL,SD4->D4_OP,.F.,SD4->D4_LOTECTL,SD4
->D4_NUMLOTE,SD4->D4_TRT)
1926 nSalTotIt := 0
1927 For nX:=1 to Len(aSaldoSDC)
1928 nSalTotIt+=aSaldoSDC[nX,7]
1929 Next
1930 If lConsEst
1931 nSaldoEmp := RetEmpOS(lConsEst,SD4->D4_COD,SD4->D4_QUANT)
1932 EndIf
1933
1934 // Separacoes sao geradas conf. empenhos nos enderecos (SDC)
1935 For nX:=1 to Len(aSaldoSDC)
1936 lGera := .T.
1937 If !lConsEst
1938 nSaldoEmp := RetEmpOS(lConsEst,SD4->D4_COD,aSaldoSDC[nX,7])
1939 EndIf
1940 If (!lConsEst .And. !lParcial) .And. SD4->D4_QTDEORI <> nSalTotIt
1941 Exit
1942 ElseIf lConsEst .And. nSaldoEmp == 0
1943 lGera := .F.
1944 Else
1945 nSldGrv := aSaldoSDC[nX,7]
1946 nSaldoEmp -= aSaldoSDC[nX,7]
1947 EndIf
1948 If lGera
1949 cOrdSep := CB7->CB7_ORDSEP
1950 CB8->(RecLock( "CB8", .T. ))
1951 CB8->CB8_FILIAL := xFilial( "CB8" )
1952 CB8->CB8_ORDSEP := cOrdSep
1953 CB8->CB8_OP := SD4->D4_OP
1954 CB8->CB8_ITEM := RetItemCB8(cOrdSep,aItemCB8)
1955 CB8->CB8_PROD := SD4->D4_COD
1956 CB8->CB8_LOCAL := aSaldoSDC[nX,2]
1957 CB8->CB8_QTDORI := nSldGrv
1958 CB8->CB8_SALDOS := nSldGrv
1959 If nEmbalagem == 1
1960 CB8->CB8_SALDOE := nSldGrv
1961 EndIf
1962 CB8->CB8_LCALIZ := aSaldoSDC[nX,3]
1963 CB8->CB8_SEQUEN := ""
1964 CB8->CB8_LOTECT := aSaldoSDC[nX,4]
1965 CB8->CB8_NUMLOT := aSaldoSDC[nX,5]
1966 CB8->CB8_NUMSER := aSaldoSDC[nX,6]
1967 CB8->CB8_CFLOTE := "1"
1968 If "09*" $ cTipExp
1969 CB8->CB8_SLDPRE := nSldGrv
1970 EndIf
1971 If lACD100GI
1972 ExecBlock("ACD100GI",.F.,.F.)
1973 EndIf
1974 CB8->(MsUnLock())
1975 EndIf
1976 Next
1977 SD4->(DbSkip())
1978 Loop
1979 Else
1980 aSaldoSBF := RetSldEnd(SD4->D4_COD, .f.,, IIf( lGroupLoc,
SD4->D4_LOCAL, Nil ), lGroupLoc, cArmPA )
1981 If lConsEst
1982 nSaldoEmp := RetEmpOS(lConsEst,SD4->D4_COD,SD4->D4_QUANT)
1983 EndIf
1984 For nX:=1 to Len(aSaldoSBF)
1985 If !lConsEst .and. nX==1
1986 nSaldoEmp := RetEmpOS(lConsEst,SD4->D4_COD,SD4->D4_QUANT)
1987 EndIf
1988 If nSaldoEmp < 1
1989 Loop
1990 EndIf
1991
1992 If lConsEst .And. nSaldoEmp == 0
1993 SD4->(DbSkip())
1994 Exit
1995 nSaldoEmp -= aSaldoSDC[nX,7]
1996 EndIf
1997 cOrdSep := CB7->CB7_ORDSEP
1998 CB8->(RecLock( "CB8", .T. ))
1999 CB8->CB8_FILIAL := xFilial( "CB8" )
2000 CB8->CB8_ORDSEP := cOrdSep
2001 CB8->CB8_OP := SD4->D4_OP
2002 CB8->CB8_ITEM := RetItemCB8(cOrdSep,aItemCB8)
2003 CB8->CB8_PROD := aSaldoSBF[nX,1]
2004 CB8->CB8_LOCAL := aSaldoSBF[nX,2]
2005 CB8->CB8_QTDORI := nSaldoEmp
2006 CB8->CB8_SALDOS := Iif (!aSaldoSBF[nX,7] >
nSaldoEmp,aSaldoSBF[nX,7],nSaldoEmp)
2007 If nEmbalagem == 1
2008 CB8->CB8_SALDOE := nSaldoEmp
2009 EndIf
2010 CB8->CB8_LCALIZ := aSaldoSBF[nX,3]
2011 CB8->CB8_SEQUEN := ""
2012 CB8->CB8_LOTECT := aSaldoSBF[nX,4]
2013 CB8->CB8_NUMLOT := aSaldoSBF[nX,5]
2014 CB8->CB8_NUMSER := aSaldoSBF[nX,6]
2015 CB8->CB8_CFLOTE := "1"
2016 If "09*" $ cTipExp
2017 CB8->CB8_SLDPRE := nSaldoEmp
2018 EndIf
2019 If lACD100GI
2020 ExecBlock("ACD100GI",.F.,.F.)
2021 EndIf
2022 CB8->(MsUnLock())
2023 nSaldoEmp -= aSaldoSBF[nX,7]
2024 Next Nx
2025 SD4->(DbSkip())
2026 Endif
2027 Else
2028 cOrdSep := CB7->CB7_ORDSEP
2029 nQtdEmpOS := RetEmpOS(lConsEst,SD4->D4_COD,SD4->D4_QUANT)
2030 CB8->(RecLock( "CB8", .T. ))
2031 CB8->CB8_FILIAL := xFilial( "CB8" )
2032 CB8->CB8_ORDSEP := cOrdSep
2033 CB8->CB8_OP := SD4->D4_OP
2034 CB8->CB8_ITEM := RetItemCB8(cOrdSep,aItemCB8)
2035 CB8->CB8_PROD := SD4->D4_COD
2036 CB8->CB8_LOCAL := If(CBArmProc(SD4->D4_COD,cTM), Posicione( 'SB1', 1,
FWxFilial( 'SB1' ) + SD4->D4_COD, 'B1_LOCPAD' ), SD4->D4_LOCAL )
2037 CB8->CB8_QTDORI := nQtdEmpOS
2038 CB8->CB8_SALDOS := nQtdEmpOS
2039 If nEmbalagem == 1
2040 CB8->CB8_SALDOE := nQtdEmpOS
2041 EndIf
2042 CB8->CB8_LCALIZ := Space(15)
2043 CB8->CB8_SEQUEN := ""
2044 CB8->CB8_LOTECT := SD4->D4_LOTECTL
2045 CB8->CB8_NUMLOT := SD4->D4_NUMLOTE
2046 CB8->CB8_CFLOTE := "1"
2047 If "09*" $ cTipExp
2048 CB8->CB8_SLDPRE := nQtdEmpOS
2049 EndIf
2050 If lACD100GI
2051 ExecBlock("ACD100GI",.F.,.F.)
2052 EndIf
2053 CB8->(MsUnLock())
2054 SD4->(DbSkip())
2055 Endif
2056 EndDo
2057 aadd(aRecSC2,SC2->(Recno()))
2058 IncProc()
2059 SC2->( dbSkip() )
2060 EndDo
2061
2062 CB7->(DbSetOrder(1))
2063 For nI := 1 to len(aOrdSep)
2064 CB7->(DbSeek(xFilial("CB7")+aOrdSep[nI]))
2065 CB7->(RecLock("CB7"))
2066 CB7->CB7_STATUS := "0" // nao iniciado
2067 CB7->(MsUnlock())
2068 If lACDA100F
2069 ExecBlock("ACDA100F",.F.,.F.,{aOrdSep[nI]})
2070 EndIf
2071 Next
2072 For nI := 1 to len(aRecSC2)
2073 SC2->(DbGoto(aRecSC2[nI]))
2074 SC2->(RecLock("SC2"))
2075 SC2->C2_ORDSEP := cOrdSep
2076 SC2->(MsUnlock())
2077 Next
2078
2079 If lParcial .and. Empty(aOrdSep) .and. !Empty(aLogOS) // Quando permitir parcial
somente gera log se nao existir nenhuma item na OS
2080 LogACDA100()
2081 Elseif !lparcial .and.!Empty(aLogOS)
2082 LogACDA100()
2083 EndIf
2084
2085 Return
2086
2087 Static Function RetItemCB8(cOrdSep,aItemCB8)
2088
2089 Local nPos := Ascan(aItemCB8,{|x| x[1] == cOrdSep})
2090 Local cItem :=' '
2091
2092 If Empty(nPos )
2093 AAdd(aItemCB8,{cOrdSep,'00'})
2094 nPos := len(aItemCB8)
2095 EndIF
2096
2097 cItem := Soma1(aItemcb8[nPos,2])
2098 aItemcb8[nPos,2]:= cItem
2099
2100 Return cItem
2101
2102 /*
2103 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2104 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2105 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
2106 ±±³Fun‡„o ³ACDA100Re ³ Autor ³ Anderson Rodrigues ³ Data ³ 29/10/04 ³±±
2107 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
2108 ±±³Descri‡„o ³Rotina de Impressao das ordens de separacao ³±±
2109 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2110 ±±³Uso ³ SIGAACD ³±±
2111 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
2112 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2113 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2114 */
2115
2116 Function ACDA100Re()
2117 Local lContinua := .T.
2118 Local lCustRel := ExistBlock("ACD100RE")
2119 Local cCustRel := ""
2120 Local lACDR100 := SuperGetMV("MV_ACDR100",.F.,.F.)
2121 Private cString := "CB7"
2122 Private aOrd := {}
2123 Private cDesc1 := STR0053 //"Este programa tem como objetivo imprimir
informacoes das"
2124 Private cDesc2 := STR0007 //"Ordens de Separacao"
2125 Private cPict := ""
2126 Private lEnd := .F.
2127 Private lAbortPrint := .F.
2128 Private limite := 132
2129 Private tamanho := "M"
2130 Private nomeprog := "ACDA100R" // Coloque aqui o nome do programa para impressao
no cabecalho
2131 Private nTipo := 18
2132 Private aReturn := {STR0117,1,STR0118,2,2,1,"",1} //"Zebrado"###"Administracao"
2133 Private nLastKey := 0
2134 Private cPerg := "ACD100"
2135 Private titulo := STR0054 //"Impressao das Ordens de Separacao"
2136 Private nLin := 06
2137 Private Cabec1 := ""
2138 Private Cabec2 := ""
2139 Private cbtxt := STR0055 //"Regsitro(s) lido(s)"
2140 Private cbcont := 0
2141 Private CONTFL := 01
2142 Private m_pag := 01
2143 Private lRet := .T.
2144 Private imprime := .T.
2145 Private wnrel := "ACDA100R" // Coloque aqui o nome do arquivo usado para
impressao em disco
2146
2147 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
2148 //³ Variaveis utilizadas como Parametros ³
2149 //³ MV_PAR01 = Ordem de Separacao de ? ³
2150 //³ MV_PAR02 = Ordem de Separacao Ate ? ³
2151 //³ MV_PAR03 = Data de Emissao de ? ³
2152 //³ MV_PAR04 = Data de Emissao Ate ? ³
2153 //³ MV_PAR05 = Considera Ordens encerradas ? ³
2154 //³ MV_PAR06 = Imprime Codigo de barras ? ³
2155 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
2156
2157 If lCustRel
2158 cCustRel := ExecBlock("ACD100RE",.F.,.F.)
2159 If ExistBlock(cCustRel)
2160 ExecBlock( cCustRel, .F., .F.)
2161 EndIf
2162 ElseIf lACDR100
2163 ACDR100()
2164 Else
2165 wnrel :=
SetPrint(cString,NomeProg,cPerg,@titulo,cDesc1,cDesc2,Nil,.F.,aOrd,.F.,Tamanho,,.T
.)
2166
2167 Pergunte(cPerg,.F.)
2168
2169 If nLastKey == 27
2170 lContinua := .F.
2171 EndIf
2172
2173 If lContinua
2174 SetDefault(aReturn,cString)
2175 EndIf
2176
2177 If nLastKey == 27
2178 lContinua := .F.
2179 EndIf
2180
2181 If lContinua
2182 RptStatus({|| Relatorio() },Titulo)
2183 EndIf
2184
2185 CB7->(DbClearFilter())
2186 EndIf
2187 Return
2188
2189 /*/
2190 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2191 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2192 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
2193 ±±ºFun‡„o ³ Relatorioº Autor ³ Anderson Rodrigues º Data ³ 29/10/04 º±±
2194 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
2195 ±±ºDescri‡„o ³ Funcao auxiliar chamada pela RPTSTATUS. A funcao RPTSTATUS º±±
2196 ±±º ³ monta a janela com a regua de processamento. º±±
2197 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
2198 ±±ºUso ³ SIGAACD º±±
2199 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
2200 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2201 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2202 /*/
2203
2204 Static Function Relatorio()
2205
2206 CB7->(DbSetOrder(1))
2207 CB7->(DbSeek(xFilial("CB7")+MV_PAR01,.T.)) // Posiciona no 1o.reg. satisfatorio
2208 SetRegua(RecCount()-Recno())
2209
2210 While ! CB7->(EOF()) .and. (CB7->CB7_ORDSEP >= MV_PAR01 .and. CB7->CB7_ORDSEP <=
MV_PAR02)
2211 If CB7->CB7_DTEMIS < MV_PAR03 .or. CB7->CB7_DTEMIS > MV_PAR04 // Nao considera
as ordens que nao tiver dentro do range de datas
2212 CB7->(DbSkip())
2213 Loop
2214 Endif
2215 If MV_PAR05 == 2 .and. CB7->CB7_STATUS == "9" // Nao Considera as Ordens ja
encerradas
2216 CB7->(DbSkip())
2217 Loop
2218 Endif
2219 CB8->(DbSetOrder(1))
2220 If ! CB8->(DbSeek(xFilial("CB8")+CB7->CB7_ORDSEP))
2221 CB7->(DbSkip())
2222 Loop
2223 EndIf
2224 IncRegua(STR0056) //"Imprimindo"
2225 If lAbortPrint
2226 @nLin,00 PSAY STR0057 //"*** CANCELADO PELO OPERADOR ***"
2227 Exit
2228 Endif
2229 Imprime()
2230 CB7->(DbSkip())
2231 Enddo
2232 Fim()
2233 Return
2234
2235 /*/
2236 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2237 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2238 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
2239 ±±ºFun‡„o ³ Imprime º Autor ³ Anderson Rodrigues º Data ³ 12/09/03 º±±
2240 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
2241 ±±ºDescri‡„o ³ Funcao auxiliar chamada pela funcao Relatorio º±±
2242 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
2243 ±±ºUso ³ SIGAACD º±±
2244 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
2245 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2246 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2247 /*/
2248
2249 Static Function Imprime(lRet)
2250 Local cOrdSep := Alltrim(CB7->CB7_ORDSEP)
2251 Local cPedido := Alltrim(CB7->CB7_PEDIDO)
2252 Local cCliente:= Alltrim(CB7->CB7_CLIENT)
2253 Local cLoja := Alltrim(CB7->CB7_LOJA )
2254 Local cNota := Alltrim(CB7->CB7_NOTA)
2255 Local cSerie := Alltrim(CB7->&(SerieNfId("CB7",3,"CB7_SERIE")))
2256 Local cOP := Alltrim(CB7->CB7_OP)
2257 Local cStatus := RetStatus(CB7->CB7_STATUS)
2258 Local nWidth := 0.050
2259 Local nHeigth := 0.75
2260 Local oPr
2261
2262 Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
2263
2264 @ 06, 000 Psay STR0058+cOrdSep //"Ordem de Separacao: "
2265
2266 If CB7->CB7_ORIGEM == "1" // Pedido de Venda
2267 @ 06, 035 Psay STR0059+cPedido //"Pedido de Venda: "
2268 @ 06, 065 Psay STR0060+cCliente+" - "+STR0061+cLoja //"Cliente: "###"Loja: "
2269 @ 06, 095 Psay STR0119+cStatus //"Status: "
2270 Elseif CB7->CB7_ORIGEM == "2" // Nota Fiscal de Saida
2271 @ 06, 035 Psay STR0062+cNota+STR0063+cSerie //"Nota Fiscal: "###" - Serie: "
2272 @ 06, 075 Psay STR0060+cCliente+" - "+STR0061+cLoja //"Cliente: "###"Loja: "
2273 @ 06, 105 Psay STR0119+cStatus //"Status: "
2274 Elseif CB7->CB7_ORIGEM == "3" // Ordem de Producao
2275 @ 06, 035 Psay STR0064+cOP //"Ordem de Producao: "
2276 @ 06, 070 Psay STR0119+cStatus //"Status: "
2277 Endif
2278
2279 If MV_PAR06 == 1 .And. aReturn[5] # 1
2280 oPr:= ReturnPrtObj()
2281
MSBAR3("CODE128",2.8,0.8,cOrdSep,oPr,Nil,Nil,Nil,nWidth,nHeigth,.t.,Nil,"B",Nil,Ni
l,Nil,.f.)
2282 nLin := 11
2283 Else
2284 nLin := 07
2285 EndIf
2286
2287 @ ++nLin, 000 Psay Replicate("=",147)
2288 nLin++
2289
2290 @nLin, 000 Psay STR0029 //"Produto"
2291 @nLin, 032 Psay STR0065 //"Armazem"
2292 @nLin, 042 Psay STR0066 //"Endereco"
2293 @nLin, 058 Psay STR0067 //"Lote"
2294 @nLin, 070 Psay STR0068 //"SubLote"
2295 @nLin, 079 Psay STR0069 //"Numero de Serie"
2296 @nLin, 101 Psay STR0070 //"Qtd Original"
2297 @nLin, 116 Psay STR0071 //"Qtd a Separar"
2298 @nLin, 132 Psay STR0072 //"Qtd a Embalar"
2299
2300 CB8->(DbSetOrder(1))
2301 CB8->(DbSeek(xFilial("CB8")+cOrdSep))
2302
2303 While ! CB8->(EOF()) .and. (CB8->CB8_ORDSEP == cOrdSep)
2304 nLin++
2305 If nLin > 59 // Salto de Página. Neste caso o formulario tem 55 linhas...
2306 Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
2307 nLin := 06
2308 @nLin, 000 Psay STR0029 //"Produto"
2309 @nLin, 032 Psay STR0065 //"Armazem"
2310 @nLin, 042 Psay STR0066 //"Endereco"
2311 @nLin, 058 Psay STR0067 //"Lote"
2312 @nLin, 070 Psay STR0068 //"SubLote"
2313 @nLin, 079 Psay STR0069 //"Numero de Serie"
2314 @nLin, 101 Psay STR0070 //"Qtd Original"
2315 @nLin, 116 Psay STR0071 //"Qtd a Separar"
2316 @nLin, 132 Psay STR0072 //"Qtd a Embalar"
2317 Endif
2318 @nLin, 000 Psay CB8->CB8_PROD
2319 @nLin, 032 Psay CB8->CB8_LOCAL
2320 @nLin, 042 Psay CB8->CB8_LCALIZ
2321 @nLin, 058 Psay CB8->CB8_LOTECT
2322 @nLin, 070 Psay CB8->CB8_NUMLOT
2323 @nLin, 079 Psay CB8->CB8_NUMSER
2324 @nLin, 099 Psay CB8->CB8_QTDORI Picture "@E 999,999,999.99"
2325 @nLin, 114 Psay CB8->CB8_SALDOS Picture "@E 999,999,999.99"
2326 @nLin, 130 Psay CB8->CB8_SALDOE Picture "@E 999,999,999.99"
2327 CB8->(DbSkip())
2328 Enddo
2329
2330 Return
2331
2332 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
2333 //³ Finaliza impressao ³
2334 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
2335
2336 Static Function Fim()
2337
2338 SET DEVICE TO SCREEN
2339 If aReturn[5]==1
2340 dbCommitAll()
2341 SET PRINTER TO
2342 OurSpool(wnrel)
2343 Endif
2344 MS_FLUSH()
2345 Return
2346
2347 /*/
2348 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2349 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2350 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
2351 ±±ºFun‡„o ³ RetStatusº Autor ³ Anderson Rodrigues º Data ³ 04/11/04 º±±
2352 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
2353 ±±ºDescri‡„o ³ Funcao auxiliar chamada pela funcao Imprime º±±
2354 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
2355 ±±ºUso ³ SIGAACD º±±
2356 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
2357 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2358 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2359 /*/
2360
2361 Static Function RetStatus(cStatus)
2362 Local cDescri:= " "
2363
2364 If Empty(cStatus) .or. cStatus == "0"
2365 cDescri:= STR0073 //"Nao iniciado"
2366 ElseIf cStatus == "1"
2367 cDescri:= STR0074 //"Em separacao"
2368 ElseIf cStatus == "2"
2369 cDescri:= STR0075 //"Separacao finalizada"
2370 ElseIf cStatus == "3"
2371 cDescri:= STR0076 //"Em processo de embalagem"
2372 ElseIf cStatus == "4"
2373 cDescri:= STR0077 //"Embalagem Finalizada"
2374 ElseIf cStatus == "5"
2375 cDescri:= STR0078 //"Nota gerada"
2376 ElseIf cStatus == "6"
2377 cDescri:= STR0079 //"Nota impressa"
2378 ElseIf cStatus == "7"
2379 cDescri:= STR0080 //"Volume impresso"
2380 ElseIf cStatus == "8"
2381 cDescri:= STR0081 //"Em processo de embarque"
2382 ElseIf cStatus == "9"
2383 cDescri:= STR0082 //"Finalizado"
2384 EndIf
2385
2386 Return(cDescri)
2387
2388 /*
2389 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2390 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2391 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
2392 ±±³Fun‡„o ³ACDA100Lg ³ Autor ³ Eduardo Motta ³ Data ³ 06/04/01 ³±±
2393 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
2394 ±±³Descri‡„o ³ Legenda para as cores da mbrowse ³±±
2395 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2396 ±±³Retorno ³ .T. ³±±
2397 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2398 ±±³Uso ³ SIGAACD ³±±
2399 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
2400 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2401 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2402 */
2403
2404 Function ACDA100Lg()
2405 Local aCorDesc
2406 Local aCorUsr
2407 aCorDesc := { { "DISABLE", STR0016 },; //"- Divergencia"
2408 { "BR_CINZA", STR0017 },; //"- Pausa"
2409 { "ENABLE", STR0018 },; //"- Finalizado"
2410 { "BR_AMARELO", STR0019 },; //"- Em andamento"
2411 { "BR_AZUL", STR0020 } } //"- Nao iniciado"
2412
2413 If ExistBlock("ACD100LG")
2414 aCorUsr := ExecBlock("ACD100LG",.F.,.F.,{aCorDesc})
2415 If ValType(aCorUsr) == "A"
2416 aCorDesc := aClone(aCorUsr)
2417 EndIf
2418 EndIf
2419
2420 BrwLegenda( STR0021, STR0022, aCorDesc ) //"Legenda - Separacao"###"Status"
2421 Return( .T. )
2422
2423 /*
2424 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2425 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2426 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
2427 ±±³Fun‡„o ³MontaCols ³ Autor ³ Eduardo Motta ³ Data ³ 06/04/01 ³±±
2428 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
2429 ±±³Descri‡„o ³ Funcao para montagem do aCols na GetDados ³±±
2430 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2431 ±±³Parametros³ cSeekCB8 -> Chave de pesquisa no CB8 ³±±
2432 ±±³ ³ oGet -> objeto getdados a dar refresh (opcional) ³±±
2433 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2434 ±±³Retorno ³ .T. ³±±
2435 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2436 ±±³Uso ³ SIGAACD ³±±
2437 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
2438 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2439 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2440 */
2441 Static Function MontaCols(cSeekCB8,oGet)
2442 Local nCnt,nUsado, nI
2443
2444 If Type("oTimer") == "O"
2445 oTimer:Deactivate()
2446 EndIf
2447
2448 aCols := {}
2449 aRecno:={}
2450
2451 nCnt := 0
2452 CB8->(DbSetOrder(1))
2453 CB8->( dbSeek( cSeekCB8 ) )
2454 While !CB8->( Eof() ) .And. cSeekCB8 == CB8->CB8_FILIAL + CB8->CB8_ORDSEP
2455
2456 nCnt++
2457 nUsado := 0
2458 aHeader:={}
2459 aadd(aCols,Array(Len(aHeader)+1))
2460 aadd(aRecno,CB8->(Recno()))
2461 aHeadAUX := aClone(APBuildHeader("CB8"))
2462 aHeader := aClone(aHeadAUX)
2463 For nI := 1 to Len(aHeadAUX)
2464 If X3USO(aHeadAUX[nI,7]) .and. allTrim(aHeadAUX[nI,2]) <> 'CB8_ORDSEP' .and.
cNivel >= GetSx3Cache(trim(aHeadAUX[nI,2]), "X3_NIVEL")
2465 nUsado++
2466 If aHeadAUX[nI,10] # "V"
2467 cField := allTrim(aHeadAUX[nI,2])
2468 dbSelectArea("CB8")
2469 aCols[ nCnt, nUsado ] := FieldGet( FieldPos( cField ) )
2470 Aadd(aCols[nCnt],+1)
2471 ElseIf aHeadAUX[nI,10] == "V"
2472 Aadd(aCols[nCnt],+1)
2473 aCols[ nCnt, nUsado ] := CriaVar( AllTrim(aHeadAUX[nI,2]) )
2474 // Processa Gatilhos
2475 EvalTrigger()
2476 Endif
2477 EndIf
2478 Next nI
2479 aCols[ nCnt, nUsado + 1 ] := .f.
2480
2481 dbSelectArea( "CB8" )
2482 dbSkip()
2483
2484 EndDo
2485 If oGet # Nil
2486 oGet:oBrowse:Refresh()
2487 EndIf
2488 If Type("oTimer") = "O"
2489 oTimer:Activate()
2490 EndIf
2491 Return
2492
2493 /*
2494 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2495 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2496 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
2497 ±±³Fun‡„o ³TimerBrw ³ Autor ³ Eduardo Motta ³ Data ³ 06/04/01 ³±±
2498 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
2499 ±±³Descri‡„o ³ Funcao que cria timer no mbrowse ³±±
2500 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2501 ±±³Parametros³ cMBrowse -> form em que sera criado o timer ³±±
2502 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2503 ±±³Retorno ³ .T. ³±±
2504 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2505 ±±³Uso ³ SIGAACD ³±±
2506 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
2507 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2508 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2509 */
2510 static Function TimerBrw(oMBrowse)
2511 Local oTimer
2512 DEFINE TIMER oTimer INTERVAL 1000 ACTION TmBrowse(GetObjBrow(),oTimer) OF oMBrowse
2513 oTimer:Activate()
2514 Return .T.
2515
2516 /*
2517 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2518 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2519 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
2520 ±±³Fun‡„o ³ TmBrowse ³ Autor ³ Eduardo Motta ³ Data ³ 06/04/01 ³±±
2521 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
2522 ±±³Descri‡„o ³ Funcao de timer do mbrowse ³±±
2523 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2524 ±±³Parametros³ cMBrowse -> objeto mbrowse a dar refresh ³±±
2525 ±±³ ³ oTimer -> objeto timer ³±±
2526 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2527 ±±³Retorno ³ .T. ³±±
2528 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2529 ±±³Uso ³ SIGAACD ³±±
2530 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
2531 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2532 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2533 */
2534 static Function TmBrowse(oObjBrow,oTimer)
2535 oTimer:Deactivate()
2536 oObjBrow:Refresh()
2537 oTimer:Activate()
2538 Return .T.
2539
2540 /*
2541 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2542 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2543 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
2544 ±±³Fun‡„o ³ACDA100OC ³ Autor ³ Eduardo Motta ³ Data ³ 18/04/01 ³±±
2545 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
2546 ±±³Descri‡„o ³ Validacao do campo ocorrencia ³±±
2547 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2548 ±±³Parametros³ ³±±
2549 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2550 ±±³Retorno ³ ³±±
2551 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2552 ±±³Uso ³ Validacao do campo CB8_OCOSEP ³±±
2553 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
2554 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2555 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2556 */
2557 Function ACDA100OC()
2558 aCols[n,GdFieldPos("CB8_DESOCS",aHeader)] :=
Posicione("CB4",1,xFilial("CB4")+M->CB8_OCOSEP,"CB4_DESCRI")
2559 Return .T.
2560
2561 /*
2562 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2563 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2564 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
2565 ±±³Fun‡„o ³LogACDA100³ Autor ³ Henrique Gomes Oikawa ³ Data ³ 23/09/04 ³±±
2566 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
2567 ±±³Descri‡„o ³ Exibicao do log das geracoes das Ordens de Separacao ³±±
2568 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2569 ±±³Retorno ³ Nil ³±±
2570 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2571 ±±³Uso ³ Apos a geracao das OS sao exibidas todas as informacoes que³±±
2572 ±±³ ³ ocorreram durante o processo ³±±
2573 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
2574 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2575 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2576 */
2577
2578 Static Function LogACDA100()
2579 Local i, j, k
2580 Local cChaveAtu, cPedCli, cOPAtual
2581
2582 //Cabecalho do Log de processamento:
2583 AutoGRLog(Replicate("=",75))
2584 AutoGRLog(STR0083) //" I N F O R M A T I V O"
2585 AutoGRLog(STR0084) //" H I S T O R I C O D A S G E R A C O E S"
2586
2587 //Detalhes do Log de processamento:
2588 AutoGRLog(Replicate("=",75))
2589 AutoGRLog(STR0085) //"I T E N S P R O C E S S A D O S :"
2590 AutoGRLog(Replicate("=",75))
2591 If aLogOS[1,2] == STR0041 //"Pedido"
2592 aLogOS := aSort(aLogOS,,,{|x,y|
x[01]+x[10]+x[03]+x[04]+x[05]+x[06]+x[07]+x[08]<y[01]+y[10]+y[03]+y[04]+y[05]+y[06
]+y[07]+y[08]})
2593 // Status Ord.Sep(1=Gerou;2=Nao Gerou) + Ordem Separacao + Pedido + Cliente +
Loja + Item + Produto + Local
2594 cChaveAtu := ""
2595 cPedCli := ""
2596 For i:=1 to len(aLogOs)
2597 If aLogOs[i,10] <> cChaveAtu .OR. (aLogOs[i,03]+aLogOs[i,04] <> cPedCli)
2598 If !Empty(cChaveAtu)
2599 AutoGRLog(Replicate("-",75))
2600 Endif
2601 j:=0
2602 k:=i //Armazena o conteudo do contador do laco logico principal (i)
pois o "For" j altera o valor de i;
2603 cChaveAtu := aLogOs[i,10]
2604 For j:=k to len(aLogOs)
2605 If aLogOs[j,10] <> cChaveAtu
2606 Exit
2607 Endif
2608 If Empty(aLogOs[j,08]) //Aglutina Armazem
2609
AutoGRLog(STR0086+aLogOs[j,03]+STR0087+aLogOs[j,04]+"-"+aLogOs[j,0
5]) //"Pedido: "###" - Cliente: "
2610 Else
2611
AutoGRLog(STR0086+aLogOs[j,03]+STR0087+aLogOs[j,04]+"-"+aLogOs[j,0
5]+STR0088+aLogOs[j,08]) //"Pedido: "###" - Cliente: "###" -
Local: "
2612 Endif
2613 cPedCli := aLogOs[j,03]+aLogOs[j,04]
2614 If aLogOs[j,10] == "NAO_GEROU_OS"
2615 Exit
2616 Endif
2617 i:=j
2618 Next
2619 AutoGRLog(STR0058+If(aLogOs[i,01]=="1",aLogOs[i,10],STR0089)) //"Ordem
de Separacao: "###"N A O G E R A D A"
2620 If aLogOs[i,01] == "2" //Ordem Sep. NAO gerada
2621 AutoGRLog(STR0090) //"Motivo: "
2622 Endif
2623 Endif
2624 If aLogOs[i,01] == "2" //Ordem Sep. NAO gerada
2625
AutoGRLog(STR0091+aLogOs[i,06]+STR0092+AllTrim(aLogOs[i,07])+STR0088+aLogO
s[i,08]+" ---> "+aLogOs[i,09]) //"Item: "###" - Produto: "###" - Local: "
2626 Endif
2627 Next
2628 Elseif aLogOS[1,2] == STR0046 //"Nota"
2629 aLogOS := aSort(aLogOS,,,{|x,y|
x[01]+x[08]+x[03]+x[04]+x[05]+x[06]<y[01]+y[08]+y[03]+y[04]+y[05]+y[06]})
2630 // Status Ord.Sep(1=Gerou;2=Nao Gerou) + Ordem Separacao + Nota + Serie +
Cliente + Loja
2631 cChaveAtu := ""
2632 For i:=1 to len(aLogOs)
2633 If aLogOs[i,08] <> cChaveAtu
2634 If !Empty(cChaveAtu)
2635 AutoGRLog(Replicate("-",75))
2636 Endif
2637 cChaveAtu := aLogOs[i,08]
2638
AutoGRLog(STR0093+aLogOs[i,3]+"/"+aLogOs[i,04]+STR0087+aLogOs[i,05]+"-"+aL
ogOs[i,06]) //"Nota: "###" - Cliente: "
2639 AutoGRLog(STR0058+If(aLogOs[i,01]=="1",aLogOs[i,08],STR0089)) //"Ordem
de Separacao: "###"N A O G E R A D A"
2640 If aLogOs[i,01] == "2" //Ordem Sep. NAO gerada
2641 AutoGRLog(STR0090) //"Motivo: "
2642 Endif
2643 Endif
2644 Next
2645 Else //Ordem de Producao
2646 aLogOS := aSort(aLogOS,,,{|x,y| x[01]+x[07]+x[03]+x[04]<y[01]+y[07]+y[03]+y[04]})
2647 // Status Ord.Sep(1=Gerou;2=Nao Gerou) + Ordem Separacao + Ordem Producao +
Produto
2648 cChaveAtu := ""
2649 cOPAtual := ""
2650 For i:=1 to len(aLogOs)
2651 If aLogOs[i,07] <> cChaveAtu .OR. aLogOs[i,03] <> cOPAtual
2652 If !Empty(cChaveAtu)
2653 AutoGRLog(Replicate("-",75) )
2654 Endif
2655 j:=0
2656 k:=i //Armazena o conteudo do contador do laco logico principal (i)
pois o "For" j altera o valor de i;
2657 cChaveAtu := aLogOs[i,07]
2658 For j:=k to len(aLogOs)
2659 If aLogOs[j,07] <> cChaveAtu
2660 Exit
2661 Endif
2662 If Empty(aLogOs[j,05]) //Aglutina Armazem
2663 AutoGRLog(STR0064+aLogOs[i,03]) //"Ordem de Producao: "
2664 Else
2665 AutoGRLog(STR0064+aLogOs[i,03]+STR0088+aLogOs[j,05]) //"Ordem de
Producao: "###" - Local: "
2666 Endif
2667 cOPAtual := aLogOs[j,03]
2668 If aLogOs[j,07] == "NAO_GEROU_OS"
2669 Exit
2670 Endif
2671 i:=j
2672 Next
2673 AutoGRLog(STR0058+If(aLogOs[i,01]=="1",aLogOs[i,07],STR0089)) //"Ordem
de Separacao: "###"N A O G E R A D A"
2674 If aLogOs[i,01] == "2" //Ordem Sep. NAO gerada
2675 AutoGRLog(STR0090) //"Motivo: "
2676 Endif
2677 Endif
2678 If aLogOs[i,01] == "2" //Ordem Sep. NAO gerada
2679 AutoGRLog(" ---> "+aLogOs[i,06])
2680 Endif
2681 Next
2682 Endif
2683 MostraParam(aLogOS[1,2])
2684 MostraErro()
2685 Return
2686
2687 /*
2688 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2689 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2690 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
2691 ±±³Fun‡„o ³MostraParam ³ Autor ³ Henrique Gomes Oikawa ³ Data ³ 28/09/04 ³±±
2692 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
2693 ±±³Descri‡„o ³ Exibicao dos parametros da geracao da Ordem de Separacao ³±±
2694 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
2695 ±±³Retorno ³ Nil ³±±
2696 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
2697 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2698 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2699 */
2700 Static Function MostraParam(cTipGer)
2701 Local cPergParam := ""
2702 Local cPergConfig := ""
2703 Local cDescTipGer := ""
2704 Local cResp := ""
2705 Local nTamSX1 := 0
2706 Local aPerg := {}
2707 Local aParam := {}
2708 Local ni := 0
2709 Local nX := 0
2710 Local nPos := 0
2711 Local ci := 0
2712 Local aLogs := {}
2713 Local oObj
2714
2715
2716 // se existe a classe FWSX1Util e o metodo GetAllFields não se encontra disponivel
2717 // na versao da lib 20180615
2718 If ACDLibVersion() >= "20180820"
2719 oObj := FWSX1Util():New()
2720 oObj:AddGroup("AIA102")
2721 oObj:SearchGroup()
2722 nTamSX1 := len(oObj:aGrupo[1][1])
2723
2724 // faz o tratamento buscando direto na tabela SX1
2725 // Caso gere issue na ferramenta SONARQUBE deve ser
2726 // classificado como falso positivo.
2727 else
2728 nTamSX1 := Len(SX1->X1_GRUPO)
2729
2730 Endif
2731
2732 If cTipGer == STR0041 //"Pedido"
2733 cPergParam := PADR('AIA102',nTamSX1)
2734 cPergConfig := PADR('AIA106',nTamSX1)
2735 cDescTipGer := STR0094 //'PEDIDO DE VENDA'
2736 aAdd(aParam,nConfLote)
2737 aAdd(aParam,nEmbSimul)
2738 aAdd(aParam,nEmbalagem)
2739 If cPaisLoc == "BRA"
2740 aAdd(aParam,nGeraNota)
2741 aAdd(aParam,nImpNota)
2742 EndIf
2743 aAdd(aParam,nImpEtVol)
2744 aAdd(aParam,nEmbarque)
2745 aAdd(aParam,nAglutPed)
2746 aAdd(aParam,nAglutArm)
2747 Elseif cTipGer == STR0046 //"Nota"
2748 cPergParam := PADR('AIA103',nTamSX1)
2749 cPergConfig := PADR('AIA107',nTamSX1)
2750 cDescTipGer := STR0095 //'NOTA FISCAL'
2751 aAdd(aParam,nEmbSimuNF)
2752 aAdd(aParam,nEmbalagNF)
2753 aAdd(aParam,nImpNotaNF)
2754 aAdd(aParam,nImpVolNF)
2755 aAdd(aParam,nEmbarqNF)
2756 Else //OP
2757 cPergParam := PADR('AIA104',nTamSX1)
2758 cPergConfig := PADR('AIA108',nTamSX1)
2759 cDescTipGer := STR0096 //'ORDEM DE PRODUCAO'
2760 aAdd(aParam,nReqMatOP)
2761 aAdd(aParam,nAglutArmOP)
2762 Endif
2763
2764 aAdd(aPerg,{STR0097+cDescTipGer,cPergParam}) //"P A R A M E T R O S : "
2765 aAdd(aPerg,{STR0098+cDescTipGer,cPergConfig}) //"C O N F I G U R A C O E S : "
2766 //-- Carrega parametros SX1
2767 For ni := 1 To Len(aPerg)
2768 //Posiciona no pergunte dentro do array
2769 nPos := aScan(aPerg100,{|x| x[1] == AllTrim(aPerg[ni,2])})
2770 aAdd(aLogs,{aPerg100[nPos,1],{}})
2771 //Percorre o Array para retornar as perguntas
2772 For nX := 1 To Len(aPerg100[nPos,2])
2773 If ValType(aPerg100[nPos,2,nX,2]) == "C"
2774 cResp := aPerg100[nPos,2,nX,2]
2775 ElseIf ValType(aPerg100[nPos,2,nX,2]) == "N"
2776 If aPerg100[nPos,2,nX,2] == 1
2777 cResp := STR0100 //Sim
2778 Else
2779 cResp := STR0101 //Não
2780 EndIf
2781 Else
2782 cResp := ""
2783 EndIf
2784 cTexto := STR0099 + StrZero(nX,2) + ": " + aPerg100[nPos,2,nX,1] + cResp
2785 aAdd(aLogs[ni,2],cTexto)
2786 Next nX
2787
2788 Next
2789
2790 //-- Gera Log
2791 For ni := 1 To Len(aPerg)
2792 AutoGRLog(Replicate("=",75))
2793 AutoGRLog(aPerg[ni,1])
2794 AutoGRLog(Replicate("=",75))
2795 For ci := 1 To Len(aLogs[ni,2])
2796 AutoGRLog(aLogs[ni,2,ci])
2797 Next
2798 Next
2799 AutoGRLog(Replicate("=",75))
2800 Return
2801
2802 /*
2803 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2804 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2805 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
2806 ±±³Fun‡ao ³ AtivaF12 ³ Autor ³ Henrique Gomes Oikawa ³ Data ³ 27/09/04 ³±±
2807 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
2808 ±±³Descri‡…o ³ Executa a Funcao da Pergunte ³±±
2809 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
2810 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2811 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2812 */
2813 Static Function AtivaF12(nOrigExp)
2814 Local lPerg := .F.
2815 Local lRet := .T.
2816 If nOrigExp == NIL
2817 lPerg := .T.
2818 If (lRet:=Pergunte("AIA101",.t.))
2819 nOrigExp := MV_PAR01
2820 EndIf
2821 EndIf
2822 If lRet
2823 If nOrigExp == 1 //Origem: Pedidos de Venda
2824 If Pergunte("AIA106",lPerg) .Or. !lPerg
2825 Aadd(aPerg100,ACD100Perg("AIA106"))
2826 nConfLote := MV_PAR01
2827 nEmbSimul := MV_PAR02
2828 nEmbalagem := MV_PAR03
2829 If cPaisLoc == "BRA"
2830 nGeraNota := MV_PAR04
2831 nImpNota := MV_PAR05
2832 nImpEtVol := MV_PAR06
2833 nEmbarque := MV_PAR07
2834 nAglutPed := MV_PAR08
2835 nAglutArm := MV_PAR09
2836 Else
2837 nImpEtVol := MV_PAR04
2838 nEmbarque := MV_PAR05
2839 nAglutPed := MV_PAR06
2840 nAglutArm := MV_PAR07
2841 EndIf
2842 EndIf
2843 ElseIf nOrigExp == 2 //Origem: Notas Fiscais
2844 If Pergunte("AIA107",lPerg) .Or. !lPerg
2845 nEmbSimuNF := MV_PAR01
2846 nEmbalagNF := MV_PAR02
2847 nEmbalagem := MV_PAR02
2848 nImpNotaNF := MV_PAR03
2849 nImpVolNF := MV_PAR04
2850 nEmbarqNF := MV_PAR05
2851 EndIf
2852 Else //Origem: Ordens de Producao
2853 If Pergunte("AIA108",lPerg) .Or. !lPerg
2854 nReqMatOP := MV_PAR01
2855 nAglutArmOP := MV_PAR02
2856 EndIf
2857 EndIf
2858 EndIf
2859 Return
2860
2861 /*
2862 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2863 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2864 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
2865 ±±³Fun‡ao ³ RetSldSDC ³ Autor ³ Microsiga ³ Data ³ 25/05/08 ³±±
2866 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
2867 ±±³Descri‡…o ³ Retorna os saldos disponiveis nas Composicoes de Empenho ³±±
2868 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
2869 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2870 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2871 */
2872 Static Function RetSldSDC(cProd,cLocal,cOP,lRetSaldo,cLote,cSublote,cSequen)
2873 Local aArea := GetArea()
2874 Local aAreaSDC := SDC->(GetArea())
2875 Local nSaldoSDC := 0
2876 Local aSaldoSDC := {}
2877 Local cQuerySDC
2878 Local lQuery :=.F.
2879 Local cAliasSDC := "SDC"
2880
2881 DEFAULT cLote := ''
2882 DEFAULT cSubLote := ''
2883
2884 lQuery :=.T.
2885 cQuerySDC := "SELECT SDC.* "
2886 cQuerySDC += " FROM " + RetSqlName("SDC") +" SDC "
2887 cQuerySDC += " INNER JOIN " + RetSqlName( "NNR" ) +" NNR ON ( DC_FILIAL = '"+
FWxFilial( 'SDC' ) +"' AND NNR_FILIAL = '"+ FWxFilial( 'NNR' ) +"' AND DC_LOCAL =
NNR_CODIGO ) "
2888 cQuerySDC += " WHERE DC_PRODUTO = '" + cProd + "' AND DC_LOCAL = '" + cLocal + "'
AND DC_OP = '" + cOP + "' AND "
2889
2890 If !Empty(cLote)
2891 cQuerySDC += " DC_LOTECTL = '" + cLote + "' AND "
2892 EndIf
2893
2894 If !Empty(cSubLote)
2895 cQuerySDC += " DC_NUMLOTE = '" + cSubLote + "' AND "
2896 EndIf
2897
2898 If !Empty(cSequen)
2899 cQuerySDC += " DC_TRT = '" + cSequen + "' AND "
2900 EndIf
2901
2902 cQuerySDC += " NNR.D_E_L_E_T_ = ' ' AND SDC.D_E_L_E_T_ = ' ' "
2903 cQuerySDC += " ORDER BY SDC.R_E_C_N_O_"
2904
2905 cQuerySDC := ChangeQuery( cQuerySDC )
2906 TCQUERY cQuerySDC NEW ALIAS "SDCTMP"
2907 dbSelectArea("SDCTMP")
2908 cAliasSDC := "SDCTMP"
2909
2910 While (cAliasSDC)->(!Eof() .AND. DC_FILIAL+DC_PRODUTO+DC_LOCAL+DC_OP ==
xFilial("SDC")+cProd+cLocal+cOP)
2911 nSaldoSDC += (cAliasSDC)->DC_QUANT
2912
aadd(aSaldoSDC,{(cAliasSDC)->DC_PRODUTO,(cAliasSDC)->DC_LOCAL,(cAliasSDC)->DC_LOCA
LIZ,(cAliasSDC)->DC_LOTECTL,(cAliasSDC)->DC_NUMLOTE,(cAliasSDC)->DC_NUMSERI,(cAlia
sSDC)->DC_QUANT,(cAliasSDC)->(recno())})
2913 (cAliasSDC)->(DbSkip())
2914 Enddo
2915 If lQuery
2916 (cAliasSDC)->( DbCloseArea() )
2917 Endif
2918 aSort(aSaldoSDC,,,{|x,y| x[08]<y[08]})
2919
2920 RestArea(aAreaSDC)
2921 RestArea(aArea)
2922 Return If(lRetSaldo,nSaldoSDC,aSaldoSDC)
2923
2924
2925 /*
2926 ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
2927 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2928 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
2929 ±±³Fun‡ao ³ RetSldEnd ³ Autor ³
Microsiga ³ Data ³ 09/05/08 ³±±
2930 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
2931 ±±³Descri‡…o ³ Retorna os saldos disponiveis nos
enderecos: ³±±
2932 ±±³ ³ - Quando produto com apropriacao INDIRETA, disconsidera o saldo de
Ordens de Separacao ainda nao sepa- ³±±
2933 ±±³ ³
radas;
³±±
2934 ±±³ ³ - Quando produto com apropriacao DIRETA, disconsidera apenas o saldo
nao separado do item atual; ³±±
2935 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
2936 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
2937 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
2938 */
2939 Static Function RetSldEnd(cProd,lRetSaldo,aVarAlt, cLocPad, lGroupLoc, cArmPA )
2940 Local aArea := GetArea()
2941 Local aAreaSBF := SBF->(GetArea())
2942 Local cArmProc := GetMvNNR('MV_LOCPROC','99')
2943 Local cLocCQ := GetMvNNR('MV_CQ','98')
2944 Local nSaldoAtu := 0
2945 Local nSaldoCB8 := 0
2946 Local nSaldoSBF := 0
2947 Local aSaldoSBF := {}
2948 Local cQuerySBF
2949 Local lQuery :=.F.
2950 Local cAliasSBF := "SBF"
2951 Local lACD100END
2952
2953 Local cTM := GetMV("MV_CBREQD3")
2954 Local lApropInd := CBArmProc(cProd,cTM)
2955 Local lExAcdEnd := ExistBlock("ACD100END")
2956
2957 LocaL cArmOri
2958 Local cEndOri
2959 Local cLoteOri
2960 Local cSLoteOri
2961 Local cNumSerOri
2962 Local nSldSepOri
2963
2964 Default cLocPad := Nil
2965 Default lGroupLoc := .F.
2966 Default cArmPA := Nil
2967
2968 If aVarAlt<>NIL
2969 cArmOri := aVarAlt[1]
2970 cEndOri := aVarAlt[2]
2971 cLoteOri := aVarAlt[3]
2972 cSLoteOri := aVarAlt[4]
2973 cNumSerOri := aVarAlt[5]
2974 nSldSepOri := aVarAlt[6]
2975 EndIf
2976
2977 lQuery :=.T.
2978 cQuerySBF := "SELECT SBF.* "
2979 cQuerySBF += " FROM " + RetSqlName("SBF") +" SBF "
2980 cQuerySBF += " INNER JOIN " + RetSqlName( "NNR" ) +" NNR ON ( BF_FILIAL = '"+
FWxFilial( 'SBF' ) +"' AND NNR_FILIAL = '"+ FWxFilial( 'NNR' ) +"' AND BF_LOCAL =
NNR_CODIGO ) "
2981
2982 cQuerySBF += " WHERE BF_PRODUTO = '" + cProd + "' AND "
2983
2984 If !( Empty( cLocPad ) ) .And. !( cLocPad == cArmProc ) .And. !( cLocPad == cLocCQ )
2985 cQuerySBF += " BF_LOCAL = '" + cLocPad + "' AND "
2986 EndIf
2987
2988 cQuerySBF += " BF_FILIAL = '" + xFilial("SBF") + "' AND "
2989 cQuerySBF += " SBF.D_E_L_E_T_ = ' ' AND NNR.D_E_L_E_T_ = ' ' "
2990 cQuerySBF += " ORDER BY BF_PRODUTO,BF_LOCAL,BF_LOTECTL,BF_NUMLOTE"
2991 cQuerySBF := ChangeQuery( cQuerySBF )
2992 TCQUERY cQuerySBF NEW ALIAS "SBFTMP"
2993 dbSelectArea("SBFTMP")
2994 cAliasSBF := "SBFTMP"
2995
2996 While (cAliasSBF)->(!Eof() .AND. BF_FILIAL+BF_PRODUTO == xFilial("SBF")+cProd)
2997 If ((cAliasSBF)->BF_LOCAL == cArmProc) .or. (aVarAlt<>NIL .and.
(cAliasSBF)->BF_LOCAL == cLocCQ)
2998 (cAliasSBF)->(DbSkip())
2999 Loop
3000 Endif
3001
3002 If lGroupLoc
3003 If !( AllTrim( (cAliasSBF)->BF_LOCAL ) == cArmPA )
3004 (cAliasSBF)->( dbSkip() ) ; Loop
3005 EndIf
3006 EndIf
3007
3008 If lExAcdEnd
3009 lACD100END :=
ExecBlock("ACD100END",.F.,.F.,{(cAliasSBF)->BF_LOCAL,(cAliasSBF)->BF_LOCALIZ,(
cAliasSBF)->BF_PRODUTO,(cAliasSBF)->BF_NUMSERI,(cAliasSBF)->BF_LOTECTL,(cAlias
SBF)->BF_NUMLOTE})
3010 lACD100END := If(ValType(lACD100END)=="L",lACD100END,.T.)
3011 If !lACD100END
3012 (cAliasSBF)->(DbSkip())
3013 Loop
3014 Endif
3015 Endif
3016 If lApropInd
3017 nSaldoAtu :=
(cAliasSBF)->(SaldoSBF(BF_LOCAL,BF_LOCALIZ,BF_PRODUTO,BF_NUMSERI,BF_LOTECTL,BF
_NUMLOTE))
3018 nSaldoCB8 :=
(cAliasSBF)->(RetSldCB8(BF_PRODUTO,BF_LOCAL,BF_LOCALIZ,BF_NUMSERI,BF_LOTECTL,B
F_NUMLOTE))
3019 If (nSaldoAtu-nSaldoCB8) > 0
3020 nSaldoSBF += (nSaldoAtu-nSaldoCB8)
3021
aadd(aSaldoSBF,{(cAliasSBF)->BF_PRODUTO,(cAliasSBF)->BF_LOCAL,(cAliasSBF)-
>BF_LOCALIZ,(cAliasSBF)->BF_LOTECTL,(cAliasSBF)->BF_NUMLOTE,(cAliasSBF)->B
F_NUMSERI,(nSaldoAtu-nSaldoCB8)})
3022 Endif
3023
Else

3024 nSaldoAtu :=
(cAliasSBF)->(SaldoSBF(BF_LOCAL,BF_LOCALIZ,BF_PRODUTO,BF_NUMSERI,BF_LOTECTL,BF
_NUMLOTE))
3025 If aVarAlt<> NIL .and. (cProd+cArmOri+cEndOri+cLoteOri+cSLoteOri+cNumSerOri)
==
(cAliasSBF)->(BF_PRODUTO+BF_LOCAL+BF_LOCALIZ+BF_LOTECTL+BF_NUMLOTE+BF_NUMSERI)
3026 //Se a chave SBF corresponder a chave do CB8, permitir que o usuario
possa seleciona-la com o saldo a ser separado:
3027 nSaldoAtu := nSldSepOri
3028 Endif
3029
3030 If nSaldoAtu > 0
3031 nSaldoSBF += nSaldoAtu
3032
aadd(aSaldoSBF,{(cAliasSBF)->BF_PRODUTO,(cAliasSBF)->BF_LOCAL,(cAliasSBF)-
>BF_LOCALIZ,(cAliasSBF)->BF_LOTECTL,(cAliasSBF)->BF_NUMLOTE,(cAliasSBF)->B
F_NUMSERI,nSaldoAtu})
3033 Endif
3034 Endif
3035 (cAliasSBF)->(DbSkip())
3036 Enddo
3037 If lQuery
3038 (cAliasSBF)->( DbCloseArea() )
3039 Endif
3040 aSort(aSaldoSBF,,,{|x,y|
x[01]+x[02]+x[03]+x[04]+x[05]+x[06]<y[01]+y[02]+y[03]+y[04]+y[05]+y[06]})
3041
3042 RestArea(aAreaSBF)
3043 RestArea(aArea)
3044 Return If(lRetSaldo,nSaldoSBF,aSaldoSBF)
3045
3046 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3047 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3048 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
3049 ±±³Fun‡ao ³ RetSldCB8 ³ Autor ³ Microsiga ³ Data ³ 13/05/08 ³±±
3050 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
3051 ±±³Descri‡…o ³ Retorna os saldos que ainda nao foram separados nas OS ³±±
3052 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
3053 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3054 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3055 Static Function RetSldCB8(cProd,cLocal,cLocaliz,cNumSerie,cLote,cSubLote)
3056 Local aArea := GetArea()
3057 Local aAreaCB7 := CB7->(GetArea())
3058 Local nSaldoCB8 := 0
3059
3060 cQueryCB8 := "SELECT SUM(CB8_SALDOS) AS SALDOSEP FROM " + RetSqlName("CB7") + " CB7,
" + RetSqlName("CB8") + " CB8"
3061 cQueryCB8 += " WHERE CB7.CB7_ORDSEP = CB8.CB8_ORDSEP AND CB7.CB7_OP <> '' AND
CB7.CB7_REQOP <> '1' AND"
3062 cQueryCB8 += " CB8.CB8_LOCAL = '" + cLocal + "' AND CB8.CB8_LCALIZ = '" + cLocaliz +
"' AND"
3063 cQueryCB8 += " CB8.CB8_NUMSER = '" + cNumSerie + "' AND CB8.CB8_LOTECT = '" + cLote
+ "' AND CB8.CB8_NUMLOT = '" + cSubLote + "' AND"
3064 cQueryCB8 += " CB8.CB8_PROD = '" + cProd + "' AND CB8.CB8_SALDOS > 0 AND"
3065 cQueryCB8 += " CB7.CB7_FILIAL = '" + xFilial("CB7") + "' AND CB8.CB8_FILIAL = '" +
xFilial("CB8") + "' AND "
3066 cQueryCB8 += " CB7.D_E_L_E_T_ <> '*' AND CB8.D_E_L_E_T_ <> '*'"
3067 cQueryCB8 := ChangeQuery( cQueryCB8 )
3068 TCQUERY cQueryCB8 NEW ALIAS "CB8TMP"
3069 dbSelectArea("CB8TMP")
3070 CB8TMP->(DbGoTop())
3071 If CB8TMP->(!Eof())
3072 nSaldoCB8 := CB8TMP->SALDOSEP
3073 Endif
3074 CB8TMP->( DbCloseArea() )
3075
3076 RestArea(aAreaCB7)
3077 RestArea(aArea)
3078 Return nSaldoCB8
3079
3080
3081 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3082 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3083 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
3084 ±±³Fun‡ao ³ SemSldOS ³ Autor ³ Microsiga ³ Data ³ 20/05/08 ³±±
3085 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
3086 ±±³Descri‡…o ³ Analisa se os produtos empenhados possuem saldo suficiente ³±±
3087 ±±³ ³ para a separacao (considera a estrutura) ³±±
3088 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
3089 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3090 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3091 Static Function SemSldOS()
3092 Local nUnPA := 0
3093 Local nX
3094
3095 //aEmp:
3096 // [01] - OP
3097 // [02] - Produto
3098 // [03] - Quantidade
3099 // [04] - Saldo em Estoque
3100 // [05] - Quantidade na estrutura
3101 // [06] - Quantidade disponivel para a producao de um PA
3102 // [07] - Nova quantidade a ser definida para a meteria-prima (com base na estrutura)
3103
3104 SG1->(DbSetOrder(1))
3105 //Calcula quantos produtos acabados podem ser gerados com as materias-primas
empenhadas:
3106 For nX:=1 to Len(aEmp)
3107 If SG1->(DbSeek(xFilial("SG1")+SC2->C2_PRODUTO+aEmp[nX,02]))
3108 aEmp[nX,05] := SG1->G1_QUANT
3109 If aEmp[nX,04] >= aEmp[nX,03] //Se tem saldo suficiente para atender a
quantidade da OP:
3110 aEmp[nX,06] := SC2->C2_QUANT-(SC2->C2_QUJE+SC2->C2_PERDA)
3111 Else //Se saldo insuficiente, encontrar o coeficiente para producao de um PA
3112 aEmp[nX,06] := (aEmp[nX,04]/SG1->G1_QUANT)
3113 If aEmp[nX,06] == 0
3114 aEmp[nX,06] := 0.1 //Se zero, novo valor deve ter residuo para
processar abaixo
3115 Endif
3116 Endif
3117 Endif
3118 Next
3119 aSort(aEmp,,,{|x,y| x[06]<y[06]})
3120
3121 //Verifico qual a menor unidade para producao de um produto acabado:
3122 //(descartando as materias-primas que nao fazem parte da estrutura e foram incluidas
manualmente):
3123 For nX:=1 to Len(aEmp)
3124 If !Empty(aEmp[nX,06])
3125 nUnPA := Int(aEmp[nX,06])
3126 Exit
3127 Endif
3128 Next
3129
3130 If nUnPA <= 0
3131 Return .t.
3132 Endif
3133
3134 //Refaco a quantidade de materias-primas necessarias com base no coeficiente
encontrado para producao do PA:
3135 For nX:=1 to Len(aEmp)
3136 If !Empty(aEmp[nX,05]) //Se empenho nao incluido manualmente
3137 aEmp[nX,07] := aEmp[nX,05] * nUnPA
3138 Else
3139 aEmp[nX,07] := aEmp[nX,03]
3140 Endif
3141 Next
3142
3143 Return .f.
3144
3145
3146 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3147 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3148 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
3149 ±±³Fun‡ao ³ RetEmpOS ³ Autor ³ Microsiga ³ Data ³ 20/05/08 ³±±
3150 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
3151 ±±³Descri‡…o ³ Retorna a quantidade do produto a ser separada na Ordem de ³±±
3152 ±±³ ³ Separacao ³±±
3153 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
3154 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3155 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3156 Static Function RetEmpOS(lConsEst,cProdEmp,nQtdEmp)
3157 Local nPos
3158
3159 If !lConsEst
3160 Return nQtdEmp
3161 Endif
3162
3163 nPos := Ascan(aEmp,{|x| x[02] == cProdEmp})
3164
3165 Return aEmp[nPos,07]
3166
3167
3168 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3169 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3170 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
3171 ±±³Fun‡…o ³ AltEmp ³ Autor ³ Totvs ³ Data ³ 20/05/09 ³±±
3172 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
3173 ±±³Descri‡…o ³ Rotina de alteracao dos produtos da Ordem Separacao onde ³±±
3174 ±±³ ³ refaz os empenhos ³±±
3175 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
3176 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3177 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3178 Static Function AltEmp(aHeaderEmp,aColsEmp)
3179 Local nOpcao := 0
3180 Local cPictCB8 := PesqPict('CB8','CB8_SALDOS')
3181 Local oDlgEmp
3182 Local oNewGetDados
3183 Local cProdAtu
3184 Local oDescPrd
3185 Local cDescPrd
3186 Local oArmOri
3187 LocaL cArmOri
3188 Local oEndOri
3189 Local cEndOri
3190 Local oLoteOri
3191 Local cLoteOri
3192 Local oSLoteOri
3193 Local cSLoteOri
3194 Local oNumSerOri
3195 Local cNumSerOri
3196 Local oQtdOri
3197 Local nQtdOri
3198 Local oQtdSep
3199 Local lJaSeparou
3200
3201 // variaveis Private, necessario dependencia dentro da GetDados.
3202 Private aHeaderAtu := aClone(aHeaderEmp)
3203 Private aColsAtu := aClone(aColsEmp)
3204 Private nAtaCols := n
3205 Private aHeadForm := {}
3206 Private aColsForm := {}
3207 Private aHeader := {}
3208 Private aCols := {}
3209 Private cLoteSug := Space(TamSx3("CB8_LOTECT")[1])
3210 Private cSLoteSug := Space(TamSx3("CB8_NUMLOT")[1])
3211 Private nQtdSug := 0
3212 Private cLocSug := Space(TamSx3("CB8_LOCAL")[1])
3213 Private cEndSug := Space(TamSx3("CB8_LOCAL")[1])
3214 Private cNumSerSug := Space(TamSx3("CB8_NUMSER")[1])
3215 Private oQtdSldInf
3216 Private nQtdSldInf := GDFGet2("CB8_SALDOS")
3217 Private nQtdSep
3218
3219 cProdAtu := GDFGet2("CB8_PROD")
3220 cArmOri := GDFGet2("CB8_LOCAL")
3221 cEndOri := GDFGet2("CB8_LCALIZ")
3222 cLoteOri := GDFGet2("CB8_LOTECT")
3223 cSLoteOri := GDFGet2("CB8_NUMLOT")
3224 cNumSerOri := GDFGet2("CB8_NUMSER")
3225 nQtdOri := GDFGet2("CB8_QTDORI")
3226 nQtdSep := GDFGet2("CB8_QTDORI")-GDFGet2("CB8_SALDOS")
3227 lJaSeparou := nQtdSep > 0
3228
3229 If GdDeleted(nAtaCols,aHeaderEmp,aColsEmp)
3230 Alert(STR0135) //"Nao e permitida a alteracao de empenhos de itens deletados!"
3231 aHeader := aClone(aHeaderAtu)
3232 aCols := aClone(aColsAtu)
3233 Return
3234 Endif
3235
3236 If !Localiza(cProdAtu)
3237 Alert(STR0136) //"So e permitida a alteracao de empenhos da Ordem de Separacao
quando o produto controlar enderecamento!"
3238 aHeader := aClone(aHeaderAtu)
3239 aCols := aClone(aColsAtu)
3240 Return
3241 Endif
3242
3243 If nQtdOri == nQtdSep
3244 Alert(STR0051+AllTrim(cProdAtu)+STR0137) //"O produto "###" ja foi totalmente
separado!"
3245 aHeader := aClone(aHeaderAtu)
3246 aCols := aClone(aColsAtu)
3247 Return
3248 Endif
3249
3250 SB1->(DbSetOrder(1))
3251 SB1->(DbSeek(xFilial("SB1")+cProdAtu))
3252 cDescPrd := AllTrim(cProdAtu)+" - "+AllTrim(SB1->B1_DESC)
3253
3254 aHeadForm := RetHeaderForm()
3255 aColsForm := RetColsForm()
3256
3257 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
3258 //³ Ativa tecla F4 para comunicacao com Saldos Empenhados ³
3259 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
3260 SetKey( VK_F4, {|| ShowF4()} )
3261
3262 DEFINE MSDIALOG oDlgEmp TITLE STR0138 From 50,50 to 450,855 PIXEL //"Substituicao de
Empenhos - <F4 - Consulta Empenhos>"
3263 @ 15,05 TO 65,400 LABEL "" OF oDlgEmp PIXEL
3264 @ 47,05 TO 05,400 LABEL "" OF oDlgEmp PIXEL
3265 @ 22,010 SAY STR0139 SIZE 200,8 OF oDlgEmp PIXEL //"Produto:"
3266 @ 34,010 SAY STR0140 SIZE 20,8 OF oDlgEmp PIXEL //"Local:"
3267 @ 34,055 SAY STR0141 SIZE 25,8 OF oDlgEmp PIXEL //"Endereco:"
3268 @ 34,155 SAY STR0142 SIZE 200,8 OF oDlgEmp PIXEL //"Lote:"
3269 @ 34,225 SAY STR0143 SIZE 20,8 OF oDlgEmp PIXEL //"Sublote:"
3270 @ 34,292 SAY STR0144 SIZE 40,8 OF oDlgEmp PIXEL //"Num.Serie:"
3271
3272 @ 52,010 SAY STR0145 SIZE 150,8 OF oDlgEmp PIXEL //"Quantidade Original:"
3273 @ 52,160 SAY STR0146 SIZE 150,8 OF oDlgEmp PIXEL //"Saldo Separado:"
3274 @ 52,300 SAY STR0147 SIZE 150,8 OF oDlgEmp PIXEL //"Saldo a Informar:"
3275
3276 @ 21,032 MSGET oDescPrd VAR cDescPrd PICTURE "@!" SIZE 222,06 WHEN .F. OF
oDlgEmp PIXEL
3277 @ 33,032 MSGET oArmOri VAR cArmOri PICTURE "@!" SIZE 15,06 WHEN .F. OF oDlgEmp
PIXEL
3278 @ 33,085 MSGET oEndOri VAR cEndOri PICTURE "@!" SIZE 60,06 WHEN .F. OF oDlgEmp
PIXEL
3279 @ 33,175 MSGET oLoteOri VAR cLoteOri PICTURE "@!" SIZE 38,06 WHEN .F. OF oDlgEmp
PIXEL
3280 @ 33,250 MSGET oSLoteOri VAR cSLoteOri PICTURE "@!" SIZE 30,06 WHEN .F. OF
oDlgEmp PIXEL
3281 @ 33,325 MSGET oNumSerOri VAR cNumSerOri PICTURE "@!" SIZE 70,06 WHEN .F. OF
oDlgEmp PIXEL
3282 @ 51,062 MSGET oQtdOri VAR nQtdOri PICTURE cPictCB8 SIZE 50,06 WHEN .F. OF
oDlgEmp PIXEL
3283 @ 51,203 MSGET oQtdSep VAR nQtdSep PICTURE cPictCB8 SIZE 50,06 WHEN .F. OF
oDlgEmp PIXEL
3284 @ 51,345 MSGET oQtdSldInf VAR nQtdSldInf PICTURE cPictCB8 SIZE 50,06 WHEN .F. OF
oDlgEmp PIXEL
3285 AtuSldInf(.f.,nQtdOri)
3286 oNewGetDados :=
MsNewGetDados():New(025,005,160,280,GD_INSERT+GD_UPDATE+GD_DELETE,"A100LLOK()",,/*
inicpos*/,,/*freeze*/,50,/*fieldok*/,/*superdel*/,/*delok*/,oDlgEmp,aHeadForm,aCol
sForm)
3287 oNewGetDados:oBrowse:bDelete := {||
VldLinDel(oNewGetDados:aCols,oNewGetDados:nAt,oNewGetDados,nQtdSep,nQtdOri) }
3288 oNewGetDados:oBrowse:Align := CONTROL_ALIGN_BOTTOM
3289 ACTIVATE DIALOG oDlgEmp ON INIT
EnchoiceBar(oDlgEmp,{||(nOpcao:=VldItens(),If(nOpcao==1,oDlgEmp:End(),0))},{||oDlgEmp:
End()}) CENTERED
3290
3291 If nOpcao == 1
3292 Begin Transaction
3293 AtuNovosEmp(aHeaderEmp,aColsEmp,nAtaCols)
3294 End Transaction
3295 Else
3296 aHeader := aClone(aHeaderAtu)
3297 aCols := aClone(aColsAtu)
3298 Endif
3299
3300 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
3301 //³ Desativa tecla F4 para comunicacao com Saldos Empenhados ³
3302 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
3303 SET KEY VK_F4 TO
3304 Return
3305
3306
3307 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3308 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3309 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3310 ±±ºPrograma ³ RetHeaderForm ºAutor ³ Totvs º Data ³ 28/04/09 º±±
3311 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3312 ±±ºDesc. ³ Carrega o Header dos
formularios º±±
3313 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3314 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3315 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3316 Static Function RetHeaderForm()
3317 Local aHeaderTMP := {}
3318
3319 AADD(aHeaderTMP,{ STR0148 ,"cLocSug" ,"@!"
,02,0,,,"C","","","",,".F."}) //"Local"
3320 AADD(aHeaderTMP,{ STR0066 ,"cEndSug" ,"@!"
,15,0,,,"C","","","",,".F."}) //"Endereco"
3321 AADD(aHeaderTMP,{ STR0149 ,"nQtdSug"
,PesqPict('CB8','CB8_SALDOS'),12,2,"A100VQt(,.t.)",,"N","","","",0,".T."})
//"Quantidade"
3322 AADD(aHeaderTMP,{ STR0067 ,"cLoteSug" ,"@!"
,10,0,,,"C","","","",,".F."})// "Lote"
3323 AADD(aHeaderTMP,{ STR0068 ,"cSLoteSug" ,"@!"
,06,0,,,"C","","","","",".F."})//"SubLote"
3324 AADD(aHeaderTMP,{ STR0069 ,"cNumSerSug" ,"@!"
,20,0,,,"C","","","",,".F."})//" Numero de Serie "
3325
3326 Return aClone( aHeaderTMP )
3327
3328
3329 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3330 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3331 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3332 ±±ºPrograma ³ RetColsForm ºAutor ³ Totvs º Data ³ 28/04/09 º±±
3333 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3334 ±±ºDesc. ³ Carrega o aCols dos
formularios º±±
3335 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3336 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3337 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3338 Static Function RetColsForm()
3339
3340 Local cArmOri := GDFGet2("CB8_LOCAL")
3341 Local cEndOri := GDFGet2("CB8_LCALIZ")
3342 Local cLoteOri := GDFGet2("CB8_LOTECT")
3343 Local cSLoteOri := GDFGet2("CB8_NUMLOT")
3344 Local cNumSerOri:= GDFGet2("CB8_NUMSER")
3345 Local nQtdSep := GDFGet2("CB8_QTDORI")-GDFGet2("CB8_SALDOS")
3346
3347 Local aColsTMP := {}
3348 Local lJaSeparou := nQtdSep > 0
3349
3350 AADD(aColsTMP,Array(Len(aHeadForm)+1))
3351 aColsTMP[1,1] := cArmOri
3352 aColsTMP[1,2] := cEndOri
3353 If lJaSeparou
3354 aColsTMP[1,3] := nQtdSep
3355 Else
3356 aColsTMP[1,3] := nQtdSldInf
3357 Endif
3358 aColsTMP[1,4] := cLoteOri
3359 aColsTMP[1,5] := cSLoteOri
3360 aColsTMP[1,6] := cNumSerOri
3361 aColsTMP[1,7] := .F.
3362
3363 Return aClone( aColsTMP )
3364
3365
3366 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3367 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3368 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3369 ±±ºPrograma ³ A100VQt ºAutor ³ Totvs º Data ³ 20/05/09 º±±
3370 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3371 ±±ºDesc. ³ Validacao da quantidade informada º±±
3372 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3373 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3374 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3375 Function A100VQt(nQtde,lAtualiza)
3376
3377 Local cProduto := GDFGet2("CB8_PROD")
3378 Local cArmOri := GDFGet2("CB8_LOCAL")
3379 Local cEndOri := GDFGet2("CB8_LCALIZ")
3380 Local cLoteOri := GDFGet2("CB8_LOTECT")
3381 Local cSLoteOri := GDFGet2("CB8_NUMLOT")
3382 Local cNumSerOri:= GDFGet2("CB8_NUMSER")
3383 Local nQtdSep := GDFGet2("CB8_QTDORI")-GDFGet2("CB8_SALDOS")
3384 Local nQtdOri := GDFGet2("CB8_QTDORI")
3385
3386 Local aRetSld := {}
3387 Local nSldTMP := 0
3388 Local cChaveAtu := ""
3389 Local nPos
3390 Local nX
3391 Local lJaSeparou := nQtdSep > 0
3392
3393 If nQtde == NIL
3394 If Empty(ReadVar())
3395 nQtde:= GDFieldGet('nQtdSug',n)
3396 Else
3397 nQtde:= M->nQtdSug
3398 EndIf
3399 EndIf
3400
3401 If Empty(nQtde)
3402 MsgAlert(STR0150) //"Quantidade invalida!!!"
3403 Return .f.
3404 Endif
3405
3406 If lJaSeparou .AND. (n == 1)
3407 MsgAlert(STR0151) //"A linha nao pode ser editada pois ja foi separada!!!"
3408 Return .f.
3409 Endif
3410
3411 aRetSld :=
RetSldEnd(cProduto,.f.,{cArmOri,cEndOri,cLoteOri,cSLoteOri,cNumSerOri,nQtde})
3412 cChaveAtu :=
GDFieldGet('cLocSug',n)+GDFieldGet('cEndSug',n)+GDFieldGet('cLoteSug',n)+GDFieldGet('c
SLoteSug',n)+GDFieldGet('cNumSerSug',n)
3413 nPos := Ascan(aRetSld,{|x| x[02]+x[03]+x[04]+x[05]+x[06] == cChaveAtu})
3414 If nPos == 0
3415 MsgAlert(STR0152) //"Saldo indisponivel!!!"
3416 Return .f.
3417 Endif
3418
3419 For nX:=1 to Len(aColsForm)
3420 If (nX <> n) .AND.
(aColsForm[nX,01]+aColsForm[nX,02]+aColsForm[nX,04]+aColsForm[nX,05]+aColsForm[nX,
06]==cChaveAtu) .AND. !aColsForm[nX,07]
3421 MsgAlert(STR0153) //"A chave: Local+Endereco+Lote+Sublote+Num.Serie ja foi
informada em outra linha!!!"
3422 Return .f.
3423 Endif
3424 Next
3425
3426 If nQtde > aRetSld[nPos,07]
3427 MsgAlert(STR0154) //"A quantidade digitada e superior ao saldo disponivel!!!"
3428 Return .f.
3429 Endif
3430
3431 For nX:=1 to Len(aColsForm)
3432 If (nX <> n) .AND. !aColsForm[nX,07]
3433 nSldTMP += aColsForm[nX,03]
3434 Endif
3435 Next
3436
3437 If nQtde > (nQtdOri-nSldTMP)
3438 MsgAlert(STR0155) //"A quantidade digitada e superior ao saldo a ser informado!!!"
3439 Return .f.
3440 Endif
3441
3442 If lAtualiza
3443 //Atualiza a informacao da array:
3444 If n > Len(aColsForm)
3445 aadd(aColsForm,Array(Len(aHeadForm)+1))
3446 aColsForm[Len(aColsForm),01] := GDFieldGet('cLocSug',n)
3447 aColsForm[Len(aColsForm),02] := GDFieldGet('cEndSug',n)
3448 aColsForm[Len(aColsForm),03] := nQtde
3449 aColsForm[Len(aColsForm),04] := GDFieldGet('cLoteSug',n)
3450 aColsForm[Len(aColsForm),05] := GDFieldGet('cSLoteSug',n)
3451 aColsForm[Len(aColsForm),06] := GDFieldGet('cNumSerSug',n)
3452 aColsForm[Len(aColsForm),07] := .F.
3453 Else
3454 aColsForm[n,01] := GDFieldGet('cLocSug',n)
3455 aColsForm[n,02] := GDFieldGet('cEndSug',n)
3456 aColsForm[n,03] := nQtde
3457 aColsForm[n,04] := GDFieldGet('cLoteSug',n)
3458 aColsForm[n,05] := GDFieldGet('cSLoteSug',n)
3459 aColsForm[n,06] := GDFieldGet('cNumSerSug',n)
3460 Endif
3461 Endif
3462 AtuSldInf(.t.,nQtdOri) //Atualiza o saldo a ser informado
3463
3464 Return .t.
3465
3466
3467 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3468 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3469 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3470 ±±ºPrograma ³ A100LLOK ºAutor ³ Totvs º Data ³ 28/04/09 º±±
3471 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3472 ±±ºDesc. ³ Validacao da linha º±±
3473 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3474 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3475 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3476 Function A100LLOK()
3477 Local lJaSeparou := nQtdSep > 0
3478 If aColsForm[n,7]
3479 Return .t.
3480 Endif
3481
3482 If lJaSeparou .AND. (n == 1)
3483 Return .t.
3484 Endif
3485
3486
3487 If !A100VQt(,.f.)
3488 Return .f.
3489 Endif
3490
3491 Return .t.
3492
3493
3494 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3495 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3496 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3497 ±±ºPrograma ³ VldLinDel ºAutor ³ Totvs º Data ³ 20/05/09 º±±
3498 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3499 ±±ºDesc. ³ Validacao do DELETE de linhas da tela de selecao de empenhos º±±
3500 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3501 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3502 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3503 Static Function VldLinDel(aCols,nPosAtu,oGetDados,nQtdSep,nQtdOri)
3504 Local lJaSeparou := nQtdSep > 0
3505
3506 If !aTail(aCols[nPosAtu])
3507 If lJaSeparou .AND. (nPosAtu == 1)
3508 MsgAlert(STR0156) //"A linha nao pode ser excluida pois a quantidade ja foi
separada!!!"
3509 Return .f.
3510 Endif
3511 //Nao estava deletado antes...
3512 aTail(aCols[nPosAtu]) := .t.
3513 aTail(aColsForm[nPosAtu]) := .t.
3514 AtuSldInf(.t.,nQtdOri) //Atualiza o saldo a ser informado
3515 Else
3516 //Estava deletado antes...
3517 //Verifica se ainda existe saldo a ser informado:
3518 If aCols[nPosAtu,GDFieldPos("CB8_QTDORI")] > nQtdSldInf
3519 MsgAlert(STR0157) //"A quantidade definida para este lote e superior ao
saldo a ser informado!!!"
3520 Return .f.
3521 Endif
3522 aTail(aCols[nPosAtu]) := .f.
3523 aTail(aColsForm[nPosAtu]) := .f.
3524 AtuSldInf(.t.,nQtdOri) //Atualiza o saldo a ser informado
3525 Endif
3526 oGetDados:Refresh()
3527
3528 Return .F.
3529
3530
3531 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3532 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3533 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3534 ±±ºPrograma ³ VldItens ºAutor ³ Totvs º Data ³ 20/05/09 º±±
3535 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3536 ±±ºDesc. ³ Validacao da confirmacao dos empenhos substituidos º±±
3537 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3538 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3539 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3540 Static Function VldItens()
3541
3542 Local cArmOri := GDFGet2("CB8_LOCAL")
3543 Local cEndOri := GDFGet2("CB8_LCALIZ")
3544 Local cLoteOri := GDFGet2("CB8_LOTECT")
3545 Local cSLoteOri := GDFGet2("CB8_NUMLOT")
3546 Local cNumSerOri:= GDFGet2("CB8_NUMSER")
3547
3548 Local nQtdTMP := 0
3549 Local nX
3550
3551 For nX:=1 to Len(aColsForm)
3552 If aColsForm[nX,07]
3553 Loop
3554 Endif
3555 nQtdTMP += aColsForm[nX,03]
3556 Next
3557
3558 If nQtdSldInf == 0
3559 If (Len(aColsForm) == 1) .AND. (aColsForm[1,1] == cArmOri) .AND. (aColsForm[1,2]
== cEndOri) .AND. (aColsForm[1,4] == cLoteOri) .AND.;
3560 (aColsForm[1,5] == cSLoteOri) .AND. (aColsForm[1,6] == cNumSerOri)
3561 Return 1
3562 Endif
3563 If !MsgYesNo(STR0158) //"Confirma a substituicao dos empenhos?"
3564 Return 0
3565 Endif
3566 lAlterouEmp := .t.
3567 Return 1
3568 Endif
3569
3570 If nQtdTMP <> nQtdSldInf
3571 MsgAlert(STR0159) //"Ainda existe saldo a ser informado. Verifique!!!"
3572 Return 0
3573 Endif
3574
3575 Return 1
3576
3577
3578 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3579 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3580 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3581 ±±ºPrograma ³ AtuSldInf ºAutor ³ Totvs º Data ³ 20/05/09 º±±
3582 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3583 ±±ºDesc. ³ Atualiza o saldo a ser
separado º±±
3584 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3585 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3586 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3587 Static Function AtuSldInf(lAtuTela,nQtdOri)
3588 Local nQtdInfo := 0
3589 Local nX
3590
3591 For nX:=1 to Len(aColsForm)
3592 If !aColsForm[nX,07]
3593 nQtdInfo += aColsForm[nX,03]
3594 Endif
3595 Next
3596 nQtdSldInf :=(nQtdOri-nQtdInfo)
3597 If lAtuTela
3598 oQtdSldInf:Refresh()
3599 Endif
3600
3601 Return
3602
3603 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3604 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3605 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3606 ±±ºPrograma ³ ShowF4 ºAutor ³ Totvs º Data ³ 20/05/09 º±±
3607 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3608 ±±ºDesc. ³ Monta tela com saldos
disponiveis º±±
3609 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3610 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3611 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3612 Static Function ShowF4()
3613 Local cProdAtu := GDFGet2("CB8_PROD")
3614 Local cArmOri := GDFGet2("CB8_LOCAL")
3615 Local cEndOri := GDFGet2("CB8_LCALIZ")
3616 Local cLoteOri := GDFGet2("CB8_LOTECT")
3617 Local cSLoteOri := GDFGet2("CB8_NUMLOT")
3618 Local cNumSerOri:= GDFGet2("CB8_NUMSER")
3619 Local nQtdSep := GDFGet2("CB8_QTDORI")-GDFGet2("CB8_SALDOS")
3620
3621 Local cCampo := AllTrim(Upper(ReadVar()))
3622 Local oDlgEnd
3623 Local nOpcEnd := 0
3624 Local nAtEnd
3625 Local aListAux := {}
3626 Local lJaSeparou := nQtdSep > 0
3627
3628 Private oListEnd
3629 Private aListEnd := {}
3630 Private cVarEnd
3631
3632 If cCampo == "M->NQTDSUG"
3633
3634 aListAux :=
RetSldEnd(cProdAtu,.f.,{cArmOri,cEndOri,cLoteOri,cSLoteOri,cNumSerOri,nQtdSldInf})

3635 If Empty(aListAux)
3636 MsgAlert(STR0160) //"Produto sem saldo disponivel!!!"
3637 Return .f.
3638 Endif
3639 aEval(aListAux,{|x| aadd(aListEnd,{x[2],x[3],x[7],x[4],x[5],x[6]})})
3640
3641 DEFINE MSDIALOG oDlgEnd TITLE STR0161 From 50,50 to 300,390 PIXEL //":: Saldos
disponiveis ::"
3642 @ 00,00 LISTBOX oListEnd VAR cVarEnd Fields HEADER STR0148, STR0141,
STR0149,STR0142, STR0143, STR0144 SIZE 50,110 PIXEL of oDlgEnd //'Local',
'Enderecos', 'Quantidades', 'Lotes', 'Sublotes', 'Num.Serie'
3643 oListEnd:Align := CONTROL_ALIGN_TOP
3644 oListEnd:SetArray( aListEnd )
3645 oListEnd:bLine := { || { aListEnd[oListEnd:nAT,1], aListEnd[oListEnd:nAT,2],
aListEnd[oListEnd:nAT,3], aListEnd[oListEnd:nAT,4],
aListEnd[oListEnd:nAT,5], aListEnd[oListEnd:nAT,6] } }
3646 oListEnd:Refresh()
3647 DEFINE SBUTTON FROM 113,115 TYPE 1 ACTION
(nOpcEnd:=1,nAtEnd:=oListEnd:nAT,oDlgEnd:End()) ENABLE Of oDlgEnd
3648 DEFINE SBUTTON FROM 113,143 TYPE 2 ACTION oDlgEnd:End() ENABLE Of oDlgEnd
3649 ACTIVATE DIALOG oDlgEnd CENTERED
3650
3651 If nOpcEnd == 1
3652
3653 If lJaSeparou .AND. (n == 1)
3654 MsgAlert(STR0151) //"A linha nao pode ser editada pois ja foi separada!!!"
3655 Return .f.
3656 Endif
3657
3658 //Atualiza informacoes da variavel de memoria:
3659 GDFieldPut("cLocSug" ,aListEnd[nAtEnd][01],n)
3660 GDFieldPut("cEndSug" ,aListEnd[nAtEnd][02],n)
3661 &(ReadVar()) :=
If(nQtdSldInf<=aListEnd[nAtEnd][03],nQtdSldInf,aListEnd[nAtEnd][03])
3662 GDFieldPut("cLoteSug" ,aListEnd[nAtEnd][04],n)
3663 GDFieldPut("cSLoteSug" ,aListEnd[nAtEnd][05],n)
3664 GDFieldPut("cNumSerSug" ,aListEnd[nAtEnd][06],n)
3665
3666 Endif
3667
3668 Endif
3669
3670 Return
3671
3672
3673 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3674 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3675 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3676 ±±ºPrograma ³ AtuNovosEmp ºAutor ³ Totvs º Data ³ 20/05/09
º±±
3677 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3678 ±±ºDesc. ³ Grava os novos
empenhos º±±
3679 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3680 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3681 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3682 Static Function AtuNovosEmp(aHeaderEmp,aColsEmp,nAtaCols)
3683 Local nPosPROD := Ascan(aHeaderEmp,{|x| UPPER(AllTrim(x[2]))=="CB8_PROD" })
3684 Local nPosLOCAL := Ascan(aHeaderEmp,{|x| UPPER(AllTrim(x[2]))=="CB8_LOCAL" })
3685 Local nPosLCALIZ := Ascan(aHeaderEmp,{|x| UPPER(AllTrim(x[2]))=="CB8_LCALIZ" })
3686 Local nPosQTDORI := Ascan(aHeaderEmp,{|x| UPPER(AllTrim(x[2]))=="CB8_QTDORI" })
3687 Local nPosSALDOS := Ascan(aHeaderEmp,{|x| UPPER(AllTrim(x[2]))=="CB8_SALDOS" })
3688 Local nPosSALDOE := Ascan(aHeaderEmp,{|x| UPPER(AllTrim(x[2]))=="CB8_SALDOE" })
3689 Local nPosLOTECT := Ascan(aHeaderEmp,{|x| UPPER(AllTrim(x[2]))=="CB8_LOTECT" })
3690 Local nPosNUMLOT := Ascan(aHeaderEmp,{|x| UPPER(AllTrim(x[2]))=="CB8_NUMLOT" })
3691 Local nPosNUMSER := Ascan(aHeaderEmp,{|x| UPPER(AllTrim(x[2]))=="CB8_NUMSER" })
3692
3693 Local nQtdSep := aColsEmp[nAtaCols,nPosQTDORI]-aColsEmp[nAtaCols,nPosSALDOS]
3694 Local lJaSeparou := nQtdSep > 0
3695
3696 Local cTipExp := CB7->CB7_TIPEXP
3697 Local aColsLinha
3698 Local nLen
3699 Local nX
3700
3701 //Atualiza as arrays de controle do MSGetDados:
3702 aHeader := aClone(aHeaderEmp)
3703 aCols := {}
3704 aColsLinha := aClone(aColsEmp[nAtaCols])
3705
3706 If lJaSeparou
3707 aColsEmp[nAtaCols,nPosQTDORI] := nQtdSep
3708 aColsEmp[nAtaCols,nPosSALDOS] := 0
3709 aColsEmp[nAtaCols,nPosSALDOE] := 0
3710 Else
3711 aDel(aColsEmp,nAtaCols)
3712 aSize(aColsEmp,Len(aColsEmp)-1)
3713 Endif
3714
3715 //Inclui os itens sugeridos:
3716 For nX:=1 to Len(aColsForm)
3717 If aColsForm[nX,07] .OR. (lJaSeparou .AND. nX == 1)
3718 Loop
3719 Endif
3720 aadd(aColsEmp,aClone(aColsLinha))
3721 nLen:= len(aColsEmp)
3722 aColsEmp[nLen,nPosLOCAL] := aColsForm[nX,01]
3723 aColsEmp[nLen,nPosLCALIZ] := aColsForm[nX,02]
3724 aColsEmp[nLen,nPosQTDORI] := aColsForm[nX,03]
3725 aColsEmp[nLen,nPosSALDOS] := aColsForm[nX,03]
3726 If !("09*" $ cTipExp) .AND. ("02*" $ cTipExp)
3727 aColsEmp[nLen,nPosSALDOE] := aColsForm[nX,03]
3728 Else
3729 aColsEmp[nLen,nPosSALDOE] := 0
3730 Endif
3731 aColsEmp[nLen,nPosLOTECT] := aColsForm[nX,04]
3732 aColsEmp[nLen,nPosNUMLOT] := aColsForm[nX,05]
3733 aColsEmp[nLen,nPosNUMSER] := aColsForm[nX,06]
3734 Next
3735 aSort(aColsEmp,,,{|x,y|
x[nPosPROD]+x[nPosLOCAL]+x[nPosLCALIZ]+x[nPosLOTECT]+x[nPosNUMLOT]+x[nPosNUMSER] < ;
3736
y[nPosPROD]+y[nPosLOCAL]+y[nPosLCALIZ]+y[nPosLOTECT]+y[nPosNU
MLOT]+y[nPosNUMSER] })
3737
3738 aCols :=aClone(aColsEmp)
3739
3740 //Atualiza o getdados:
3741 n:=1
3742 oGet:Refresh()
3743
3744 Return
3745
3746 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3747 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3748 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3749 ±±ºPrograma ³ GravaCB8 ºAutor ³ Totvs º Data ³ 20/05/09 º±±
3750 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3751 ±±ºDesc. ³ Gravacao dos registros no CB8 º±±
3752 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3753 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3754 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3755 Static Function GravaCB8()
3756 Local nX
3757 Local nJ
3758
3759 CB8->(DBSetOrder(1))
3760 While CB8->(DbSeek(xFilial('CB8')+CB7->CB7_ORDSEP))
3761 CB8->(RecLock("CB8",.F.))
3762 CB8->(dbDelete())
3763 CB8->(MsUnLock())
3764 End
3765 For nX:=1 to Len(aCols)
3766 If GdDeleted(nX,aHeader,aCols)
3767 Loop
3768 EndIf
3769 ++nItensCB8
3770 CB8->(RecLock("CB8",.T.))
3771 CB8->CB8_FILIAL := xFilial("CB8")
3772 CB8->CB8_ORDSEP := CB7->CB7_ORDSEP
3773 For nJ := 1 to len(aHeader)
3774 If aHeader[nJ,10] == "V"
3775 Loop
3776 EndIf
3777 CB8->&(AllTrim(aHeader[nJ,2])) := aCols[nX,nJ]
3778 Next
3779 If !Empty(CB8->CB8_OCOSEP) .and. (CB8->CB8_SALDOS-CB8->CB8_QTECAN) > 0
3780 lDiverg := .t.
3781 Endif
3782 CB8->(MsUnlock())
3783 Next
3784
3785 Return
3786
3787 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3788 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3789 ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
3790 ±±³Fun‡…o ³ProcAtuEmp³ Autor ³ Totvs ³ Data ³ 20/05/09 ³±±
3791 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
3792 ±±³Descri‡…o ³ Rotina de empenho/estorno empenho sobre PV/OP ³±±
3793 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
3794 ±±³Sintaxe e ³ Void ProcAtuEmp(aItensEmp,lEstorno) ³±±
3795 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
3796 ±±³Parametros³ aItensEmp = Array contendo os empenhos ³±±
3797 ±±³ ³ lEstorno = Indica se empenho/estorno empenho ³±±
3798 ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
3799 ±±³ Uso ³ Generico ³±±
3800 ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
3801 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3802 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
3803 Static Function ProcAtuEmp(aItensEmp,lEstorno)
3804
3805 // Parametros para a chamada da Funcao GravaEmp
------------------------------------------
3806 Local lEmpSB2 := .t. // Indica se Empenha
Material no SB2
3807 Local lEmpSB8SBF := .t. // Indica se Empenha
Material em SB8/SBF
3808 Local lCriaSDC := .t. // Indica se cria
Registro no SDC
3809 Local lGravaSD4 := (CB7->CB7_ORIGEM=="3") // Indica se grava
registro no SD4
3810 Local cOrigem := If(CB7->CB7_ORIGEM=="1","SC6","SD3") // Indica a Origem do
Empenho (SC6,SD3...)
3811
3812 Local cProduto := '' // Produto
3813 Local cLocal := '' // Armazem
3814 Local nQtd := 0 // Quantidade Empenhada
3815 Local nQtd2UM := 0 // Quantidade Empenhada na Segunda
Unidade de Medida
3816 Local cLote := '' // Lote
3817 Local cNumLote := '' // Sub-Lote
3818 Local cNumSerie := '' // Numero de Serie
3819 Local cOp := CB7->CB7_OP // Codigo da OP
3820 Local cTrt := '' // Sequencia do Empenho / Liberacao do
Pedido de Vendas
3821 Local cPedido := '' // Pedido de vendas
3822 Local cItem := '' // Item do Pedido de Vendas
3823 Local cOpOrig := '' // OP Original
3824 Local dEntrega := cTod("//") // Data de Entrega do Empenho
3825 Local aTravas := {} // Array para Travamento dos Saldos, Se
= {}, nao ha travamento
3826 Local lProj := .f. // Informa se e chamada da Projecao de
Estoque
3827 Local lConsVenc := .t. // Indica se considera lote vencido
3828 Local lEncerrOp := .f. // Indica se Encerra Empenho de OP
3829 Local cIdDCF := '' // Identificador do DFC
3830 Local dVldLote := cTod("//") // Data de Validade do Lote
3831 //------------------------------------------------------------------------------------
----
3832
3833 Local msg1 := If(lEstorno,STR0162,STR0163) //" [Exclusao]"###"
[Inclusao]"
3834 Local msg2 := If(lEstorno,STR0164,STR0165) //" Exclusao do Empenho
OK"###" Inclusao do Empenho OK"
3835 Local nX := 0
3836 Local aEmp := {}
3837
3838 For nX:= 1 to len(aItensEmp)
3839
3840 cProduto :=GDFieldGet("CB8_PROD" ,nX,,,aItensEmp)
3841 cItem :=GDFieldGet("CB8_ITEM" ,nX,,,aItensEmp)
3842 cLocal :=GDFieldGet("CB8_LOCAL" ,nX,,,aItensEmp)
3843 cLote :=GDFieldGet("CB8_LOTECT" ,nX,,,aItensEmp)
3844 cNumLote :=GDFieldGet("CB8_NUMLOT" ,nX,,,aItensEmp)
3845 cLocaliz :=GDFieldGet("CB8_LCALIZ" ,nX,,,aItensEmp)
3846 cNumSer :=GDFieldGet("CB8_NUMSER" ,nX,,,aItensEmp)
3847 nQtd :=GDFieldGet("CB8_QTDORI" ,nX,,,aItensEmp)
3848 cTrt :=GDFieldGet("CB8_SEQUEN" ,nX,,,aItensEmp)
3849 cPedido :=GDFieldGet("CB8_PEDIDO" ,nX,,,aItensEmp)
3850
3851 nQtd2UM :=ConvUm(cProduto,nQtd,nQtd2UM,2)
3852
3853 If ascan(aEmp,{|x| x[1]+x[2]+x[3]+x[4]+x[5] ==
cProduto+cItem+cLocal+cLote+cNumLote+cNumSer}) == 0
3854
aadd(aEmp,{cProduto,cItem,cLocal,cLote,cNumLote,cPedido,nQtd,nQtd2UM,cLocaliz,
cNumSer,cTrt})
3855 Endif
3856
3857 Next
3858
3859 For nX:=1 to Len(aEmp)
3860
3861 AutoGrLog(msg1)
3862 AutoGrLog(STR0166+aEmp[nX,1]) //" Produto...: "
3863 AutoGrLog(STR0167+aEmp[nX,2]) //" Item......: "
3864 AutoGrLog(STR0168+Alltrim(Str(aEmp[nX,7]))) //" Quantidade: "
3865 AutoGrLog(STR0169+aEmp[nX,3]) //" Armazem...: "
3866 AutoGrLog(STR0170+aEmp[nX,4]) //" Lote......: "
3867 AutoGrLog(STR0171+aEmp[nX,10]) //" Num.Serie.: "
3868 If !Empty(cPedido)
3869 AutoGrLog(STR0172+cPedido ) //" Pedido....: "
3870 Else
3871 AutoGrLog(STR0173+cOp ) //" Op........: "
3872 Endif
3873
3874 SB8->(DbSetOrder(3))
3875 If SB8->(DbSeek(xFilial("SB8") + aEmp[nX,1] + aEmp[nX,3] + aEmp[nX,4]))
3876 dVldLote := SB8->B8_DTVALID
3877 Endif
3878
3879 AutoGrLog(msg2)
3880 AutoGrLog(" ")
3881
3882 Next
3883
3884 Return .t.
3885
3886
3887 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3888 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3889 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3890 ±±ºPrograma ³ LimpaInfoOS ºAutor ³ Totvs º Data ³ 21/05/09 º±±
3891 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3892 ±±ºDesc. ³ Limpa as informacoes dos campos padroes relacionado a OS em questao º±±
3893 ±±º ³ quando item deletado º±±
3894 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3895 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3896 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
3897 Static Function LimpaInfoOS()
3898 Local nPosPed := Ascan(aHeader,{|x| UPPER(AllTrim(x[2]))=="CB8_PEDIDO" })
3899 Local nPosItPed := Ascan(aHeader,{|x| UPPER(AllTrim(x[2]))=="CB8_ITEM" })
3900 Local nPosSeqPed := Ascan(aHeader,{|x| UPPER(AllTrim(x[2]))=="CB8_SEQUEN" })
3901 Local nPosPrdPed := Ascan(aHeader,{|x| UPPER(AllTrim(x[2]))=="CB8_PROD" })
3902 Local nPosNSPed := Ascan(aHeader,{|x| UPPER(AllTrim(x[2]))=="CB8_NUMSER" })
3903 Local nPosNota := Ascan(aHeader,{|x| UPPER(AllTrim(x[2]))=="CB8_NOTA" })
3904 Local nPosSerie := Ascan(aHeader,{|x| UPPER(AllTrim(x[2]))=="CB8_SERIE" })
3905 Local nPosOP := Ascan(aHeader,{|x| UPPER(AllTrim(x[2]))=="CB8_OP" })
3906 Local nPosDel := Len(aHeader)+1
3907 Local cPedAtu, cChavePV
3908 Local i, nQ, nItens
3909
3910 For i:=1 to Len(aCols)
3911 If aCols[i,nPosDel]
3912 If CB7->CB7_ORIGEM == "1" //Por pedido
3913 If Empty(aCols[i,nPosPed])
3914 Loop
3915 Endif
3916 cPedAtu := aCols[i,nPosPed]
3917 CB8->(DbGoto(aRecno[i]))
3918 CB8->(RecLock( "CB8",.F.))
3919 CB8->(dbDelete())
3920 CB8->(MsUnLock())
3921 //Verifica se o item possui N.Serie, neste caso, avaliar se existem
itens com mesma chave que nao foram excluidos...
3922 If !Empty(aCols[i,nPosNSPed])
3923 cChavePV :=
aCols[i,nPosPed]+aCols[i,nPosItPed]+aCols[i,nPosSeqPed]+aCols[i,nPosPr
dPed]
3924 nItens := 0
3925 aEval(aCols,{|x|
If(x[nPosPed]+x[nPosItPed]+x[nPosSeqPed]+x[nPosPrdPed]==cChavePV
.AND. !x[nPosDel],nItens++,NIL)})
3926 If nItens > 0
3927 Loop
3928 Endif
3929 Endif
3930 SC9->(DbSetOrder(1))
3931 If SC9->( dbSeek(
xFilial("SC9")+cPedAtu+aCols[i,nPosItPed]+aCols[i,nPosSeqPed]+aCols[i,nPos
PrdPed] ) )
3932 If ! Empty(SC9->C9_ORDSEP)
3933 SC9->(RecLock("SC9",.F.))
3934 SC9->C9_ORDSEP := ""
3935 SC9->(MsUnlock())
3936 Endif
3937 EndIf
3938 ElseIf CB7->CB7_ORIGEM == "2" //Por Nota
3939 If Empty(aCols[i,nPosNota]+aCols[i,nPosSerie])
3940 Loop
3941 Endif
3942 cNotaAtu := aCols[i,nPosNota]
3943 cSeriAtu := aCols[i,nPosSerie]
3944 nQ := 0
3945 aEval(aCols,{|x|
If(x[nPosNota]+x[nPosSerie]==cNotaAtu+cSeriAtu,nQ++,nil)})
3946 aCols[i,nPosNota] := ""
3947 aCols[i,nPosSerie] := ""
3948 CB8->(DbGoto(aRecno[i]))
3949 CB8->(RecLock( "CB8",.F.))
3950 CB8->(dbDelete())
3951 CB8->(MsUnLock())
3952 If nQ == 1
3953 SF2->(DbSetOrder(1))
3954 If SF2->(DBSeek(xFilial("SF2")+cNotaAtu+cSeriAtu))
3955 If ! Empty(SF2->F2_ORDSEP)
3956 SF2->(RecLock("SF2",.F.))
3957 SF2->F2_ORDSEP := ""
3958 SF2->(MsUnlock())
3959 Endif
3960 Endif
3961 Endif
3962 ElseIf CB7->CB7_ORIGEM == "3" //Por OP
3963 If Empty(aCols[i,nPosOP])
3964 Loop
3965 Endif
3966 cOPAtu := aCols[i,nPosOP]
3967 nQ := 0
3968 aEval(aCols,{|x| If(x[nPosOP]==cOPAtu,nQ++,nil)})
3969 aCols[i,nPosOP] := ""
3970 CB8->(DbGoto(aRecno[i]))
3971 CB8->(RecLock( "CB8",.F.))
3972 CB8->(dbDelete())
3973 CB8->(MsUnLock())
3974 If nQ == 1
3975 SC2->(DbSetOrder(1))
3976 If SC2->(DbSeek(xFilial("SC2")+cOPAtu))
3977 If ! Empty(SC2->C2_ORDSEP)
3978 SC2->(RecLock("SC2",.F.))
3979 SC2->C2_ORDSEP := ""
3980 SC2->(MsUnlock())
3981 Endif
3982 Endif
3983 Endif
3984 Endif
3985 Endif
3986 Next
3987
3988 Return
3989
3990
3991 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
3992 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3993 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
3994 ±±ºPrograma ³ AtuCB7 ºAutor ³ Totvs º Data ³ 21/05/09 º±±
3995 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
3996 ±±ºDesc. ³ Atualiza as informacoes do Cabecalho da OS º±±
3997 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
3998 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
3999 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
4000 Static Function AtuCB7()
4001 Local nPosSaldoS := Ascan(aHeader,{|x| UPPER(AllTrim(x[2]))=="CB8_SALDOS" })
4002 Local nPosDel := Len(aHeader)+1
4003 Local lPreSep := ("09*" $ CB7->CB7_TIPEXP)
4004 Local lOK := .t.
4005 Local i
4006
4007 For i:=1 to Len(aCols)
4008 If !aCols[i,nPosDel] .and. ! Empty(aCols[i,nPosSaldoS]) // Linha nao esta
Deletada e o produto tem saldo a separar ...
4009 lOK:= .f.
4010 Exit
4011 Endif
4012 Next
4013
4014 CB7->(RecLock( "CB7", .F. ))
4015 CB7->CB7_CODOPE := M->CB7_CODOPE
4016 CB7->CB7_DIVERG := If(lDiverg,"1"," ")
4017 CB7->CB7_NUMITE := nItensCB8
4018
4019 If lOK // Nao tem nada pendente para separacao
4020 RecLock("CB7",.f.)
4021 If lPreSep
4022 CB7->CB7_STATPA := " "
4023 CB7->CB7_STATUS := "9" // Processo de Expedicao finalizado
4024 Else
4025 CB7->CB7_STATPA := "1"
4026 CB7->CB7_STATUS := "2" // Processo de separacao finalizado
4027 EndIf
4028 Endif
4029
4030 CB7->(MsUnLock())
4031
4032 Return
4033
4034 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
4035 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
4036 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
4037 ±±ºPrograma ³ ConsEmb º Autor ³ Totvs º Data ³ 06/06/09 º±±
4038 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
4039 ±±ºDesc. ³ Rotina de consulta de embalagens º±±
4040 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
4041 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
4042 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
4043 Static Function ConsEmb()
4044
4045 Local oDlgVol
4046 Local aButtons := {}
4047 Local aSize := MsAdvSize()
4048 Local lTemVol := .f.
4049 Local lImpEtiq := If(("05") $ CB7->CB7_TIPEXP,VldImpEtiq(),.T.)
4050 Local lEncEtap := .T.
4051 Local nI := 0
4052 Local oPanEsq
4053 Local oPanDir
4054 Local oPanelCB3
4055 Local oTreeVol
4056 Local oEncCB3
4057 Local oEncCB6
4058 Local oEncCB9
4059 Local lUpdate := ( Inclui .Or. Altera )
4060
4061 Private aVolumes := {}
4062 Private aSubVols := {}
4063
4064 CB9->(DbSetOrder(1))
4065 CB9->(DbSeek(xFilial("CB9")+CB7->CB7_ORDSEP))
4066 While CB9->(!Eof() .AND. CB9_FILIAL+CB9_ORDSEP == xFilial("CB9")+CB7->CB7_ORDSEP)
4067 If !Empty(CB9->CB9_VOLUME)
4068 lTemVol := .t.
4069 Exit
4070 Endif
4071 CB9->(DbSkip())
4072 Enddo
4073 If !lTemVol
4074 MsgStop(STR0187)//"Volumes não encontrados!"
4075 Return
4076 Endif
4077
4078 If lImpEtiq
4079 //Adiciona botao de impressao de etiquetas:
4080 aAdd(aButtons, {'RPMNEW',{|| ImpEtiqVol(oTreeVol:GetCargo())},STR0174,STR0174})
//"Impr.Etiq.Vol."###"Impr.Etiq.Vol."
4081 EndIf
4082
4083 DEFINE MSDIALOG oDlgVol TITLE STR0175+CB7->CB7_ORDSEP FROM aSize[07],0 TO
aSize[06],aSize[05] PIXEL //OF oMainWnd PIXEL //"Consulta de volumes - Ordem de
Separação: "
4084
4085 @ 000,000 SCROLLBOX oPanEsq HORIZONTAL SIZE 200,270 OF oDlgVol BORDER
4086 oPanEsq:Align := CONTROL_ALIGN_LEFT
4087
4088 oTreeVol := DbTree():New(0, 0, 0, 0, oPanEsq,,,.T.)
4089 oTreeVol:bChange := {||
AtuEncDir(oTreeVol:GetCargo(),oPanelCB3,oEncCB3,oEncCB6,oEncCB9)}
4090 oTreeVol:blDblClick := {||
AtuEncDir(oTreeVol:GetCargo(),oPanelCB3,oEncCB3,oEncCB6,oEncCB9)}
4091 oTreeVol:Align := CONTROL_ALIGN_ALLCLIENT
4092
4093 @ 000,000 MsPanel oPanDir Of oDlgVol
4094 oPanDir:Align := CONTROL_ALIGN_ALLCLIENT
4095
4096 oPanelCB3 := TPanel():New( 028, 072,,oPanDir, , , , , , 200, 80, .F.,.T. )
4097 oPanelCB3 :Align:= CONTROL_ALIGN_TOP
4098 oPanelCB3:Hide()
4099
4100 oEncCB3 :=
MsMGet():New("CB3",1,2,,,,,{015,002,100,100},,,,,,oPanelCB3,,,.F.,nil,,.T.)
4101 oEncCB3:oBox:Align := CONTROL_ALIGN_ALLCLIENT
4102 oEncCB3:Hide()
4103
4104 oEncCB6 :=
MsMGet():New("CB6",1,2,,,,,{015,002,100,100},,,,,,oPanDir,,,.F.,nil,,.T.)
4105 oEncCB6:oBox:Align := CONTROL_ALIGN_ALLCLIENT
4106 oEncCB6:Hide()
4107
4108 oEncCB9 :=
MsMGet():New("CB9",1,2,,,,,{015,002,100,100},,,,,,oPanDir,,,.F.,nil,,.T.)
4109 oEncCB9:oBox:Align := CONTROL_ALIGN_ALLCLIENT
4110 oEncCB9:Hide()
4111
4112 AtuTreeVol(oPanelCB3,oTreeVol,oPanelCB3,oEncCB3,oEncCB6,oEncCB9)
4113
4114 ACTIVATE MSDIALOG oDlgVol ON INIT
EnchoiceBar(oDlgVol,{||oDlgVol:End()},{||oDlgVol:End()},,aButtons) CENTERED
4115
4116 If lImpEtiq
4117 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
4118 //³ Atualiza o status do expedicao ³
4119 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
4120 For nI := 1 To Len(aVolumes)
4121 If CB6->(DbSeek(xFilial("CB6")+aVolumes[nI,1])) .And. CB6->CB6_STATUS == "1"
4122 lEncEtap := .F.
4123 Exit
4124 EndIf
4125 Next nI
4126
4127 If ( lUpdate )
4128 CB7->(RecLock('CB7',.F.))
4129 If lEncEtap
4130 CB7->CB7_VOLEMI :="1"
4131 If "05" $ CBUltExp(CB7->CB7_TIPEXP)
4132 CB7->CB7_STATUS := "9" // finalizou
4133 Else
4134 CB7->CB7_STATUS := "7" // imprimiu volume
4135 CB7->CB7_STATPA := "1" // pausa
4136 EndIf
4137 Else
4138 If !ISINCALLSTACK('ACDA100Vs')
4139 CB7->CB7_STATUS := CBAntProc(CB7->CB7_TIPEXP,"05*") // estorno
4140 EndIf
4141 EndIf
4142 CB7->(MsUnlock())
4143 EndIf
4144
4145 EndIf
4146
4147 Return
4148
4149
4150 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
4151 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
4152 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
4153 ±±ºPrograma ³ AtuTreeVol º Autor ³ Totvs º Data ³ 06/06/09 º±±
4154 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
4155 ±±ºDesc. ³ Rotina de atualizacao do Tree de consulta de volumes º±±
4156 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
4157 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
4158 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
4159 Static Function AtuTreeVol(oPanelCB3,oTreeVol,oPanelCB3,oEncCB3,oEncCB6,oEncCB9)
4160 Local aAreaCB9 := CB9->(GetArea())
4161 Local cDescItem
4162 Local cSubVolAtu
4163 Local nPosVol
4164 Local lFechaTree
4165 Local nX, nY
4166
4167 aVolumes := {}
4168 CB9->(DbSetOrder(1))
4169 CB9->(DbSeek(xFilial("CB9")+CB7->CB7_ORDSEP))
4170 While CB9->(!Eof() .AND. CB9_FILIAL+CB9_ORDSEP == xFilial("CB9")+CB7->CB7_ORDSEP)
4171 If !Empty(CB9->CB9_VOLUME)
4172 nPosVol := Ascan(aVolumes,{|x| x[01] == CB9->CB9_VOLUME})
4173 cDescItem := CB9->CB9_PROD+If(!Empty(CB9->CB9_LOTECT)," - Lote:
"+CB9->CB9_LOTECT,"")+If(!Empty(CB9->CB9_NUMLOT)," - SubLote:
"+CB9->CB9_NUMLOT,"")+If(!Empty(CB9->CB9_NUMSER)," - Num.Serie:
"+CB9->CB9_NUMSER,"")
4174 If nPosVol == 0
4175 aadd(aVolumes,{CB9->CB9_VOLUME,{}})
4176 nPosVol := Len(aVolumes)
4177 Endif
4178
aadd(aVolumes[nPosVol,02],{CB9->CB9_SUBVOL,CB9->CB9_PROD,cDescItem,CB9->CB9_LO
TECT,CB9->CB9_NUMLOT,CB9->CB9_NUMSER,StrZero(CB9->(Recno()),10)})
4179 Endif
4180 CB9->(DbSkip())
4181 Enddo
4182
4183 //Reorganiza a array de volumes e subvolumes:
4184 aSort(aVolumes,,,{|x,y| x[01]<y[01]})
4185 For nX:=1 to Len(aVolumes)
4186 aSort(aVolumes[nX,02],,,{|x,y| x[01]+x[04]+x[05]+x[06]<y[01]+y[04]+y[05]+y[06]})
4187 Next
4188
4189 oTreeVol:BeginUpdate()
4190 oTreeVol:Reset()
4191
4192 For nX:=1 to Len(aVolumes)
4193
oTreeVol:AddTree(STR0176+aVolumes[nX,01]+Space(70),.F.,cBmp1,cBmp1,,,aVolumes[nX,0
1]+Space(TamSx3("B1_COD")[1]+20)) //"Volume: "
4194 cSubVolAtu := ""
4195 For nY:=1 to Len(aVolumes[nX,02])
4196 If !Empty(aVolumes[nX,02,nY,01]) .AND. Empty(cSubVolAtu)
4197 cSubVolAtu := aVolumes[nX,02,nY,01]
4198 ElseIf !Empty(aVolumes[nX,02,nY,01]) .AND. !Empty(cSubVolAtu) .AND.
(cSubVolAtu<>aVolumes[nX,02,nY,01])
4199 oTreeVol:EndTree()
4200 cSubVolAtu := aVolumes[nX,02,nY,01]
4201 lFechaTree := .f.
4202 Endif
4203 If Empty(aVolumes[nX,02,nY,01])
4204 //Adiciona produto no volume:
4205
oTreeVol:AddTreeItem(aVolumes[nX,02,nY,03],cBmp2,,aVolumes[nX,01]+Space(10
)+aVolumes[nX,02,nY,02]+aVolumes[nX,02,nY,07])
4206 ElseIf !oTreeVol:TreeSeek(AllTrim(aVolumes[nX,01]+aVolumes[nX,02,nY,01]))
4207 //Adiciona subvolume:
4208
oTreeVol:AddTree(STR0177+aVolumes[nX,02,nY,01]+Space(60),.F.,cBmp1,cBmp1,,
,aVolumes[nX,01]+aVolumes[nX,02,nY,01]+Space(25)) //"SubVolume: "
4209 lFechaTree := .t.
4210 //Adiciona produto no subvolume:
4211
oTreeVol:AddTreeItem(aVolumes[nX,02,nY,03],cBmp2,,aVolumes[nX,01]+aVolumes
[nX,02,nY,01]+aVolumes[nX,02,nY,02]+aVolumes[nX,02,nY,07])
4212 Else
4213 //Adiciona produto no subvolume:
4214
oTreeVol:AddTreeItem(aVolumes[nX,02,nY,03],cBmp2,,aVolumes[nX,01]+aVolumes
[nX,02,nY,01]+aVolumes[nX,02,nY,02]+aVolumes[nX,02,nY,07])
4215 Endif
4216 oTreeVol:TreeSeek("")
4217 Next
4218 If lFechaTree
4219 oTreeVol:EndTree()
4220 lFechaTree := .f.
4221 Endif
4222 oTreeVol:EndTree()
4223 Next
4224
4225 oTreeVol:EndUpdate()
4226 oTreeVol:Refresh()
4227 oTreeVol:TreeSeek("")
4228
4229 AtuEncDir(oTreeVol:GetCargo(),oPanelCB3,oEncCB3,oEncCB6,oEncCB9) //Atualiza
enchoice direita
4230
4231 RestArea(aAreaCB9)
4232 Return
4233
4234
4235 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
4236 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
4237 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
4238 ±±ºPrograma ³ AtuEncDir º Autor ³ Totvs º Data ³ 06/06/09 º±±
4239 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
4240 ±±ºDesc. ³ Funcao de atualizacao da enchoice º±±
4241 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
4242 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
4243 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
4244 Static Function AtuEncDir(cCargoAtu,oPanelCB3,oEncCB3,oEncCB6,oEncCB9)
4245 Local nTamVol := TamSX3("CB9_VOLUME")[01]
4246 Local nTamSubVol := TamSX3("CB9_SUBVOL")[01]
4247 Local cVolume
4248
4249 If Len(AllTrim(cCargoAtu)) == nTamVol .OR. Len(AllTrim(cCargoAtu)) ==
(nTamVol+nTamSubVol) //Volume ou Subvolume
4250 CB6->(DbSetOrder(1))
4251 cVolume :=
If(Len(AllTrim(cCargoAtu))==nTamVol,AllTrim(cCargoAtu),SubStr(cCargoAtu,nTamVol+1,
nTamSubVol))
4252 CB6->(DbSeek(xFilial("CB6")+cVolume))
4253 CB3->(DbSetOrder(1))
4254 CB3->(DbSeek(xFilial("CB3")+CB6->CB6_TIPVOL))
4255 oEncCB9:Hide()
4256 oEncCB3:Refresh()
4257 oEncCB6:Refresh()
4258 oPanelCB3:Show()
4259 oEncCB3:Show()
4260 oEncCB6:Show()
4261 Else
4262 CB9->(Dbgoto(Val(Right(cCargoAtu,10))))
4263 oEncCB3:Hide()
4264 oEncCB6:Hide()
4265 oPanelCB3:Hide()
4266 oEncCB9:Refresh()
4267 oEncCB9:Show()
4268 Endif
4269
4270 Return
4271
4272
4273 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
4274 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
4275 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
4276 ±±ºPrograma ³ ImpEtiqVol º Autor ³ Totvs º Data ³ 08/06/09 º±±
4277 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
4278 ±±ºDesc. ³ Rotina de impressao de etiquetas de identificacao de volumes º±±
4279 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
4280 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
4281 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
4282 Static Function ImpEtiqVol(cCargoAtu)
4283 Local nTamVol := TamSX3("CB9_VOLUME")[01]
4284 Local nTamSubVol := TamSX3("CB9_SUBVOL")[01]
4285 Local aRet := {}
4286 Local aParamBox := {}
4287 Local aAreaCB6 := {}
4288 Local cIDVol := ""
4289 Local cVolume := ""
4290 Local cSubVol := ""
4291 Local nVolAtu := 1
4292 Local nTotVol := Len(aVolumes)
4293 Local nPosParam := 1
4294 Local nTpEtqVol := 1
4295 Local nAtuStaCB7 := 1
4296 Local lEtqOfi := ("05" $ CB7->CB7_TIPEXP)
4297 Local lImpVol := .T.
4298
4299 If !Empty(SubStr(cCargoAtu,nTamVol+1,nTamSubVol))
4300 cVolume := Left(cCargoAtu,nTamVol)
4301 cSubVol := SubStr(cCargoAtu,nTamVol+1,nTamSubVol)
4302 cIDVol := cSubVol
4303 Else
4304 cVolume := Left(cCargoAtu,nTamVol)
4305 cIDVol := cVolume
4306 Endif
4307 nVolAtu := Ascan(aVolumes,{|x| x[01] == cVolume})
4308
4309 If ExistBlock("ACD100VO")
4310 lImpVol := ExecBlock("ACD100VO",.F.,.F.,{cIDVol})
4311 If Valtype(lImpVol) # 'L'
4312 lImpVol := .T.
4313 EndIf
4314 If !lImpVol
4315 Return
4316 EndIf
4317 EndIf
4318
4319 If lEtqOfi
4320 aadd(aParamBox,{3,STR0178,1,{STR0179,STR0180},50,"",.T.}) //"Tipo de
identificação de volumes:"###"Temporaria"###"Oficial"
4321 Endif
4322 aadd(aParamBox,{1,STR0181,Space(06),"","","CB5","",0,.T.}) //"Local de Impressao"
4323
4324 If ParamBox(aParamBox,STR0176+cIDVol,@aRet,,,,,,,,.f.) //"Volume: "
4325 If lEtqOfi
4326 nTpEtqVol := aRet[nPosParam]
4327 ++nPosParam
4328 Endif
4329 If ExistBlock(If(nTpEtqVol==1,"IMG05","IMG05OFI")) .AND.
CB5SetImp(aRet[nPosParam],.t.)
4330 If nTpEtqVol==1 //Volume temporario
4331 ExecBlock("IMG05",,,{cIDVol,CB7->CB7_PEDIDO,CB7->CB7_NOTA,CB7->CB7_SERIE})
4332 Else //Volume oficial
4333 ExecBlock("IMG05OFI",,,{nTotVol,nVolAtu})
4334
4335 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
4336 //³ Atualiza o status do volume ³
4337 //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
4338 aAreaCB6 := CB6->(GetArea())
4339 CB6->(DbSetOrder(1))
4340
4341 If CB6->(DbSeek(xFilial("CB6")+cVolume)) .And. CB6->CB6_STATUS == "3" //
Volume encerrado
4342 nAtuStaCB7 := Aviso(STR0011,STR0182,{STR0183,STR0184,STR0185}) //
"Aviso" ## "A etiqueta oficial do volume selecionado já foi
impressa, gostaria de:" ## "Imprimir" ## "Estornar" ## "Cancelar"
4343 EndIf
4344
4345 If nAtuStaCB7 != 3
4346 RecLock("CB6",.F.)
4347 If nAtuStaCB7 == 1
4348 CB6->CB6_STATUS := "3" // Encerrado
4349 Else
4350 CB6->CB6_STATUS := "1" // Aberto
4351 EndIf
4352 CB6->(MsUnlock())
4353 EndIf
4354
4355 CB6->(RestArea(aAreaCB6))
4356 Endif
4357 MSCBCLOSEPRINTER()
4358 EndIf
4359 Endif
4360
4361 Return
4362
4363
4364 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
ÜÜÜÜÜÜÜÜÜÜÜÜ
4365 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±±±±±±±±±±±
4366 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍ
ÍÍÍÍÍÍÍÍÍ»±±
4367 ±±ºPrograma ³ GDFGet2 º Autor ³ Totvs º Data ³
19/06/09 º±±
4368 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍ
ÍÍÍÍÍÍÍÍ͹±±
4369 ±±ºDesc. ³ Funcao de retorno do conteudo do campo de aColsAtu, semelhante ao
GDFieldGet º±±
4370 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍͼ±±
4371 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±±±±±±±±±±±
4372 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ßßßßßßßßßßß*/
4373 Static Function GDFGet2(cCampo)
4374 Local nPosCmp := Ascan(aHeaderAtu,{|x| Upper(Alltrim(x[2]))==cCampo})
4375 Local xRet
4376
4377 If nPosCmp > 0
4378 xRet := aColsAtu[nAtaCols,nPosCmp]
4379 Endif
4380
4381 Return xRet
4382
4383 /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
4384 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
4385 ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍ»±±
4386 ±±ºPrograma ³ VldImpEtiq º Autor ³ Paulo Fco. Cruz Neto º Data ³ 05.08.2010 º±±
4387 ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍ͹±±
4388 ±±ºDesc. ³ Valida a ordem de separacaoRotina de consulta de embalagens º±±
4389 ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
4390 ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
4391 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
4392 Static Function VldImpEtiq()
4393
4394 If (CB7->CB7_STATUS == "0" .Or. CB7->CB7_STATUS == "1") .Or. ;
4395 ("02" $ CB7->CB7_TIPEXP .And. (CB7->CB7_STATUS == "2" .Or. CB7->CB7_STATUS ==
"3")) .Or. ;
4396 ("03" $ CB7->CB7_TIPEXP .And. Empty(CB7->(CB7_NOTA+CB7_SERIE))) .Or. ;
4397 (!ACDGet170() .And. "04" $ CB7->CB7_TIPEXP .And. (CB7->CB7_STATUS != "6")) .Or. ;
4398 (CB7->CB7_STATUS == "8") .Or. ;
4399 (CB7->CB7_STATUS == "9" .And. !("05" $ CBUltExp(CB7->CB7_TIPEXP)))
4400 Return .F.
4401 EndIf
4402
4403 Return .T.
4404
4405 /*/{Protheus.doc} ACD100Perg
4406 //Guarda configuração do Pergunte utilizado
4407 @author jose.eulalio
4408 @since 14/08/2018
4409 @version 1.0
4410 @return aRet
4411
4412 @type function
4413 /*/
4414 Static Function ACD100Perg(cPerg)
4415 Local aRet := {}
4416 Local nX := 0
4417 Local nY := 0
4418 Local oObj
4419 Local dLibVers := ACDLibVersion()
4420 Local aRetSX1 := {}
4421 Local aPergunt := {}
4422
4423 // se existe a classe FWSX1Util e o metodo GetAllFields não se encontra disponivel
4424 // na versao da lib 20180615
4425 If (dLibVers >= "20180820" )
4426 oObj := FWSX1Util():New()
4427
4428 // faz o tratamento buscando direto na tabela SX1
4429 // Caso gere issue na ferramenta SONARQUBE deve ser
4430 // classificado como falso positivo.
4431 else
4432 aRetSX1 := SX1->(GetArea())
4433
4434 Endif
4435
4436 //Define quantidade de perguntas
4437 If cPerg == "AIA106"
4438 If cPaisLoc == "BRA"
4439 nY := 9
4440 Else
4441 nY := 7
4442 EndIf
4443 ElseIf cPerg == "AIA102"
4444 nY := 10
4445 ElseIf cPerg == "AIA107"
4446 nY := 5
4447 ElseIf cPerg == "AIA103"
4448 nY := 11
4449 ElseIf cPerg == "AIA108"
4450 nY := 2
4451 ElseIf cPerg == "AIA104"
4452 nY := 6
4453 EndIf
4454
4455 Aadd(aRet,cPerg)
4456 Aadd(aRet,{})
4457
4458 // se existe a classe FWSX1Util e o metodo GetAllFields não se encontra disponivel
4459 // na versao da lib 20180615
4460 If (dLibVers >= "20180820" )
4461
4462 oObj:AddGroup(cPerg)
4463 oObj:SearchGroup()
4464
4465 aPergunt := oObj:GetGroup(cPerg)
4466 //Pega Perguntas e valores configurados
4467 For nX := 1 To nY
4468 Aadd(aRet[2],{aPergunt[2][nx]:CX1_PERGUNT,&("MV_PAR" + StrZero(nX,2))})
4469 Next nX
4470
4471 // faz o tratamento buscando direto na tabela SX1
4472 // Caso gere issue na ferramenta SONARQUBE deve ser
4473 // classificado como falso positivo.
4474 Else
4475 For nX := 1 To nY
4476 SX1->(DbSetOrder(1))
4477 SX1->(DbSeek(PADR(cPerg,Len(SX1->X1_GRUPO)) + StrZero(nX,2)))
4478 Aadd(aRet[2],{X1Pergunt(),&("MV_PAR" + StrZero(nX,2))})
4479 Next nX
4480 RestArea(aRetSX1)
4481
4482 Endif
4483
4484 Return aRet
4485
4486
4487 /*/{Protheus.doc} IsUseApInd
4488 //Verifica se o Produto e de Aprop. Indireta
4489 @author Paulo V. Beraldo
4490 @since Jan/2019
4491 @version 1.0
4492 @return lRet
4493
4494 @type function
4495 /*/
4496 Function IsPrdApInd( cProduto )
4497 Local lRet := .T.
4498 Local aArea := GetArea()
4499 Local aAreaSB1 := SB1->( GetArea() )
4500
4501 Default cProduto:= ''
4502
4503 dbSelectArea( 'SB1' )
4504 SB1->( dbSetOrder( 1 ) )
4505
4506 If Empty( cProduto )
4507 lRet := .F.
4508 Else
4509 If !SB1->( dbSeek( FWxFilial( 'SB1' ) + cProduto ) )
4510 lRet := .F.
4511 Else
4512 lRet := ( SB1->B1_APROPRI == 'I' )
4513 EndIf
4514 EndIf
4515
4516 RestArea( aAreaSB1 )
4517 RestArea( aArea )
4518 Return lRet
4519
4520 /*/{Protheus.doc} ACDLibVersion
4521 encapsulamento da funcao do frame que retorna a versão da lib do repositorio
4522 @author reynaldo
4523 @since 11/01/2019
4524 @version 1.0
4525 @return Character, Versão da lib do repositorio
4526
4527 @type function
4528 /*/
4529 Static Function ACDLibVersion()
4530 Local cVersao := ""
4531 /*
4532 * A chamada da funcao __FWLibVersion esta sendo utilizada, conforme acordado
com o framework.
4533 * Pois se trata de uma funcao "interna" do framework.
4534 * A função vai estar liberada com o nome de FWLibVersion() na proxima lib
4535 * com versão superior a 20190111
4536 */
4537 If FindFunction("__FWLibVersion")
4538 cVersao := __FWLibVersion()
4539 Else
4540 If FindFunction("FWLibVersion")
4541 cVersao := FWLibVersion()
4542 EndIf
4543 EndIf
4544
4545 Return cVersao
4546
4547 /*/{Protheus.doc} Menudef
4548 (long_description)
4549 @type Static Function
4550 @author TOTVS
4551 @since 21/02/2020
4552 @version version
4553 @param param_name, param_type, param_descr
4554 @return return_var, return_type, return_description
4555 @example
4556 (examples)
4557 @see (links_or_references)
4558 /*/
4559 Static Function MenuDef()
4560
4561 Local aRotMenu := { }
4562
4563
4564 aRotMenu := { {STR0001 ,"AxPesqui", 0,1},; //"Pesquisar"
4565 {STR0002 ,"ACDA100Vs",0,2},; //"Visualizar"
4566 {STR0003 ,"ACDA100Al",0,3},; //"Alterar"
4567 {STR0004 ,"ACDA100Et",0,5,5},; //"Estornar"
4568 {STR0005 ,"ACDA100Gr",0,3},; //"Gerar"
4569 {STR0116 ,"ACDA100Re",0,4},; //"Impressao"
4570 {STR0006 ,"ACDA100Lg",0,3}} //"Legenda"
4571
4572 Return aRotMenu
4573
4574 /*/{Protheus.doc} a1002Leg
4575 Funcao Responsavel Montar a Legenda do Browser
4576 @type Static Function
4577 @author Paulo V. Beraldo
4578 @since Mar/2020
4579 @version 1.00
4580 @param aLegend , Array , Vetor com as Informacoes para Montagem da Legenda
4581 @return oFWLegend, Object , Objeto FwLegend Criado
4582 /*/
4583 Static Function a1002Leg( aLegend )
4584 Default aLegend := {}
4585 oFWLegend := IIf( Type( "oFWLegend" ) == "U", Nil, oFWLegend )
4586
4587 If Len( aLegend ) > 0
4588 oFWLegend := FWLegend():New()
4589 AEval( aLegend,{ | x | oFWLegend:Add( x[1], x[2], x[3] ) } )
4590 oFWLegend:Activate()
4591 EndIf
4592
4593 Return oFWLegend
4594
4595 /*/{Protheus.doc} a100Mark
4596 Funcao Responsavel por Marcar / Desmarcar Registros no Browser
4597 @type Static Function
4598 @author Paulo V. Beraldo
4599 @since Mar/2020
4600 @version 1.00
4601 @param oBrwMrk , Object , Objeto do Browser
4602 @param nOpcx , Numeric , Opcao para Processamento 1= Atualiza Registro /
2=Atualiza Todos
4603 @param cGetMark , Caracter, Marca Utilizada no Browser
4604 @param bMark2 , Block , Bloco de Codigo Utilizado para Identificar se o
Registro deve ser Marcado ou N?o
4605 @param uAlias , Caracter, Alias da Tabela em Uso
4606 @param cCpoMark , Caracter, Campo Utilizado para Marcar/Desmarcar
4607 @return lRet , Boolean , Informa se foi possivel Atualizar o Registro
4608 /*/
4609 Static Function a100Mark( oBrwMrk, nOpcx, cGetMark, bMark2, uAlias, cCpoMark )
4610 Local lRet := .T.
4611 Local bMarkRec := { || IIf( Eval( bMark2 ) , IIf( AllTrim( &( ( uAlias )->(
cCpoMark ) ) ) == AllTrim( cGetMark ), CriaVar( cCpoMark, .F.), AllTrim( cGetMark )
) , CriaVar( cCpoMark, .F.) ) }
4612
4613 Default nOpcx := 1
4614
4615 If nOpcx == 1
4616 RecLock( uAlias, .F. )
4617 ( uAlias )->( FieldPut( FieldPos( cCpoMark ) , Eval( bMarkRec ) ) )
4618 ( uAlias )->( MsUnLock() )
4619
4620 Else
4621 ( uAlias )->( dbGoTop() )
4622 While !( uAlias )->( Eof() )
4623 RecLock( uAlias, .F. )
4624 ( uAlias )->( FieldPut( FieldPos( cCpoMark ) , Eval( bMarkRec ) ) )
4625 ( uAlias )->( MsUnLock() )
4626
4627 ( uAlias )->( dbSkip() )
4628 EndDo
4629 EndIf
4630
4631 oBrwMrk:Refresh( ( nOpcx == 2 ) )
4632 Return lRet

You might also like