Advertisement
Guest User

MATXSPED.prw

a guest
Aug 20th, 2019
2,297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 249.65 KB | None | 0 0
  1. #Include "MATXSPED.ch"
  2. #Include "Protheus.ch"
  3. #Include "TbIconn.ch"
  4. #Define 0210 1
  5. #Define K001 2
  6. #Define K100 3
  7. #Define K200 4
  8. #Define K210 5
  9. #Define K215 6
  10. #Define K220 7
  11. #Define K230 8
  12. #Define K235 9
  13. #Define K250 10
  14. #Define K255 11
  15. #Define K260 12
  16. #Define K265 13
  17. #Define K270 14
  18. #Define K275 15
  19. #Define K280 16
  20. #Define K300 17
  21. #Define K301 18
  22. #Define K302 19
  23. #Define K990 20
  24. #Define 0200 21
  25. #Define K290 22
  26. #Define K291 23
  27. #Define K292 24
  28.  
  29. STATIC aTmpRegK
  30. STATIC lPCPREVATU := FindFunction('PCPREVATU')
  31.  
  32.  
  33. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  34. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  35. 北谀哪哪哪哪穆哪哪哪哪哪哪哪穆哪哪哪穆哪哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  36. 北矲un嘺o ?SPDBlocoK ?Autor ?Materiais ?Data ?06/09/16 潮?
  37. 北媚哪哪哪哪呐哪哪哪哪哪哪哪牧哪哪哪牧哪哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  38. 北矰escricao ?Esta funcao tem o objetivo de recupaderar informacoes de 潮?
  39. 北? ?Estoque para geracao do Bloco K para o SPED 潮?
  40. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  41. 北砎ersao EFD? ***** 2.0.19 ***** 潮?
  42. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  43. 北砅arametros?dDataDe = Data Inicial para geracao das informacoes 潮?
  44. 北? ?dDataAte = Data Final para geracao das informacoes 潮?
  45. 北? ?aAlias = Alias dos arquivos de trabalho 潮?
  46. 北? ?lEstruMov = Gera registro 0210 por movimento 潮?
  47. 北? ?lSum = Aglutina produtos com lancamentos no mesmo dia 潮?
  48. 北? ?lHistor = Se deve gerar historico do registros ou n鉶 潮?
  49. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  50. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  51. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  52. Function SPDBlocoK(dDataDe,dDataAte,aAlias,aAliProc,lEstruMov,lSum,lGerLogPro,lRepross )
  53.  
  54. Local aDate := {}
  55. Local aTime := {}
  56. Local aResult := {}
  57. Local nX
  58. Local lContinua := .T.
  59. Local aRegistr := {"0210","K001","K100","K200","K210","K215","K220","K230","K235","K250","K255","K260","K265","K270","K275","K280","K300","K301","K302","K990","0200","K290","K291","K292"}
  60. Local cMensagem := ""
  61. Local cIDCV8MOV := ""
  62. Local dDataFunc := Ctod(" / / ")
  63. Local cHoraFunc := " "
  64. Local lAtuFunc := .F.
  65. Private cTipo00 := If(SuperGetMv("MV_BLKTP00",.F.,"'ME'")== " ","'ME'", SuperGetMv("MV_BLKTP00",.F.,"'ME'")) // 00: Mercadoria Revenda
  66. Private cTipo01 := If(SuperGetMv("MV_BLKTP01",.F.,"'MP'")== " ","'MP'", SuperGetMv("MV_BLKTP01",.F.,"'MP'")) // 01: Materia-Prima
  67. Private cTipo02 := If(SuperGetMv("MV_BLKTP02",.F.,"'EM'")== " ","'EM'", SuperGetMv("MV_BLKTP02",.F.,"'EM'")) // 02: Embalagem
  68. Private cTipo03 := If(SuperGetMv("MV_BLKTP03",.F.,"'PP'")== " ","'PP'", SuperGetMv("MV_BLKTP03",.F.,"'PP'")) // 03: Produto em Processo
  69. Private cTipo04 := If(SuperGetMv("MV_BLKTP04",.F.,"'PA'")== " ","'PA'", SuperGetMv("MV_BLKTP04",.F.,"'PA'")) // 04: Produto Acabado
  70. Private cTipo05 := If(SuperGetMv("MV_BLKTP05",.F.,"'SP'")== " ","'SP'", SuperGetMv("MV_BLKTP05",.F.,"'SP'")) // 05: SubProduto
  71. Private cTipo06 := If(SuperGetMv("MV_BLKTP06",.F.,"'PI'")== " ","'PI'", SuperGetMv("MV_BLKTP06",.F.,"'PI'")) // 06: Produto Intermediario
  72. Private cTipo10 := If(SuperGetMv("MV_BLKTP10",.F.,"'OI'")== " ","'OI'", SuperGetMv("MV_BLKTP10",.F.,"'OI'")) // 10: Outros Insumos
  73. Private lEstMov := If(lEstruMov == Nil,.F., lEstruMov)
  74. Private lNegEst := SuperGetMv("MV_NEGESTR",.F.,.F.)
  75. Private nRegsto := 0 // Quantidade de Registros Gerados
  76. Private lCpoBZTP := SBZ->(ColumnPos("BZ_TIPO")) > 0 .AND. SuperGetMV("MV_ARQPROD",.F.,"SB1") == "SBZ"
  77. Private cVersSped := VerBlocoK(dDataDe)
  78.  
  79. Default lSum := .T.
  80. Default lGerLogPro := .T.
  81. Default lRepross := .T.
  82.  
  83. aResult := GetFuncArray('SPDBlocoK',,,, aDate, aTime)
  84. If Len(aDate)>0 .And. Len(aTime) > 0
  85. dDataFunc:= aDate[1]
  86. cHoraFunc:= aTime[1]
  87. lAtuFunc := .T.
  88. EndIf
  89.  
  90. If Valtype(aAlias) == "A" .And. Len(aAlias) == Len(aRegistr) .And. Len(aAliProc) == Len(aRegistr)
  91. ProcLogIni({},STR0023,,@cIDCV8MOV) //"MATXSPED"
  92. ProcLogAtu(STR0024,STR0025 + FunName() + " "+ Alltrim(DtoC(Date())) + " - " + Alltrim(Time())) //inicio /"Rotina Chamadora: "
  93. cMensagem := ""
  94. cMensagem += STR0026 + cVersSped+chr(10)//"Vers鉶 do Leiaute : "
  95. cMensagem += STR0027+chr(10)//"Parametros de Sistema "
  96. cMensagem += "MV_NEGESTR : " + iIf(lNegEst,".T.",".F.")+chr(10)
  97. cMensagem += "MV_PRNFBE : " + iIf(SuperGetMV("MV_PRNFBE" , .T., .F.),".T.",".F.")+chr(10)
  98. cMensagem += "MV_BLKMTHR : " + cValToChar(SuperGetMV("MV_BLKMTHR" , .T., 1))+chr(10)
  99. cMensagem += "MV_CADPROD : " + SuperGetMV("MV_CADPROD" , .T., "|SBZ|SB5|SGI|")+chr(10)
  100. cMensagem += "MV_ARQPROD : " + SuperGetMV("MV_ARQPROD" , .T., "SB1")+chr(10)
  101. cMensagem += "MV_BLKTP00 : " + cTipo00+chr(10)
  102. cMensagem += "MV_BLKTP01 : " + cTipo01+chr(10)
  103. cMensagem += "MV_BLKTP02 : " + cTipo02+chr(10)
  104. cMensagem += "MV_BLKTP03 : " + cTipo03+chr(10)
  105. cMensagem += "MV_BLKTP04 : " + cTipo04+chr(10)
  106. cMensagem += "MV_BLKTP05 : " + cTipo05+chr(10)
  107. cMensagem += "MV_BLKTP06 : " + cTipo06+chr(10)
  108. cMensagem += "MV_BLKTP10 : " + cTipo10+chr(10)
  109. cMensagem += "MV_TMPAD : " + SuperGetMV("MV_TMPAD" , .F., " ")+chr(10)
  110. cMensagem += STR0034 + iIf(lCpoBZTP,"Sim","N鉶")+chr(10) //"Utilizacao da tabela SBZ com o campo BZ_TIPO : "
  111. If lAtuFunc
  112. cMensagem += STR0035 + " " + Alltrim(DtoC(dDataFunc)) + "_" + cHoraFunc +chr(10) //"Ultima aTualiza玢o do MATXSPED: "
  113. EndIf
  114.  
  115. ProcLogAtu('MENSAGEM',"Informa珲es auxiliares "+ Alltrim(DtoC(Date())) + " - " + Alltrim(Time()),cMensagem)
  116. cMensagem := ""
  117.  
  118. If cVersSped < "013"
  119. lGerLogPro := .F.
  120. lRepross := .F.
  121. EndIf
  122.  
  123. If cVersSped >= "013"
  124. // checa se o UPDDISTR foi aplicado
  125. ChkUpd()
  126. dbSelectArea("D3E")
  127. dbSelectArea("D3K")
  128. dbSelectArea("D3H")
  129. dbSelectArea("D3I")
  130. dbSelectArea("D3J")
  131. dbSelectArea("D3L")
  132. dbSelectArea("D3M")
  133. dbSelectArea("D3N")
  134. dbSelectArea("D3O")
  135. dbSelectArea("D3P")
  136. dbSelectArea("D3R")
  137. dbSelectArea("D3S")
  138. dbSelectArea("D3T")
  139. dbSelectArea("D3U")
  140. dbSelectArea("SVK")
  141. dbSelectArea("SVS")
  142. dbSelectArea("SVT")
  143. dbSelectArea("SVU")
  144. dbSelectArea("SVV")
  145. dbSelectArea("SVW")
  146. dbSelectArea("T4E")
  147. dbSelectArea("T4F")
  148. dbSelectArea("T4G")
  149. dbSelectArea("T4H")
  150. Else
  151. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  152. //?Verifica se o campo Tipo de Producao existe no ambiente ?
  153. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  154. dbSelectArea("SC2")
  155. If SC2->(FieldPos("C2_TPPR")) == 0
  156. Aviso("Aten玢o","O campo de Tipo de Produ玢o (C2_TPPR), n鉶 existe no ambiente. O processamento do Bloco K n鉶 ser?realizado.",{"Ok"})
  157. lContinua := .F.
  158. EndIf
  159. EndIf
  160.  
  161. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  162. //?Chama o PE SPDFIS001 para realizar a troca dos Tipos ?
  163. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  164. TrocaTipo()
  165.  
  166. aTmpRegK := {}
  167. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  168. //?Limpa Log periodo ja apurado. ?
  169. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  170. If lGerLogPro
  171. BlkPrLimp(dDataAte)
  172. EndIf
  173.  
  174. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  175. //?Montagem dos Arquivos de Trabalho ?
  176. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  177. ProcLogAtu('MENSAGEM',STR0003+Alltrim(DtoC(Date())) + " - " + Alltrim(Time())) // "Bloco K - Preparando arquivos TEMP: "
  178. For nX := 1 To Len(aAlias)
  179. Aadd(aTmpRegK ,SPDCriaTRB(aRegistr[nX],@aAlias[nX]))
  180. Next nX
  181.  
  182. If lContinua .and. (Empty(dDataDe) .OR. Empty(dDataAte))
  183. lContinua := .F.
  184. EndIf
  185. If lContinua
  186.  
  187. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  188. //?Gravacao dos Arquivos de Trabalho - Nao alterar a ordem ?
  189. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  190. If aAliProc[K200]
  191. ProcLogAtu('MENSAGEM',STR0004+Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  192. REGK200(aAlias[K200],dDataDe,dDataAte,lRepross,cIDCV8MOV)
  193. EndIf
  194. If aAliProc[K210]
  195. ProcLogAtu('MENSAGEM',STR0005+Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  196. REGK21X(aAlias[K210],aAlias[K215],dDataDe,dDataAte,lGerLogPro,lRepross)
  197. EndIf
  198. If aAliProc[K220]
  199. ProcLogAtu('MENSAGEM',STR0006+Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  200. REGK220(aAlias[K220],dDataDe,dDataAte,lGerLogPro,lRepross)
  201. EndIf
  202. If aAliProc[K230]
  203. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Valida玢o de Movimentos Antigos : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  204. If lRepross
  205. REGANTG(dDataDe,dDataAte)
  206. REGESTOR(dDataDe,dDataAte)
  207. EndIf
  208. If cVersSped < '013' //Valida玢o de vers鉶
  209. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K235|012 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  210. REGK235V12(aAlias[K235],dDataDe,dDataAte,aAlias[K270],aAlias[K275])
  211. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K230|012 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  212. REGK230V12(aAlias[K230],aAlias[K235],aAlias[0210],dDataDe,dDataAte)
  213. Else
  214. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K235 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  215. REGK235(aAlias[K235],dDataDe,dDataAte,aAlias[K270],aAlias[K275],lRepross)
  216. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K230 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  217. REGK230(aAlias[K230],aAlias[K235],aAlias[0210],dDataDe,dDataAte,lRepross)
  218. EndIf
  219. EndIf
  220. If aAliProc[K250]
  221. ProcLogAtu('MENSAGEM',STR0009+Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  222. REGK250(aAlias[K250],aAlias[K255],aAlias[0210],dDataDe,dDataAte,lSum,lGerLogPro,lRepross)
  223. EndIf
  224. If aAliProc[K260]
  225. If Existblock("REGK26X")
  226. REGK26X(aAlias[K260],aAlias[K265],dDataDe,dDataAte)
  227. Else
  228. If cVersSped >= '013' //Valida玢o de vers鉶
  229. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K265 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  230. REGK265(aAlias[K265],dDataDe,dDataAte,lRepross)
  231. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K260 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  232. REGK260(aAlias[K260],dDataDe,dDataAte,lRepross)
  233. EndIf
  234. EndIf
  235. EndIf
  236. If aAliProc[K270]
  237. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K275|01 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  238. REGK27X(aAlias[K270],aAlias[K275],dDataDe,dDataAte,,,lGerLogPro,lRepross,aAlias[K280])
  239. If cVersSped >= '013' //Valida玢o de vers鉶
  240. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K275 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  241. REGK275PRO(aAlias[K275],dDataDe,dDataAte,lRepross)
  242. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K270 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  243. REGK270PRO(aAlias[K270],dDataDe,dDataAte,lRepross)
  244. EndIf
  245.  
  246. EndIf
  247. If aAliProc[K280]
  248. ProcLogAtu('MENSAGEM',STR0011+Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  249. REGK280(aAlias[K280],dDataDe,dDataAte,lGerLogPro,lRepross)
  250. EndIf
  251.  
  252. If aAliProc[K290]
  253. If cVersSped >= '013' //Valida玢o de vers鉶
  254. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K292 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  255. REGK292(aAlias[K292],dDataDe,dDataAte,lRepross)
  256. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K290 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  257. REGK290(aAlias[K290],dDataDe,dDataAte,lRepross)
  258. ProcLogAtu('MENSAGEM',"### Bloco K - Inicio Registro K291 : " + Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  259. REGK291(aAlias[K291],dDataDe,dDataAte,lRepross)
  260. EndIf
  261. EndIf
  262.  
  263. If aAliProc[K300]
  264. ProcLogAtu('MENSAGEM',STR0011+Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  265. REGK300(aAlias[K300],aAlias[K301],aAlias[K302],dDataDe,dDataAte,lGerLogPro,lRepross)
  266. EndIf
  267.  
  268. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  269. //?Gera o Registro 0210 pelas das movimentacoes do periodo ?
  270. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  271. If aAliProc[K230] .And. lEstMov
  272. ProcLogAtu('MENSAGEM',STR0013+Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  273. REG0210Mov(aAlias[K230],aAlias[K235],aAlias[0210],dDataDe,dDataAte)
  274. EndIf
  275.  
  276. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  277. //?Tratamento para producoes com estrutura negativa ?
  278. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  279. If aAliProc[K230] .And. lNegEst .And. !lEstMov
  280. ProcNegEst(aAlias[0210],aAlias[K230],aAlias[K235],dDataDe,dDataAte,lRepross)
  281. EndIf
  282.  
  283. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  284. //?Finaliza a Gravacao dos Registros - Nao alterar a ordem ?
  285. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  286. ProcLogAtu('MENSAGEM',STR0014+Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  287. REGK001(aAlias[K001],dDataAte,lRepross)
  288. REGK100(aAlias[K100],dDataDe,dDataAte,lRepross)
  289. REGK990(aAlias[K990],dDataDe,lRepross)
  290.  
  291. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  292. //?Grava os produtos utilizados nos Registros do Bloco K ?
  293. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  294. ProcLogAtu('MENSAGEM',STR0015+Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  295. REG0200(aAlias,aRegistr)
  296.  
  297. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  298. //?Posiciona no Primeiro RECNO de cada Arquivo de Trabalho ?
  299. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  300. For nX := 1 To Len(aAlias)
  301. (aAlias[nX])->(dbGoTop())
  302. Next nX
  303. EndIf
  304. ProcLogAtu('FIM',"Rotina Chamadora: "+ FunName() + " "+ Alltrim(DtoC(Date())) + " - " + Alltrim(Time()))
  305. EndIf
  306.  
  307. Return aTmpRegK
  308.  
  309. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  310. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  311. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  312. 北矲un嘺o ?SPDCriaTRB ?Autor ?Materiais ?Data ?28/07/14 潮?
  313. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  314. 北矰escricao ?Criacao do arquivo temporario para retorno de informacoes. 潮?
  315. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  316. 北砅arametros?cBloco = Nome do Bloco para geracao arquivo de trabalho 潮?
  317. 北? ?cAliasTRB = Nome do arquivo de trabalho 潮?
  318. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  319. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  320. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  321. Static Function SPDCriaTRB(cBloco,cAliasTRB)
  322.  
  323. Local cIndice := ""
  324. Local nX
  325. Local aLayout := {}
  326. Local aStrReg := {}
  327.  
  328. Default cAliasTRB := ""
  329. Default cBloco := ""
  330.  
  331. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  332. //?Posicoes: [1]Campos / [2]Indices ?
  333. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  334. aLayout := SPDLayout(cBloco)
  335.  
  336. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  337. //?Criacao do Arquivo de Trabalho ?
  338. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  339. If !Empty(cBloco)
  340.  
  341. cAliasTRB := UPPER(cBloco)+"_"+CriaTrab(,.F.)
  342. //
  343. // aStrReg
  344. // [1] := Alias da tabela temporaria a ser criada
  345. // [2] := Nome da tabela temporaria criada via dbcreate no driver sqlite
  346. // [3,n] := Conjunto de nome de indices da tabela quando a tabela ?cria
  347. // [4] := Objeto criado via FWTemporaryTable
  348. //
  349. aStrReg := {cAliasTRB ,NIL ,{} ,NIL}
  350. // Tratamento diferenciado devido tabela ser lida em rotina MULTI-THREAD
  351. If cBloco == "K200"
  352. aStrReg[2] := "K_"+cAliasTRB
  353. fWDbCreate(aStrReg[2],aLayout[1],'TOPCONN',.T.)
  354. dbUseArea(.T.,'TOPCONN',aStrReg[2],aStrReg[1],.T.)
  355. For nX := 1 to Len(aLayout[2])
  356. If Substring(cAliasTRB,1,1) == "K"
  357. cIndice := aStrReg[1]+"_"+Alltrim(StrZero(nX,2))
  358. Aadd(aStrReg[3] ,cIndice)
  359. DBCreateIndex(cIndice ,aLayout[2][nX])
  360. DBSetIndex(cIndice)
  361. EndIf
  362. Next nX
  363.  
  364. Else
  365. aStrReg[4] := FWTemporaryTable():New( aStrReg[1] )
  366. aStrReg[4]:SetFields( aClone(aLayout[1]) )
  367. For nX := 1 to len(aLayout[2])
  368. aStrReg[4]:AddIndex(StrZero(nX,2), aClone(aLayout[2,nX]) )
  369. Next nX
  370. aStrReg[4]:Create()
  371.  
  372. EndIf
  373. EndIf
  374. Return aStrReg
  375.  
  376. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  377. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  378. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  379. 北矲un嘺o ?SPDLayout ?Autor ?Materiais ?Data ?28/07/14 潮?
  380. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  381. 北矰escricao ?Funcao responsavel pela montagem do layout do bloco 潮?
  382. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  383. 北砅arametros?cBloco = Nome do bloco para geracao do Layout 潮?
  384. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  385. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  386. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  387. Function SPDLayout(cBloco)
  388.  
  389. Local aCampos := {}
  390. Local aIndices := {}
  391. Local nTamFil := TamSX3("D1_FILIAL" )[1]
  392. Local nTamDt := TamSX3("D1_DTDIGIT")[1]
  393. Local nTamOP := TamSX3("D3_OP" )[1]
  394. Local nTamCod := TamSX3("B1_COD" )[1]
  395. Local nTamNSeq := 30
  396. Local nTamChave := nTamCod + TamSX3("D1_SERIE")[1] + TamSX3("D1_FORNECE")[1] + TamSX3("D1_LOJA")[1]
  397. // ------ Tamanhos conforme especificado no Guia EFD ------
  398. Local nTamReg := 4
  399. Local aTamQtd := {16,If(cVersSped < '013',3,6)}
  400. Local aTamCmp := {16,6}
  401. Local aTamPrd := {16,4}
  402. Local aTamQtdOld := {16,3}
  403. // --------------------------------------------------------
  404. Default cBloco := ""
  405.  
  406. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  407. //? *** ATENCAO!!! *** ?
  408. //?Antes de realizar alteracoes nos tamanhos dos campos para ?
  409. //?montagem dos arquivos de trabalho, verificar especificacao ?
  410. //?deles no Guia Pratico EFD no site do SPED Fiscal(Receita) ?
  411. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  412.  
  413. Do Case
  414. Case cBloco == "0200"
  415. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  416. //?Criacao do Arquivo de Trabalho - BLOCO 0200 ?
  417. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  418. aCampos := {}
  419. AADD(aCampos,{"COD_ITEM" ,"C",nTamCod ,0}) // Nao integra Bloco K
  420. // Indices
  421. AADD(aIndices,{"COD_ITEM"})
  422. Case cBloco == "0210"
  423. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  424. //?Criacao do Arquivo de Trabalho - BLOCO 0210 ?
  425. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  426. aCampos := {}
  427. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  428. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  429. AADD(aCampos,{"COD_ITEM" ,"C",nTamCod ,0}) // Nao integra Bloco K
  430. AADD(aCampos,{"COD_I_COMP" ,"C",nTamCod ,0})
  431. AADD(aCampos,{"QTD_COMP" ,"N",aTamCmp[1],aTamCmp[2]})
  432. AADD(aCampos,{"QTD_PROD" ,"N",aTamCmp[1],aTamCmp[2]}) // Nao integra Bloco K
  433. AADD(aCampos,{"QTD_CONS" ,"N",aTamCmp[1],aTamCmp[2]}) // Nao integra Bloco K
  434. AADD(aCampos,{"PERDA" ,"N",aTamPrd[1],aTamPrd[2]})
  435. // Indices
  436. AADD(aIndices,{"FILIAL" ,"COD_ITEM" ,"COD_I_COMP"})
  437. Case cBloco == "K001"
  438. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  439. //?Criacao do Arquivo de Trabalho - BLOCO K001 ?
  440. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  441. aCampos := {}
  442. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  443. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  444. AADD(aCampos,{"IND_MOV" ,"C",1 ,0})
  445. // Indices
  446. AADD(aIndices,{"FILIAL"})
  447. Case cBloco == "K100"
  448. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  449. //?Criacao do Arquivo de Trabalho - BLOCO K100 ?
  450. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  451. aCampos := {}
  452. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  453. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  454. AADD(aCampos,{"DT_INI" ,"D",nTamDt ,0})
  455. AADD(aCampos,{"DT_FIN" ,"D",nTamDt ,0})
  456. // Indices
  457. AADD(aIndices,{"FILIAL" ,"DT_INI"})
  458. Case cBloco == "K200"
  459. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  460. //?Criacao do Arquivo de Trabalho - BLOCO K200 ?
  461. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  462. aCampos := {}
  463. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  464. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  465. AADD(aCampos,{"DT_EST" ,"D",nTamDt ,0})
  466. AADD(aCampos,{"COD_ITEM" ,"C",nTamCod ,0})
  467. AADD(aCampos,{"QTD" ,"N",aTamQtdOld[1],aTamQtdOld[2]})
  468. AADD(aCampos,{"IND_EST" ,"C",1 ,0})
  469. AADD(aCampos,{"COD_PART" ,"C",60 ,0})
  470. // Indices
  471. AADD(aIndices,"FILIAL+DTOS(DT_EST)+COD_ITEM+IND_EST+COD_PART") // Indice em formato diferente, por n鉶 utilizar FWTemporaryTable
  472. Case cBloco == "K210"
  473. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  474. //?Criacao do Arquivo de Trabalho - BLOCO K210 ?
  475. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  476. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  477. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  478. AADD(aCampos,{"DT_INI_OS" ,"D",nTamDt ,0})
  479. AADD(aCampos,{"DT_FIN_OS" ,"D",nTamDt ,0})
  480. AADD(aCampos,{"COD_DOC_OS" ,"C",nTamNSeq ,0})
  481. AADD(aCampos,{"COD_ITEM_O" ,"C",nTamCod ,0})
  482. AADD(aCampos,{"QTD_ORI" ,"N",aTamQtd[1],aTamQtd[2]})
  483. // Indices
  484. AADD(aIndices,{"FILIAL" ,"COD_DOC_OS" ,"COD_ITEM_O"})
  485. Case cBloco == "K215"
  486. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  487. //?Criacao do Arquivo de Trabalho - BLOCO K215 ?
  488. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  489. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  490. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  491. AADD(aCampos,{"COD_DOC_OS" ,"C",nTamNSeq ,0}) // Nao integra Bloco K
  492. AADD(aCampos,{"COD_ITEM_D" ,"C",nTamCod ,0})
  493. AADD(aCampos,{"QTD_DES" ,"N",aTamQtd[1],aTamQtd[2]})
  494. // Indices
  495. AADD(aIndices,{"FILIAL" ,"COD_DOC_OS" ,"COD_ITEM_D"})
  496. Case cBloco == "K220"
  497. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  498. //?Criacao do Arquivo de Trabalho - BLOCO K220 ?
  499. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  500. aCampos := {}
  501. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  502. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  503. AADD(aCampos,{"DT_MOV" ,"D",nTamDt ,0})
  504. AADD(aCampos,{"COD_ITEM_O" ,"C",nTamCod ,0})
  505. AADD(aCampos,{"COD_ITEM_D" ,"C",nTamCod ,0})
  506. AADD(aCampos,{"QTD_ORI" ,"N",aTamQtd[1],aTamQtd[2]})
  507. AADD(aCampos,{"QTD_DEST" ,"N",aTamQtd[1],aTamQtd[2]})
  508. // Indices
  509. AADD(aIndices,{"FILIAL" ,"DT_MOV" ,"COD_ITEM_O" ,"COD_ITEM_D"})
  510. Case cBloco == "K230" .Or. cBloco == "K235" .Or. cBloco == "K290" .Or. cBloco == "K291" .Or. cBloco = "K292" .Or. cBloco = "K260" .Or. cBloco = "K265"
  511. PCPLayout(cBloco,@aCampos,@aIndices,cVersSped)
  512.  
  513. Case cBloco == "K250"
  514. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  515. //?Criacao do Arquivo de Trabalho - BLOCO K250 ?
  516. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  517. aCampos := {}
  518. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  519. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  520. AADD(aCampos,{"CHAVE" ,"C",nTamChave ,0}) // Nao integra Bloco K
  521. AADD(aCampos,{"DT_PROD" ,"D",nTamDt ,0})
  522. AADD(aCampos,{"COD_ITEM" ,"C",nTamCod ,0})
  523. AADD(aCampos,{"QTD" ,"N",aTamQtd[1],aTamQtd[2]})
  524. // Indices
  525. AADD(aIndices,{"FILIAL" ,"CHAVE" ,"COD_ITEM"})
  526. AADD(aIndices,{"FILIAL" ,"DT_PROD" ,"COD_ITEM"})
  527. Case cBloco == "K255"
  528. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  529. //?Criacao do Arquivo de Trabalho - BLOCO K255 ?
  530. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  531. aCampos := {}
  532. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  533. AADD(aCampos,{"CHAVE" ,"C",nTamChave ,0}) // Nao integra Bloco K
  534. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  535. AADD(aCampos,{"DT_CONS" ,"D",nTamDt ,0})
  536. AADD(aCampos,{"COD_ITEM" ,"C",nTamCod ,0})
  537. AADD(aCampos,{"QTD" ,"N",aTamQtd[1],aTamQtd[2]})
  538. AADD(aCampos,{"COD_INS_SU" ,"C",nTamCod ,0})
  539. // Indices
  540. AADD(aIndices,{"FILIAL" ,"CHAVE" ,"COD_ITEM"})
  541. AADD(aIndices,{"FILIAL" ,"DT_CONS" ,"COD_ITEM"})
  542. Case cBloco == "K270"
  543. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  544. //?Criacao do Arquivo de Trabalho - BLOCO K270 ?
  545. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  546. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  547. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  548. AADD(aCampos,{"CHAVE" ,"C",nTamChave ,0}) // Nao integra Bloco K
  549. AADD(aCampos,{"DT_INI_AP" ,"D",nTamDt ,0})
  550. AADD(aCampos,{"DT_FIN_AP" ,"D",nTamDt ,0})
  551. AADD(aCampos,{"COD_OP_OS" ,"C",nTamOP ,0})
  552. AADD(aCampos,{"COD_ITEM" ,"C",nTamCod ,0})
  553. AADD(aCampos,{"QTD_COR_P" ,"N",aTamQtd[1],aTamQtd[2]})
  554. AADD(aCampos,{"QTD_COR_N" ,"N",aTamQtd[1],aTamQtd[2]})
  555. AADD(aCampos,{"ORIGEM" ,"C",1 ,0})
  556. // Indices
  557. AADD(aIndices,{"FILIAL" ,"CHAVE" ,"DT_INI_AP" ,"DT_FIN_AP" ,"COD_OP_OS" ,"COD_ITEM"})
  558. AADD(aIndices,{"FILIAL" ,"DT_INI_AP" ,"DT_FIN_AP" ,"COD_OP_OS" ,"COD_ITEM"})
  559. Case cBloco == "K275"
  560. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  561. //?Criacao do Arquivo de Trabalho - BLOCO K275 ?
  562. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  563. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  564. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  565. AADD(aCampos,{"CHAVE" ,"C",nTamChave ,0}) // Nao integra Bloco K
  566. AADD(aCampos,{"COD_OP_OS" ,"C",nTamOP ,0}) // Nao integra Bloco K
  567. AADD(aCampos,{"COD_ITEM" ,"C",nTamCod ,0})
  568. AADD(aCampos,{"QTD_COR_P" ,"N",aTamQtd[1],aTamQtd[2]})
  569. AADD(aCampos,{"QTD_COR_N" ,"N",aTamQtd[1],aTamQtd[2]})
  570. AADD(aCampos,{"COD_INS_SU" ,"C",nTamCod ,0})
  571. // Indices
  572. AADD(aIndices,{"FILIAL" ,"CHAVE" ,"COD_OP_OS" ,"COD_ITEM"})
  573. AADD(aIndices,{"FILIAL" ,"COD_OP_OS" ,"COD_ITEM"})
  574. Case cBloco == "K280"
  575. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  576. //?Criacao do Arquivo de Trabalho - BLOCO K280 ?
  577. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  578. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  579. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  580. AADD(aCampos,{"DT_EST" ,"D",nTamDt ,0})
  581. AADD(aCampos,{"COD_ITEM" ,"C",nTamCod ,0})
  582. AADD(aCampos,{"QTD_COR_P" ,"N",aTamQtdOld[1],aTamQtdOld[2]})
  583. AADD(aCampos,{"QTD_COR_N" ,"N",aTamQtdOld[1],aTamQtdOld[2]})
  584. AADD(aCampos,{"IND_EST" ,"C",1 ,0})
  585. AADD(aCampos,{"COD_PART" ,"C",60 ,0})
  586. // Indices
  587. AADD(aIndices,{"FILIAL" ,"DT_EST" ,"COD_ITEM" ,"IND_EST" ,"COD_PART"})
  588. Case cBloco == "K300"
  589. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  590. //?Criacao do Arquivo de Trabalho - BLOCO K300 ?
  591. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  592. aCampos := {}
  593. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  594. AADD(aCampos,{"CHAVE" ,"C",nTamChave ,0}) // Nao integra Bloco K
  595. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  596. AADD(aCampos,{"DT_PROD" ,"D",nTamDt ,0})
  597. // Indices
  598. AADD(aIndices,{"FILIAL","CHAVE"})
  599. Case cBloco == "K301"
  600. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  601. //?Criacao do Arquivo de Trabalho - BLOCO K301 ?
  602. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  603. aCampos := {}
  604. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  605. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  606. AADD(aCampos,{"CHAVE" ,"C",nTamChave ,0}) // Nao integra Bloco K
  607. AADD(aCampos,{"COD_ITEM" ,"C",nTamCod ,0})
  608. AADD(aCampos,{"QTD" ,"N",aTamQtd[1],aTamQtd[2]})
  609. // Indices
  610. AADD(aIndices,{"FILIAL","CHAVE"})
  611. Case cBloco == "K302"
  612. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  613. //?Criacao do Arquivo de Trabalho - BLOCO K302 ?
  614. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  615. aCampos := {}
  616. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  617. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  618. AADD(aCampos,{"CHAVE" ,"C",nTamChave ,0}) // Nao integra Bloco K
  619. AADD(aCampos,{"COD_ITEM" ,"C",nTamCod ,0})
  620. AADD(aCampos,{"QTD" ,"N",aTamQtd[1],aTamQtd[2]})
  621. // Indices
  622. AADD(aIndices,{"FILIAL","CHAVE"})
  623. Case cBloco == "K990"
  624. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  625. //?Criacao do Arquivo de Trabalho - BLOCO K990 ?
  626. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  627. aCampos := {}
  628. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0}) // Nao integra Bloco K
  629. AADD(aCampos,{"REG" ,"C",nTamReg ,0})
  630. AADD(aCampos,{"QTD_LIN_K" ,"N",14 ,0})
  631. // Indices
  632. AADD(aIndices,{"FILIAL"})
  633. EndCase
  634.  
  635. Return {aCampos,aIndices}
  636.  
  637. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  638. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  639. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  640. 北矲un嘺o ?REGK001 ?Autor ?Materiais ?Data ?28/07/14 潮?
  641. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  642. 北矰escricao ?Funcao responsavel pela gravacao do Registro K001 潮?
  643. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  644. 北砅arametros?cAliasTRB = Alias do arquivo de trabalho do Bloco 潮?
  645. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  646. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  647. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  648. Static Function REGK001(cAliK001,dDataAte,lRepross)
  649.  
  650. Default lRepross := .T.
  651.  
  652. Reclock(cAliK001,.T.)
  653. (cAliK001)->FILIAL := cFilAnt
  654. (cAliK001)->REG := "K001"
  655. If nRegsto > 0
  656. (cAliK001)->IND_MOV := "0" // Existem informacoes no Bloco K
  657. Else
  658. (cAliK001)->IND_MOV := "1" // Nao existem informacoes no Bloco K
  659. EndIf
  660. (cAliK001)->(MsUnLock())
  661. nRegsto++
  662.  
  663. // grava na tabela de historico
  664. BlkGrvTab(cAliK001,"D3G",aTmpRegK[K001][4],dDataAte,lRepross)
  665.  
  666. Return
  667.  
  668. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  669. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  670. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  671. 北矲un嘺o ?REGK100 ?Autor ?Materiais ?Data ?28/07/14 潮?
  672. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  673. 北矰escricao ?Funcao responsavel pela gravacao do Registro K100 潮?
  674. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  675. 北砅arametros?cAliasTRB = Alias do arquivo de trabalho do Bloco 潮?
  676. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  677. 北? ?dDataAte = Data Final da Apuracao 潮?
  678. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  679. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  680. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  681. Static Function REGK100(cAliK100,dDataDe,dDataAte,lRepross)
  682.  
  683. Default lRepross := .T.
  684.  
  685. Reclock(cAliK100,.T.)
  686. (cAliK100)->FILIAL := cFilAnt
  687. (cAliK100)->REG := "K100"
  688. (cAliK100)->DT_INI := dDataDe
  689. (cAliK100)->DT_FIN := dDataAte
  690. (cAliK100)->(MsUnLock())
  691. nRegsto++
  692.  
  693. // grava na tabela de historico
  694. BlkGrvTab(cAliK100,"D3H",aTmpRegK[K100][4],dDataAte,lRepross)
  695.  
  696. Return
  697.  
  698. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  699. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  700. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  701. 北矲un嘺o ?REGK200 ?Autor ?Materiais ?Data ?28/07/14 潮?
  702. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  703. 北矰escricao ?Funcao responsavel pela gravacao do Registro K200 潮?
  704. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  705. 北砅arametros?cAliasTRB = Alias do arquivo de trabalho do Bloco 潮?
  706. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  707. 北? ?dDataAte = Data Final da Apuracao 潮?
  708. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  709. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  710. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  711. Static Function REGK200(cAliK200,dDataDe,dDataAte,lRepross,cIDCV8MOV)
  712.  
  713. Local cError := ""
  714. Local aRecTHRs := {}
  715. Local lRet := .T.
  716. Local cFilialD3I := xfilial("D3I")
  717. Local cPeriodo := left(dTOS(dDataAte),6)
  718. Local cAliProp := GetNextAlias()
  719. Local nThread := SuperGetMV("MV_BLKMTHR",.F.,1)
  720. Local nX
  721. Local aK200 := array(4)
  722.  
  723. Private cName := "JobK200"
  724. Private oIpc
  725.  
  726. // limita o numero de threads
  727. If nThread > 20
  728. nThread := 20
  729. EndIf
  730.  
  731. aK200[1] := aTmpRegK[K200,1]
  732. aK200[2] := aTmpRegK[K200,2]
  733. aK200[3] := aTmpRegK[K200,3,1]
  734. aK200[4] := 1
  735.  
  736. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  737. //?Monta o arquivo com os produtos que serao processados no K200?
  738. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  739. ProcLogAtu('MENSAGEM',STR0017+ Alltrim(DtoC(Date())) + " - " + Alltrim(Time())) // "Bloco K - K200|00: Lista SLD Proprio : "
  740. GetListPrd(@cAliProp,dDataAte,dDataDe)
  741.  
  742. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  743. //?Calcula os melhores RECNOs para cada Thread ?
  744. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  745. ProcLogAtu('MENSAGEM',"Bloco K - K200|00: Calculo das Thread: "+ Alltrim(DtoC(Date())) + " - " + Alltrim(Time()),"Contagem dos produtos a serem processados: "+cvaltochar((cAliProp)->(lastrec())) )
  746. aRecTHRs := CalcThread(cAliProp,@nThread)
  747.  
  748. If nThread <2
  749. JobK200(0,cName,aK200,cAliProp,dDataAte,aRecTHRs[1,1],aRecTHRs[1,2],lRepross,@cIDCV8MOV)
  750. Else
  751. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  752. //?Prepara o Multi-Thread ?
  753. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  754. oIPC := FWIPCWait():New(cName,10000)
  755. oIPC:SetThreads(nThread)
  756. oIPC:SetEnvironment(cEmpAnt,cFilAnt)
  757. oIPC:Start("JobK200") // Funcao que vai rodar em Thread
  758. oIPC:SetNoErrorStop(.T.) //Se der erro em alguma thread sai imadiatamente
  759.  
  760. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  761. //?Abre as Threads ?
  762. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  763. For nX := 1 To nThread
  764. lRet := oIpc:Go(nX,cName,aK200,cAliProp,dDataAte,aRecTHRs[nX][1],aRecTHRs[nX][2],lRepross,@cIDCV8MOV)
  765. If !lRet
  766. Exit
  767. EndIf
  768. Next nX
  769.  
  770. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  771. //?Finaliza o Multi-Thread ?
  772. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  773. oIPC:Stop()
  774. cError := oIPC:GetError()
  775. FreeObj(oIpc)
  776. EndIf
  777.  
  778. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  779. //?Grava tabela de ?
  780. //?----------------------------------------------------------------------- ?
  781. //?Tratamento quando unico codigo de produto esteja contido o saldo de ?
  782. //?terceiros e,possa ter, saldo proprio e ou saldo de terceito ?
  783. //?O processamento fica fora do loop principal pois depende da gravacao do ?
  784. //?IND_EST = 0, pois a CALCEST retorna a QTDE somando o saldo DE TERCEIROS ?
  785. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  786. (cAliK200)->(DbGoTop())
  787. If lRepross
  788. BlkGrvTab(cAliK200,'D3I',,dDataAte,.T.,.T.)
  789. DbSelectArea("D3I")
  790. While !(cAliK200)->(Eof())
  791. Reclock("D3I",.T.)
  792. D3I_FILIAL := cFilialD3I
  793. D3I_REG := "K200"
  794. D3I_DT_EST := (cAliK200)->DT_EST
  795. D3I_COD_IT := (cAliK200)->COD_ITEM
  796. D3I_QTD := (cAliK200)->QTD
  797. D3I_IND_ES := (cAliK200)->IND_EST
  798. D3I_COD_PA := (cAliK200)->COD_PART
  799. D3I_PERBLK := cPeriodo
  800. MsUnLock()
  801. (cAliK200)->(DbSkip())
  802. Enddo
  803. EndIf
  804.  
  805. If !Empty(cError)
  806. Help(,,"ERROR",,cError,1,0)
  807. EndIf
  808.  
  809. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  810. //?Atualiza quantidade de registros na variavel nRegsto ?
  811. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  812. (cAliK200)->(dbGoTop())
  813. While !(cAliK200)->(Eof())
  814. nRegsto++
  815. (cAliK200)->(dbSkip())
  816. EndDo
  817.  
  818. //----------------------------------------//
  819. // Eliminar arquivos temporarios de banco//
  820. //---------------------------------------//
  821. (cAliProp)->(dbCloseArea())
  822. // neste caso o nome da tabela ?o mesmo que o alias
  823. If TcCanOpen( cAliProp )
  824. TcDelFile( cAliProp )
  825. EndIf
  826.  
  827. Return
  828.  
  829. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  830. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  831. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  832. 北矲un嘺o ?JobK200 ?Autor ?Materiais ?Data ?30/08/16 潮?
  833. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  834. 北矰escricao ?Funcao responsavel pela gravacao do Registro K200 潮?
  835. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  836. 北砅arametros?nThread = Numero da Thread em Execucao 潮?
  837. 北? ?cName = Controle interno 潮?
  838. 北? ?aAliK200 = Alias do arquivo K200 / Indice do K200 潮?
  839. 北? ?cAliasTmp = Alias TRB de produtos a processar (Proprio) 潮?
  840. 北? ?dDataAte = Data Final da Apuracao 潮?
  841. 北? ?nRecIni = Recno inicial a processar 潮?
  842. 北? ?nRecFin = Recno final a processar 潮?
  843. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  844. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  845. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  846. Function JobK200(nThread,cName,aK200,cAliasTmp,dDataAte,nRecIni,nRecFin,lRepross,cIDCV8MOV)
  847.  
  848. Local nSaldo := 0
  849. Local cProdAtu := ""
  850. Local nSldTesN3 := SuperGetMV("MV_SDTESN3",.F.,0)
  851. Local cAliK200 := ""
  852. Local cSB9Filial := xFilial("SB9")
  853. Local cLocProc := GetMvNNR('MV_LOCPROC','99')
  854. Local aProdDeAte := {}
  855. Local cCOD_PART := ""
  856. Local cIND_EST := ""
  857.  
  858. DEFAULT lRepross := .T.
  859.  
  860. Private cTipo00 := If(SuperGetMv("MV_BLKTP00",.F.,"'ME'")== " ","'ME'", SuperGetMv("MV_BLKTP00",.F.,"'ME'")) // 00: Mercadoria Revenda
  861. Private cTipo01 := If(SuperGetMv("MV_BLKTP01",.F.,"'MP'")== " ","'MP'", SuperGetMv("MV_BLKTP01",.F.,"'MP'")) // 01: Materia-Prima
  862. Private cTipo02 := If(SuperGetMv("MV_BLKTP02",.F.,"'EM'")== " ","'EM'", SuperGetMv("MV_BLKTP02",.F.,"'EM'")) // 02: Embalagem
  863. Private cTipo03 := If(SuperGetMv("MV_BLKTP03",.F.,"'PP'")== " ","'PP'", SuperGetMv("MV_BLKTP03",.F.,"'PP'")) // 03: Produto em Processo
  864. Private cTipo04 := If(SuperGetMv("MV_BLKTP04",.F.,"'PA'")== " ","'PA'", SuperGetMv("MV_BLKTP04",.F.,"'PA'")) // 04: Produto Acabado
  865. Private cTipo05 := If(SuperGetMv("MV_BLKTP05",.F.,"'SP'")== " ","'SP'", SuperGetMv("MV_BLKTP05",.F.,"'SP'")) // 05: SubProduto
  866. Private cTipo06 := If(SuperGetMv("MV_BLKTP06",.F.,"'PI'")== " ","'PI'", SuperGetMv("MV_BLKTP06",.F.,"'PI'")) // 06: Produto Intermediario
  867. Private cTipo10 := If(SuperGetMv("MV_BLKTP10",.F.,"'OI'")== " ","'OI'", SuperGetMv("MV_BLKTP10",.F.,"'OI'")) // 10: Outros Insumos
  868. Private lCpoBZTP := SBZ->(ColumnPos("BZ_TIPO")) > 0 .AND. SuperGetMV("MV_ARQPROD",.F.,"SB1") == "SBZ"
  869.  
  870. cAliK200 := aK200[1]
  871. If nThread >0
  872. DbUseArea(.T.,'TOPCONN',cAliasTmp,cAliasTmp,.T.,.T.)
  873. dbUseArea(.T.,'TOPCONN',aK200[2],cAliK200,.T.)
  874. DbSetIndex(aK200[3])
  875. DBSetOrder(aK200[4])
  876. EndIf
  877.  
  878. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪目
  879. //?Posiciona no RECNO Inicial ?
  880. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  881. (cAliasTmp)->(dbGoto(nRecIni))
  882.  
  883. // PROCLOGATU gravado "na m鉶", pois em multi-thread n鉶 tem IDCV8 preenchido
  884. GravaCV8("6", "MATXSPED", "Bloco K - Thread: "+StrZero(nThread,2)+" - K200|01: Inicio SLD Proprio "+ Alltrim(DtoC(Date())) + " - " + Alltrim(Time()), "", "", "", NIL, cIDCV8MOV)
  885. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  886. //?Processa Saldo de Propriedade do Informante no Informante: IND_EST = 0 ?
  887. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  888. cProdAtu := (cAliasTmp)->B9_COD
  889. cClientAtu := (cAliasTmp)->(D3E_CLIENT+D3E_LOJA)
  890. aAdd(aProdDeAte,cProdAtu)
  891. While !(cAliasTmp)->(Eof()) .And. !(cAliasTmp)->(Recno()) > nRecFin
  892. If cProdAtu == (cAliasTmp)->B9_COD
  893. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  894. //?Roda a CALCEST apenas quando o produto foi movimentado entre o ultimo ?
  895. //?fechamento de estoque e a data final de processamento do Bloco K ?
  896. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  897. If (cAliasTmp)->STATS == "S" .Or. (cAliasTmp)->B9_LOCAL == cLocProc
  898. nSaldo += CalcEst((cAliasTmp)->B9_COD,(cAliasTmp)->B9_LOCAL,dDataAte+1,Nil,nSldTesN3==1 )[1]
  899. ElseIf (cAliasTmp)->STATS == "N"
  900. nSaldo += (cAliasTmp)->B9_QINI
  901. EndIf
  902.  
  903. (cAliasTmp)->(dbSkip())
  904. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  905. //?Quando mudar o produto, grava o registro ?
  906. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  907. If cProdAtu <> (cAliasTmp)->B9_COD .OR. cClientAtu == (cAliasTmp)->(D3E_CLIENT+D3E_LOJA)
  908. If !nSaldo == 0
  909. If Empty(cClientAtu)
  910. cIND_EST := "0"
  911. cCOD_PART := space(len((cAliK200)->COD_PART))
  912. Else
  913. cIND_EST := "2"
  914. cCOD_PART := "SA1"+cClientAtu
  915. EndIf
  916.  
  917. If (cAliK200)->(MSSeek(cSB9Filial+dtos(dDataAte)+cProdAtu+cIND_EST+cCOD_PART))
  918. Reclock(cAliK200,.F.)
  919. (cAliK200)->QTD += nSaldo
  920. (cAliK200)->(MsUnLock())
  921. Else
  922. Reclock(cAliK200,.T.)
  923. (cAliK200)->FILIAL := cSB9Filial
  924. (cAliK200)->REG := "K200"
  925. (cAliK200)->DT_EST := dDataAte
  926. (cAliK200)->COD_ITEM := cProdAtu
  927. (cAliK200)->QTD := nSaldo
  928. (cAliK200)->IND_EST := cIND_EST
  929. (cAliK200)->COD_PART := cCOD_PART
  930. (cAliK200)->(MsUnLock())
  931. EndIf
  932. EndIf
  933. cClientAtu := (cAliasTmp)->(D3E_CLIENT+D3E_LOJA)
  934. cProdAtu := (cAliasTmp)->B9_COD
  935. nSaldo := 0
  936. EndIf
  937. EndIf
  938. EndDo
  939.  
  940. // PROCLOGATU gravado "na m鉶", pois em multi-thread n鉶 tem IDCV8 preenchido
  941. GravaCV8("6", "MATXSPED", "Bloco K - Thread: "+StrZero(nThread,2)+" - K200|02: Inicio SLD Terceiros "+ Alltrim(DtoC(Date())) + " - " + Alltrim(Time()), "", "", "", NIL, cIDCV8MOV)
  942. If Empty(cProdAtu)
  943. cProdAtu := replicate("Z",len(cProdAtu))
  944. EndIf
  945. aAdd(aProdDeAte,cProdAtu)
  946.  
  947. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  948. //?Processa Saldo DE Terceiros para gravacao de IND_EST 2 ?
  949. //?----------------------------------------------------------------------- ?
  950. //?Tratamento quando unico codigo de produto esteja contido o saldo de ?
  951. //?terceiros e,possa ter, saldo proprio e ou saldo de terceito ?
  952. //?O processamento fica fora do loop principal pois depende da gravacao do ?
  953. //?IND_EST = 0, pois a CALCEST retorna a QTDE somando o saldo DE TERCEIROS ?
  954. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  955. GetSldTerc("D" ,dDataAte ,aProdDeAte[1] ,aProdDeAte[2] ,cAliK200 ,nSldTesN3 )
  956.  
  957. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  958. //?Processa Saldo EM Terceiros para gravacao de IND_EST 2 ?
  959. //?----------------------------------------------------------------------- ?
  960. //?Tratamento quando unico codigo de produto esteja contido o saldo em ?
  961. //?terceiros e,possa ter, saldo proprio e ou saldo de terceito ?
  962. //?O processamento fica fora do loop principal pois depende da gravacao do ?
  963. //?IND_EST = 0, pois a CALCEST retorna a QTDE somando o saldo EM TERCEIROS ?
  964. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  965. GetSldTerc("E" ,dDataAte ,aProdDeAte[1] ,aProdDeAte[2] ,cAliK200 ,nSldTesN3 )
  966.  
  967. If nThread >0
  968. (cAliasTmp)->(dbCloseArea())
  969. (cAliK200)->(dbCloseArea())
  970. EndIf
  971. // PROCLOGATU gravado "na m鉶", pois em multi-thread n鉶 tem IDCV8 preenchido
  972. GravaCV8("6", "MATXSPED", "Bloco K - Thread: "+StrZero(nThread,2)+" - K200|03: Final Processamento "+ Alltrim(DtoC(Date())) + " - " + Alltrim(Time()), "", "", "", NIL, cIDCV8MOV)
  973. Return
  974.  
  975. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  976. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  977. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  978. 北矲un嘺o ?REGK21X ?Autor ?Materiais ?Data ?11/08/16 潮?
  979. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  980. 北矰escricao ?Funcao responsavel pela gravacao dos Registros K210 e K215 潮?
  981. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  982. 北砅arametros?cAliK210 = Alias do arquivo de trabalho do K210 潮?
  983. 北? ?cAliK215 = Alias do arquivo de trabalho do K215 潮?
  984. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  985. 北? ?dDataAte = Data Final da Apuracao 潮?
  986. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  987. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  988. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  989. Static Function REGK21X(cAliK210,cAliK215,dDataDe,dDataAte,lGerLogPro,lRepross)
  990.  
  991. Local cQuery := ""
  992. Local cNumSeq := ""
  993. Local aDesmont := {}
  994. Local cAliasTmp := GetNextAlias()
  995. Local cNumSoma := strzero(0,15)
  996. Local nX
  997.  
  998. Default lGerLogPro := .T.
  999. Default lRepross := .T.
  1000.  
  1001.  
  1002. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1003. //? OBSERVACAO IMPORTANTE!!! ?
  1004. //?--------------------------------------------------------------------- ?
  1005. //?A ordenacao dos registros nao pode ser alterada, pois ao processar o ?
  1006. //?Reg. K21X espera-se que para cada NUMSEQ de uma desmontagem, primeiro ?
  1007. //?seja processado o RE7 e posteiormente seus RE7. ?
  1008. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1009.  
  1010. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1011. //?Temporario com as Desmontagens do Periodo ?
  1012. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1013. cQuery := "SELECT SD3.D3_FILIAL, SD3.D3_COD, SD3.D3_EMISSAO, SD3.D3_NUMSEQ, SD3.D3_DOC, SD3.D3_CF, Sum(SD3.D3_QUANT) D3_QUANT "
  1014. cQuery += "FROM "+RetSqlName("SD3")+" SD3 "
  1015. cQuery += "JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial('SB1')+"' "
  1016. cQuery += " AND SB1.B1_COD = SD3.D3_COD AND SB1.B1_COD NOT LIKE 'MOD%' "
  1017. cQuery += " AND SB1.B1_CCCUSTO = ' ' "
  1018. cQuery += " AND SB1.D_E_L_E_T_ = ' ' "
  1019. If lCpoBZTP
  1020. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  1021. EndIf
  1022. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  1023. cQuery += " AND SD3.D3_ESTORNO = ' ' AND SD3.D3_CF IN ('DE7','RE7') "
  1024. cQuery += " AND SD3.D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' AND '"+DtoS(dDataAte)+"' AND SD3.D_E_L_E_T_ = ' ' "
  1025. If lCpoBZTP
  1026. cQuery += " AND "+MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  1027. Else
  1028. cQuery += " AND SB1.B1_TIPO "
  1029. EndIf
  1030. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  1031. cQuery += "GROUP BY SD3.D3_FILIAL, SD3.D3_COD, SD3.D3_EMISSAO, SD3.D3_NUMSEQ, SD3.D3_DOC, SD3.D3_CF "
  1032. cQuery += "ORDER BY 4,6 DESC"
  1033.  
  1034. cQuery := ChangeQuery(cQuery)
  1035. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  1036.  
  1037. While !(cAliasTmp)->(Eof())
  1038. aDesmont := {}
  1039.  
  1040. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1041. //?Armazena o RE7 na posicao 1 do aDesmont ?
  1042. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1043. If (cAliasTmp)->D3_CF == "RE7"
  1044. aDesmont := {{},{}}
  1045. aDesmont[1] := { (cAliasTmp)->D3_FILIAL,;
  1046. StoD((cAliasTmp)->D3_EMISSAO),;
  1047. (cAliasTmp)->D3_NUMSEQ,;
  1048. (cAliasTmp)->D3_DOC,;
  1049. (cAliasTmp)->D3_COD,;
  1050. (cAliasTmp)->D3_QUANT,;
  1051. (cAliasTmp)->D3_CF}
  1052.  
  1053. cNumSeq := (cAliasTmp)->D3_NUMSEQ
  1054. (cAliasTmp)->(dbSkip())
  1055.  
  1056. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1057. //?Armazena os DE7 na posicao 2 do aDesmont ?
  1058. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1059. While !(cAliasTmp)->(Eof()) .And. cNumSeq == (cAliasTmp)->D3_NUMSEQ .And. (cAliasTmp)->D3_CF == "DE7"
  1060. Aadd(aDesmont[2], {(cAliasTmp)->D3_FILIAL,;
  1061. (cAliasTmp)->D3_NUMSEQ,;
  1062. (cAliasTmp)->D3_DOC,;
  1063. (cAliasTmp)->D3_COD,;
  1064. (cAliasTmp)->D3_QUANT,;
  1065. (cAliasTmp)->D3_CF})
  1066. (cAliasTmp)->(dbSkip())
  1067. EndDo
  1068. Else
  1069. (cAliasTmp)->(dbSkip())
  1070. EndIf
  1071.  
  1072. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  1073. //?Grava apenas quando existe RE7 e seus DE7's ?
  1074. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  1075. If Len(aDesmont) == 2 .And. Len(aDesmont[2]) > 0
  1076.  
  1077. cNumSoma := SOMA1(cNumSoma)
  1078.  
  1079. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1080. //?Grava o Registro K210 ?
  1081. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1082. Reclock(cAliK210,.T.)
  1083. (cAliK210)->FILIAL := aDesmont[1][1]
  1084. (cAliK210)->REG := "K210"
  1085. (cAliK210)->DT_INI_OS := aDesmont[1][2]
  1086. (cAliK210)->DT_FIN_OS := aDesmont[1][2]
  1087. (cAliK210)->COD_DOC_OS := cNumSoma+aDesmont[1][4]
  1088. (cAliK210)->COD_ITEM_O := aDesmont[1][5]
  1089. (cAliK210)->QTD_ORI := aDesmont[1][6]
  1090. (cAliK210)->(MsUnLock())
  1091. nRegsto++
  1092.  
  1093. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1094. //?Grava o Registro K215 ?
  1095. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1096. For nX := 1 To Len(aDesmont[2])
  1097. Reclock(cAliK215,.T.)
  1098. (cAliK215)->FILIAL := aDesmont[2][nX][1]
  1099. (cAliK215)->REG := "K215"
  1100. (cAliK215)->COD_DOC_OS := cNumSoma+aDesmont[1][4]
  1101. (cAliK215)->COD_ITEM_D := aDesmont[2][nX][4]
  1102. (cAliK215)->QTD_DES := aDesmont[2][nX][5]
  1103. (cAliK215)->(MsUnLock())
  1104. nRegsto++
  1105. Next nX
  1106. EndIf
  1107. EndDo
  1108. (cAliasTmp)->(dbCloseArea())
  1109.  
  1110. // atualiza os registros SD3 que foram processados no periodo
  1111. If lGerLogPro
  1112. BlkPRO21x(dDataDe,dDataAte)
  1113. EndIf
  1114.  
  1115. //----------------------//
  1116. // Grava Tabela de Hist //
  1117. //----------------------//
  1118. BlkGrvTab(cAliK210,"D3J",aTmpRegK[K210][4],dDataAte,lRepross)
  1119. BlkGrvTab(cAliK215,"D3L",aTmpRegK[K215][4],dDataAte,lRepross)
  1120.  
  1121. Return
  1122.  
  1123. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  1124. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  1125. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  1126. 北矲un嘺o ?REGK220 ?Autor ?Materiais ?Data ?28/07/14 潮?
  1127. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  1128. 北矰escricao ?Funcao responsavel pela gravacao do Registro K220 潮?
  1129. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  1130. 北砅arametros?cAliasTRB = Alias do arquivo de trabalho do Bloco 潮?
  1131. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  1132. 北? ?dDataAte = Data Final da Apuracao 潮?
  1133. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  1134. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  1135. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  1136. Static Function REGK220(cAliK220,dDataDe,dDataAte,lGerLogPro,lRepross)
  1137.  
  1138. Local cQuery := ""
  1139. Local cAliasTmp := GetNextAlias()
  1140.  
  1141. Default lGerLogPro := .T.
  1142. Default lRepross := .T.
  1143.  
  1144. cQuery := "SELECT SUM(SD3ORI.D3_QUANT) QUANT, SD3ORI.D3_FILIAL, SD3ORI.D3_EMISSAO, "
  1145. cQuery += "SD3ORI.D3_COD CODORI, SD3DES.D3_COD CODDES, SUM(SD3DES.D3_QUANT) QTDDEST FROM "+RetSqlName("SD3")+" SD3ORI "
  1146. cQuery += "JOIN "+RetSqlName("SD3")+" SD3DES ON SD3ORI.D3_NUMSEQ = SD3DES.D3_NUMSEQ AND "
  1147. cQuery += "SD3DES.D_E_L_E_T_ = ' ' AND SD3DES.D3_ESTORNO = ' ' AND "
  1148. cQuery += "SD3ORI.D3_FILIAL = SD3DES.D3_FILIAL AND SD3DES.D3_CF = 'DE4' "
  1149. cQuery += "JOIN "+RetSqlName("SB1")+" SB1ORI ON SB1ORI.B1_COD = SD3ORI.D3_COD AND "
  1150. cQuery += "SB1ORI.B1_FILIAL = '"+xFilial('SB1')+"' AND SB1ORI.D_E_L_E_T_ = ' ' "
  1151. If lCpoBZTP
  1152. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZORI ON SBZORI.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZORI.BZ_COD = SB1ORI.B1_COD AND SBZORI.D_E_L_E_T_ = ' ' "
  1153. EndIf
  1154. cQuery += "JOIN "+RetSqlName("SB1")+" SB1DES ON SB1DES.B1_COD = SD3DES.D3_COD AND "
  1155. cQuery += "SB1DES.B1_FILIAL = '"+xFilial('SB1')+"' AND SB1DES.D_E_L_E_T_ = ' ' "
  1156. If lCpoBZTP
  1157. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZDES ON SBZDES.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZDES.BZ_COD = SB1DES.B1_COD AND SBZDES.D_E_L_E_T_ = ' ' "
  1158. EndIf
  1159. cQuery += "WHERE SD3ORI.D3_FILIAL = '"+xFilial('SD3')+"' AND SD3ORI.D3_COD <> SD3DES.D3_COD AND "
  1160. cQuery += "SD3ORI.D3_CF = 'RE4' AND SD3ORI.D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' "
  1161. cQuery += "AND '"+DtoS(dDataAte)+"' AND "
  1162. cQuery += "SB1ORI.B1_CCCUSTO = ' ' AND SB1ORI.B1_COD NOT LIKE 'MOD%' AND "
  1163. cQuery += "SB1DES.B1_CCCUSTO = ' ' AND SB1DES.B1_COD NOT LIKE 'MOD%' AND "
  1164. If lCpoBZTP
  1165. cQuery += MatIsNull()+"(SBZORI.BZ_TIPO,SB1ORI.B1_TIPO) "
  1166. Else
  1167. cQuery += "SB1ORI.B1_TIPO "
  1168. EndIF
  1169. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") AND "
  1170. If lCpoBZTP
  1171. cQuery += MatIsNull()+"(SBZDES.BZ_TIPO,SB1DES.B1_TIPO) "
  1172. Else
  1173. cQuery += "SB1DES.B1_TIPO "
  1174. EndIF
  1175. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") AND "
  1176. cQuery += "SD3ORI.D3_ESTORNO = ' ' AND SD3ORI.D_E_L_E_T_ = ' ' "
  1177. cQuery += "GROUP BY SD3ORI.D3_EMISSAO, SD3ORI.D3_COD, SD3DES.D3_COD, SD3ORI.D3_FILIAL "
  1178.  
  1179. cQuery := ChangeQuery(cQuery)
  1180. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  1181.  
  1182. While !(cAliasTmp)->(Eof())
  1183. Reclock(cAliK220,.T.)
  1184. (cAliK220)->FILIAL := (cAliasTmp)->D3_FILIAL
  1185. (cAliK220)->REG := "K220"
  1186. (cAliK220)->DT_MOV := StoD((cAliasTmp)->D3_EMISSAO)
  1187. (cAliK220)->COD_ITEM_O := (cAliasTmp)->CODORI
  1188. (cAliK220)->COD_ITEM_D := (cAliasTmp)->CODDES
  1189. (cAliK220)->QTD_ORI := (cAliasTmp)->QUANT
  1190. (cAliK220)->QTD_DEST := (cAliasTmp)->QTDDEST
  1191. (cAliK220)->(MsUnLock())
  1192. (cAliasTmp)->(dbSkip())
  1193. nRegsto++
  1194. EndDo
  1195.  
  1196. (cAliasTmp)->(dbCloseArea())
  1197.  
  1198. // atualiza os registros SD3 que foram processados no periodo
  1199. If lGerLogPro
  1200. BlkK220(dDataDe,dDataAte)
  1201. EndIf
  1202.  
  1203. //----------------------//
  1204. // Grava Tabela de Hist //
  1205. //----------------------//
  1206. BlkGrvTab(cAliK220,"D3M",aTmpRegK[K220][4],dDataAte,lRepross)
  1207. Return
  1208.  
  1209.  
  1210.  
  1211. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  1212. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  1213. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  1214. 北矲un嘺o ?REGK250 ?Autor ?Materiais ?Data ?28/07/14 潮?
  1215. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  1216. 北矰escricao ?Funcao responsavel pela gravacao do Registro K250 潮?
  1217. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  1218. 北砅arametros?cAliasTRB = Alias do arquivo de trabalho do Bloco 潮?
  1219. 北? ?cAliK255 = Alias do arquivo de trabalho do K255 潮?
  1220. 北? ?cAli0210 = Alias do arquivo de trabalho do 0210 潮?
  1221. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  1222. 北? ?dDataAte = Data Final da Apuracao 潮?
  1223. 北? ?lSum = Data Final da Apuracao 潮?
  1224. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  1225. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  1226. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  1227. Static Function REGK250(cAliK250,cAliK255,cAli0210,dDataDe,dDataAte,lSum,lGerLogPro,lRepross)
  1228.  
  1229. Local cAliasTmp := GetNextAlias()
  1230. Local cQuery := ""
  1231.  
  1232. Default lGerLogPro := .T.
  1233. Default lRepross := .T.
  1234.  
  1235. If cVersSped <"013"
  1236. cQuery := "SELECT SUM(SD3.D3_QUANT) QUANT, SD3.D3_OP, SD3.D3_COD, SD3.D3_FILIAL, SC2.C2_QUANT QTDORI, SD3.D3_EMISSAO DTDIGIT "
  1237. cQuery += "FROM "+RetSqlName("SD3")+" SD3 "
  1238. cQuery += "JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial('SB1')+"' AND SB1.B1_COD = SD3.D3_COD AND SB1.D_E_L_E_T_ = ' ' "
  1239. If lCpoBZTP
  1240. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  1241. EndIf
  1242. cQuery += "JOIN "+RetSqlName("SC2")+" SC2 ON SD3.D3_OP = SC2.C2_NUM||SC2.C2_ITEM||SC2.C2_SEQUEN||SC2.C2_ITEMGRD "
  1243. cQuery += "AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' AND SC2.D_E_L_E_T_ = ' ' AND SC2.C2_ITEM <> 'OS' "
  1244. cQuery += "AND SC2.C2_PRODUTO = SD3.D3_COD AND SC2.C2_TPPR IN ('E') "
  1245. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  1246. cQuery += "AND SD3.D3_ESTORNO = ' ' "
  1247. cQuery += "AND SD3.D3_OP <> ' ' "
  1248. cQuery += "AND SD3.D3_CF IN ('PR0','PR1') "
  1249. cQuery += "AND SD3.D3_COD NOT LIKE 'MOD%' "
  1250. cQuery += "AND SD3.D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' AND '"+DtoS(dDataAte)+"' "
  1251. cQuery += "AND SD3.D_E_L_E_T_ = ' ' "
  1252. cQuery += "AND SB1.B1_CCCUSTO = ' ' "
  1253. cQuery += "AND "
  1254. If lCpoBZTP
  1255. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  1256. Else
  1257. cQuery += "SB1.B1_TIPO "
  1258. EndIf
  1259. cQuery += " IN ("+cTipo03+","+cTipo04+") "
  1260. cQuery += "GROUP BY SD3.D3_FILIAL, SD3.D3_OP, SD3.D3_COD, SC2.C2_QUANT, SD3.D3_EMISSAO ORDER BY 4,2 "
  1261. Else
  1262. cQuery := "SELECT SUM(SD3.D3_QUANT) QUANT,SD3.D3_OP,SD3.D3_COD,SD3.D3_FILIAL,SC2.C2_QUANT QTDORI, MAX(SD3.D3_EMISSAO) DTDIGIT "
  1263. cQuery += "FROM "+RetSqlName("SD3")+" SD3 "
  1264. cQuery += "JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial('SB1')+"' AND SB1.B1_COD = SD3.D3_COD AND SB1.D_E_L_E_T_ = ' ' "
  1265. If lCpoBZTP
  1266. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  1267. EndIf
  1268. cQuery += "JOIN "+RetSqlName("SC2")+" SC2 ON SD3.D3_OP = SC2.C2_NUM||SC2.C2_ITEM||SC2.C2_SEQUEN||SC2.C2_ITEMGRD "
  1269. cQuery += "AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' AND SC2.D_E_L_E_T_ = ' ' AND SC2.C2_ITEM <> 'OS' "
  1270. cQuery += "AND SC2.C2_PRODUTO = SD3.D3_COD AND SC2.C2_TPPR IN ('E') "
  1271. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  1272. cQuery += "AND SD3.D3_ESTORNO = ' ' "
  1273. cQuery += "AND SD3.D3_OP <> ' ' "
  1274. cQuery += "AND SD3.D3_CF IN ('PR0','PR1') "
  1275. cQuery += "AND SD3.D3_COD NOT LIKE 'MOD%' "
  1276. cQuery += "AND SD3.D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' AND '"+DtoS(dDataAte)+"' "
  1277. cQuery += "AND SD3.D_E_L_E_T_ = ' ' "
  1278. cQuery += "AND SB1.B1_CCCUSTO = ' ' "
  1279. cQuery += "AND "
  1280. If lCpoBZTP
  1281. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  1282. Else
  1283. cQuery += "SB1.B1_TIPO "
  1284. EndIf
  1285. cQuery += " IN ("+cTipo03+","+cTipo04+") "
  1286. cQuery += "AND NOT EXISTS( "
  1287. cQuery += " SELECT 1 FROM "+RetSqlName("SG1")+" SG1 "
  1288. cQuery += " WHERE SG1.G1_FILIAL = '"+xFilial("SG1")+"' "
  1289. cQuery += " AND SG1.G1_COD = SC2.C2_PRODUTO "
  1290. cQuery += " AND SG1.G1_REVINI <= CASE WHEN SC2.C2_REVISAO = ' ' THEN SB1.B1_REVATU ELSE SC2.C2_REVISAO END "
  1291. cQuery += " AND SG1.G1_REVFIM >= CASE WHEN SC2.C2_REVISAO = ' ' THEN SB1.B1_REVATU ELSE SC2.C2_REVISAO END "
  1292. cQuery += " AND SG1.G1_QUANT < 0 "
  1293. cQuery += " AND SG1.G1_INI <= '"+DTOS(dDataDe)+"' "
  1294. cQuery += " AND SG1.G1_FIM >= '"+DTOS(dDataAte)+"' "
  1295. cQuery += " AND SG1.D_E_L_E_T_ = ' ' "
  1296. cQuery += " ) "
  1297. cQuery += "GROUP BY SD3.D3_FILIAL, SD3.D3_OP, SD3.D3_COD, SC2.C2_QUANT ORDER BY 4,2 "
  1298. EndIf
  1299.  
  1300. cQuery := ChangeQuery(cQuery)
  1301. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  1302.  
  1303. While !(cAliasTmp)->(Eof())
  1304. If REGK255(cAliK255,dDataDe,dDataAte,(cAliasTmp)->D3_OP)
  1305. Reclock(cAliK250,.T.)
  1306. (cAliK250)->FILIAL := (cAliasTmp)->D3_FILIAL
  1307. (cAliK250)->REG := "K250"
  1308. (cAliK250)->CHAVE := (cAliasTmp)->D3_OP
  1309. (cAliK250)->DT_PROD := StoD((cAliasTmp)->DTDIGIT)
  1310. (cAliK250)->COD_ITEM := (cAliasTmp)->D3_COD
  1311. (cAliK250)->QTD := (cAliasTmp)->QUANT
  1312. (cAliK250)->(MsUnLock())
  1313. nRegsto++
  1314. EndIf
  1315. (cAliasTmp)->(dbSkip())
  1316. EndDo
  1317.  
  1318. // atualiza os registros SD3 que foram processados no periodo
  1319. If lGerLogPro
  1320. BlkPro250(dDataDe,dDataAte)
  1321. BlkPro255(dDataDe,dDataAte)
  1322. EndIf
  1323.  
  1324. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  1325. //?Gravacao do Registro 0210 com base nas entradas das NF's ?
  1326. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  1327. If !(cAliK250)->(Eof())
  1328. REG0210Ter(cAli0210,cAliK250,cAliK255)
  1329. EndIf
  1330.  
  1331. (cAliasTmp)->(dbCloseArea())
  1332.  
  1333. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1334. //?Soma e aglutina produtos e insumos com lancamentos no mesmo dia ?
  1335. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1336. If lSum
  1337. SumK250(cAliK250,cAliK255)
  1338. EndIf
  1339.  
  1340. //----------------------//
  1341. // Grava Tabela de Hist //
  1342. //----------------------//
  1343. BlkGrvTab(cAliK250,"D3N",aTmpRegK[K250][4],dDataAte,lRepross)
  1344. BlkGrvTab(cAliK255,"D3O",aTmpRegK[K255][4],dDataAte,lRepross)
  1345.  
  1346. Return
  1347.  
  1348. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  1349. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  1350. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  1351. 北矲un嘺o ?REGK255 ?Autor ?Materiais ?Data ?28/07/14 潮?
  1352. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  1353. 北矰escricao ?Funcao responsavel pela gravacao do Registro K255 潮?
  1354. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  1355. 北砅arametros?cAliasTRB = Alias do arquivo de trabalho do Bloco 潮?
  1356. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  1357. 北? ?dDataAte = Data Final da Apuracao 潮?
  1358. 北? ?cOP = Numero da Ordem de Producao 潮?
  1359. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  1360. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  1361. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  1362. Static Function REGK255(cAliK255,dDataDe,dDataAte,cOP,lGerLogPro,lRepross)
  1363.  
  1364. Local cAliasTmp := GetNextAlias()
  1365. Local cQuery := ""
  1366. Local lRet := .F.
  1367.  
  1368. Default lGerLogPro := .T.
  1369. Default lRepross := .T.
  1370.  
  1371. If cVersSped <"013"
  1372. cQuery := "SELECT SUM(CASE WHEN SD3.D3_CF LIKE ('DE%') THEN (SD3.D3_QUANT*-1) "
  1373. cQuery += "WHEN SD3.D3_CF LIKE ('RE%') THEN (SD3.D3_QUANT) ELSE 0 END) QUANT, "
  1374. cQuery += "SD3.D3_COD, SD3.D3_OP, SD3.D3_EMISSAO DTDIGIT, SD3.D3_FILIAL FROM "+RetSqlName("SD3")+" SD3 "
  1375. cQuery += "JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial('SB1')+"' AND SB1.B1_COD = SD3.D3_COD AND SB1.D_E_L_E_T_ = ' ' "
  1376. If lCpoBZTP
  1377. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  1378. EndIf
  1379. cQuery += "JOIN "+RetSqlName("SC2")+" SC2 ON SD3.D3_OP = SC2.C2_NUM||SC2.C2_ITEM||SC2.C2_SEQUEN||SC2.C2_ITEMGRD "
  1380. cQuery += "AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' AND SC2.D_E_L_E_T_ = ' ' AND SC2.C2_ITEM <> 'OS' AND SC2.C2_TPPR IN ('E') "
  1381. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' AND SD3.D_E_L_E_T_ = ' ' "
  1382. cQuery += "AND SD3.D3_ESTORNO = ' ' AND SD3.D3_OP = '"+ cOP +"' "
  1383. cQuery += "AND (SD3.D3_CF LIKE ('RE%') OR SD3.D3_CF LIKE ('DE%')) AND SB1.B1_CCCUSTO = ' ' "
  1384. cQuery += "AND SB1.B1_COD NOT LIKE 'MOD%' AND D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' AND '"+DtoS(dDataAte)+"' "
  1385. cQuery += "AND SD3.D_E_L_E_T_ = ' ' AND D3_CF <> 'DE1' "
  1386. cQuery += "AND "
  1387. If lCpoBZTP
  1388. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  1389. Else
  1390. cQuery += "SB1.B1_TIPO "
  1391. EndIf
  1392. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  1393. cQuery += "GROUP BY SD3.D3_EMISSAO, SD3.D3_OP, SD3.D3_COD, SD3.D3_FILIAL "
  1394. cQuery += "ORDER BY 4,3,2"
  1395. Else
  1396. cQuery := "SELECT SUM(CASE WHEN SD3.D3_CF LIKE ('DE%') THEN (SD3.D3_QUANT*-1) "
  1397. cQuery += "WHEN SD3.D3_CF LIKE ('RE%') THEN (SD3.D3_QUANT) ELSE 0 END) QUANT, "
  1398. cQuery += "SD3.D3_COD, SD3.D3_OP, MAX(SD3.D3_EMISSAO) DTDIGIT, SD3.D3_FILIAL "
  1399. cQuery += "FROM "+RetSqlName("SD3")+" SD3 "
  1400. cQuery += "JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial('SB1')+"' AND SB1.B1_COD = SD3.D3_COD AND SB1.D_E_L_E_T_ = ' ' "
  1401. If lCpoBZTP
  1402. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  1403. EndIf
  1404. cQuery += "JOIN "+RetSqlName("SC2")+" SC2 ON SD3.D3_OP = SC2.C2_NUM||SC2.C2_ITEM||SC2.C2_SEQUEN||SC2.C2_ITEMGRD "
  1405. cQuery += "AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' AND SC2.D_E_L_E_T_ = ' ' AND SC2.C2_ITEM <> 'OS' AND SC2.C2_TPPR IN ('E') "
  1406. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  1407. cQuery += "AND SD3.D3_ESTORNO = ' ' AND SD3.D3_OP = '"+ cOP +"' "
  1408. cQuery += "AND (SD3.D3_CF LIKE ('RE%') OR SD3.D3_CF LIKE ('DE%')) AND SB1.B1_CCCUSTO = ' ' "
  1409. cQuery += "AND SB1.B1_COD NOT LIKE 'MOD%' "
  1410. cQuery += "AND D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' AND '"+DtoS(dDataAte)+"' "
  1411. cQuery += "AND SD3.D3_CF <> 'DE1' "
  1412. cQuery += "AND SD3.D_E_L_E_T_ = ' ' "
  1413. cQuery += "AND "
  1414. If lCpoBZTP
  1415. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  1416. Else
  1417. cQuery += "SB1.B1_TIPO "
  1418. EndIf
  1419. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  1420. cQuery += "GROUP BY SD3.D3_OP, SD3.D3_COD, SD3.D3_FILIAL "
  1421. cQuery += "ORDER BY 4,3,2"
  1422. Endif
  1423.  
  1424. cQuery := ChangeQuery(cQuery)
  1425. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  1426.  
  1427. If !(cAliasTmp)->(Eof())
  1428. lRet := .T.
  1429. EndIf
  1430.  
  1431. While !(cAliasTmp)->(Eof())
  1432. Reclock(cAliK255,.T.)
  1433. (cAliK255)->FILIAL := (cAliasTmp)->D3_FILIAL
  1434. (cAliK255)->REG := "K255"
  1435. (cAliK255)->CHAVE := (cAliasTmp)->D3_OP
  1436. (cAliK255)->DT_CONS := StoD((cAliasTmp)->DTDIGIT)
  1437. (cAliK255)->COD_ITEM := (cAliasTmp)->D3_COD
  1438. (cAliK255)->QTD := (cAliasTmp)->QUANT
  1439. (cAliK255)->COD_INS_SU := GetSubst((cAliasTmp)->D3_COD,(cAliasTmp)->D3_OP,dDataDe,dDataAte)
  1440. (cAliK255)->(MsUnLock())
  1441. nRegsto++
  1442. (cAliasTmp)->(dbSkip())
  1443. EndDo
  1444.  
  1445. (cAliasTmp)->(dbCloseArea())
  1446.  
  1447. Return lRet
  1448.  
  1449. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  1450. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  1451. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  1452. 北矲un嘺o ?REGK27X ?Autor ?Materiais ?Data ?11/08/16 潮?
  1453. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  1454. 北矰escricao ?Funcao responsavel pela gravacao dos Registros K270 e K275 潮?
  1455. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  1456. 北砅arametros?cAliK270 = Alias do arquivo de trabalho do K270 潮?
  1457. 北? ?cAliK275 = Alias do arquivo de trabalho do K275 潮?
  1458. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  1459. 北? ?dDataAte = Data Final da Apuracao 潮?
  1460. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  1461. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  1462. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  1463. Function REGK27X(cAliK270,cAliK275,dDataDe,dDataAte,aProdNeg,cBlKCor,lGerLogPro,lRePross,cAliK280)
  1464. Local nX,nY
  1465. Local lExistK27x:= Existblock("REGK27X")
  1466.  
  1467. Default aProdNeg := {}
  1468. Default cBlKCor := " "
  1469. Default lGerLogPro := .T.
  1470. Default lRepross := .T.
  1471.  
  1472.  
  1473. If cVersSped <"013"
  1474. If lExistK27x
  1475. Execblock("REGK27X",.F.,.F.,{cAliK270,cAliK275,dDataDe,dDataAte})
  1476. Elseif Len(aProdNeg) > 0
  1477. If cBlKCor == "K235"
  1478. For nX := 1 to Len(aProdNeg)
  1479. Reclock(cAliK275,.T.)
  1480. (cAliK275)->FILIAL := aProdNeg[nX,1]
  1481. (cAliK275)->REG := "K275"
  1482. (cAliK275)->COD_OP_OS := aProdNeg[nX,6]
  1483. (cAliK275)->COD_ITEM := aProdNeg[nX,4]
  1484. (cAliK275)->QTD_COR_N := ABS(aProdNeg[nX,5])
  1485. (cAliK275)->COD_INS_SU := aProdNeg[nX,7]
  1486. (cAliK275)->(MsUnLock())
  1487. nRegsto++
  1488. Next nX
  1489. For nY := 1 to Len(aProdNeg)
  1490. dDataTrat:= GetIniProd(aProdNeg[nY,6])
  1491. If (SC2->(MsSeek(aProdNeg[nY,1]+aProdNeg[nY,6])))
  1492. Reclock(cAliK270,.T.)
  1493. (cAliK270)->FILIAL := aProdNeg[nY,1]
  1494. (cAliK270)->REG := "K270"
  1495. (cAliK270)->DT_INI_AP := Stod(Substr(DtoS(dDataTrat),1,6)+"01")
  1496. (cAliK270)->DT_FIN_AP := Stod(Substr(DtoS(dDataTrat),1,6)+SubStr(DtoS(Lastday(dDataTrat,0)),7,8))
  1497. (cAliK270)->COD_OP_OS := aProdNeg[nY,6]
  1498. (cAliK270)->COD_ITEM := SC2->C2_PRODUTO
  1499. (cAliK270)->ORIGEM := "1"
  1500. (cAliK270)->(MsUnLock())
  1501. nRegsto++
  1502. EndIf
  1503. Next nY
  1504. EndIf
  1505. EndIf
  1506. Else
  1507. // tratamento K250/K255 - Industrializacao efetuada por terceiros
  1508. CorrK25X(cAliK270,cAliK275,dDataDe,dDataAte,lGerLogPro,cAliK280)
  1509.  
  1510. // tratamento K210/K215 - Desmontagem
  1511. CorrK21X(cAliK270,cAliK275,dDataDe,dDataAte,lGerLogPro,cAliK280)
  1512.  
  1513. // tratamento K220 - Outras movimentacoes internas entre mercadorias
  1514. CorrK220(cAliK270,cAliK275,dDataDe,dDataAte,lGerLogPro,cAliK280)
  1515.  
  1516. // tratamento K260 - Reprocessamento/reparo de produto/insuumo
  1517. // sem tratamento
  1518.  
  1519. // tratamento K301 - produ玢o conjunta por terceiros
  1520. CorrK301(cAliK270,cAliK275,dDataDe,dDataAte,lGerLogPro,cAliK280)
  1521.  
  1522. // tratamento K302 - produ玢o conjunta por terceiros
  1523. CorrK302(cAliK270,cAliK275,dDataDe,dDataAte,lGerLogPro,cAliK280)
  1524.  
  1525. If lExistK27x
  1526. Execblock("REGK27X",.F.,.F.,{cAliK270,cAliK275,dDataDe,dDataAte})
  1527. EndIf
  1528.  
  1529. // grava na tabela de historico
  1530. //BlkGrvTab(cAliK270,"",aTmpRegK[K270][4],dDataAte,lRepross)
  1531. //BlkGrvTab(cAliK275,"",aTmpRegK[K275][4],dDataAte,lRepross)
  1532. EndIf
  1533.  
  1534. Return
  1535.  
  1536. /*/{Protheus.doc} CorrK21X
  1537. Registros do K270 referente a corre玢o do K210/K210.
  1538. Onde busca os movimentos internos de desmontagem estornados ou incluidos, apos a geracao do SPED FISCAL.
  1539. @author reynaldo
  1540. @since 25/10/2018
  1541. @version 1.0
  1542. @return ${return}, ${return_description}
  1543. @param cAliK270, characters, descricao
  1544. @param cAliK275, characters, descricao
  1545. @param dDataDe, date, descricao
  1546. @param dDataAte, date, descricao
  1547. @param lGerLogPro, logical, descricao
  1548. @param cAliK280, characters, descricao
  1549. @type function
  1550. /*/
  1551. Static Function CorrK21X(cAliK270,cAliK275,dDataDe,dDataAte,lGerLogPro,cAliK280)
  1552.  
  1553. Local cQuery := ""
  1554. Local cAliasTmp := GetNextAlias()
  1555. Local cQryRegs := ""
  1556.  
  1557. Default lGerLogPro := .T.
  1558.  
  1559. cQryRegs += "FROM "+RetSqlName("SD3")+" SD3 "
  1560. cQryRegs += "LEFT JOIN "+RetSqlName("D3E")+" D3E ON "
  1561. cQryRegs += "D3E.D3E_FILIAL = '"+xFilial('D3E')+"' "
  1562. cQryRegs += "AND D3E_COD = SD3.D3_COD "
  1563. cQryRegs += "AND D3E.D_E_L_E_T_ = ' ' "
  1564. cQryRegs += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  1565. cQryRegs += "AND SD3.D3_CF IN ('DE7','RE7') "
  1566. cQryRegs += "AND SD3.D3_EMISSAO < '"+DtoS(dDataDe)+"' "
  1567. cQryRegs += "AND SD3.D3_PERBLK IN ('"+space(TamSx3("D3_PERBLK")[1])+"', '"+Left(dTos(dDataAte),6)+"') "
  1568. cQryRegs += "AND SD3.D_E_L_E_T_ = ' ' "
  1569. cQryRegs += "AND EXISTS( "
  1570. cQryRegs += "SELECT 1 FROM "+RetSqlName("SB1")+" SB1 "
  1571. If lCpoBZTP
  1572. cQryRegs += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  1573. EndIf
  1574. cQryRegs += "WHERE SB1.B1_FILIAL = '"+xFilial('SB1')+"' "
  1575. cQryRegs += "AND SB1.B1_COD = SD3.D3_COD "
  1576. cQryRegs += "AND SB1.B1_COD NOT LIKE 'MOD%' "
  1577. cQryRegs += "AND SB1.B1_CCCUSTO = ' ' "
  1578. cQryRegs += "AND SB1.D_E_L_E_T_ = ' ' "
  1579. cQryRegs += "AND "
  1580. If lCpoBZTP
  1581. cQryRegs += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  1582. Else
  1583. cQryRegs += "SB1.B1_TIPO "
  1584. EndIf
  1585. cQryRegs += "IN ("+cTipo03+","+cTipo04+") "
  1586. cQryRegs += ") "
  1587.  
  1588. // agrupando os registros para gravacao do registro do k270/k275
  1589. cQuery := ""
  1590. cQuery += "SELECT SD3a.D3_FILIAL, REG, SD3a.D3_COD, MESANOAPUR, SD3a.D3_NUMSEQ, SD3a.D3_DOC, Sum(SD3a.D3_QUANT) D3_QUANT , D3E_CLIENT, D3E_LOJA "
  1591. cQuery += "FROM ("
  1592. cQuery += "SELECT SD3.D3_FILIAL, SD3.D3_COD, "+ MatiSubStr()+"(SD3.D3_EMISSAO,1,6) MESANOAPUR, SD3.D3_NUMSEQ, SD3.D3_DOC, Coalesce( D3E_CLIENT,'') D3E_CLIENT, Coalesce( D3E_LOJA,'') D3E_LOJA"
  1593. cQuery += ", CASE WHEN SD3.D3_FATHER ='F' THEN 'K270' ELSE 'K275' END REG "
  1594. cQuery += ", CASE WHEN SD3.D3_CF = 'RE7' THEN SD3.D3_QUANT*-1 ELSE SD3.D3_QUANT END D3_QUANT "
  1595. cQuery += cQryRegs
  1596. cQuery += +") SD3a "
  1597. cQuery += "GROUP BY SD3a.D3_FILIAL, SD3a.D3_COD, MESANOAPUR, SD3a.D3_NUMSEQ, SD3a.D3_DOC, REG ,D3E_CLIENT, D3E_LOJA "
  1598. cQuery += "ORDER BY 4,6 "
  1599.  
  1600. cQuery := ChangeQuery(cQuery)
  1601. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  1602.  
  1603. While !(cAliasTmp)->(Eof())
  1604.  
  1605. If LEFT((cAliasTMP)->REG,4) =="K270"
  1606. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1607. //?Grava o Registro K270 ?
  1608. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1609. Reclock(cAliK270,.T.)
  1610. (cAliK270)->FILIAL := (cAliasTMP)->D3_FILIAL
  1611. (cAliK270)->REG := (cAliasTMP)->REG
  1612. (cAliK270)->CHAVE := strzero((cAliK270)->(Recno()),len((cAliK270)->CHAVE))
  1613. (cAliK270)->DT_INI_AP := STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")
  1614. (cAliK270)->DT_FIN_AP := Lastday((cAliK270)->DT_INI_AP)
  1615. (cAliK270)->COD_OP_OS := (cAliasTMP)->D3_DOC
  1616. (cAliK270)->COD_ITEM := (cAliasTMP)->D3_COD
  1617. If (cAliasTMP)->D3_QUANT >0
  1618. (cAliK270)->QTD_COR_P := (cAliasTMP)->D3_QUANT
  1619. Else
  1620. (cAliK270)->QTD_COR_N := (cAliasTMP)->D3_QUANT*-1
  1621. EndIf
  1622.  
  1623. (cAliK270)->ORIGEM := "3"
  1624. (cAliK270)->(MsUnLock())
  1625. nRegsto++
  1626.  
  1627. BlkReg280((cAliK270)->FILIAL,"K210",LastDay(STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")),dDataAte,(cAliasTmp)->D3_COD,(cAliasTMP)->D3_QUANT,(cAliasTMP)->D3E_CLIENT,(cAliasTMP)->D3E_LOJA,cAliK280)
  1628.  
  1629. Else
  1630. If LEFT((cAliasTMP)->REG,4) =="K275"
  1631. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1632. //?Grava o Registro K275 ?
  1633. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  1634. Reclock(cAliK275,.T.)
  1635. (cAliK275)->FILIAL := (cAliasTMP)->D3_FILIAL
  1636. (cAliK275)->REG := (cAliasTMP)->REG
  1637. (cAliK275)->CHAVE := strzero((cAliK270)->(Recno()),len((cAliK270)->CHAVE))
  1638. (cAliK275)->COD_ITEM := (cAliasTMP)->D3_COD
  1639.  
  1640. If (cAliasTMP)->D3_QUANT >0
  1641. (cAliK275)->QTD_COR_P := (cAliasTMP)->D3_QUANT
  1642. Else
  1643. (cAliK275)->QTD_COR_N := (cAliasTMP)->D3_QUANT*-1
  1644. EndIf
  1645.  
  1646. (cAliK275)->COD_INS_SUBST := ""
  1647. (cAliK275)->(MsUnLock())
  1648. BlkReg280((cAliK275)->FILIAL,"K215",LastDay(STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")),dDataAte,(cAliasTmp)->D3_COD,(cAliasTMP)->D3_QUANT,(cAliasTMP)->D3E_CLIENT,(cAliasTMP)->D3E_LOJA,cAliK280)
  1649.  
  1650. nRegsto++
  1651. EndIf
  1652. EndIf
  1653. (cAliasTMP)->(dbSkip())
  1654. EndDo
  1655.  
  1656. (cAliasTmp)->(dbCloseArea())
  1657.  
  1658. If lGerLogPro
  1659. // atualiza o periodo de apuracao do bloco K nos registros que foram envolvidos
  1660. cQuery := ""
  1661. cQuery += "UPDATE "+RetSqlName("SD3")+" "
  1662. cQuery += "SET D3_PERBLK = '"+Left(dTos(dDataAte),6)+"' "
  1663. cQuery += "WHERE R_E_C_N_O_ IN ( "
  1664. cQuery += "SELECT SD3.R_E_C_N_O_ "
  1665. cQuery += cQryRegs
  1666. cQuery += +") "
  1667. MATExecQry(cQuery)
  1668. EndIf
  1669. Return
  1670.  
  1671. /*/{Protheus.doc} CorrK220
  1672. Registros do K270 referente a corre玢o do K220.
  1673. Onde busca os movimentos internos de transferencia de produtos estornados ou incluidos, apos a geracao do SPED FISCAL.
  1674. @author reynaldo
  1675. @since 19/10/2018
  1676. @version 1.0
  1677. @return ${return}, ${return_description}
  1678. @param cAliK270, characters, descricao
  1679. @param cAliK275, characters, descricao
  1680. @param dDataDe, date, descricao
  1681. @param dDataAte, date, descricao
  1682. @param lGerLogPro, logical, descricao
  1683. @param cAliK280, characters, descricao
  1684. @type function
  1685. /*/
  1686. Static Function CorrK220(cAliK270,cAliK275,dDataDe,dDataAte,lGerLogPro,cAliK280)
  1687. Local cQuery := ""
  1688. Local cAliasTmp := GetNextAlias()
  1689.  
  1690. Default lGerLogPro := .T.
  1691.  
  1692. cQuery := "SELECT SD3ORI.D3_FILIAL, "+ MatiSubStr()+"(SD3ORI.D3_EMISSAO,1,6) MESANOAPUR, "
  1693. cQuery += "SD3ORI.D3_COD CODORI, SUM(SD3ORI.D3_QUANT) QTDORI, "
  1694. cQuery += "SD3DES.D3_COD CODDES, SUM(SD3DES.D3_QUANT) QTDDES, "
  1695. cQuery += "COALESCE(D3E.D3E_CLient,'')CLIENTE,COALESCE(D3E.D3E_lOJA,'')LOJA, Coalesce (DESTD3E.D3E_CLient,'')ClienteDes, "
  1696. cQuery += "COALESCE(DESTD3E.D3E_lOJA,'') LOJADES "
  1697. cQuery += "FROM "+RetSqlName("SD3")+" SD3ORI "
  1698. cQuery += "JOIN "+RetSqlName("SD3")+" SD3DES ON SD3DES.D3_FILIAL = SD3ORI.D3_FILIAL "
  1699. cQuery += "AND SD3DES.D3_NUMSEQ = SD3ORI.D3_NUMSEQ "
  1700. cQuery += "AND SD3DES.D3_CF = 'DE4' "
  1701. cQuery += "AND SD3DES.D3_PERBLK IN ('"+space(TamSx3("D3_PERBLK")[1])+"', '"+Left(dTos(dDataAte),6)+"') "
  1702. cQuery += "AND SD3DES.D_E_L_E_T_ = ' ' "
  1703. cQuery += "JOIN "+RetSqlName("SB1")+" SB1ORI ON SB1ORI.B1_FILIAL = '"+xFilial('SB1')+"' "
  1704. cQuery += "AND SB1ORI.B1_COD = SD3ORI.D3_COD "
  1705. cQuery += "AND SB1ORI.B1_CCCUSTO = ' ' "
  1706. cQuery += "AND SB1ORI.B1_COD NOT LIKE 'MOD%' "
  1707. cQuery += "AND SB1ORI.D_E_L_E_T_ = ' ' "
  1708. cQuery += "LEFT JOIN "+RetSqlName("D3E")+" D3E "
  1709. cQuery += "ON D3E.D3E_FILIAL ='"+xfilial('D3E')+"' "
  1710. cQuery += "AND D3E.D3E_COD = SB1ORI.B1_COD "
  1711. cQuery += "AND D3E.D_E_L_E_T_= ' ' "
  1712. If lCpoBZTP
  1713. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZORI ON SBZORI.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZORI.BZ_COD = SB1ORI.B1_COD AND SBZORI.D_E_L_E_T_ = ' ' "
  1714. EndIf
  1715. cQuery += "JOIN "+RetSqlName("SB1")+" SB1DES ON SB1DES.B1_FILIAL = '"+xFilial('SB1')+"' "
  1716. cQuery += "AND SB1DES.B1_COD = SD3DES.D3_COD "
  1717. cQuery += "AND SB1DES.B1_CCCUSTO = ' ' "
  1718. cQuery += "AND SB1DES.B1_COD NOT LIKE 'MOD%' "
  1719. cQuery += "AND SB1DES.D_E_L_E_T_ = ' ' "
  1720. cQuery += "LEFT JOIN "+RetSQLName('D3E')+" DESTD3E ON D3E.D3E_FILIAL ='"+xFilial('D3E')+"' "
  1721. cQuery += "AND DESTD3E.D3E_COD = SB1DES.B1_COD "
  1722. cQuery += "AND DESTD3E.D_E_L_E_T_= ' ' "
  1723. If lCpoBZTP
  1724. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZDES ON SBZDES.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZDES.BZ_COD = SB1DES.B1_COD AND SBZDES.D_E_L_E_T_ = ' ' "
  1725. EndIf
  1726. cQuery += "WHERE SD3ORI.D3_FILIAL = '"+xFilial('SD3')+"' "
  1727. cQuery += "AND SD3ORI.D3_COD <> SD3DES.D3_COD "
  1728. cQuery += "AND SD3ORI.D3_CF = 'RE4' "
  1729. cQuery += "AND SD3ORI.D3_EMISSAO < '"+DtoS(dDataDe)+"' "
  1730. cQuery += "AND SD3ORI.D3_PERBLK IN ('"+space(TamSx3("D3_PERBLK")[1])+"', '"+Left(dTos(dDataAte),6)+"') "
  1731. cQuery += "AND "
  1732. If lCpoBZTP
  1733. cQuery += MatIsNull()+"(SBZORI.BZ_TIPO,SB1ORI.B1_TIPO) "
  1734. Else
  1735. cQuery += "SB1ORI.B1_TIPO "
  1736. EndIF
  1737. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  1738. cQuery += "AND "
  1739. If lCpoBZTP
  1740. cQuery += MatIsNull()+"(SBZDES.BZ_TIPO,SB1DES.B1_TIPO) "
  1741. Else
  1742. cQuery += "SB1DES.B1_TIPO "
  1743. EndIF
  1744. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  1745. cQuery += "AND SD3ORI.D_E_L_E_T_ = ' ' "
  1746. cQuery += "GROUP BY "+ MatiSubStr()+"(SD3ORI.D3_EMISSAO,1,6) , SD3ORI.D3_COD, SD3DES.D3_COD, SD3ORI.D3_FILIAL ,D3E.D3E_CLIENT,D3E.D3E_LOJA,DESTD3E.D3E_CLIENT, "
  1747. cQuery += "DESTD3E.D3E_LOJA"
  1748.  
  1749. cQuery := ChangeQuery(cQuery)
  1750. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  1751.  
  1752. While !(cAliasTmp)->(Eof())
  1753. Reclock(cAliK270,.T.)
  1754. (cAliK270)->FILIAL := (cAliasTmp)->D3_FILIAL
  1755. (cAliK270)->REG := "K270"
  1756. (cAliK270)->CHAVE := strzero((cAliK270)->(Recno()),len((cAliK270)->CHAVE))
  1757. (cAliK270)->DT_INI_AP := STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")
  1758. (cAliK270)->DT_FIN_AP := Lastday((cAliK270)->DT_INI_AP)
  1759. (cAliK270)->COD_OP_OS := ""
  1760. (cAliK270)->COD_ITEM := (cAliasTmp)->CODORI
  1761. (cAliK270)->QTD_COR_N := (cAliasTmp)->QTDORI
  1762. (cAliK270)->ORIGEM := "5"
  1763. (cAliK270)->(MsUnLock())
  1764. BlkReg280((cAliK270)->FILIAL,"K220",LastDay(STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")),dDataAte,(cAliasTmp)->CODORI,(cAliasTMP)->QTDORI*-1,(cAliasTMP)->CLIENTE,(cAliasTMP)->LOJA,cAliK280)
  1765. Reclock(cAliK275,.T.)
  1766. (cAliK275)->FILIAL := (cAliasTmp)->D3_FILIAL
  1767. (cAliK275)->REG := "K275"
  1768. (cAliK275)->CHAVE := strzero((cAliK270)->(Recno()),len((cAliK270)->CHAVE))
  1769. (cAliK275)->COD_ITEM := (cAliasTmp)->CODDES
  1770. (cAliK275)->QTD_COR_P := (cAliasTmp)->QTDDES
  1771. (cAliK275)->COD_INS_SUBST := ""
  1772. (cAliK275)->(MsUnLock())
  1773. BlkReg280((cAliK275)->FILIAL,"K220",LastDay(STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")),dDataAte,(cAliasTmp)->CODDES,(cAliasTMP)->QTDDES,(cAliasTMP)->CLIENTEDES,(cAliasTMP)->LOJADES,cAliK280)
  1774.  
  1775. (cAliasTmp)->(dbSkip())
  1776. nRegsto++
  1777. EndDo
  1778.  
  1779. (cAliasTmp)->(dbCloseArea())
  1780.  
  1781. If lGerLogPro
  1782. // atualiza o periodo de apuracao do bloco K nos registros que foram envolvidos
  1783. cQuery := ""
  1784. cQuery += "UPDATE "+RetSqlName("SD3")+" "
  1785. cQuery += "SET D3_PERBLK = '"+Left(dTos(dDataAte),6)+"' "
  1786. cQuery += "WHERE R_E_C_N_O_ IN ( "
  1787. cQuery += "SELECT SD3ORI.R_E_C_N_O_ "
  1788. cQuery += "FROM "+RetSqlName("SD3")+" SD3ORI "
  1789.  
  1790. cQuery += "JOIN "+RetSqlName("SD3")+" SD3DES ON SD3DES.D3_FILIAL = SD3ORI.D3_FILIAL "
  1791. cQuery += "AND SD3DES.D3_NUMSEQ = SD3ORI.D3_NUMSEQ "
  1792. cQuery += "AND ((SD3ORI.D3_CF = 'RE4' AND SD3DES.D3_CF = 'DE4') "
  1793. cQuery += "OR (SD3ORI.D3_CF = 'DE4' AND SD3DES.D3_CF = 'RE4')) "
  1794. cQuery += "AND SD3DES.D3_PERBLK IN ('"+space(TamSx3("D3_PERBLK")[1])+"', '"+Left(dTos(dDataAte),6)+"') "
  1795. cQuery += "AND SD3DES.D_E_L_E_T_ = ' ' "
  1796. cQuery += "AND EXISTS( "
  1797. cQuery += "SELECT 1 "
  1798. cQuery += "FROM "+RetSqlName("SB1")+" SB1DES "
  1799. If lCpoBZTP
  1800. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZDES ON SBZDES.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZDES.BZ_COD = SB1DES.B1_COD AND SBZDES.D_E_L_E_T_ = ' ' "
  1801. EndIf
  1802. cQuery += "WHERE SB1DES.B1_FILIAL = '"+xFilial('SB1')+"' "
  1803. cQuery += "AND SB1DES.B1_COD = SD3DES.D3_COD "
  1804. cQuery += "AND SB1DES.B1_CCCUSTO = ' ' "
  1805. cQuery += "AND SB1DES.B1_COD NOT LIKE 'MOD%' "
  1806. cQuery += "AND SB1DES.D_E_L_E_T_ = ' ' "
  1807. cQuery += "AND "
  1808. If lCpoBZTP
  1809. cQuery += MatIsNull()+"(SBZDES.BZ_TIPO,SB1DES.B1_TIPO) "
  1810. Else
  1811. cQuery += "SB1DES.B1_TIPO "
  1812. EndIF
  1813. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  1814. cQuery += ") "
  1815.  
  1816. cQuery += "WHERE SD3ORI.D3_FILIAL = '"+xFilial('SD3')+"' "
  1817. cQuery += "AND SD3ORI.D3_COD <> SD3DES.D3_COD "
  1818. cQuery += "AND SD3ORI.D3_CF IN ('DE4','RE4') "
  1819. cQuery += "AND SD3ORI.D3_EMISSAO < '"+DtoS(dDataDe)+"' "
  1820. cQuery += "AND SD3ORI.D3_PERBLK IN ('"+space(TamSx3("D3_PERBLK")[1])+"', '"+Left(dTos(dDataAte),6)+"') "
  1821. cQuery += "AND EXISTS( "
  1822. cQuery += "SELECT 1 "
  1823. cQuery += "FROM "+RetSqlName("SB1")+" SB1ORI "
  1824. If lCpoBZTP
  1825. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZORI ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZORI.BZ_COD = SB1ORI.B1_COD AND SBZORI.D_E_L_E_T_ = ' ' "
  1826. EndIf
  1827. cQuery += "WHERE SB1ORI.B1_FILIAL = '"+xFilial('SB1')+"' "
  1828. cQuery += "AND SB1ORI.B1_COD = SD3ORI.D3_COD "
  1829. cQuery += "AND SB1ORI.B1_CCCUSTO = ' ' "
  1830. cQuery += "AND SB1ORI.B1_COD NOT LIKE 'MOD%' "
  1831. cQuery += "AND SB1ORI.D_E_L_E_T_ = ' ' "
  1832. cQuery += "AND "
  1833. If lCpoBZTP
  1834. cQuery += MatIsNull()+"(SBZORI.BZ_TIPO,SB1ORI.B1_TIPO) "
  1835. Else
  1836. cQuery += "SB1ORI.B1_TIPO "
  1837. EndIf
  1838. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  1839. cQuery += ") "
  1840. cQuery += "AND SD3ORI.D_E_L_E_T_ = ' ' "
  1841. cQuery += +") "
  1842. MATExecQry(cQuery)
  1843. EndIf
  1844.  
  1845. Return
  1846.  
  1847. /*/{Protheus.doc} CorrK25X
  1848. Registros do K270 referente a corre玢o do K250/K255.
  1849. Onde busca os movimentos internos de requisicao e produ玢o, referente a uma ordem de produ玢o
  1850. em terceiros, estornados ou incluidos,
  1851. apos a geracao do SPED FISCAL.
  1852. @author reynaldo
  1853. @since 25/10/2018
  1854. @version 1.0
  1855. @return ${return}, ${return_description}
  1856. @param cAliK270, characters, descricao
  1857. @param cAliK275, characters, descricao
  1858. @param dDataDe, date, descricao
  1859. @param dDataAte, date, descricao
  1860. @param lGerLogPro, logical, descricao
  1861. @param cAliK280, characters, descricao
  1862. @type function
  1863. /*/
  1864. Static Function CorrK25X(cAliK270,cAliK275,dDataDe,dDataAte,lGerLogPro,cAliK280)
  1865.  
  1866. Local cAliasTmp := GetNextAlias()
  1867. Local cQryK25X := ""
  1868. Local cQryK280 := ""
  1869. Local cQryRegs := ""
  1870. Local nTamChave := TamSX3("D3_OP")[1]
  1871.  
  1872. Default lGerLogPro := .T.
  1873.  
  1874. cQryRegs := ""
  1875. cQryRegs += "FROM "+RetSqlName("SD3")+" SD3 "
  1876. cQryRegs += "JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial('SB1')+"' "
  1877. cQryRegs += "AND SB1.B1_COD = SD3.D3_COD "
  1878. cQryRegs += "AND SB1.B1_COD NOT LIKE 'MOD%' "
  1879. cQryRegs += "AND SB1.B1_CCCUSTO = ' ' "
  1880. cQryRegs += "AND SB1.D_E_L_E_T_ = ' ' "
  1881. If lCpoBZTP
  1882. cQryRegs += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  1883. EndIf
  1884. cQryRegs += "JOIN "+RetSqlName("SC2")+" SC2 ON SD3.D3_OP = SC2.C2_NUM "+ MatiConcat()+" SC2.C2_ITEM "+ MatiConcat()+" SC2.C2_SEQUEN "+ MatiConcat()+" SC2.C2_ITEMGRD "
  1885. cQryRegs += "AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' "
  1886. cQryRegs += "AND SC2.D_E_L_E_T_ = ' ' "
  1887. cQryRegs += "AND SC2.C2_ITEM <> 'OS' "
  1888. cQryRegs += "AND SC2.C2_TPPR IN ('E') "
  1889. cQryRegs += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  1890. cQryRegs += "AND SD3.D3_EMISSAO < '"+DtoS(dDataDe)+"' "
  1891. cQryRegs += "AND SD3.D3_PERBLK IN ('"+space(TamSx3("D3_PERBLK")[1])+"', '"+Left(dTos(dDataAte),6)+"') "
  1892. cQryRegs += "AND SD3.D_E_L_E_T_ = ' ' "
  1893. cQryRegs += "AND ((SD3.D3_CF IN ('PR0','PR1','ER0','ER1') "
  1894. cQryRegs += "AND "
  1895. If lCpoBZTP
  1896. cQryRegs += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  1897. Else
  1898. cQryRegs += "SB1.B1_TIPO "
  1899. EndIf
  1900. cQryRegs += "IN ("+cTipo03+","+cTipo04+") ) "
  1901. cQryRegs += "OR ((SD3.D3_CF LIKE ('RE%') OR SD3.D3_CF LIKE ('DE%') ) "
  1902. cQryRegs += "AND "
  1903. If lCpoBZTP
  1904. cQryRegs += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  1905. Else
  1906. cQryRegs += "SB1.B1_TIPO "
  1907. EndIf
  1908. cQryRegs += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  1909.  
  1910. cQryRegs += ") )"
  1911. cQryRegs += "AND NOT EXISTS( "
  1912. cQryRegs += "SELECT 1 FROM "+RetSqlName("SD4")+" SD4 "
  1913. cQryRegs += "WHERE SD4.D4_FILIAL = '"+xFilial("SD4")+"' "
  1914. cQryRegs += "AND SD4.D4_OP = SD3.D3_OP "
  1915. cQryRegs += "AND SD4.D4_PRODUTO = SC2.C2_PRODUTO "
  1916. cQryRegs += "AND SD4.D4_QTDEORI < 0 "
  1917. cQryRegs += "AND SD4.D_E_L_E_T_ = ' ' "
  1918. cQryRegs += ") "
  1919.  
  1920. //
  1921. // Selecao dos movimentos internos (requisicoes/producao) executados apos a apuracao do bloco k
  1922. //
  1923. cQryK280 := ""
  1924. cQryK280 += "SELECT (CASE WHEN SD3.D3_CF = 'PR1' THEN 'K270' "
  1925. cQryK280 += "WHEN SD3.D3_CF = 'PR0' THEN 'K270' "
  1926. cQryK280 += "WHEN SD3.D3_CF = 'ER0' THEN 'K270' "
  1927. cQryK280 += "WHEN SD3.D3_CF = 'ER1' THEN 'K270' "
  1928. cQryK280 += "ELSE 'K275' END "
  1929. cQryK280 += ")REG, SD3.D3_FILIAL, SD3.D3_OP, SD3.D3_COD, "+ MatiSubStr()+"(SD3.D3_EMISSAO,1,6) MESANOAPUR, D3_FORNDOC, D3_LOJADOC, "
  1930. cQryK280 += "(CASE WHEN SD3.D3_CF LIKE 'PR%' THEN SD3.D3_QUANT "
  1931. cQryK280 += "WHEN SD3.D3_CF LIKE 'DE%' THEN SD3.D3_QUANT "
  1932. cQryK280 += "ELSE SD3.D3_QUANT*-1 END) D3_QUANT "
  1933. cQryK280 += cQryRegs + " "
  1934.  
  1935. //
  1936. // Agrupamento dos movimentos internos (requisicoes/producao) executados apos a apuracao do bloco k para correcao do K250
  1937. //
  1938. cQryK25X := ""
  1939. cQryK25X += "SELECT D3_FILIAL, REG, D3_OP, D3_COD, MESANOAPUR, SUM(D3_QUANT) D3_QUANT "
  1940. cQryK25X += "FROM ("
  1941. cQryK25X += cQryK280 + ") SD3MOV "
  1942. cQryK25X += "GROUP BY D3_FILIAL, REG, D3_OP, D3_COD, MESANOAPUR "
  1943. cQryK25X += "ORDER BY 4,2 "
  1944.  
  1945. cQuery := ChangeQuery(cQryK25X)
  1946. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  1947.  
  1948. While !(cAliasTmp)->(Eof())
  1949.  
  1950. If Left((cAliasTMP)->REG,4) == 'K270'
  1951. Reclock(cAliK270,.T.)
  1952. (cAliK270)->FILIAL := (cAliasTmp)->D3_FILIAL
  1953. (cAliK270)->REG := "K270"
  1954. (cAliK270)->CHAVE := strzero((cAliK270)->(Recno()),nTamChave)
  1955. (cAliK270)->DT_INI_AP := STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")
  1956. (cAliK270)->DT_FIN_AP := Lastday((cAliK270)->DT_INI_AP)
  1957. (cAliK270)->COD_OP_OS := (cAliasTmp)->D3_OP
  1958. (cAliK270)->COD_ITEM := (cAliasTmp)->D3_COD
  1959. If (cAliasTmp)->D3_QUANT >0
  1960. (cAliK270)->QTD_COR_P := (cAliasTmp)->D3_QUANT
  1961. Else
  1962. (cAliK270)->QTD_COR_N := (cAliasTmp)->D3_QUANT*-1
  1963. EndIf
  1964. (cAliK270)->ORIGEM := "2"
  1965.  
  1966. (cAliK270)->(MsUnLock())
  1967. Else
  1968. If Left((cAliasTMP)->REG,4) == 'K275'
  1969. Reclock(cAliK275,.T.)
  1970. (cAliK275)->FILIAL := (cAliasTmp)->D3_FILIAL
  1971. (cAliK275)->REG := "K275"
  1972. (cAliK275)->CHAVE := strzero((cAliK270)->(Recno()),nTamChave)
  1973. (cAliK275)->COD_ITEM := (cAliasTmp)->D3_COD
  1974. If (cAliasTmp)->D3_QUANT >0
  1975. (cAliK275)->QTD_COR_N := (cAliasTmp)->D3_QUANT
  1976. Else
  1977. (cAliK275)->QTD_COR_P := (cAliasTmp)->D3_QUANT*-1
  1978. EndIf
  1979. (cAliK275)->COD_INS_SUBST := ""
  1980. (cAliK275)->(MsUnLock())
  1981. EndIf
  1982. EndIf
  1983. (cAliasTmp)->(dbSkip())
  1984. nRegsto++
  1985. EndDo
  1986.  
  1987. (cAliasTmp)->(dbCloseArea())
  1988.  
  1989. If lGerLogPro
  1990. // atualiza o periodo de apuracao do bloco K nos registros que foram envolvidos
  1991. cQuery := ""
  1992. cQuery += "UPDATE "+RetSqlName("SD3")+" "
  1993. cQuery += "SET D3_PERBLK = '"+Left(dTos(dDataAte),6)+"' "
  1994. cQuery += "WHERE R_E_C_N_O_ IN ( "
  1995. cQuery += "SELECT SD3.R_E_C_N_O_ "
  1996. cQuery += cQryRegs
  1997. cQuery += +") "
  1998. MATExecQry(cQuery)
  1999. EndIf
  2000.  
  2001. //
  2002. // tratamento para geracao dos registros do K280
  2003. //
  2004. cQuery := ChangeQuery(cQryK280)
  2005. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  2006.  
  2007. While !(cAliasTmp)->(Eof())
  2008. BlkReg280((cAliasTmp)->D3_FILIAL,"K250",LastDay(STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")),dDataAte,(cAliasTmp)->D3_COD,(cAliasTMP)->D3_QUANT,(cAliasTMP)->D3_FORNDOC,(cAliasTMP)->D3_LOJADOC,cAliK280)
  2009.  
  2010. (cAliasTmp)->(dbSkip())
  2011. EndDo
  2012.  
  2013. (cAliasTmp)->(dbCloseArea())
  2014.  
  2015. Return
  2016.  
  2017. /*{Protheus.doc} CorrK301
  2018. Registros do K270 referente a corre玢o do K301.
  2019. Onde busca os movimentos de produ玢o, referente a uma ordem de produ玢o com
  2020. estrutura negativa em terceiros, estornados ou incluidos, apos a geracao
  2021. do SPED FISCAL.
  2022. @author reynaldo
  2023. @since 25/10/2018
  2024. @version 1.0
  2025. @return ${return}, ${return_description}
  2026. @param cAliK270, characters, descricao
  2027. @param cAliK275, characters, descricao
  2028. @param dDataDe, date, descricao
  2029. @param dDataAte, date, descricao
  2030. @param lGerLogPro, logical, descricao
  2031. @param cAliK280, characters, descricao
  2032. @type function
  2033. /*/
  2034. Static Function CorrK301(cAliK270,cAliK275,dDataDe,dDataAte,lGerLogPro,cAliK280)
  2035.  
  2036. Local cAliasTmp := GetNextAlias()
  2037. Local cQryK301 := ""
  2038. Local cQryK280 := ""
  2039. Local cQuery := ""
  2040. Local cQryRegs := ""
  2041. Local nTamChave := TamSX3("D3_OP")[1]
  2042.  
  2043. Default lGerLogPro := .T.
  2044.  
  2045. cQryRegs := ""
  2046. cQryRegs += "FROM "+RetSqlName("SD3")+" SD3 "
  2047. cQryRegs += "JOIN "+RetSqlName("SC2")+" SC2 ON SD3.D3_OP = SC2.C2_NUM" + MatiConcat()+"SC2.C2_ITEM" + MatiConcat()+"SC2.C2_SEQUEN" + MatiConcat()+"SC2.C2_ITEMGRD "
  2048. cQryRegs += "AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' "
  2049. cQryRegs += "AND SC2.C2_ITEM <> 'OS' "
  2050. cQryRegs += "AND SC2.C2_TPPR = 'E' "
  2051. cQryRegs += "AND SC2.D_E_L_E_T_ = ' ' "
  2052. cQryRegs += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  2053. cQryRegs += "AND SD3.D3_CF IN ('PR0','PR1','ER0','ER1','DE1','RE1') "
  2054. cQryRegs += "AND SD3.D3_EMISSAO < '"+DtoS(dDataDe)+"' "
  2055. cQryRegs += "AND SD3.D3_PERBLK IN ('"+space(TamSx3("D3_PERBLK")[1])+"', '"+Left(dTos(dDataAte),6)+"') "
  2056. cQryRegs += "AND SD3.D_E_L_E_T_ = ' ' "
  2057. cQryRegs += "AND EXISTS( "
  2058. cQryRegs += "SELECT 1 FROM "+RetSqlName("SB1")+" SB1 "
  2059. If lCpoBZTP
  2060. cQryRegs += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  2061. EndIf
  2062. cQryRegs += "WHERE SB1.B1_FILIAL = '"+xFilial('SB1')+"' "
  2063. cQryRegs += "AND SB1.B1_COD = SD3.D3_COD "
  2064. cQryRegs += "AND SB1.B1_COD NOT LIKE 'MOD%' "
  2065. cQryRegs += "AND SB1.B1_CCCUSTO = ' ' "
  2066. cQryRegs += "AND SB1.D_E_L_E_T_ = ' ' "
  2067. cQryRegs += "AND "
  2068. If lCpoBZTP
  2069. cQryRegs += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  2070. Else
  2071. cQryRegs += "SB1.B1_TIPO "
  2072. EndIf
  2073. cQryRegs += "IN ("+cTipo03+","+cTipo04+") "
  2074. cQryRegs += ") "
  2075. cQryRegs += "AND EXISTS( "
  2076. cQryRegs += "SELECT 1 FROM "+RetSqlName("SD4")+" SD4 "
  2077. cQryRegs += "WHERE SD4.D4_FILIAL = '"+xFilial("SD4")+"' "
  2078. cQryRegs += "AND SD4.D4_OP = SD3.D3_OP "
  2079. cQryRegs += "AND SD4.D4_PRODUTO = SC2.C2_PRODUTO "
  2080. cQryRegs += "AND SD4.D4_QTDEORI < 0 "
  2081. cQryRegs += "AND SD4.D_E_L_E_T_ = ' ' "
  2082. cQryRegs += ") "
  2083.  
  2084. //
  2085. // Selecao dos movimentos internos (producao) executados apos a apuracao do bloco k
  2086. //
  2087. cQryK280 := ""
  2088. cQryK280 += "SELECT SD3.D3_FILIAL, SD3.D3_OP, SD3.D3_COD, "+ MatiSubStr()+"(SD3.D3_EMISSAO,1,6) MESANOAPUR, D3_FORNDOC, D3_LOJADOC "
  2089. cQryK280 += ",CASE WHEN SD3.D3_CF = 'PR0' THEN SD3.D3_QUANT "
  2090. cQryK280 += "WHEN SD3.D3_CF = 'PR1' THEN SD3.D3_QUANT "
  2091. cQryK280 += "WHEN SD3.D3_CF = 'DE1' THEN SD3.D3_QUANT "
  2092. cQryK280 += "ELSE SD3.D3_QUANT*-1 END D3_QUANT "
  2093. cQryK280 += cQryRegs
  2094.  
  2095. //
  2096. // Agrupamento dos movimentos internos (requisicoes/producao) executados apos a apuracao do bloco k para correcao do K301
  2097. //
  2098. cQryK301 := ""
  2099. cQryK301 += "SELECT D3_FILIAL, D3_OP, D3_COD, MESANOAPUR, SUM(D3_QUANT) D3_QUANT "
  2100. cQryK301 += "FROM ("
  2101. cQryK301 += cQryK280
  2102. cQryK301 += ") SD3MOV "
  2103. cQryK301 += "GROUP BY D3_FILIAL, D3_OP, D3_COD, MESANOAPUR "
  2104. cQryK301 += "ORDER BY 4,2 "
  2105.  
  2106. cQuery := ChangeQuery(cQryK301)
  2107. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  2108.  
  2109. While !(cAliasTmp)->(Eof())
  2110.  
  2111. Reclock(cAliK270,.T.)
  2112. (cAliK270)->FILIAL := (cAliasTmp)->D3_FILIAL
  2113. (cAliK270)->REG := "K270"
  2114. (cAliK270)->CHAVE := strzero((cAliK270)->(Recno()),nTamChave)
  2115. (cAliK270)->DT_INI_AP := STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")
  2116. (cAliK270)->DT_FIN_AP := Lastday((cAliK270)->DT_INI_AP)
  2117. (cAliK270)->COD_OP_OS := (cAliasTmp)->D3_OP
  2118. (cAliK270)->COD_ITEM := (cAliasTmp)->D3_COD
  2119. If (cAliasTmp)->D3_QUANT >0
  2120. (cAliK270)->QTD_COR_P := (cAliasTmp)->D3_QUANT
  2121. Else
  2122. (cAliK270)->QTD_COR_N := (cAliasTmp)->D3_QUANT*-1
  2123. EndIf
  2124. (cAliK270)->ORIGEM := "8"
  2125. (cAliK270)->(MsUnLock())
  2126. (cAliasTmp)->(dbSkip())
  2127. nRegsto++
  2128. EndDo
  2129.  
  2130. (cAliasTmp)->(dbCloseArea())
  2131.  
  2132. If lGerLogPro
  2133. // atualiza o periodo de apuracao do bloco K nos registros que foram envolvidos
  2134. cQuery := ""
  2135. cQuery += "UPDATE "+RetSqlName("SD3")+" "
  2136. cQuery += "SET D3_PERBLK = '"+Left(dTos(dDataAte),6)+"' "
  2137. cQuery += "WHERE R_E_C_N_O_ IN ( "
  2138. cQuery += "SELECT SD3.R_E_C_N_O_ "
  2139. cQuery += cQryRegs
  2140. cQuery += +") "
  2141. MATExecQry(cQuery)
  2142. EndIf
  2143.  
  2144. //
  2145. // tratamento para geracao dos registros do K280
  2146. //
  2147. cQuery := ChangeQuery(cQryK280)
  2148. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  2149.  
  2150. While !(cAliasTmp)->(Eof())
  2151. BlkReg280((cAliasTmp)->D3_FILIAL,"K301",LastDay(STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")),dDataAte,(cAliasTmp)->D3_COD,(cAliasTMP)->D3_QUANT,(cAliasTMP)->D3_FORNDOC,(cAliasTMP)->D3_LOJADOC,cAliK280)
  2152.  
  2153. (cAliasTmp)->(dbSkip())
  2154. EndDo
  2155.  
  2156. (cAliasTmp)->(dbCloseArea())
  2157.  
  2158. Return
  2159.  
  2160. /*/{Protheus.doc} CorrK302
  2161. Registros do K270 referente a corre玢o do K302.
  2162. Onde busca os movimentos de requsicao, referente a uma ordem de produ玢o com
  2163. estrutura negativa em terceiros, estornados ou incluidos, apos a geracao
  2164. do SPED FISCAL.
  2165. @author reynaldo
  2166. @since 25/10/2018
  2167. @version 1.0
  2168. @return ${return}, ${return_description}
  2169. @param cAliK270, characters, descricao
  2170. @param cAliK275, characters, descricao
  2171. @param dDataDe, date, descricao
  2172. @param dDataAte, date, descricao
  2173. @param lGerLogPro, logical, descricao
  2174. @param cAliK280, characters, descricao
  2175. @type function
  2176. /*/
  2177. Static Function CorrK302(cAliK270,cAliK275,dDataDe,dDataAte,lGerLogPro,cAliK280)
  2178.  
  2179. Local cAliasTmp := GetNextAlias()
  2180. Local cQryK302 := ""
  2181. Local cQryK280 := ""
  2182. Local cQuery := ""
  2183. Local cQryRegs := ""
  2184. Local nTamChave := TamSX3("D3_OP")[1]
  2185.  
  2186. Default lGerLogPro := .T.
  2187.  
  2188. cQryRegs := ""
  2189. cQryRegs += "FROM "+RetSqlName("SD3")+" SD3 "
  2190. cQryRegs += "JOIN "+RetSqlName("SC2")+" SC2 ON SD3.D3_OP = SC2.C2_NUM" + MatiConcat()+"SC2.C2_ITEM" + MatiConcat()+"SC2.C2_SEQUEN" + MatiConcat()+"SC2.C2_ITEMGRD "
  2191. cQryRegs += "AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' "
  2192. cQryRegs += "AND SC2.C2_ITEM <> 'OS' "
  2193. cQryRegs += "AND SC2.C2_TPPR = 'E' "
  2194. cQryRegs += "AND SC2.D_E_L_E_T_ = ' ' "
  2195. cQryRegs += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  2196. cQryRegs += "AND (SD3.D3_CF NOT LIKE 'PR%' AND SD3.D3_CF NOT LIKE 'ER%' ) "
  2197. cQryRegs += "AND SD3.D3_EMISSAO < '"+DtoS(dDataDe)+"' "
  2198. cQryRegs += "AND SD3.D3_PERBLK IN ('"+space(TamSx3("D3_PERBLK")[1])+"', '"+Left(dTos(dDataAte),6)+"') "
  2199. cQryRegs += "AND SD3.D_E_L_E_T_ = ' ' "
  2200. cQryRegs += "AND EXISTS( "
  2201. cQryRegs += "SELECT 1 FROM "+RetSqlName("SB1")+" SB1 "
  2202. If lCpoBZTP
  2203. cQryRegs += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  2204. EndIf
  2205. cQryRegs += "WHERE SB1.B1_FILIAL = '"+xFilial('SB1')+"' "
  2206. cQryRegs += "AND SB1.B1_COD = SD3.D3_COD "
  2207. cQryRegs += "AND SB1.B1_COD NOT LIKE 'MOD%' "
  2208. cQryRegs += "AND SB1.B1_CCCUSTO = ' ' "
  2209. cQryRegs += "AND SB1.D_E_L_E_T_ = ' ' "
  2210. cQryRegs += "AND "
  2211. If lCpoBZTP
  2212. cQryRegs += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  2213. Else
  2214. cQryRegs += "SB1.B1_TIPO "
  2215. EndIf
  2216. cQryRegs += "IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  2217. cQryRegs += ") "
  2218. cQryRegs += "AND EXISTS( "
  2219. cQryRegs += "SELECT 1 FROM "+RetSqlName("SD4")+" SD4 "
  2220. cQryRegs += "WHERE SD4.D4_FILIAL = '"+xFilial("SD4")+"' "
  2221. cQryRegs += "AND SD4.D4_OP = SD3.D3_OP "
  2222. cQryRegs += "AND SD4.D4_PRODUTO = SC2.C2_PRODUTO "
  2223. cQryRegs += "AND SD4.D4_QTDEORI < 0 "
  2224. cQryRegs += "AND SD4.D_E_L_E_T_ = ' ' "
  2225. cQryRegs += ") "
  2226. cQryRegs += "AND EXISTS( "
  2227. cQryRegs += "SELECT 1 FROM "+RetSqlName("SD4")+" SD4 "
  2228. cQryRegs += "WHERE SD4.D4_FILIAL = '"+xFilial("SD4")+"' "
  2229. cQryRegs += "AND SD4.D4_OP = SD3.D3_OP "
  2230. cQryRegs += "AND SD4.D4_PRODUTO = SC2.C2_PRODUTO "
  2231. cQryRegs += "AND SD4.D4_COD = SD3.D3_COD "
  2232. cQryRegs += "AND SD4.D4_QTDEORI > 0 "
  2233. cQryRegs += "AND SD4.D_E_L_E_T_ = ' ' "
  2234. cQryRegs += ") "
  2235.  
  2236. cQryK280 := ""
  2237. cQryK280 += "SELECT SD3.D3_FILIAL, SD3.D3_OP, SD3.D3_COD, "+ MatiSubStr()+"(SD3.D3_EMISSAO,1,6) MESANOAPUR, D3_FORNDOC, D3_LOJADOC "
  2238. cQryK280 += ",CASE WHEN SD3.D3_CF = 'PR0' THEN SD3.D3_QUANT "
  2239. cQryK280 += "WHEN SD3.D3_CF = 'PR1' THEN SD3.D3_QUANT "
  2240. cQryK280 += "WHEN SD3.D3_CF = 'DE1' THEN SD3.D3_QUANT "
  2241. cQryK280 += "WHEN SD3.D3_CF = 'DE5' THEN SD3.D3_QUANT "
  2242. cQryK280 += "ELSE SD3.D3_QUANT*-1 END D3_QUANT "
  2243. cQryK280 += cQryRegs
  2244.  
  2245. cQryK302 := ""
  2246. cQryK302 += "SELECT D3_FILIAL, D3_OP, D3_COD, MESANOAPUR, SUM(D3_QUANT) D3_QUANT "
  2247. cQryK302 += "FROM ("
  2248. cQryK302 += cQryK280
  2249. cQryK302 += ") SD3MOV "
  2250. cQryK302 += "GROUP BY D3_FILIAL, D3_OP, D3_COD, MESANOAPUR "
  2251. cQryK302 += "ORDER BY 4,2 "
  2252.  
  2253. cQuery := ChangeQuery(cQryK302)
  2254. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  2255.  
  2256. While !(cAliasTmp)->(Eof())
  2257.  
  2258. Reclock(cAliK270,.T.)
  2259. (cAliK270)->FILIAL := (cAliasTmp)->D3_FILIAL
  2260. (cAliK270)->REG := "K270"
  2261. (cAliK270)->CHAVE := strzero((cAliK270)->(Recno()),nTamChave)
  2262. (cAliK270)->DT_INI_AP := STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")
  2263. (cAliK270)->DT_FIN_AP := Lastday((cAliK270)->DT_INI_AP)
  2264. (cAliK270)->COD_OP_OS := (cAliasTmp)->D3_OP
  2265. (cAliK270)->COD_ITEM := (cAliasTmp)->D3_COD
  2266. If (cAliasTmp)->D3_QUANT >0
  2267. (cAliK270)->QTD_COR_P := (cAliasTmp)->D3_QUANT
  2268. Else
  2269. (cAliK270)->QTD_COR_N := (cAliasTmp)->D3_QUANT*-1
  2270. EndIf
  2271. (cAliK270)->ORIGEM := "9"
  2272. (cAliK270)->(MsUnLock())
  2273. (cAliasTmp)->(dbSkip())
  2274. nRegsto++
  2275. EndDo
  2276.  
  2277. (cAliasTmp)->(dbCloseArea())
  2278.  
  2279. If lGerLogPro
  2280. // atualiza o periodo de apuracao do bloco K nos registros que foram envolvidos
  2281. cQuery := ""
  2282. cQuery += "UPDATE "+RetSqlName("SD3")+" "
  2283. cQuery += "SET D3_PERBLK = '"+Left(dTos(dDataAte),6)+"' "
  2284. cQuery += "WHERE R_E_C_N_O_ IN ( "
  2285. cQuery += "SELECT SD3.R_E_C_N_O_ "
  2286. cQuery += cQryRegs
  2287. cQuery += +") "
  2288. MATExecQry(cQuery)
  2289. EndIf
  2290.  
  2291. //
  2292. // tratamento para geracao dos registros do K280
  2293. //
  2294. cQuery := ChangeQuery(cQryK280)
  2295. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  2296.  
  2297. While !(cAliasTmp)->(Eof())
  2298. BlkReg280((cAliasTmp)->D3_FILIAL,"K302",LastDay(STOD(LEFT((cAliasTMP)->MESANOAPUR,6)+"01")),dDataAte,(cAliasTmp)->D3_COD,(cAliasTMP)->D3_QUANT,(cAliasTMP)->D3_FORNDOC,(cAliasTMP)->D3_LOJADOC,cAliK280)
  2299.  
  2300. (cAliasTmp)->(dbSkip())
  2301. EndDo
  2302.  
  2303. (cAliasTmp)->(dbCloseArea())
  2304.  
  2305. Return
  2306.  
  2307. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  2308. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2309. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  2310. 北矲un嘺o ?REGK280 ?Autor ?Materiais ?Data ?11/08/16 潮?
  2311. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  2312. 北矰escricao ?Funcao responsavel pela gravacao do Registro K280 潮?
  2313. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  2314. 北砅arametros?cAliK280 = Alias do arquivo de trabalho do K280 潮?
  2315. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  2316. 北? ?dDataAte = Data Final da Apuracao 潮?
  2317. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  2318. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2319. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  2320. Function REGK280(cAliK280,dDataDe,dDataAte,lGerLogPro,lRePross)
  2321. Local cQuery := " "
  2322. Local cAliasTmp := " "
  2323.  
  2324. DEFAULT lGerLogPro := .T.
  2325. DEFAULT lRepross := .T.
  2326.  
  2327. If cVersSped >= "013"
  2328. cAliasTmp:= GetNextAlias()
  2329.  
  2330. cquery := "SELECT SD3.D3_FILIAL,SD3.D3_COD,"
  2331. cquery += "MAX(SD3.D3_EMISSAO)EMISSAO, "
  2332. cquery += "SUM(CASE "
  2333. cquery += "WHEN SD3.D3_CF LIKE ( 'RE%' ) THEN ( SD3.D3_QUANT *-1 ) "
  2334. cquery += "ELSE SD3.D3_QUANT "
  2335. cquery += "END ) QUANT "
  2336. cquery +="FROM "+RetSQLName("SD3")+" SD3 "
  2337. cquery +="JOIN "+RetSQLName("SB1")+" SB1 ON "
  2338. cquery +=" SB1.B1_FILIAL ='"+xFilial("SB1")+"' "
  2339. cquery +=" AND SB1.B1_COD = SD3.D3_COD "
  2340. If lCpoBZTP
  2341. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  2342. EndIf
  2343. If lCpoBZTP
  2344. cQuery += " AND " + MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  2345. Else
  2346. cQuery += " AND SB1.B1_TIPO "
  2347. EndIF
  2348. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo06+","+cTipo10+") "
  2349. cQuery += " AND SB1.B1_FANTASM <> 'S' "
  2350. cquery +=" AND SB1.B1_COD NOT LIKE 'MOD%' "
  2351. cquery +=" AND SB1.D_E_L_E_T_ = ' ' "
  2352. cquery +="WHERE SD3.D3_DOC = 'INVENT' "
  2353. cquery += "AND SD3.D3_FILIAL= '"+xFilial("SD3")+"' "
  2354. cquery += "AND SD3.D3_ESTORNO = ' ' "
  2355. cquery += "AND SD3.D_E_L_E_T_ = ' ' "
  2356. cquery += "AND SD3.D3_TM IN( '499','999') "
  2357. cQuery += "AND SD3.D3_EMISSAO BETWEEN '" + DtoS(dDataDe) + "' AND '" + DtoS(dDataAte) + "' "
  2358. cQuery += "AND ( NOT EXISTS(SELECT 1 "
  2359. cQuery += "FROM "+RetSqlName("D3E")+" D3E "
  2360. cQuery += "WHERE D3E.D3E_FILIAL = '"+xFilial("D3E")+"' "
  2361. cQuery += "AND D3E.D3E_COD = SD3.D3_COD "
  2362. cQuery += "AND D3E.D_E_L_E_T_ = ' ') ) "
  2363. cquery +="GROUP BY D3_FILIAL,D3_COD "
  2364. cQuery := ChangeQuery(cQuery)
  2365. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  2366.  
  2367. While !(cAliasTmp)->(Eof())
  2368. If (cAliK280)->(MSSeek((cAliasTmp)->(D3_FILIAL+EMISSAO+D3_COD+"0"+" ")))
  2369. Reclock(cAliK280,.F.)
  2370. If (cAliK280)->D3_QUANT >0
  2371. (cAliK280)->QTD_COR_P += (cAliasTmp)->QUANT
  2372. Else
  2373. (cAliK280)->QTD_COR_N += ((cAliasTmp)->QUANT * -1)
  2374. EndIf
  2375. else
  2376. Reclock(cAliK280,.T.)
  2377. (cAliK280)->FILIAL := (cAliasTmp)->D3_FILIAL
  2378. (cAliK280)->REG := "K280"
  2379. (cAliK280)->DT_EST := LastDate(MonthSub(STOD((cAliasTmp)->EMISSAO),1))
  2380. (cAliK280)->COD_ITEM := (cAliasTmp)->D3_COD
  2381. If (cAliasTmp)->QUANT >0
  2382. (cAliK280)->QTD_COR_P := (cAliasTmp)->QUANT
  2383. Else
  2384. (cAliK280)->QTD_COR_N := ((cAliasTmp)->QUANT * -1)
  2385. EndIf
  2386. (cAliK280)->IND_EST :="0"
  2387. (cAliK280)->COD_PART :=" "
  2388.  
  2389. EndIf
  2390. (cAliK280)->(MsUnLock())
  2391. nRegsto++
  2392. (cAliasTmp)->(DbSkip())
  2393. End
  2394. EndIf
  2395.  
  2396. If Existblock("REGK280")
  2397. Execblock("REGK280",.F.,.F.,{cAliK280,dDataDe,dDataAte})
  2398. EndIf
  2399.  
  2400. Return
  2401.  
  2402. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  2403. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2404. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  2405. 北矲un嘺o ?SumK250 ?Autor ?Materiais ?Data ?23/12/15 潮?
  2406. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  2407. 北矰escricao ?Funcao responsavel pela gravacao do Registro K255 潮?
  2408. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  2409. 北砅arametros?cAliK250 = Alias do arquivo de trabalho do K250 潮?
  2410. 北? ?cAliK255 = Alias do arquivo de trabalho do K255 潮?
  2411. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  2412. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2413. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  2414. Static Function SumK250(cAliK250,cAliK255)
  2415.  
  2416. Local aK250 := {}
  2417. Local aDocs := {}
  2418. Local cChave := "000000"
  2419. Local cSeek := ""
  2420. Local nFound := 0
  2421. Local nX
  2422.  
  2423. DbSelectArea(cAliK250)
  2424. DbSetOrder(2) // FILIAL+DT_PROD+COD_ITEM
  2425. dbGoTop()
  2426.  
  2427. While !(cAliK250)->(Eof())
  2428. cSeek := (cAliK250)->(FILIAL+DtoS(DT_PROD)+COD_ITEM)
  2429. While (cAliK250)->(FILIAL+DtoS(DT_PROD)+COD_ITEM) == cSeek
  2430.  
  2431. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2432. //?Aglutina os registros ?
  2433. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2434. nFound := 0
  2435. nFound := AScan(aK250,{|x| x[1] == (cAliK250)->FILIAL .And. x[3] ==(cAliK250)->DT_PROD .And. x[4] == (cAliK250)->COD_ITEM})
  2436. If nFound == 0
  2437. cChave := Soma1(cChave)
  2438. Aadd(aK250,{(cAliK250)->FILIAL,cChave,(cAliK250)->DT_PROD,(cAliK250)->COD_ITEM,(cAliK250)->QTD})
  2439. Else
  2440. aK250[nFound,5] += (cAliK250)->QTD
  2441. EndIf
  2442.  
  2443. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2444. //?Guarda os documentos ?
  2445. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2446. nFound := 0
  2447. nFound := AScan(aDocs,{|x| x[1] == (cAliK250)->CHAVE})
  2448. If nFound == 0
  2449. Aadd(aDocs,{(cAliK250)->CHAVE,cChave,(cAliK250)->COD_ITEM})
  2450. EndIf
  2451.  
  2452. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2453. //?Apaga o Registro ?
  2454. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2455. Reclock(cAliK250,.F.)
  2456. dbDelete()
  2457. nRegsto--
  2458. (cAliK250)->(MsUnlock())
  2459. (cAliK250)->(dbSkip())
  2460. EndDo
  2461. EndDo
  2462.  
  2463. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2464. //?Grava K250 aglutinado ?
  2465. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2466. For nX := 1 to Len(aK250)
  2467. Reclock(cAliK250,.T.)
  2468. (cAliK250)->FILIAL := aK250[nX,1]
  2469. (cAliK250)->REG := "K250"
  2470. (cAliK250)->CHAVE := aK250[nX,2]
  2471. (cAliK250)->DT_PROD := aK250[nX,3]
  2472. (cAliK250)->COD_ITEM := aK250[nX,4]
  2473. (cAliK250)->QTD := aK250[nX,5]
  2474. (cAliK250)->(MsUnLock())
  2475. nRegsto++
  2476. Next nX
  2477.  
  2478. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2479. //?Aglutina K255 ?
  2480. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2481. SumK255(aDocs,cAliK255)
  2482.  
  2483. (cAliK250)->(DbSetOrder(1))
  2484. (cAliK255)->(DbSetOrder(1))
  2485.  
  2486. Return
  2487.  
  2488. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  2489. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2490. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  2491. 北矲un嘺o ?SumK255 ?Autor ?Materiais ?Data ?23/12/15 潮?
  2492. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  2493. 北矰escricao ?Funcao responsavel pela gravacao do Registro K255 潮?
  2494. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  2495. 北砅arametros?aDocs = Array com conversao da chave gerada 潮?
  2496. 北? ?cAliK255 = Alias do arquivo de trabalho do K255 潮?
  2497. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  2498. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2499. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  2500. Static Function SumK255(aDocs,cAliK255)
  2501.  
  2502. Local aK255 := {}
  2503. Local cSeek := ""
  2504. Local cChave := ""
  2505. Local nFound := 0
  2506. Local nX
  2507. Local cPrdK250PA:= ""
  2508.  
  2509. DbSelectArea(cAliK255)
  2510. DbSetOrder(2) // FILIAL+DT_CONS+COD_ITEM
  2511. dbGoTop()
  2512.  
  2513. While !(cAliK255)->(Eof())
  2514. cSeek := (cAliK255)->(FILIAL+DtoS(DT_CONS)+COD_ITEM)
  2515. While (cAliK255)->(FILIAL+DtoS(DT_CONS)+COD_ITEM) == cSeek
  2516.  
  2517. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2518. //?Converte a chave ?
  2519. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2520. nFound := 0
  2521. nFound := AScan(aDocs, {|x| x[1] == (cAliK255)->CHAVE})
  2522. cChave := aDocs[nFound,2]
  2523. cPrdK250PA:= aDocs[nFound,3]
  2524.  
  2525. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2526. //?Aglutina os registros ?
  2527. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2528. nFound := 0
  2529. nFound := AScan(aK255,{|x| x[1] == (cAliK255)->FILIAL .And. x[3] ==(cAliK255)->DT_CONS .And. x[4] == COD_ITEM .And. x[6] == cPrdK250PA})
  2530. If nFound == 0
  2531. Aadd(aK255,{(cAliK255)->FILIAL,cChave,(cAliK255)->DT_CONS,(cAliK255)->COD_ITEM,(cAliK255)->QTD,cPrdK250PA})
  2532. Else
  2533. aK255[nFound,5] += (cAliK255)->QTD
  2534. EndIf
  2535.  
  2536. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2537. //?Apaga o Registro ?
  2538. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2539. Reclock(cAliK255,.F.)
  2540. dbDelete()
  2541. nRegsto--
  2542. (cAliK255)->(MsUnlock())
  2543. (cAliK255)->(dbSkip())
  2544. EndDo
  2545. EndDo
  2546.  
  2547. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2548. //?Grava K250 aglutinado ?
  2549. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2550. For nX := 1 to Len(aK255)
  2551. Reclock(cAliK255,.T.)
  2552. (cAliK255)->FILIAL := aK255[nX,1]
  2553. (cAliK255)->REG := "K255"
  2554. (cAliK255)->CHAVE := aK255[nX,2]
  2555. (cAliK255)->DT_CONS := aK255[nX,3]
  2556. (cAliK255)->COD_ITEM := aK255[nX,4]
  2557. (cAliK255)->QTD := aK255[nX,5]
  2558. (cAliK255)->(MsUnLock())
  2559. nRegsto++
  2560. Next nX
  2561.  
  2562. Return
  2563.  
  2564. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  2565. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2566. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  2567. 北矲un嘺o ?REGK990 ?Autor ?Materiais ?Data ?28/07/14 潮?
  2568. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  2569. 北矰escricao ?Funcao responsavel pela gravacao do Registro K990 潮?
  2570. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  2571. 北砅arametros?cAliasTRB = Alias do arquivo de trabalho do Bloco 潮?
  2572. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  2573. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2574. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  2575. Static Function REGK990(cAliK990,dDataAte,lRePross)
  2576.  
  2577. DEFAULT lRepross := .T.
  2578.  
  2579. Reclock(cAliK990,.T.)
  2580. (cAliK990)->FILIAL := cFilAnt
  2581. (cAliK990)->REG := "K990"
  2582. (cAliK990)->QTD_LIN_K := nRegsto+1
  2583. (cAliK990)->(MsUnLock())
  2584.  
  2585. //----------------------//
  2586. // Grava Tabela de Hist //
  2587. //----------------------//
  2588. BlkGrvTab(cAliK990,"D3U",aTmpRegK[K990][4],dDataAte,lRepross)
  2589.  
  2590. Return
  2591.  
  2592. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  2593. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2594. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  2595. 北矲un嘺o ?REG0210 ?Autor ?Materiais ?Data ?28/07/14 潮?
  2596. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  2597. 北矰escricao ?Funcao responsavel pela gravacao do Registro 0210 潮?
  2598. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  2599. 北砅arametros?cAliasTRB = Alias do arquivo de trabalho do Bloco 潮?
  2600. 北? ?cProduto = Codigo do Produto Produzido 潮?
  2601. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  2602. 北? ?dDataAte = Data Final da Apuracao 潮?
  2603. 北? ?cOP = Numero da OP 潮?
  2604. 北? ?lNegEst = Indica se trata estrutura negativa 潮?
  2605. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  2606. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2607. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  2608. Function REG0210(cAli0210,cProduto,dDataDe,dDataAte,cOP,lNegEst,lRepross)
  2609.  
  2610. Local cQuery := ""
  2611. Local cUlRevisao:= ""
  2612. Local nQuantBase:= 0
  2613. Local cAliasTmp := GetNextAlias()
  2614. Local aAreaSB1 := SB1->(GetArea())
  2615. Local aComp := {}
  2616. Local aNegat := {}
  2617. Local aFantasma := {}
  2618. Local nCtrlRec := 0
  2619. Local nX
  2620. Local cSG1Local := ""
  2621.  
  2622. Default lNegEst := .F.
  2623. Default lRepross := .F.
  2624.  
  2625. dbSelectArea("SB1")
  2626. dbSetOrder(1)
  2627. If (SB1->(MsSeek(xFilial("SB1")+cProduto)))
  2628. cUlRevisao := IIF(lPCPREVATU , PCPREVATU(SB1->B1_COD), SB1->B1_REVATU)
  2629. nQuantBase := If(SB1->B1_QB == 0, 1, SB1->B1_QB)
  2630. EndIf
  2631.  
  2632. If !Empty(cOP)
  2633. dbSelectArea("SC2")
  2634. dbSetOrder(1)
  2635. If (SC2->(MsSeek(xFilial("SC2")+cOP)))
  2636. cUlRevisao := IIF(Empty(SC2->C2_REVISAO),cUlRevisao, SC2->C2_REVISAO)
  2637. EndIf
  2638. EndIf
  2639.  
  2640. cQuery := "SELECT SG1.G1_FILIAL, SG1.G1_COD, SG1.G1_COMP, SG1.G1_QUANT, SG1.G1_PERDA, "
  2641. cQuery += "SB1C.B1_FANTASM FROM "+RetSqlName("SG1")+" SG1 JOIN "+RetSqlName("SB1")+" SB1 ON "
  2642. cQuery += "SB1.B1_FILIAL = '"+xFilial('SB1')+"' AND SB1.B1_COD = SG1.G1_COD AND "
  2643. cQuery += "SB1.D_E_L_E_T_ = ' ' "
  2644. cQuery += "JOIN "+RetSqlName("SB1")+" SB1C ON SB1C.B1_FILIAL = '"+xFilial('SB1')+"' AND "
  2645. cQuery += "SB1C.B1_COD = SG1.G1_COMP AND SB1C.D_E_L_E_T_ = ' ' "
  2646. If lCpoBZTP
  2647. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1C.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  2648. EndIf
  2649. cQuery += "WHERE SG1.G1_FILIAL = '"+xFilial('SG1')+"' AND "
  2650. cQuery += "SG1.G1_COD = '"+cProduto+"' AND SG1.G1_REVINI <= '"+cUlRevisao+"' AND "
  2651. cQuery += "SG1.G1_REVFIM >= '"+cUlRevisao+"' AND SG1.D_E_L_E_T_ = ' ' AND "
  2652. cQuery += "SB1.B1_CCCUSTO = ' ' AND SB1.B1_COD NOT LIKE 'MOD%' AND "
  2653. cQuery += "SB1C.B1_CCCUSTO = ' ' AND SB1C.B1_COD NOT LIKE 'MOD%' AND "
  2654. cQuery += "SG1.G1_INI <= '"+DtoS(dDataDe)+"' AND SG1.G1_FIM >= '"+DtoS(dDataAte)+"' AND "
  2655. If lCpoBZTP
  2656. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1C.B1_TIPO) "
  2657. Else
  2658. cQuery += "SB1C.B1_TIPO "
  2659. EndIf
  2660. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","
  2661. If !lNegEst
  2662. cQuery += cTipo05+","
  2663. EndIf
  2664. cQuery += cTipo10+") "
  2665. If !lNegEst
  2666. cQuery += "AND G1_QUANT > 0 "
  2667. EndIf
  2668. cQuery += "ORDER BY 1,2,3"
  2669.  
  2670. cQuery := ChangeQuery(cQuery)
  2671. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  2672.  
  2673. If lNegEst
  2674. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2675. //?Tratamento Estrutura Negativa ?
  2676. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2677. While !(cAliasTmp)->(Eof())
  2678. If (cAliasTmp)->B1_FANTASM <> "S"
  2679. If (cAliasTmp)->G1_QUANT < 0
  2680. Aadd(aNegat,{(cAliasTmp)->G1_FILIAL,(cAliasTmp)->G1_COMP,(cAliasTmp)->G1_QUANT / nQuantBase,(cAliasTmp)->G1_PERDA,cProduto})
  2681. Else
  2682. Aadd(aComp ,{(cAliasTmp)->G1_FILIAL,(cAliasTmp)->G1_COMP,(cAliasTmp)->G1_QUANT / nQuantBase,(cAliasTmp)->G1_PERDA,cProduto})
  2683. EndIf
  2684. EndIf
  2685. (cAliasTmp)->(dbSkip())
  2686. EndDo
  2687. Else
  2688. cSG1Local := xFilial("SG1")
  2689. While !(cAliasTmp)->(Eof())
  2690. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2691. //?Tratamento Produto Fantasma ?
  2692. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2693. If (cAliasTmp)->B1_FANTASM == "S"
  2694. aFantasma := REG0210Fan((cAliasTmp)->G1_COMP,dDataDe,dDataAte,@nCtrlRec)
  2695.  
  2696. For nX := 1 to Len(aFantasma)
  2697. If !((cAli0210)->(MsSeek(cSG1Local+(cAliasTmp)->G1_COD+aFantasma[nX,2])))
  2698. Reclock(cAli0210,.T.)
  2699. (cAli0210)->FILIAL := aFantasma[nX,1]
  2700. (cAli0210)->REG := "0210"
  2701. (cAli0210)->COD_I_COMP := aFantasma[nX,2]
  2702. (cAli0210)->QTD_COMP := aFantasma[nX,3] * (cAliasTmp)->G1_QUANT
  2703. (cAli0210)->PERDA := aFantasma[nX,4]
  2704. (cAli0210)->COD_ITEM := (cAliasTmp)->G1_COD
  2705. (cAli0210)->(MsUnLock())
  2706. EndIf
  2707. Next nX
  2708. nCtrlRec := 0
  2709. Else
  2710. If !((cAli0210)->(MsSeek(cSG1Local+(cAliasTmp)->G1_COD+(cAliasTmp)->G1_COMP)))
  2711. Reclock(cAli0210,.T.)
  2712. (cAli0210)->FILIAL := (cAliasTmp)->G1_FILIAL
  2713. (cAli0210)->REG := "0210"
  2714. (cAli0210)->COD_I_COMP := (cAliasTmp)->G1_COMP
  2715. (cAli0210)->QTD_COMP := (((cAliasTmp)->G1_QUANT / nQuantBase)/(100 -(cAliasTmp)->G1_PERDA)) * 100
  2716. (cAli0210)->PERDA := (cAliasTmp)->G1_PERDA
  2717. (cAli0210)->COD_ITEM := (cAliasTmp)->G1_COD
  2718. (cAli0210)->(MsUnLock())
  2719. EndIf
  2720. EndIf
  2721. (cAliasTmp)->(dbSkip())
  2722. EndDo
  2723. EndIf
  2724.  
  2725. //----------------------//
  2726. // Grava Tabela de Hist //
  2727. //----------------------//
  2728. BlkGrvTab(cAli0210,"D3F",aTmpRegK[0210][4],dDataAte,lRepross)
  2729.  
  2730. (cAliasTmp)->(dbCloseArea())
  2731. RestArea(aAreaSB1)
  2732.  
  2733. Return {aNegat,aComp}
  2734.  
  2735. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  2736. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2737. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  2738. 北矲un嘺o ?REG0210Fan ?Autor ?Materiais ?Data ?11/02/16 潮?
  2739. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  2740. 北矰escricao ?Retorna os componentes de um produto fantasma 潮?
  2741. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  2742. 北砅arametros?cProduto = Codigo do Produto Produzido 潮?
  2743. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  2744. 北? ?dDataAte = Data Final da Apuracao 潮?
  2745. 北? ?nCtrlRec = Controle de recursividade 潮?
  2746. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  2747. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2748. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  2749. Static Function REG0210Fan(cProduto,dDataDe,dDataAte,nCtrlRec)
  2750.  
  2751. Local aAreaSB1 := SB1->(GetArea())
  2752. Local aArea := GetArea()
  2753. Local cAliasFtm := GetNextAlias()
  2754. Local cUlRevisao:= ""
  2755. Local aRet := {}
  2756. Local aFantasma := {}
  2757. Local nQuantBase:= 0
  2758. Local nX
  2759.  
  2760. // Controle de Recursividade
  2761. nCtrlRec++
  2762. If nCtrlRec > 99
  2763. Return aRet
  2764. EndIf
  2765.  
  2766. dbSelectArea("SB1")
  2767. dbSetOrder(1)
  2768. If (SB1->(MsSeek(xFilial("SB1")+cProduto)))
  2769. cUlRevisao := IIF(lPCPREVATU , PCPREVATU(SB1->B1_COD), SB1->B1_REVATU)
  2770. nQuantBase := If(SB1->B1_QB == 0, 1, SB1->B1_QB)
  2771. EndIf
  2772.  
  2773. cQuery := "SELECT SG1.G1_FILIAL, SG1.G1_COD, SG1.G1_COMP, SG1.G1_QUANT, SG1.G1_PERDA, "
  2774. cQuery += "SB1C.B1_FANTASM FROM "+RetSqlName("SG1")+" SG1 JOIN "+RetSqlName("SB1")+" SB1 ON "
  2775. cQuery += "SB1.B1_FILIAL = '"+xFilial('SB1')+"' AND SB1.B1_COD = SG1.G1_COD AND "
  2776. cQuery += "SB1.D_E_L_E_T_ = ' ' "
  2777. cQuery += "JOIN "+RetSqlName("SB1")+" SB1C ON SB1C.B1_FILIAL = '"+xFilial('SB1')+"' AND "
  2778. cQuery += "SB1C.B1_COD = SG1.G1_COMP AND SB1C.D_E_L_E_T_ = ' ' "
  2779. If lCpoBZTP
  2780. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1C.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  2781. EndIf
  2782. cQuery += "WHERE SG1.G1_FILIAL = '"+xFilial('SG1')+"' AND "
  2783. cQuery += "SG1.G1_COD = '"+cProduto+"' AND SG1.G1_REVINI <= '"+cUlRevisao+"' AND "
  2784. cQuery += "SG1.G1_REVFIM >= '"+cUlRevisao+"' AND SG1.D_E_L_E_T_ = ' ' AND "
  2785. cQuery += "SB1.B1_CCCUSTO = ' ' AND SB1.B1_COD NOT LIKE 'MOD%' AND "
  2786. cQuery += "SB1C.B1_CCCUSTO = ' ' AND SB1C.B1_COD NOT LIKE 'MOD%' AND "
  2787. cQuery += "SG1.G1_INI <= '"+DtoS(dDataDe)+"' AND SG1.G1_FIM >= '"+DtoS(dDataAte)+"' AND "
  2788. If lCpoBZTP
  2789. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1C.B1_TIPO) "
  2790. Else
  2791. cQuery += "SB1C.B1_TIPO "
  2792. EndIf
  2793. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","
  2794. cQuery += cTipo05+","+cTipo06+","+cTipo10+") "
  2795. cQuery += "ORDER BY 1,2,3"
  2796.  
  2797. cQuery := ChangeQuery(cQuery)
  2798. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasFtm,.T.,.T.)
  2799.  
  2800. While !(cAliasFtm)->(Eof())
  2801. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  2802. //?Recursividade no Produto Fantasma ?
  2803. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  2804. If (cAliasFtm)->B1_FANTASM == "S"
  2805. aFantasma := REG0210Fan((cAliasFtm)->G1_COMP,dDataDe,dDataAte,@nCtrlRec)
  2806. For nX := 1 to Len(aFantasma)
  2807. Aadd(aRet ,{aFantasma[nX,1],aFantasma[nX,2],aFantasma[nX,3],aFantasma[nX,4],aFantasma[nX,5]})
  2808. Next nX
  2809. Else
  2810. Aadd(aRet ,{(cAliasFtm)->G1_FILIAL,(cAliasFtm)->G1_COMP,(cAliasFtm)->G1_QUANT / nQuantBase,(cAliasFtm)->G1_PERDA,cProduto})
  2811. EndIf
  2812. (cAliasFtm)->(dbSkip())
  2813. EndDo
  2814.  
  2815. (cAliasFtm)->(dbCloseArea())
  2816. RestArea(aAreaSB1)
  2817. RestArea(aArea)
  2818.  
  2819. Return aRet
  2820.  
  2821. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  2822. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2823. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  2824. 北矲un嘺o ?GetSubst ?Autor ?Materiais ?Data ?30/09/14 潮?
  2825. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  2826. 北矰escricao ?Retorna o produto substituto (alternativo) utilizado no K235潮?
  2827. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  2828. 北砅arametros?cBloco = Codigo do Bloco 潮?
  2829. 北? ?cProduto = Codigo do Produto Consumido 潮?
  2830. 北? ?cOP = Numero da OP 潮?
  2831. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  2832. 北? ?dDataAte = Data Final da Apuracao 潮?
  2833. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  2834. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2835. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  2836. Function GetSubst(cProduto,cOP,dDataDe,dDataAte)
  2837.  
  2838. Local cCodOri := Space(Len(SD3->D3_COD))
  2839. Local cAliasTmp := GetNextAlias()
  2840. Local aArea := GetArea()
  2841. Local cProdPai := ""
  2842. Local cUlRev := ""
  2843. Local cQuery := ""
  2844.  
  2845. dbSelectArea("SC2")
  2846. dbSetOrder(1)
  2847. If (SC2->(MsSeek(xFilial("SC2")+cOP)))
  2848. cProdPai := SC2->C2_PRODUTO
  2849. cUlRev := SC2->C2_REVISAO
  2850.  
  2851. cQuery := "SELECT SG1.G1_FILIAL, SG1.G1_COD, SG1.G1_COMP,SGI.GI_PRODALT "
  2852. cQuery += "FROM "+RetSqlName("SG1")+" SG1 JOIN "+RetSqlName("SGI")+" SGI ON "
  2853. cQuery += "SGI.GI_FILIAL = '"+xFilial('SGI')+"' AND SGI.D_E_L_E_T_ = ' ' AND "
  2854. cQuery += "SGI.GI_PRODORI = SG1.G1_COMP "
  2855. cQuery += "JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial('SB1')+"' AND "
  2856. cQuery += "SB1.B1_COD = SG1.G1_COD AND SB1.D_E_L_E_T_ = ' ' "
  2857. cQuery += "JOIN "+RetSqlName("SB1")+" SB1C ON SB1C.B1_FILIAL = '"+xFilial('SB1')+"' AND "
  2858. cQuery += "SB1C.B1_COD = SGI.GI_PRODORI AND SB1C.D_E_L_E_T_ = ' ' "
  2859. If lCpoBZTP
  2860. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1C.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  2861. EndIf
  2862. cQuery += "WHERE SG1.G1_FILIAL = '"+xFilial('SG1')+"' AND "
  2863. cQuery += "SG1.G1_COD = '"+cProdPai+"' AND SGI.GI_PRODALT = '"+cProduto+"' AND "
  2864. cQuery += "SG1.G1_REVINI <= '"+cUlRev+"' AND SG1.G1_REVFIM >= '"+cUlRev+"' AND "
  2865. cQuery += "SG1.G1_INI <= '"+DtoS(dDataDe)+"' AND SG1.G1_FIM >= '"+DtoS(dDataAte)+"' AND "
  2866. cQuery += "SB1.B1_CCCUSTO = ' ' AND SB1.B1_COD NOT LIKE 'MOD%' AND "
  2867. cQuery += "SB1C.B1_CCCUSTO = ' ' AND SB1C.B1_COD NOT LIKE 'MOD%' AND "
  2868. If lCpoBZTP
  2869. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1C.B1_TIPO) "
  2870. Else
  2871. cQuery += "SB1C.B1_TIPO "
  2872. EndIf
  2873. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","
  2874. cQuery += cTipo04+","+cTipo05+","+cTipo06+","+cTipo10+") AND SG1.D_E_L_E_T_ = ' '"
  2875.  
  2876. cQuery := ChangeQuery(cQuery)
  2877. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  2878.  
  2879. If !(cAliasTmp)->(Eof())
  2880. cCodOri := (cAliasTmp)->G1_COMP
  2881. EndIf
  2882.  
  2883. (cAliasTmp)->(dbCloseArea())
  2884. EndIf
  2885.  
  2886. RestArea(aArea)
  2887.  
  2888. Return cCodOri
  2889.  
  2890. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  2891. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2892. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  2893. 北矲un嘺o ?REG0200 ?Autor ?Materiais ?Data ?29/12/16 潮?
  2894. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  2895. 北矰escricao ?Grava os produtos utilizados no processamento do Bloco K 潮?
  2896. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  2897. 北砅arametros?aAlias = Alias dos arquivos temporarios do Bloco K 潮?
  2898. 北? ?aRegistr = Lista dos arquivos temporarios do Blooc K 潮?
  2899. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  2900. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  2901. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  2902. Static Function REG0200(aAlias,aRegistr)
  2903.  
  2904. Local aArea := GetArea()
  2905. Local nX
  2906.  
  2907. dbSelectArea(aAlias[0200])
  2908. dbSetOrder(1)
  2909.  
  2910. For nX := 1 To Len(aRegistr)
  2911. If !(aRegistr[nX] $ "K001|K100|K990|0200|K290|")
  2912. (aAlias[nX])->(dbGoTop())
  2913.  
  2914. While !(aAlias[nX])->(Eof())
  2915.  
  2916. Do Case
  2917. Case aRegistr[nX] == "K210"
  2918. Grav0200((aAlias[nX])->COD_ITEM_O ,aAlias[0200] )
  2919. Case aRegistr[nX] == "K215"
  2920. Grav0200((aAlias[nX])->COD_ITEM_D ,aAlias[0200] )
  2921. Case aRegistr[nX] == "K220"
  2922. Grav0200((aAlias[nX])->COD_ITEM_O ,aAlias[0200] )
  2923. Grav0200((aAlias[nX])->COD_ITEM_D ,aAlias[0200] )
  2924. Case aRegistr[nX] == "0210"
  2925. Grav0200((aAlias[nX])->COD_ITEM ,aAlias[0200] )
  2926. Grav0200((aAlias[nX])->COD_I_COMP ,aAlias[0200] )
  2927. Case aRegistr[nX] == "K300"
  2928. //
  2929. Otherwise
  2930. Grav0200((aAlias[nX])->COD_ITEM ,aAlias[0200] )
  2931. EndCase
  2932.  
  2933. (aAlias[nX])->(dbSkip())
  2934. EndDo
  2935. EndIf
  2936. Next nX
  2937.  
  2938. RestArea(aArea)
  2939.  
  2940. Return
  2941.  
  2942. /*/{Protheus.doc} Grav0200
  2943. Faz a gravacao do produto para o registro 0200
  2944. @author reynaldo
  2945. @since 05/10/2018
  2946. @version 1.0
  2947. @return ${return}, ${return_description}
  2948. @param cCodItem, characters, descricao
  2949. @param cAli0200, characters, descricao
  2950. @type function
  2951. /*/
  2952. Static Function Grav0200(cCodItem ,cAli0200 )
  2953. If !(cAli0200)->(MsSeek(cCodItem))
  2954. Reclock(cAli0200,.T.)
  2955. (cAli0200)->COD_ITEM := cCodItem
  2956. (cAli0200)->(MsUnlock())
  2957. EndIf
  2958. Return
  2959.  
  2960. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  2961. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  2962. 北谀哪哪哪哪穆哪哪哪哪哪哪履哪哪穆哪哪哪哪哪哪哪哪哪哪哪履哪哪穆哪哪哪哪哪勘?
  2963. 北矲un噮o ?GetIniProd 矨utor ?TOTVS S/A ?Data ?6/10/2015潮?
  2964. 北媚哪哪哪哪呐哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪幢?
  2965. 北矰escri噮o ?Retorna a data do inicio real do processo produtivo. 潮?
  2966. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪幢?
  2967. 北砅arametros?cOP = Numero da OP 潮?
  2968. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪俦?
  2969. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  2970. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  2971. Function GetIniProd(cOP)
  2972.  
  2973. Local cQuery := ""
  2974. Local dRet := StoD("")
  2975. Local aArea := GetArea()
  2976. Local cAliasTmp := GetNextAlias()
  2977.  
  2978. cQuery := "SELECT MIN(D3_EMISSAO) DTINICIO "
  2979. cQuery += "FROM " + RetSqlName("SD3") + " SD3 JOIN " + RetSqlName("SB1") + " SB1 "
  2980. cQuery += "ON SB1.B1_FILIAL = '"+xFilial("SB1")+"' AND SB1.B1_COD = SD3.D3_COD "
  2981. cQuery += "AND SB1.D_E_L_E_T_ = ' ' "
  2982. cQuery += "WHERE SD3.D3_FILIAL = '" + xFilial("SD3") + "' "
  2983. cQuery += "AND SD3.D3_OP = '" + cOP + "' "
  2984. cQuery += "AND SD3.D3_ESTORNO = ' ' "
  2985. cQuery += "AND SD3.D_E_L_E_T_ = ' ' "
  2986. cQuery += "GROUP BY D3_OP"
  2987.  
  2988. cQuery := ChangeQuery(cQuery)
  2989. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  2990.  
  2991. If !(cAliasTmp)->(Eof())
  2992. dRet := StoD((cAliasTmp)->DTINICIO)
  2993. EndIf
  2994.  
  2995. (cAliasTmp)->(dbCloseArea())
  2996. RestArea(aArea)
  2997.  
  2998. Return dRet
  2999.  
  3000. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  3001. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3002. 北谀哪哪哪哪穆哪哪哪哪哪哪履哪哪穆哪哪哪哪哪哪哪哪哪哪哪履哪哪穆哪哪哪哪哪勘?
  3003. 北矲un噮o ?ProcNegEst 矨utor ?TOTVS S/A ?Data ?3/10/2015潮?
  3004. 北媚哪哪哪哪呐哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪幢?
  3005. 北矰escri噮o ?Realiza a gravacao dos registros 0210, K230 e K235 quando 潮?
  3006. 北? ?cliente trabalha com conceito de estrutura negativa 潮?
  3007. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪幢?
  3008. 北砅arametros?cAli0210 = Alias do arquivo de trabalho O210 潮?
  3009. 北? ?cAliK230 = Alias do arquivo de trabalho K230 潮?
  3010. 北? ?cAliK235 = Alias do arquivo de trabalho K235 潮?
  3011. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  3012. 北? ?dDataAte = Data Final da Apuracao 潮?
  3013. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪俦?
  3014. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3015. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  3016. Static Function ProcNegEst(cAli0210,cAliK230,cAliK235,dDataDe,dDataAte,lRePross)
  3017.  
  3018. Local aEstrut := {}
  3019. Local nX
  3020. Local cFilAux := ""
  3021. Local cOP := ""
  3022. Local nQuant := 0
  3023. Local nQtdAux := 0
  3024. Local nRecno := 0
  3025. Local dDtIni, dDtFim
  3026.  
  3027. (cAliK230)->(dbGoTop())
  3028. While !(cAliK230)->(Eof())
  3029. aEstrut := REG0210(cAli0210,(cAliK230)->COD_ITEM,dDataDe,dDataAte,(cAliK230)->COD_DOC_OP,.T.,lRePross)
  3030.  
  3031. If Len(aEstrut[1]) > 0
  3032. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3033. //?Grava K230 do Co-Produto ?
  3034. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3035. cFilAux := (cAliK230)->FILIAL
  3036. cOP := (cAliK230)->COD_DOC_OP
  3037. dDtIni := (cAliK230)->DT_INI_OP
  3038. dDtFim := (cAliK230)->DT_FIN_OP
  3039. nQuant := (cAliK230)->QTD_ENC
  3040.  
  3041. nRecno := (cAliK230)->(Recno())
  3042.  
  3043. For nX := 1 to Len(aEstrut[1])
  3044.  
  3045. nQtdAux := GetCoProd(cOP,aEstrut[1][nX][2],dDataDe,dDataAte)
  3046. If nQtdAux > 0 .And. !((cAliK230)->(MsSeek(cFilAux+cOP+aEstrut[1][nX][2])))
  3047. Reclock(cAliK230,.T.)
  3048. (cAliK230)->FILIAL := cFilAux
  3049. (cAliK230)->REG := "K230"
  3050. (cAliK230)->DT_INI_OP := dDtIni
  3051. (cAliK230)->DT_FIN_OP := dDtFim
  3052. (cAliK230)->COD_DOC_OP := cOP
  3053. (cAliK230)->COD_ITEM := aEstrut[1][nX][2]
  3054. (cAliK230)->QTD_ENC := nQtdAux
  3055. (cAliK230)->(MsUnLock())
  3056. nRegsto++
  3057. EndIf
  3058.  
  3059. Next nX
  3060.  
  3061. (cAliK230)->(dbGoto(nRecno))
  3062.  
  3063. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3064. //?Grava 0210 do Co-Produto ?
  3065. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3066. NegEst0210(aEstrut,cAli0210)
  3067.  
  3068. EndIf
  3069.  
  3070. (cAliK230)->(dbSkip())
  3071. EndDo
  3072.  
  3073. Return
  3074.  
  3075. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  3076. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3077. 北谀哪哪哪哪穆哪哪哪哪哪哪履哪哪穆哪哪哪哪哪哪哪哪哪哪哪履哪哪穆哪哪哪哪哪勘?
  3078. 北矲un噮o ?GetCoProd 矨utor ?TOTVS S/A ?Data ?3/10/2015潮?
  3079. 北媚哪哪哪哪呐哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪幢?
  3080. 北矰escri噮o ?Retorna a quantidade da Co-producao realizada para a OP 潮?
  3081. 北? ?dentro do periodo 潮?
  3082. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪幢?
  3083. 北砅arametros?cOP = Numero da OP 潮?
  3084. 北? ?cProduto = Codigo do Produto Produzido 潮?
  3085. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  3086. 北? ?dDataAte = Data Final da Apuracao 潮?
  3087. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪俦?
  3088. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3089. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  3090. Static Function GetCoProd(cOP,cProduto,dDataDe,dDataAte)
  3091.  
  3092. Local nQuant := 0
  3093. Local cQuery := ""
  3094. Local aArea := GetArea()
  3095. Local cAliasTmp := GetNextAlias()
  3096.  
  3097. cQuery := "SELECT SUM(D3_QUANT) QUANT, D3_COD, D3_OP "
  3098. cQuery += "FROM " + RetSqlName("SD3") + " SD3 JOIN " + RetSqlName("SB1") + " SB1 ON SB1.B1_FILIAL = '"+xFilial("SB1")+"' "
  3099. cQuery += "AND SB1.B1_COD = SD3.D3_COD AND SB1.D_E_L_E_T_ = ' ' "
  3100. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial("SD3")+"' AND SD3.D3_OP = '" + cOP + "' "
  3101. cQuery += "AND SD3.D3_CF = 'DE1' AND SD3.D3_COD = '" + cProduto + "' AND SD3.D3_ESTORNO = ' ' "
  3102. cQuery += "AND SD3.D3_EMISSAO BETWEEN '" + DtoS(dDataDe) + "' AND '" + DtoS(dDataAte) + "' "
  3103. cQuery += "AND SD3.D_E_L_E_T_ = ' ' "
  3104. cQuery += "GROUP BY D3_COD, D3_OP "
  3105.  
  3106. cQuery := ChangeQuery(cQuery)
  3107. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  3108.  
  3109. If !(cAliasTmp)->(Eof())
  3110. nQuant := (cAliasTmp)->QUANT
  3111. EndIf
  3112.  
  3113. (cAliasTmp)->(dbCloseArea())
  3114. RestArea(aArea)
  3115.  
  3116. Return nQuant
  3117.  
  3118. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  3119. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3120. 北谀哪哪哪哪穆哪哪哪哪哪哪履哪哪穆哪哪哪哪哪哪哪哪哪哪哪履哪哪穆哪哪哪哪哪勘?
  3121. 北矲un噮o ?NegEst0210 矨utor ?TOTVS S/A ?Data ?3/10/2015潮?
  3122. 北媚哪哪哪哪呐哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪幢?
  3123. 北矰escri噮o ?Grava o Registro 0210 para os componentes que que sao 潮?
  3124. 北? ?negativos na estrutura de um PA 潮?
  3125. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪幢?
  3126. 北砅arametros?aEstrut = Vetor com Comp. Negativos [1] e Comuns [2] 潮?
  3127. 北? ?cAli0210 = Alias do arquivo de trabalho O210 潮?
  3128. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪俦?
  3129. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3130. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  3131. Static Function NegEst0210(aEstrut,cAli0210)
  3132.  
  3133. Local aArea := GetArea()
  3134. Local aArea0210 := (cAli0210)->(GetArea())
  3135. Local nFator := 0
  3136. Local nQtd := 1
  3137. Local cProduto := ""
  3138. Local cFilAux := ""
  3139. Local cChave := ""
  3140. Local nX, nY
  3141.  
  3142. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3143. //?Soma as "Producoes" e "Co-Producoes" ?
  3144. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3145. For nX := 1 to Len(aEstrut[1])
  3146. nQtd += If(aEstrut[1][nX][3] < 0, aEstrut[1][nX][3] * -1, aEstrut[1][nX][3])
  3147. Next nX
  3148.  
  3149. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3150. //?Grava o 0210 para "Co-Producoes" ?
  3151. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3152. For nX := 1 to Len(aEstrut[1])
  3153. cFilAux := aEstrut[1][nX][1]
  3154. cProduto := aEstrut[1][nX][2]
  3155. cChave := cFilAux+aEstrut[1][1][5]
  3156. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3157. //?Calcula o Fator de Consumo Especifico ?
  3158. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3159. nFator := (aEstrut[1][nX][3] * -1) / nQtd
  3160.  
  3161. For nY := 1 to Len(aEstrut[2])
  3162. If !((cAli0210)->(MsSeek(cFilAux+cProduto+aEstrut[2][nY][2])))
  3163. Reclock(cAli0210,.T.)
  3164. (cAli0210)->FILIAL := cFilAux
  3165. (cAli0210)->REG := "0210"
  3166. (cAli0210)->COD_I_COMP := aEstrut[2][nY][2]
  3167. (cAli0210)->QTD_COMP := aEstrut[2][nY][3] * nFator
  3168. (cAli0210)->PERDA := aEstrut[2][nY][4]
  3169. (cAli0210)->COD_ITEM := cProduto
  3170. (cAli0210)->(MsUnLock())
  3171. EndIf
  3172. Next nY
  3173. Next nX
  3174.  
  3175. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3176. //?Ajusta os componentes da estrutura da "Producao" ?
  3177. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3178. For nY := 1 to Len(aEstrut[2])
  3179. If ((cAli0210)->(MsSeek(aEstrut[2][nY][1]+aEstrut[2][nY][5]+aEstrut[2][nY][2])))
  3180. Reclock(cAli0210,.F.)
  3181. (cAli0210)->QTD_COMP := aEstrut[2][nY][3] * (1 / nQtd)
  3182. (cAli0210)->(MsUnLock())
  3183. EndIf
  3184. Next nY
  3185.  
  3186. RestArea(aArea0210)
  3187. RestArea(aArea)
  3188.  
  3189. Return
  3190.  
  3191. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  3192. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3193. 北谀哪哪哪哪穆哪哪哪哪哪哪履哪哪穆哪哪哪哪哪哪哪哪哪哪哪履哪哪穆哪哪哪哪哪勘?
  3194. 北矲un噮o ?TrocaTipo 矨utor ?TOTVS S/A ?Data ?5/11/2015潮?
  3195. 北媚哪哪哪哪呐哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪幢?
  3196. 北矰escri噮o ?Chama o ponto de entrada SPDFIS001 e realiza a troca dos 潮?
  3197. 北? ?Tipos de Produto do Sistema X SPED. 潮?
  3198. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪俦?
  3199. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3200. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  3201. Static Function TrocaTipo()
  3202.  
  3203. Local aTipo := {}
  3204. Local cTipo := ""
  3205. Local nX
  3206.  
  3207. If ExistBlock("SPDFIS001")
  3208. aTipo := ExecBlock("SPDFIS001", .F., .F., {aTipo})
  3209. EndIf
  3210.  
  3211. For nX := 1 to Len(aTipo)
  3212. If !(aTipo[nX][2] $ "07|08|09")
  3213. If "|" $ aTipo[nX][1]
  3214. aTipo[nX][1] := StrTran(aTipo[nX][1],"|","','")
  3215. EndIf
  3216. cTipo := "cTipo" + aTipo[nX][2]
  3217. &(cTipo) := "'" + aTipo[nX][1] + "'"
  3218. EndIf
  3219. Next nX
  3220.  
  3221. Return
  3222.  
  3223. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  3224. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3225. 北谀哪哪哪哪穆哪哪哪哪哪哪履哪哪穆哪哪哪哪哪哪哪哪哪哪哪履哪哪穆哪哪哪哪哪勘?
  3226. 北矲un噮o ?REG0210Mov 矨utor ?TOTVS S/A ?Data ?9/11/2015潮?
  3227. 北媚哪哪哪哪呐哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪幢?
  3228. 北矰escri噮o ?Realiza a gravacao do Registro 0210 com base nos movimentos潮?
  3229. 北? ?realizados no perido. 潮?
  3230. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪幢?
  3231. 北砅arametros?cAliK230 = Alias do arquivo de trabalho K230 潮?
  3232. 北? ?cAliK235 = Alias do arquivo de trabalho K235 潮?
  3233. 北? ?cAli0210 = Alias do arquivo de trabalho O210 潮?
  3234. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪俦?
  3235. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3236. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  3237. Static Function REG0210Mov(cAliK230,cAliK235,cAli0210,dDataDe,dDataAte)
  3238.  
  3239. Local aArea := GetArea()
  3240. Local aQuant := {}
  3241. Local nPerda := 0
  3242. Local lPerdPadr := SuperGetMV("MV_BLKPERD",.F.,.F.)
  3243. Local cSD4Filial := ""
  3244.  
  3245. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3246. //?Posiciona no inicio das tabelas ?
  3247. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3248. (cAliK230)->(dbGoTop())
  3249. (cAliK235)->(dbGoTop())
  3250.  
  3251. dbSelectArea("SD4")
  3252. dbSetOrder(2) // D4_FILIAL+D4_OP+D4_COD+D4_LOCAL
  3253.  
  3254. cSD4Filial := xFilial("SD4")
  3255. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3256. //?Percorre todas as OP's do Registro K230 ?
  3257. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3258. While !(cAliK230)->(Eof())
  3259. If (cAliK235)->(MsSeek((cAliK230)->(FILIAL+COD_DOC_OP))) // FILIAL+COD_DOC_OP+COD_ITEM
  3260.  
  3261. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3262. //?Percorre o Registro K235 de cada OP do Registro K230 ?
  3263. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3264. While (cAliK235)->(FILIAL+COD_DOC_OP) == (cAliK230)->(FILIAL+COD_DOC_OP)
  3265.  
  3266. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3267. //?Verifica se ha empenho na SD4 para aumentar a precisao, ?
  3268. //?caso contrario usa quantidade consumida no periodo. ?
  3269. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3270. If SD4->(MsSeek(cSD4Filial+(cAliK235)->(COD_DOC_OP+COD_ITEM)))
  3271. aQuant := GetQtdComp(1,(cAliK235)->FILIAL,(cAliK235)->COD_DOC_OP,(cAliK235)->COD_ITEM,(cAliK230)->QTD_ENC)
  3272. Else
  3273. aQuant := GetQtdComp(2,(cAliK235)->FILIAL,(cAliK235)->COD_DOC_OP,(cAliK235)->COD_ITEM,(cAliK230)->QTD_ENC,(cAliK235)->QTD)
  3274. EndIf
  3275. nPerdMov:= GetPerdMov((cAliK235)->COD_DOC_OP,(cAliK235)->COD_ITEM,dDataDe,dDataAte)
  3276. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3277. //?Realiza a gravacao do Registro 0210 ?
  3278. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3279. If !(cAli0210)->(MsSeek((cAliK230)->(FILIAL+COD_ITEM)+(cAliK235)->(COD_ITEM)))
  3280. Reclock(cAli0210,.T.)
  3281. (cAli0210)->FILIAL := (cAliK230)->FILIAL
  3282. (cAli0210)->REG := "0210"
  3283. (cAli0210)->COD_ITEM := (cAliK230)->COD_ITEM
  3284. If (cAliK235)->COD_INS_SU == PADR(Nil,len((cAliK235)->COD_INS_SU))
  3285. (cAli0210)->COD_I_COMP := (cAliK235)->COD_ITEM
  3286. Else
  3287. (cAli0210)->COD_I_COMP := (cAliK235)->COD_INS_SU
  3288. EndIf
  3289. (cAli0210)->QTD_CONS := aQuant[1] // Campo Auxiliar
  3290. (cAli0210)->QTD_PROD := aQuant[2] // Campo Auxiliar
  3291. If lPerdPadr
  3292. (cAli0210)->QTD_COMP := ((cAli0210)->QTD_CONS - nPerdMov) / (cAli0210)->QTD_PROD
  3293. (cAli0210)->PERDA := (nPerdMov/(cAli0210)->QTD_CONS) * 100
  3294. Else
  3295. (cAli0210)->QTD_COMP := (cAli0210)->QTD_CONS / (cAli0210)->QTD_PROD
  3296. (cAli0210)->PERDA := 0
  3297. EndIf
  3298. (cAli0210)->(MsUnLock())
  3299. nRegsto++
  3300. Else
  3301. If lPerdPadr
  3302. nPerda := ((cAli0210)->PERDA/100) * (cAli0210)->QTD_COMP //-- Recupera perda em quantidade para n鉶 misturar percentuais de OPs distintas
  3303. nPerda += nPerdMov //-- Soma quantidade perdida
  3304. EndIf
  3305.  
  3306. Reclock(cAli0210,.F.)
  3307. (cAli0210)->QTD_CONS += aQuant[1] // Campo Auxiliar
  3308. (cAli0210)->QTD_PROD += aQuant[2] // Campo Auxiliar
  3309. If lPerdPadr
  3310. (cAli0210)->QTD_COMP := ((cAli0210)->QTD_CONS - nPerdMov) / (cAli0210)->QTD_PROD
  3311. (cAli0210)->PERDA := (nPerda/(cAli0210)->QTD_CONS) * 100 //-- Converte novamente para percentual
  3312. Else
  3313. (cAli0210)->QTD_COMP := (cAli0210)->QTD_CONS / (cAli0210)->QTD_PROD
  3314. endif
  3315. (cAli0210)->(MsUnLock())
  3316. EndIf
  3317.  
  3318. (cAliK235)->(dbSkip())
  3319. EndDo
  3320. EndIf
  3321. (cAliK230)->(dbSkip())
  3322. EndDo
  3323.  
  3324. RestArea(aArea)
  3325.  
  3326. Return
  3327.  
  3328. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  3329. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3330. 北谀哪哪哪哪穆哪哪哪哪哪哪履哪哪穆哪哪哪哪哪哪哪哪哪哪哪履哪哪穆哪哪哪哪哪勘?
  3331. 北矲un噮o ?GetQtdComp 矨utor ?TOTVS S/A ?Data ?9/11/2015潮?
  3332. 北媚哪哪哪哪呐哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪幢?
  3333. 北矰escri噮o ?Calcula a quantidade do componente para a producao do Pai: 潮?
  3334. 北? ?nTipo = 1 : Baseado no empenho existente (SD4) 潮?
  3335. 北? ?nTipo = 2 : Baseado nos movimentos do periodo 潮?
  3336. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪俦?
  3337. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3338. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  3339. Static Function GetQtdComp(nTipo,cFilK235,cOP,cComp,nQtdProd,nQtdCons)
  3340.  
  3341. Local aArea := GetArea()
  3342. Local aQuant := {0,0} // {"Componente","Produzido"}
  3343. Local nQuantOP := 0
  3344. Local cSD4Filial := xFilial("SD4")
  3345.  
  3346. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3347. //?Guarda informacoes da Ordem de Producao ?
  3348. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3349. dbSelectArea("SC2")
  3350. dbSetOrder(1)
  3351. If (SC2->(MsSeek(xFilial("SC2")+cOP)))
  3352. nQuantOP := SC2->C2_QUANT
  3353. EndIf
  3354.  
  3355. If nTipo == 1
  3356. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3357. //?TIPO 1 - Calculo baseado no empenho existente (SD4) ?
  3358. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3359. While SD4->(cSD4Filial+D4_OP+D4_COD) == cFilK235+cOP+cComp
  3360. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3361. //?Desconsidera empenho negativo de estruturas negativas ?
  3362. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3363. If SD4->D4_QTDEORI > 0
  3364. aQuant[1] += SD4->D4_QTDEORI
  3365. EndIf
  3366. SD4->(dbSkip())
  3367. EndDo
  3368. aQuant[2] := nQuantOP
  3369. Else
  3370. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3371. //?TIPO 2 - Calculo baseado nos movimentos do periodo ?
  3372. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3373. aQuant[1] := nQtdCons
  3374. If nQtdProd > 0
  3375. aQuant[2] := nQtdProd
  3376. Else
  3377. aQuant[2] := nQuantOP
  3378. EndIf
  3379. EndIf
  3380.  
  3381. RestArea(aArea)
  3382.  
  3383. Return aQuant
  3384.  
  3385. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  3386. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3387. 北谀哪哪哪哪穆哪哪哪哪哪哪履哪哪穆哪哪哪哪哪哪哪哪哪哪哪履哪哪穆哪哪哪哪哪勘?
  3388. 北矲un噮o ?REG0210Ter 矨utor ?TOTVS S/A ?Data ?8/12/2015潮?
  3389. 北媚哪哪哪哪呐哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪幢?
  3390. 北矰escri噮o ?Realiza a gravacao do Registro 0210 com base nos movimentos潮?
  3391. 北? ?das Notas de Entrada - Industrializacao em Terceiros. 潮?
  3392. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪幢?
  3393. 北砅arametros?cAli0210 = Alias do arquivo de trabalho O210 潮?
  3394. 北? ?cAliK250 = Alias do arquivo de trabalho K250 潮?
  3395. 北? ?cAliK255 = Alias do arquivo de trabalho K255 潮?
  3396. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪俦?
  3397. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3398. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  3399. Static Function REG0210Ter(cAli0210,cAliK250,cAliK255)
  3400.  
  3401. Local aArea := GetArea()
  3402.  
  3403. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3404. //?Posiciona no inicio das tabelas ?
  3405. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3406. (cAliK250)->(dbGoTop())
  3407. (cAliK255)->(dbGoTop())
  3408.  
  3409. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3410. //?Percorre todas as OP's do Registro K250 ?
  3411. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3412. While !(cAliK250)->(Eof())
  3413. If (cAliK255)->(MsSeek((cAliK250)->(FILIAL+CHAVE))) //"FILIAL+CHAVE+COD_ITEM"
  3414. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3415. //?Percorre o Registro K255 de cada Chave do Registro K250 ?
  3416. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3417. While (cAliK255)->(FILIAL+CHAVE) == (cAliK250)->(FILIAL+CHAVE)
  3418. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3419. //?Realiza a gravacao do Registro 0210 ?
  3420. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3421. If !(cAli0210)->(MsSeek((cAliK250)->(FILIAL+COD_ITEM)+(cAliK255)->(COD_ITEM)))
  3422. Reclock(cAli0210,.T.)
  3423. (cAli0210)->FILIAL := (cAliK250)->FILIAL
  3424. (cAli0210)->REG := "0210"
  3425. (cAli0210)->COD_ITEM := (cAliK250)->COD_ITEM
  3426. (cAli0210)->COD_I_COMP := (cAliK255)->COD_ITEM
  3427. (cAli0210)->QTD_CONS := (cAliK255)->QTD // Campo Auxiliar
  3428. (cAli0210)->QTD_PROD := (cAliK250)->QTD // Campo Auxiliar
  3429. (cAli0210)->QTD_COMP := (cAli0210)->QTD_CONS / (cAli0210)->QTD_PROD
  3430. (cAli0210)->PERDA := 0
  3431. (cAli0210)->(MsUnLock())
  3432. nRegsto++
  3433. Else
  3434. Reclock(cAli0210,.F.)
  3435. (cAli0210)->QTD_CONS += (cAliK255)->QTD // Campo Auxiliar
  3436. (cAli0210)->QTD_PROD += (cAliK250)->QTD // Campo Auxiliar
  3437. (cAli0210)->QTD_COMP := (cAli0210)->QTD_CONS / (cAli0210)->QTD_PROD
  3438. (cAli0210)->(MsUnLock())
  3439. EndIf
  3440. (cAliK255)->(dbSkip())
  3441. EndDo
  3442. EndIf
  3443. (cAliK250)->(dbSkip())
  3444. EndDo
  3445.  
  3446. RestArea(aArea)
  3447.  
  3448. Return
  3449.  
  3450. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  3451. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3452. 北谀哪哪哪哪穆哪哪哪哪哪哪履哪哪穆哪哪哪哪哪哪哪哪哪哪哪履哪哪穆哪哪哪哪哪勘?
  3453. 北矲un噮o ?GetAlmTerc 矨utor ?TOTVS S/A ?Data ?1/01/2015潮?
  3454. 北媚哪哪哪哪呐哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪幢?
  3455. 北矰escri噮o ?Retorna os Armazens de Terceiros, caso o cliente utilize o 潮?
  3456. 北? ?conceito do parametro MV_CONTERC. 潮?
  3457. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪俦?
  3458. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3459. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  3460. Static Function GetAlmTerc()
  3461.  
  3462. Local cRet := "''"
  3463. Local lConTerc := SuperGetMv("MV_CONTERC",.F.,.F.)
  3464. Local cAlmTerc := GetMvNNR('MV_ALMTERC','80')
  3465.  
  3466. If lConTerc .And. At("/",cAlmTerc) > 0
  3467. cRet := "'" + SubStr(cAlmTerc,1,Len(cAlmTerc)-1) + "'"
  3468. cRet := StrTran(cRet,"/","','")
  3469. EndIf
  3470.  
  3471. Return cRet
  3472.  
  3473. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  3474. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3475. 北谀哪哪哪哪穆哪哪哪哪哪哪履哪哪穆哪哪哪哪哪哪哪哪哪哪哪履哪哪穆哪哪哪哪哪勘?
  3476. 北矲un噮o ?GetListPrd 矨utor ?TOTVS S/A ?Data ?9/08/2016潮?
  3477. 北媚哪哪哪哪呐哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪幢?
  3478. 北矰escri噮o ?Retorna o arquivo de trabalho contendo a lista de produtos 潮?
  3479. 北? ?com saldo inicial e se houve movimentacao no periodo. 潮?
  3480. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪幢?
  3481. 北砅arametros?cAliasTmp = Alias do arquivo de trabalho 潮?
  3482. 北? ?dDataAte = Data do saldo 潮?
  3483. 北? ?lTerc = Monta o arquivo de trabalho para terceiros 潮?
  3484. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪俦?
  3485. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3486. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  3487. Function GetListPrd(cAliasTmp,dDataAte,dDataDe,lTerc)
  3488.  
  3489. Local cQuery := ""
  3490. Local cArqTmp := ""
  3491. Local aTam := {}
  3492. Local aCampos := {}
  3493. Local cAlmTerc := GetAlmTerc()
  3494. Local cAliasTRB := GetNextAlias()
  3495. Local lSldTesN3 := SuperGetMV("MV_SDTESN3",.F.,0) <> 0
  3496. Local lAliasD3E := AliasInDic("D3E")
  3497.  
  3498. Default lTerc := .F.
  3499.  
  3500. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3501. //? OBSERVACAO IMPORTANTE!!! ?
  3502. //?--------------------------------------------------------------------- ?
  3503. //?A ordenacao dos registros nao pode ser alterada, pois ao processar o ?
  3504. //?Reg. K200 espera-se que Produtos com N Armazens estejam sequenciais. ?
  3505. //?Se a ordenacao for alterada o processamento do K200 ficara incorreto. ?
  3506. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3507.  
  3508. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3509. //?Query dos produtos que foram movimentados entre dUlmes e dDataAte ?
  3510. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3511. cQuery := "SELECT 'A' QRY,SB9.B9_FILIAL, ('S') STATS, SB9.B9_COD, SB9.B9_LOCAL, SB9.B9_DATA, SB9.B9_QINI, SB9.B9_VINI1 "
  3512. If lAliasD3E
  3513. cQuery += ",D3E.D3E_CLIENT ,D3E.D3E_LOJA "
  3514. Else
  3515. cQuery += ",' ' D3E_CLIENT ,' ' D3E_LOJA "
  3516. EndIf
  3517. cQuery += "FROM "+ RetSqlName("SB9") +" SB9 JOIN "+ RetSqlName("SB1") +" SB1 ON "
  3518. cQuery += "SB1.B1_FILIAL = '"+ xFilial("SB1") +"' AND SB1.B1_COD = SB9.B9_COD AND SB1.D_E_L_E_T_ = ' ' "
  3519. If lAliasD3E
  3520. cQuery += "LEFT JOIN "+ RetSqlName("D3E") +" D3E "
  3521. cQuery += "ON D3E.D3E_FILIAL = '"+ xFilial("D3E") +"' AND D3E.D3E_COD = SB1.B1_COD AND D3E.D_E_L_E_T_ = ' ' "
  3522. cQuery += "LEFT JOIN "+ RetSqlName("SA1") +" SA1 "
  3523. cQuery += "ON SA1.A1_FILIAL = '"+ xFilial("SA1") +"' AND SA1.A1_COD = D3E.D3E_CLIENT AND SA1.A1_LOJA = D3E.D3E_LOJA AND SA1.D_E_L_E_T_ = ' ' "
  3524. EndIf
  3525. If lCpoBZTP
  3526. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  3527. EndIf
  3528. cQuery += "JOIN "+ RetSqlName("SB2") +" SB2 ON SB2.B2_FILIAL = '"+ xFilial("SB2") +"' AND "
  3529. cQuery += "SB2.B2_COD = SB9.B9_COD AND SB2.B2_LOCAL = SB9.B9_LOCAL AND SB2.D_E_L_E_T_ = ' ' WHERE "
  3530. // --- Where
  3531. If lCpoBZTP
  3532. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  3533. Else
  3534. cQuery += "SB1.B1_TIPO "
  3535. EndIF
  3536. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo06+","+cTipo10+") AND "
  3537. cQuery += "SB9.D_E_L_E_T_ = ' ' AND SB1.B1_FANTASM <> 'S' AND SB1.B1_CCCUSTO = ' ' AND SB1.B1_COD NOT LIKE 'MOD%' AND "
  3538. cQuery += "SB9.B9_LOCAL NOT IN ("+ cAlmTerc +") AND SB9.B9_DATA = (SELECT MAX(SB9B.B9_DATA) B9_DATAMAX "
  3539. cQuery += "FROM "+ RetSqlName("SB9") +" SB9B "
  3540. cQuery += "WHERE SB9B.B9_FILIAL = '"+ xFilial("SB9") + "' AND SB9B.B9_DATA <> '"+SPACE(TamSX3("B9_DATA")[1])+"' AND SB9B.B9_DATA <= '"+ DtoS(dDataAte)+"' AND SB9B.B9_COD = SB1.B1_COD AND SB9B.B9_LOCAL = SB2.B2_LOCAL AND SB9B.D_E_L_E_T_ = ' ')"
  3541. cQuery += "AND SB9.B9_FILIAL = '"+ xFilial("SB9") +"' AND "
  3542. If lTerc
  3543. // --- Exist SB6
  3544. cQuery += "(EXISTS(SELECT 1 FROM "+ RetSqlName("SB6") +" SB6 , "+ RetSqlName("SF4") +" SF4 WHERE SB6.B6_FILIAL = '"+ xFilial("SB6") +"' AND "
  3545. cQuery += "SB6.B6_PRODUTO = SB9.B9_COD AND SB6.B6_LOCAL = SB9.B9_LOCAL AND SB6.B6_PODER3 = 'R' AND "
  3546. cQuery += "SB6.B6_EMISSAO <= '"+ DtoS(dDataAte)+"' AND SF4.F4_FILIAL = '"+ xFilial("SF4") +"' AND SF4.F4_CODIGO = SB6.B6_TES AND "
  3547. If !lSldTesN3
  3548. cQuery += "SF4.F4_ESTOQUE = 'S' AND "
  3549. EndIf
  3550. cQuery += "SF4.D_E_L_E_T_ = ' ' AND SB6.D_E_L_E_T_ = ' ')) "
  3551. Else
  3552. // --- Exist SD1
  3553. cQuery += "(EXISTS (SELECT 1 FROM "+ RetSqlName("SD1") +" SD1, "+ RetSqlName("SF4") +" SF4 WHERE SD1.D1_FILIAL = '"+ xFilial("SD1") +"' AND "
  3554. cQuery += "SD1.D1_COD = SB9.B9_COD AND SD1.D1_LOCAL = SB9.B9_LOCAL AND SD1.D1_DTDIGIT BETWEEN (SELECT MAX(SB9B.B9_DATA) B9_DATAMAX "
  3555. cQuery += "FROM "+ RetSqlName("SB9") +" SB9B "
  3556. cQuery += "WHERE SB9B.B9_FILIAL = '"+ xFilial("SB9") + "' AND SB9B.B9_DATA <> '"+SPACE(TamSX3("B9_DATA")[1])+"' AND SB9B.B9_DATA <= '"+ DtoS(dDataAte)+"' AND SB9B.B9_COD = SB1.B1_COD AND SB9B.B9_LOCAL = SB2.B2_LOCAL AND SB9B.D_E_L_E_T_ = ' ') AND '"+ DtoS(dDataAte) +"' AND "
  3557. cQuery += "SD1.D1_ORIGLAN <> 'LF' AND SF4.F4_FILIAL = '"+ xFilial("SF4") +"' AND SF4.F4_CODIGO = SD1.D1_TES AND "
  3558. cQuery += "(SF4.F4_ESTOQUE = 'S' "
  3559. If lSldTesN3
  3560. cQuery += "OR (SF4.F4_ESTOQUE = 'N' AND SF4.F4_PODER3 IN ('R','D')) "
  3561. EndIf
  3562. cQuery += ") AND "
  3563. cQuery += "SF4.D_E_L_E_T_ = ' ' AND SD1.D_E_L_E_T_ = ' ' ) "
  3564. // --- Exist SD2
  3565. cQuery += "OR EXISTS (SELECT 1 FROM "+ RetSqlName("SD2") +" SD2, "+ RetSqlName("SF4") +" SF4 WHERE SD2.D2_FILIAL = '"+ xFilial("SD2") +"' AND "
  3566. cQuery += "SD2.D2_COD = SB9.B9_COD AND SD2.D2_LOCAL = SB9.B9_LOCAL AND SD2.D2_EMISSAO BETWEEN (SELECT MAX(SB9B.B9_DATA) B9_DATAMAX "
  3567. cQuery += "FROM "+ RetSqlName("SB9") +" SB9B "
  3568. cQuery += "WHERE SB9B.B9_FILIAL = '"+ xFilial("SB9") + "' AND SB9B.B9_DATA <> '"+SPACE(TamSX3("B9_DATA")[1])+"' AND SB9B.B9_DATA <= '"+ DtoS(dDataAte)+"' AND SB9B.B9_COD = SB1.B1_COD AND SB9B.B9_LOCAL = SB2.B2_LOCAL AND SB9B.D_E_L_E_T_ = ' ')AND '"+ DtoS(dDataAte) +"' AND "
  3569. cQuery += "SD2.D2_ORIGLAN <> 'LF' AND SF4.F4_FILIAL = '"+ xFilial("SF4") +"' AND SF4.F4_CODIGO = SD2.D2_TES AND "
  3570. cQuery += "(SF4.F4_ESTOQUE = 'S' "
  3571. If lSldTesN3
  3572. cQuery += "OR (SF4.F4_ESTOQUE = 'N' AND SF4.F4_PODER3 IN ('R','D')) "
  3573. EndIf
  3574. cQuery += ") AND "
  3575. cQuery += "SF4.D_E_L_E_T_ = ' ' AND SD2.D_E_L_E_T_ = ' ' ) "
  3576. // --- Exist SD3
  3577. cQuery += "OR EXISTS (SELECT 1 FROM "+ RetSqlName("SD3") +" SD3 WHERE SD3.D3_FILIAL = '"+ xFilial("SD3") +"' AND SD3.D3_COD = SB9.B9_COD AND "
  3578. cQuery += "SD3.D3_LOCAL = SB9.B9_LOCAL AND SD3.D3_EMISSAO BETWEEN (SELECT MAX(SB9B.B9_DATA) B9_DATAMAX "
  3579. cQuery += "FROM "+ RetSqlName("SB9") +" SB9B "
  3580. cQuery += "WHERE SB9B.B9_FILIAL = '"+ xFilial("SB9") + "' AND SB9B.B9_DATA <> '"+SPACE(TamSX3("B9_DATA")[1])+"' AND SB9B.B9_DATA <= '"+ DtoS(dDataAte)+"' AND SB9B.B9_COD = SB1.B1_COD AND SB9B.B9_LOCAL = SB2.B2_LOCAL AND SB9B.D_E_L_E_T_ = ' ') AND '"+ DtoS(dDataAte) +"' "
  3581. cQuery += "AND SD3.D3_ESTORNO = ' ' AND SD3.D_E_L_E_T_ = ' ' )) "
  3582. EndIf
  3583.  
  3584. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3585. //?Query dos produtos que NAO foram movimentados entre dUlmes e dDataAte ?
  3586. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3587. cQuery += "UNION ALL SELECT 'B' QRY, SB9.B9_FILIAL, ('N') STATS, SB9.B9_COD, SB9.B9_LOCAL, SB9.B9_DATA, SB9.B9_QINI, SB9.B9_VINI1 "
  3588. If lAliasD3E
  3589. cQuery += ",D3E.D3E_CLIENT ,D3E.D3E_LOJA "
  3590. Else
  3591. cQuery += ",' ' D3E_CLIENT ,' ' D3E_LOJA "
  3592. EndIf
  3593. cQuery += "FROM "+ RetSqlName("SB9") +" SB9 "
  3594. cQuery += "JOIN "+ RetSqlName("SB1") +" SB1 "
  3595. cQuery += "ON SB1.B1_FILIAL = '"+ xFilial("SB1") +"' AND SB1.B1_COD = SB9.B9_COD AND SB1.D_E_L_E_T_ = ' ' "
  3596. If lAliasD3E
  3597. cQuery += "LEFT JOIN "+ RetSqlName("D3E") +" D3E "
  3598. cQuery += "ON D3E.D3E_FILIAL = '"+ xFilial("D3E") +"' AND D3E.D3E_COD = SB1.B1_COD AND D3E.D_E_L_E_T_ = ' ' "
  3599. cQuery += "LEFT JOIN "+ RetSqlName("SA1") +" SA1 "
  3600. cQuery += "ON SA1.A1_FILIAL = '"+ xFilial("SA1") +"' AND SA1.A1_COD = D3E.D3E_CLIENT AND SA1.A1_LOJA = D3E.D3E_LOJA AND SA1.D_E_L_E_T_ = ' ' "
  3601. EndIf
  3602. If lCpoBZTP
  3603. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  3604. EndIf
  3605. cQuery += "JOIN "+ RetSqlName("SB2") +" SB2 ON SB2.B2_FILIAL = '"+ xFilial("SB2") +"' AND "
  3606. cQuery += "SB2.B2_COD = SB9.B9_COD AND SB2.B2_LOCAL = SB9.B9_LOCAL AND SB2.D_E_L_E_T_ = ' ' WHERE "
  3607. // --- Where
  3608. If lCpoBZTP
  3609. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  3610. Else
  3611. cQuery += "SB1.B1_TIPO "
  3612. EndIF
  3613. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo06+","+cTipo10+") AND "
  3614. cQuery += "SB9.D_E_L_E_T_ = ' ' AND SB1.B1_FANTASM <> 'S' AND SB1.B1_CCCUSTO = ' ' AND SB1.B1_COD NOT LIKE 'MOD%' AND "
  3615. cQuery += "SB9.B9_LOCAL NOT IN ("+ cAlmTerc +") AND SB9.B9_DATA = (SELECT MAX(SB9B.B9_DATA) B9_DATAMAX "
  3616. cQuery += "FROM "+ RetSqlName("SB9") +" SB9B "
  3617. cQuery += "WHERE SB9B.B9_FILIAL = '"+ xFilial("SB9") + "' AND SB9.B9_DATA <> '"+SPACE(TamSX3("B9_DATA")[1])+"' AND SB9B.B9_DATA <= '"+ DtoS(dDataAte)+"' AND SB9B.B9_COD = SB1.B1_COD AND SB9B.B9_LOCAL = SB2.B2_LOCAL AND SB9B.D_E_L_E_T_ = ' ')"
  3618. cQuery += "AND SB9.B9_FILIAL = '"+ xFilial("SB9") +"' AND "
  3619. If lTerc
  3620. // --- Exist SB6
  3621. cQuery += "(NOT EXISTS(SELECT 1 FROM "+ RetSqlName("SB6") +" SB6 , "+ RetSqlName("SF4") +" SF4 WHERE SB6.B6_FILIAL = '"+ xFilial("SB6") +"' AND "
  3622. cQuery += "SB6.B6_PRODUTO = SB9.B9_COD AND SB6.B6_LOCAL = SB9.B9_LOCAL AND SB6.B6_PODER3 = 'R' AND "
  3623. cQuery += "SB6.B6_EMISSAO <= '"+ DtoS(dDataAte) +"' AND SF4.F4_FILIAL = '"+ xFilial("SF4") +"' AND SF4.F4_CODIGO = SB6.B6_TES AND "
  3624. If !lSldTesN3
  3625. cQuery += "SF4.F4_ESTOQUE = 'S' AND "
  3626. EndIf
  3627. cQuery += "SF4.D_E_L_E_T_ = ' ' AND SB6.D_E_L_E_T_ = ' ')) "
  3628. Else
  3629. // --- Exist SD1
  3630. cQuery += "(NOT EXISTS (SELECT 1 FROM "+ RetSqlName("SD1") +" SD1, "+ RetSqlName("SF4") +" SF4 WHERE SD1.D1_FILIAL = '"+ xFilial("SD1") +"' AND "
  3631. cQuery += "SD1.D1_COD = SB9.B9_COD AND SD1.D1_LOCAL = SB9.B9_LOCAL AND SD1.D1_DTDIGIT BETWEEN (SELECT MAX(SB9B.B9_DATA) B9_DATAMAX "
  3632. cQuery += "FROM "+ RetSqlName("SB9") +" SB9B "
  3633. cQuery += "WHERE SB9B.B9_FILIAL = '"+ xFilial("SB9") + "' AND SB9B.B9_DATA <> '"+ Space(TamSX3("B9_DATA")[1]) +"' AND SB9B.B9_DATA <= '"+ DtoS(dDataAte)+"' AND SB9B.B9_COD = SB1.B1_COD AND SB9B.B9_LOCAL = SB2.B2_LOCAL AND SB9B.D_E_L_E_T_ = ' ') AND '"+ DtoS(dDataAte) +"' AND "
  3634. cQuery += "SD1.D1_ORIGLAN <> 'LF' AND SF4.F4_FILIAL = '"+ xFilial("SF4") +"' AND SF4.F4_CODIGO = SD1.D1_TES AND "
  3635. cQuery += "(SF4.F4_ESTOQUE = 'S' "
  3636. If lSldTesN3
  3637. cQuery += "OR (SF4.F4_ESTOQUE = 'N' AND SF4.F4_PODER3 IN ('R','D') ) "
  3638. EndIf
  3639. cQuery += ") AND "
  3640. cQuery += "SF4.D_E_L_E_T_ = ' ' AND SD1.D_E_L_E_T_ = ' ' ) "
  3641. // --- Exist SD2
  3642. cQuery += "AND NOT EXISTS (SELECT 1 FROM "+ RetSqlName("SD2") +" SD2, "+ RetSqlName("SF4") +" SF4 WHERE SD2.D2_FILIAL = '"+ xFilial("SD2") +"' AND "
  3643. cQuery += "SD2.D2_COD = SB9.B9_COD AND SD2.D2_LOCAL = SB9.B9_LOCAL AND SD2.D2_EMISSAO BETWEEN (SELECT MAX(SB9B.B9_DATA) B9_DATAMAX "
  3644. cQuery += "FROM "+ RetSqlName("SB9") +" SB9B "
  3645. cQuery += "WHERE SB9B.B9_FILIAL = '"+ xFilial("SB9") + "' AND SB9B.B9_DATA <> '"+ Space(TamSX3("B9_DATA")[1]) +"' AND SB9B.B9_DATA <= '"+ DtoS(dDataAte)+"' AND SB9B.B9_COD = SB1.B1_COD AND SB9B.B9_LOCAL = SB2.B2_LOCAL AND SB9B.D_E_L_E_T_ = ' ') AND '"+ DtoS(dDataAte) +"' AND "
  3646. cQuery += "SD2.D2_ORIGLAN <> 'LF' AND SF4.F4_FILIAL = '"+ xFilial("SF4") +"' AND SF4.F4_CODIGO = SD2.D2_TES AND "
  3647. cQuery += "(SF4.F4_ESTOQUE = 'S' "
  3648. If lSldTesN3
  3649. cQuery += "OR (SF4.F4_ESTOQUE = 'N' AND SF4.F4_PODER3 IN ('R','D') ) "
  3650. EndIf
  3651. cQuery += ") AND "
  3652. cQuery += "SF4.D_E_L_E_T_ = ' ' AND SD2.D_E_L_E_T_ = ' ' ) "
  3653. // --- Exist SD3
  3654. cQuery += "AND NOT EXISTS (SELECT 1 FROM "+ RetSqlName("SD3") +" SD3 WHERE SD3.D3_FILIAL = '"+ xFilial("SD3") +"' AND SD3.D3_COD = SB9.B9_COD AND "
  3655. cQuery += "SD3.D3_LOCAL = SB9.B9_LOCAL AND SD3.D3_EMISSAO BETWEEN (SELECT MAX(SB9B.B9_DATA) B9_DATAMAX "
  3656. cQuery += "FROM "+ RetSqlName("SB9") +" SB9B "
  3657. cQuery += "WHERE SB9B.B9_FILIAL = '"+ xFilial("SB9") + "' AND SB9B.B9_DATA <= '"+ DtoS(dDataAte)+"' AND SB9B.B9_COD = SB1.B1_COD AND SB9B.B9_LOCAL = SB2.B2_LOCAL AND SB9B.D_E_L_E_T_ = ' ')AND '"+ DtoS(dDataAte) +"' "
  3658. cQuery += "AND SD3.D3_ESTORNO = ' ' AND SD3.D_E_L_E_T_ = ' ' )) "
  3659. EndIf
  3660.  
  3661. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3662. //?Query dos produtos incluidos via Saldo Inicial durante o periodo ?
  3663. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3664. cQuery += "UNION ALL "
  3665. cQuery += "SELECT 'C' QRY, SB9INI.B9_FILIAL,('S') STATS,SB9INI.B9_COD,SB9INI.B9_LOCAL,SB9INI.B9_DATA,SB9INI.B9_QINI,SB9INI.B9_VINI1 "
  3666. If lAliasD3E
  3667. cQuery += ",D3E.D3E_CLIENT ,D3E.D3E_LOJA "
  3668. Else
  3669. cQuery += ",' ' D3E_CLIENT ,' ' D3E_LOJA "
  3670. EndIf
  3671. cQuery += " FROM "+ RetSqlName("SB9") +" SB9INI "
  3672. cQuery += "JOIN "+ RetSqlName("SB1") +" SB1 ON SB1.B1_FILIAL = '"+ xFilial("SB1") +"' "
  3673. cQuery += " AND SB1.B1_COD = SB9INI.B9_COD "
  3674. cQuery += " AND SB1.D_E_L_E_T_ = ' ' "
  3675. If lAliasD3E
  3676. cQuery += "LEFT JOIN "+ RetSqlName("D3E") +" D3E "
  3677. cQuery += "ON D3E.D3E_FILIAL = '"+ xFilial("D3E") +"' AND D3E.D3E_COD = SB1.B1_COD AND D3E.D_E_L_E_T_ = ' ' "
  3678. cQuery += "LEFT JOIN "+ RetSqlName("SA1") +" SA1 "
  3679. cQuery += "ON SA1.A1_FILIAL = '"+ xFilial("SA1") +"' AND SA1.A1_COD = D3E.D3E_CLIENT AND SA1.A1_LOJA = D3E.D3E_LOJA AND SA1.D_E_L_E_T_ = ' ' "
  3680. EndIf
  3681. If lCpoBZTP
  3682. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  3683. EndIf
  3684. cQuery += "WHERE SB9INI.B9_FILIAL = '"+ xFilial("SB9") +"' "
  3685. cQuery += " AND SB9INI.B9_DATA <= '"+ DtoS(dDataAte) +"' "
  3686. cQuery += " AND SB9INI.B9_LOCAL NOT IN ("+ cAlmTerc +") "
  3687. cQuery += " AND SB9INI.D_E_L_E_T_ = ' ' "
  3688. cQuery += " AND SB1.B1_COD NOT LIKE 'MOD%' "
  3689. cQuery += " AND NOT EXISTS (SELECT 1 FROM "+ RetSqlName("SB9") +" SB9 WHERE SB9.B9_FILIAL = '"+xFilial('SB9')+"' "
  3690. cQuery += " AND SB9.B9_COD = SB9INI.B9_COD "
  3691. cQuery += " AND SB9.B9_LOCAL = SB9INI.B9_LOCAL "
  3692. cQuery += " AND SB9.B9_DATA <> '"+ Space(TamSX3("B9_DATA")[1]) +"' AND SB9.B9_DATA <= '"+ DtoS(dDataAte) +"') "
  3693.  
  3694. If lCpoBZTP
  3695. cQuery += " AND " + MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  3696. Else
  3697. cQuery += " AND SB1.B1_TIPO "
  3698. EndIF
  3699. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo06+","+cTipo10+") "
  3700. cQuery += " AND SB1.B1_FANTASM <> 'S' "
  3701. cQuery += " AND SB1.B1_CCCUSTO = ' ' "
  3702.  
  3703. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3704. //?Query de produtos com saldo gerado no MATA103, tem SB2 mas nao tem SB9?
  3705. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3706. cQuery += "UNION ALL "
  3707. cQuery += "SELECT 'D' QRY, SB2.B2_FILIAL,('S') STATS,SB2.B2_COD,SB2.B2_LOCAL,SB9.B9_DATA,SB9.B9_QINI,SB9.B9_VINI1 "
  3708. If lAliasD3E
  3709. cQuery += ",D3E.D3E_CLIENT ,D3E.D3E_LOJA "
  3710. Else
  3711. cQuery += ",' ' D3E_CLIENT ,' ' D3E_LOJA "
  3712. EndIf
  3713. cQuery += "FROM "+ RetSqlName("SB2") +" SB2 "
  3714. cQuery += "JOIN "+ RetSqlName("SB1") +" SB1 ON SB1.B1_FILIAL = '"+ xFilial("SB1") +"' "
  3715. cQuery += "AND SB1.B1_COD = SB2.B2_COD "
  3716. cQuery += "AND SB1.D_E_L_E_T_ = ' ' "
  3717. If lAliasD3E
  3718. cQuery += "LEFT JOIN "+ RetSqlName("D3E") +" D3E "
  3719. cQuery += "ON D3E.D3E_FILIAL = '"+ xFilial("D3E") +"' AND D3E.D3E_COD = SB1.B1_COD AND D3E.D_E_L_E_T_ = ' ' "
  3720. cQuery += "LEFT JOIN "+ RetSqlName("SA1") +" SA1 "
  3721. cQuery += "ON SA1.A1_FILIAL = '"+ xFilial("SA1") +"' AND SA1.A1_COD = D3E.D3E_CLIENT AND SA1.A1_LOJA = D3E.D3E_LOJA AND SA1.D_E_L_E_T_ = ' ' "
  3722. EndIf
  3723. cQuery += "LEFT JOIN "+ RetSqlName("SB9") +" SB9 ON SB9.B9_FILIAL = '"+ xFilial("SB9") +"' AND SB9.B9_COD = SB2.B2_COD AND "
  3724. cQuery += "SB9.B9_LOCAL = SB2.B2_LOCAL AND SB9.B9_DATA <= '"+ DtoS(dDataAte) +"' AND SB9.D_E_L_E_T_ = ' ' "
  3725. If lCpoBZTP
  3726. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  3727. EndIf
  3728. cQuery += "WHERE SB2.B2_FILIAL = '"+ xFilial("SB2") +"' AND "
  3729. If lCpoBZTP
  3730. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  3731. Else
  3732. cQuery += "SB1.B1_TIPO "
  3733. EndIF
  3734. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo06+","+cTipo10+") AND "
  3735. cQuery += "SB2.D_E_L_E_T_ = ' ' AND SB1.B1_FANTASM <> 'S' AND SB1.B1_CCCUSTO = ' ' AND "
  3736. cQuery += "SB1.B1_COD NOT LIKE 'MOD%' AND SB2.B2_LOCAL NOT IN ("+ cAlmTerc +") AND SB9.B9_DATA IS NULL "
  3737.  
  3738. // --- Order
  3739. cQuery += "ORDER BY 2,4,5"
  3740.  
  3741. cQuery := ChangeQuery(cQuery)
  3742. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTRB,.T.,.T.)
  3743.  
  3744. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3745. //?Monta o Arquivo de Trabalho ?
  3746. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3747. aTam := TamSX3("B9_FILIAL")
  3748. Aadd(aCampos,{"B9_FILIAL",aTam[3],aTam[1],aTam[2]})
  3749.  
  3750. Aadd(aCampos,{"STATS","C",1,0})
  3751.  
  3752. aTam := TamSX3("B9_COD")
  3753. Aadd(aCampos,{"B9_COD",aTam[3],aTam[1],aTam[2]})
  3754.  
  3755. aTam := TamSX3("B9_LOCAL")
  3756. Aadd(aCampos,{"B9_LOCAL",aTam[3],aTam[1],aTam[2]})
  3757.  
  3758. aTam := TamSX3("B9_DATA")
  3759. Aadd(aCampos,{"B9_DATA",aTam[3],aTam[1],aTam[2]})
  3760.  
  3761. aTam := TamSX3("B9_QINI")
  3762. Aadd(aCampos,{"B9_QINI",aTam[3],aTam[1],aTam[2]})
  3763.  
  3764. If lAliasD3E
  3765. aTam := TamSX3("D3E_CLIENT")
  3766. Else
  3767. aTam := TamSX3("A1_COD")
  3768. EndIf
  3769. Aadd(aCampos,{"D3E_CLIENT",aTam[3],aTam[1],aTam[2]})
  3770.  
  3771. If lAliasD3E
  3772. aTam := TamSX3("D3E_LOJA")
  3773. Else
  3774. aTam := TamSX3("A1_LOJA")
  3775. EndIf
  3776. Aadd(aCampos,{"D3E_LOJA",aTam[3],aTam[1],aTam[2]})
  3777.  
  3778. cArqTmp := GetNextAlias()
  3779. If TcCanOpen(cArqTmp)
  3780. TcDelFile(cArqTmp)
  3781. EndIf
  3782. FwDbCreate(cArqTmp,aCampos,"TOPCONN",.T.)
  3783. cAliasTmp := cArqTmp
  3784. DbUseArea(.T.,"TOPCONN",cArqTmp,cAliasTmp,.T.)
  3785.  
  3786. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3787. //?Grava o Arquivo de Trabalho com os dados da Query ?
  3788. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
  3789. While !(cAliasTRB)->(Eof())
  3790. RecLock(cAliasTmp,.T.)
  3791. (cAliasTmp)->B9_FILIAL := (cAliasTRB)->B9_FILIAL
  3792. (cAliasTmp)->STATS := (cAliasTRB)->STATS
  3793. (cAliasTmp)->B9_COD := (cAliasTRB)->B9_COD
  3794. (cAliasTmp)->B9_LOCAL := (cAliasTRB)->B9_LOCAL
  3795. (cAliasTmp)->B9_DATA := StoD((cAliasTRB)->B9_DATA)
  3796. (cAliasTmp)->B9_QINI := (cAliasTRB)->B9_QINI
  3797. (cAliasTmp)->D3E_CLIENT := (cAliasTRB)->D3E_CLIENT
  3798. (cAliasTmp)->D3E_LOJA := (cAliasTRB)->D3E_LOJA
  3799. (cAliasTmp)->(MsUnLock())
  3800. (cAliasTRB)->(DbSkip())
  3801. EndDo
  3802. (cAliasTRB)->(dbCloseArea())
  3803. (cAliasTmp)->(dbGoTop())
  3804.  
  3805. Return
  3806.  
  3807. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  3808. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3809. 北谀哪哪哪哪穆哪哪哪哪哪哪履哪哪穆哪哪哪哪哪哪哪哪哪哪哪履哪哪穆哪哪哪哪哪勘?
  3810. 北矲un噮o ?CalcThread 矨utor ?TOTVS S/A ?Data ?0/08/2016潮?
  3811. 北媚哪哪哪哪呐哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪哪哪哪哪哪哪聊哪哪牧哪哪哪哪哪幢?
  3812. 北矰escri噮o ?Calcula o Range de produtos de cada Thread que sera 潮?
  3813. 北? ?processada. 潮?
  3814. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪幢?
  3815. 北砅arametros?cAliasTmp = Alias do arquivo de trabalho 潮?
  3816. 北? ?nThreads = Numero de Threads 潮?
  3817. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪俦?
  3818. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北?
  3819. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  3820. Static Function CalcThread(cAliasTmp,nThreads)
  3821.  
  3822. Local nNumRec := 0
  3823. Local nTotRec := 0
  3824. Local nX := 0
  3825. Local nAuxIni := 1
  3826. Local nAuxFim := 0
  3827. Local cProd := ""
  3828. Local aThrAux := {}
  3829. Local aRet := {}
  3830.  
  3831. nTotRec := (cAliasTmp)->(LastRec())
  3832. nNumRec := Int(nTotRec / nThreads)
  3833.  
  3834. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3835. //?Monta os Ranges ?
  3836. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3837. For nX := 1 to nThreads
  3838. nAuxIni += nAuxFim
  3839. nAuxFim += nNumRec
  3840. Aadd(aThrAux,{nAuxIni,nAuxFim})
  3841. Next nX
  3842.  
  3843. If nThreads > 1
  3844. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3845. //?Ajusta o RECNO da ultima Thread ?
  3846. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3847. If aThrAux[Len(aThrAux)][2] < nTotRec
  3848. aThrAux[Len(aThrAux)][2] := nTotRec
  3849. EndIf
  3850.  
  3851. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3852. //?Ajusta o RECNO de cada Thread, pois Produtos com saldo ?
  3853. //?em mais de um Armazem devem ser processados dentro de uma ?
  3854. //?uma mesma Thread, caso contrario o resultado ficara errado ?
  3855. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3856. For nX := 1 to nThreads
  3857. // Recno inicial da Thread
  3858. If nX == 1
  3859. nAuxIni := aThrAux[nX][1]
  3860. Else
  3861. nAuxIni := aThrAux[nX-1][2] + 1
  3862. EndIf
  3863. (cAliasTmp)->(dbGoto(aThrAux[nX][2]))
  3864. While !(cAliasTmp)->(Eof())
  3865. cProd := (cAliasTmp)->B9_COD
  3866. // Recno final da Thread
  3867. nAuxFim := (cAliasTmp)->(Recno())
  3868. (cAliasTmp)->(dbSkip())
  3869. If cProd <> (cAliasTmp)->B9_COD
  3870. Exit
  3871. EndIf
  3872. EndDo
  3873. // Adiciona aRet
  3874. If nX == 1
  3875. Aadd(aRet,{nAuxIni,nAuxFim})
  3876. Else
  3877. Aadd(aRet,{aRet[nx-1][2]+1,nAuxFim})
  3878. EndIf
  3879.  
  3880. // Verifica se o ultimo Recno da Thread e igual ao total de recnos
  3881. If nAuxFim == nTotRec
  3882. Exit
  3883. EndIf
  3884. Next nX
  3885. If Len(aRet)<> nThreads
  3886. nThreads:= Len(aRet)
  3887. EndIf
  3888. EndIf
  3889.  
  3890. If nThreads < 2 .And. Len(aRet) == 0
  3891. Aadd(aRet,{nAuxIni,nAuxFim})
  3892. EndIf
  3893.  
  3894. (cAliasTmp)->(dbGoTop())
  3895.  
  3896. Return aRet
  3897.  
  3898.  
  3899. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘?
  3900. | REGISTRO H010: INVENT罵IO. |
  3901. \ Tratamento destinado a gera玢o de arquivo Bloco H010 /
  3902. | Este registro deve ser informado para discriminar os itens existentes no estoque. |
  3903. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  3904.  
  3905.  
  3906. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  3907. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  3908. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  3909. 北矲un嘺o ?REGH010 ?Autor ?Materiais ?Data ?28/07/14 潮?
  3910. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  3911. 北矰escricao ?Funcao responsavel pela gravacao do Registro H010 潮?
  3912. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  3913. 北砅arametros?cAliasTRB = Alias do arquivo de trabalho do Bloco 潮?
  3914. 北? ?dDataDe = Data Inicial da Apuracao 潮?
  3915. 北? ?dDataAte = Data Final da Apuracao 潮?
  3916. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  3917. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  3918. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  3919. Function SPDBlocH(cAliBLH,dDataDe,dDataAte)
  3920.  
  3921. BlocoH460(dDataAte,@cAliBLH)
  3922.  
  3923. Return
  3924.  
  3925. /*
  3926. *苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  3927. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  3928. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  3929. 北矲un嘺o ?BLHCriaTRB ?Autor ?Materiais ?Data ?28/07/14 潮?
  3930. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  3931. 北矰escricao ?Criacao do arquivo temporario para retorno de informacoes. 潮?
  3932. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  3933. 北砅arametros?cBloco = Nome do Bloco para geracao arquivo de trabalho 潮?
  3934. 北? ?cAliasTRB = Nome do arquivo de trabalho 潮?
  3935. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  3936. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  3937. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?/
  3938. Function BLHCriaTRB( nOpcx, xEmpAnt, xFilAnt, cBloco, cAliasTRB, lJob )
  3939. Local lRet := .T.
  3940. Local nX := 0
  3941. Local aRet := {}
  3942. Local aIndice := {}
  3943. Local aLayout := {}
  3944. Local cDirSPDK := GetSrvProfString("Startpath","")
  3945.  
  3946. Default nOpcx := 1
  3947. Default lJob := .F.
  3948. Default xEmpAnt := ''
  3949. Default xFilAnt := ''
  3950. Default cBloco := ""
  3951. Default cAliasTRB := ""
  3952.  
  3953. If lJob
  3954. RpcSetType( 3 )
  3955. RpcSetEnv( xEmpAnt, xFilAnt )
  3956. EndIf
  3957.  
  3958. Do Case
  3959. Case nOpcx == 1
  3960. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3961. //?Posicoes: [1]Campos / [2]Indices ?
  3962. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3963. aLayout := BLHLayout(cBloco)
  3964. If !ExistDir(cDirSPDK)
  3965. MakeDir(cDirSPDK)
  3966. EndIf
  3967.  
  3968. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  3969. //?Criacao do Arquivo de Trabalho ?
  3970. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  3971. If !Empty(cBloco)
  3972. FWdbCreate(cAliasTRB, aLayout[1], __cRdd, .T. )
  3973. dbUseArea(.T., __cRdd, cAliasTRB, cAliasTRB, .T. )
  3974. For nX := 1 to Len(aLayout[2])
  3975. Aadd( aIndice, { ( cAliasTRB + Alltrim( STR( nX ) ) ), aLayout[ 2 ][ nX ] } )
  3976. dbCreateIndex( ( cAliasTRB + Alltrim( STR( nX ) ) ), aLayout[ 2 ][ nX ] )
  3977. Next nX
  3978. dbSetOrder(1)
  3979. EndIf
  3980. aRet := { aIndice, cAliasTRB }
  3981.  
  3982. Case nOpcx == 2
  3983. If TcCanOpen( cAliasTRB )
  3984. lRet := TcDelFile( cAliasTRB )
  3985. EndIf
  3986. aRet := { lRet }
  3987.  
  3988. EndCase
  3989.  
  3990. If lJob
  3991. RpcClearEnv()
  3992. EndIf
  3993.  
  3994. Return aRet
  3995.  
  3996.  
  3997. /*苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  3998. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  3999. 北谀哪哪哪哪穆哪哪哪哪哪哪哪哪履哪哪哪履哪哪哪哪哪哪哪哪穆哪哪哪履哪哪哪哪目北
  4000. 北矲un嘺o ?BLHLayout ?Autor ?Materiais ?Data ?28/07/14 潮?
  4001. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪聊哪哪哪聊哪哪哪哪哪哪哪哪牧哪哪哪聊哪哪哪哪拇北
  4002. 北矰escricao ?Funcao responsavel pela montagem do layout do bloco 潮?
  4003. 北媚哪哪哪哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拇北
  4004. 北砅arametros?cBloco = Nome do bloco para geracao do Layout 潮?
  4005. 北滥哪哪哪哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁北
  4006. 北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北北
  4007. 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌*/
  4008. Static Function BLHLayout(cBloco)
  4009.  
  4010. Local aCampos := {}
  4011. Local aIndices := {}
  4012. Local nTamFil := TamSX3("D1_FILIAL" )[1]
  4013. Local nTamCod := TamSX3("B1_COD" )[1]
  4014. Local nTamUNID := TamSX3("B1_UM" )[1]
  4015. Local nTamCC := TamSX3("B1_CONTA" )[1]
  4016. Local aTamPic := TamSX3("B1_PICM" )
  4017. Local nTamOri := TamSX3("B1_ORIGEM" )[1]
  4018. Local nTamClF := TamSX3("B1_CLASFIS")[1]
  4019. // ------ Tamanhos conforme especificado no Guia EFD ------
  4020. Local nTamReg := 4
  4021. Local aTamQtd := {16,3}
  4022. Local aTamVlr := {16,2}
  4023. Local aTmVlUn := {16,6}
  4024. // --------------------------------------------------------
  4025. Default cBloco := ""
  4026.  
  4027. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  4028. //? *** ATENCAO!!! *** ?
  4029. //?Antes de realizar alteracoes nos tamanhos dos campos para ?
  4030. //?montagem dos arquivos de trabalho, verificar especificacao ?
  4031. //?deles no Guia Pratico EFD no site do SPED Fiscal(Receita) ?
  4032. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  4033.  
  4034. Do Case
  4035. Case cBloco == "H010"
  4036. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  4037. //?Criacao do Arquivo de Trabalho - BLOCO H010 ?
  4038. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  4039. aCampos := {}
  4040. AADD(aCampos,{"FILIAL" ,"C",nTamFil ,0 })
  4041. AADD(aCampos,{"REG" ,"C",nTamReg ,0 })
  4042. AADD(aCampos,{"COD_ITEM" ,"C",nTamCod ,0 })
  4043. AADD(aCampos,{"UNID" ,"C",nTamUNID ,0 })
  4044. AADD(aCampos,{"QTD" ,"N",aTamQtd[1],aTamQtd[2] })
  4045. AADD(aCampos,{"VL_UNIT" ,"N",aTmVlUn[1],aTmVlUn[2] })
  4046. AADD(aCampos,{"VL_ITEM" ,"N",aTamVlr[1],aTamVlr[2] })
  4047. AADD(aCampos,{"IND_PROP" ,"C",1 ,0 })
  4048. AADD(aCampos,{"COD_PART" ,"C",60 ,0 })
  4049. AADD(aCampos,{"COD_CTA" ,"C",nTamCC ,0 })
  4050. AADD(aCampos,{"VL_ITEM_IR" ,"N",aTamVlr[1],aTamVlr[2] })
  4051. AADD(aCampos,{"ALQ_PICM" ,"N",aTamPic[1],aTamPic[2] })
  4052. AADD(aCampos,{"COD_ORIG" ,"C",nTamOri })
  4053. AADD(aCampos,{"CL_CLASS" ,"C",nTamClF })
  4054.  
  4055. // Indices
  4056. AADD(aIndices,"FILIAL+COD_ITEM+IND_PROP+COD_PART")
  4057. EndCase
  4058.  
  4059. Return {aCampos,aIndices}
  4060.  
  4061. //----------------------------------------------------------------------------------------------------------//
  4062. // Ponto de entrada para geracao do Bloco H010 //
  4063. //----------------------------------------------------------------------------------------------------------//
  4064. Static Function BlocoH460(dDataAte,cAliBLH)
  4065. Local nInd := 0
  4066. Local aArea := GetArea()
  4067. Local cCodPart := ""
  4068. Local aRetJob := {}
  4069. Local cMVARQPROD := SuperGetMV("MV_ARQPROD",.F.,"SB1")
  4070. Local lCpoBZCT := SBZ->(ColumnPos("BZ_CONTA")) > 0
  4071. Local lExistArq := .F.
  4072. Local cARQTMP := "ARQTMP"
  4073. Local cNameTable := ""
  4074. Local cBloco := "H010"
  4075. Local cAliasTRB := Upper( cBloco )+"_"+CriaTrab(,.F.)
  4076.  
  4077. SaveInter()
  4078.  
  4079. If !Empty(dDataAte)
  4080. cNameTable := "H_"+DTOS(dDataAte)+STRTRAN(FWGrpCompany() ," " ,"_")+"_"+STRTRAN(cFilant ," " ,"_")
  4081. lExistArq := TcCanOpen( cNameTable )
  4082. EndIf
  4083.  
  4084. If lExistArq
  4085. aRetJob := StartJob( "BLHCriaTRB", GetEnvServer(), .T., 1, FwGrpCompany(), FwCodFil(), cBloco, cAliasTRB, .T. )
  4086. cAliBLH := aRetJob[ 2 ]
  4087.  
  4088. dbUseArea( .T., __cRdd, cAliasTRB, cAliBLH, .F., .F. )
  4089. dbSelectArea( cAliBLH )
  4090. For nInd := 1 To Len( aRetJob[ 1 ] )
  4091. Set Index To ( aRetJob[ 1 ][ nInd ][ 1 ] )
  4092. Next nInd
  4093. ( cAliBLH )->( dbSetOrder( 1 ) )
  4094.  
  4095. dbUseArea(.T. , __cRdd ,cNameTable ,cARQTMP ,.T.)
  4096. dbSelectArea( cARQTMP )
  4097.  
  4098. SB1->(dbSetOrder(1))
  4099. If cMVARQPROD == "SBZ"
  4100. SBZ->(dbSetOrder(1))
  4101. EndIf
  4102.  
  4103. dbSelectArea( cArqTMP )
  4104. ( cArqTMP )->( dbGoTop() )
  4105. While !(cArqTMP)->(EOF())
  4106. If (cArqTMP)->SITUACAO $ "3 "
  4107. (cArqTMP)->(dbSkip())
  4108. Loop
  4109. EndIf
  4110.  
  4111. SB1->(MsSeek(xFilial("SB1")+(cArqTMP)->PRODUTO))
  4112. If cMVARQPROD == "SBZ"
  4113. SBZ->(MsSeek(xFilial("SBZ")+(cArqTMP)->PRODUTO))
  4114. EndIf
  4115.  
  4116. If !Empty((cArqTMP)->TPCF)
  4117. cCodPart := Iif((cArqTMP)->TPCF == "C","SA1","SA2")+(cArqTMP)->(CLIFOR+LOJA)
  4118. EndIf
  4119.  
  4120. If (cArqTMP)->SITUACAO $ "1|2" .And. (cAliBLH)->(MsSeek((cArqTMP)->(FILIAL+PRODUTO)+"0"))
  4121. RecLock( cAliBLH, .F. )
  4122. ElseIf ((cArqTMP)->SITUACAO == "4" .And. (cAliBLH)->(MsSeek((cArqTMP)->(FILIAL+PRODUTO)+"2"+cCodPart))) ;
  4123. .Or. ((cArqTMP)->SITUACAO == "5" .And. (cAliBLH)->(MsSeek((cArqTMP)->(FILIAL+PRODUTO)+"1"+cCodPart)))
  4124. RecLock( cAliBLH, .F. )
  4125. Else
  4126. RecLock( cAliBLH, .T. )
  4127. EndIf
  4128. REG := "H010"
  4129. CL_CLASS := IIF (cMVARQPROD == "SBZ" ,SBZ->BZ_CLASFIS,SB1->B1_CLASFIS)
  4130. COD_CTA := IIF (cMVARQPROD == "SBZ" .And. lCpoBZCT ,SBZ->BZ_CONTA,SB1->B1_CONTA)
  4131. COD_ITEM := (cArqTMP)->PRODUTO
  4132. If !Empty((cArqTMP)->TPCF)
  4133. COD_PART := cCodPart
  4134. EndIf
  4135. (cAliBLH)->FILIAL := (cArqTMP)->FILIAL
  4136. IND_PROP := Iif((cArqTMP)->SITUACAO $ "1|2","0",Iif((cArqTMP)->SITUACAO == "5","1","2"))
  4137. COD_ORIG := IIF (cMVARQPROD == "SBZ" ,SBZ->BZ_ORIGEM,SB1->B1_ORIGEM)
  4138. ALQ_PICM := IIF (cMVARQPROD == "SBZ" ,SBZ->BZ_PICM,SB1->B1_PICM)
  4139. QTD += (cArqTMP)->QUANTIDADE
  4140. UNID := (cArqTMP)->UM
  4141. VL_ITEM += (cArqTMP)->TOTAL
  4142. VL_ITEM_IR += (cArqTMP)->TOTAL
  4143. VL_UNIT := VL_ITEM / QTD
  4144.  
  4145. ( cAliBLH )->( MsUnLock() )
  4146.  
  4147. (cArqTMP)->(dbSkip())
  4148. End
  4149.  
  4150. (cArqTMP)->(dbCloseArea())
  4151. EndIf
  4152.  
  4153. RestInter()
  4154. RestArea(aArea)
  4155. Return .T.
  4156.  
  4157. //-------------------------------------------------------------------
  4158. /*/{Protheus.doc} BlkApgArq
  4159. Fun鏰o de fecha os alias e dropa as tabelas temporarias criadas para o bloco K
  4160.  
  4161. @author Andre Maximo
  4162. @since 04/01/2018
  4163. @version 1.0
  4164. @Param arqTMP
  4165. /*/
  4166. //-------------------------------------------------------------------
  4167. Function BlkApgArq()
  4168. Local nX := 0
  4169.  
  4170. //谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪目
  4171. //?Fecha os Arquivos Temporarios ?
  4172. //滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁
  4173. For nX := 1 To Len(aTmpRegK)
  4174. If Empty(aTmpRegK[nX,2]) // se n鉶 tiver o nome da tabela ent鉶 foi criada via FWTemporaryTable
  4175. aTmpRegK[nX,4]:Delete()
  4176. FreeObj(aTmpRegK[nX,4])
  4177.  
  4178. Else
  4179. If Select(aTmpRegK[nX,1])>0
  4180. (aTmpRegK[nX,1])->(DbCloseArea())
  4181. EndIf
  4182.  
  4183. If TcCanOpen( aTmpRegK[nX,2] )
  4184. TcDelFile( aTmpRegK[nX,2] )
  4185. EndIf
  4186. aSize(aTmpRegK[nX,3],0)
  4187. EndIf
  4188. aSize(aTmpRegK[nX],0)
  4189.  
  4190. Next nX
  4191.  
  4192. aSize(aTmpRegK,0)
  4193. Return
  4194.  
  4195. //-------------------------------------------------------------------
  4196. /*/{Protheus.doc} GetPerdMov
  4197. Fun鏰o que retornar a quantidade apontada de perda no MATA685
  4198. @author Andre Maximo
  4199. @since 04/01/2018
  4200. @version 1.0
  4201. @Param arqTMP
  4202. /*/
  4203. //-------------------------------------------------------------------
  4204. Function GetPerdMov(cOP,cCodComp,dDataDe,dDataAte)
  4205.  
  4206. Local nQuant
  4207. Local cFilialSBC := xFilial("SBC")
  4208. Local cAliasTRB := Getnextalias()
  4209.  
  4210. BeginSql Alias cAliasTRB
  4211. SELECT ISNULL(SUM(BC_QUANT),0) BC_QUANT
  4212. FROM %Table:SBC% SBC
  4213. WHERE SBC.BC_FILIAL = %Exp:cFilialSBC% AND
  4214. SBC.BC_PRODUTO = %Exp:cCodComp% AND
  4215. SBC.BC_CODDEST = ' ' AND
  4216. SBC.BC_NUMSEQ <> ' ' AND
  4217. SBC.BC_OP = %Exp:cOP % AND
  4218. SBC.BC_DATA BETWEEN %Exp: DtoS(dDataDe) % AND %Exp: DtoS(dDataAte)% AND
  4219. SBC.%NotDel%
  4220. EndSql
  4221. nQuant:= (cAliasTRB)->BC_QUANT
  4222.  
  4223. (cAliasTRB)->(dbCloseArea())
  4224.  
  4225. Return(nQuant)
  4226.  
  4227. //-------------------------------------------------------------------
  4228. /*/{Protheus.doc} Fun玢o que retorna a vers鉶 do leiaute do bloco K
  4229. @author Flavio Lopes Rasta
  4230. @since 13/09/2018
  4231. @version 1.0
  4232. /*/
  4233. //-------------------------------------------------------------------
  4234. Function VerBlocoK(dDataDe)
  4235. Local cVerRet := ""
  4236.  
  4237. Do Case
  4238. Case(Year(dDataDe)==2018)
  4239. cVerRet := "012"
  4240. Case(Year(dDataDe)>=2019)
  4241. cVerRet := "013"
  4242. EndCase
  4243.  
  4244. Return cVerRet
  4245.  
  4246. /*/{Protheus.doc} REGK300
  4247. Geracao dos registros do K300, K301 e K302 referentes ao movimentos internos de
  4248. requisicao e produ玢o de ordem de producao em terceiros, a qual a estrutura do
  4249. prduto seja negativa ocorrido no periodo de apuracao do SPED FISCAL
  4250. @author reynaldo
  4251. @since 19/09/2018
  4252. @version 1.0
  4253. @return ${return}, ${return_description}
  4254. @param cAliK300, characters, descricao
  4255. @param cAliK301, characters, descricao
  4256. @param cAliK302, characters, descricao
  4257. @param dDataDe, date, descricao
  4258. @param dDataAte, date, descricao
  4259. @param lGerLogPro, logical, descricao
  4260. @param lRePross, logical, descricao
  4261. @type function
  4262. /*/
  4263. Static Function REGK300(cAliK300,cAliK301,cAliK302,dDataDe,dDataAte, lGerLogPro,lRePross)
  4264. REGK302(cAliK302,cAliK301,cAliK300,dDataDe,dDataAte,lGerLogPro,lRePross)
  4265. Return
  4266.  
  4267. /*/{Protheus.doc} REGK301
  4268. Geracao dos registros do K301 referentes ao movimentos internos de produ玢o de
  4269. ordem de producao em terceiros, a qual a estrutura do produto seja negativa
  4270. ocorrido no periodo de apuracao do SPED FISCAL
  4271. @author reynaldo
  4272. @since 19/09/2018
  4273. @version 1.0
  4274. @return ${return}, ${return_description}
  4275. @param cAliK301, characters, descricao
  4276. @param cAliK300, characters, descricao
  4277. @param dDataDe, date, descricao
  4278. @param dDataAte, date, descricao
  4279. @param cEmissao, characters, descricao
  4280. @param cProdPA, characters, descricao
  4281. @param lGerLogPro, logical, descricao
  4282. @param lRepross, logical, descricao
  4283. @type function
  4284. /*/
  4285. Static Function REGK301(cAliK301,cAliK300,dDataDe,dDataAte,cEmissao,cProdPA,lGerLogPro,lRepross)
  4286. Local cQuery := ""
  4287. Local cAliasTMP := GetNextAlias()
  4288. Local lK301 := .F.
  4289.  
  4290. Default lGerLogPro := .T.
  4291. Default lRepross := .T.
  4292.  
  4293. cQuery := ""
  4294. cQuery += "SELECT SUM(SD3.D3_QUANT) QUANT "
  4295. cQuery += " ,SD3.D3_COD "
  4296. cQuery += " ,SD3.D3_FILIAL "
  4297. cQuery += " ,SD3.D3_EMISSAO "
  4298. cQuery += "FROM "+RetSQLName("SD3")+" SD3 "
  4299. cQuery += "JOIN "+RetSQLName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial("SB1")+"' "
  4300. cQuery += " AND SB1.B1_COD = SD3.D3_COD "
  4301. cQuery += " AND SB1.B1_CCCUSTO = ' ' "
  4302. cQuery += " AND SB1.D_E_L_E_T_ = ' ' "
  4303. cQuery += " INNER JOIN "+RetSQLName("SC2")+" SC2 ON SC2.C2_NUM||SC2.C2_ITEM||SC2.C2_SEQUEN||SC2.C2_ITEMGRD = SD3.D3_OP "
  4304. cQuery += " AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' "
  4305. cQuery += " AND SC2.C2_ITEM <> 'OS' "
  4306. cQuery += " AND SC2.C2_TPPR IN ('E') "
  4307. cQuery += " AND SC2.D_E_L_E_T_ = ' ' "
  4308. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial("SD3")+"' "
  4309. cQuery += " AND SD3.D3_ESTORNO = ' ' "
  4310. cQuery += " AND SD3.D3_CF IN ( "
  4311. cQuery += " 'PR0' "
  4312. cQuery += " ,'PR1' "
  4313. cQuery += " ) "
  4314. cQuery += " AND SD3.D3_COD NOT LIKE 'MOD%' "
  4315. cQuery += " AND SD3.D3_EMISSAO BETWEEN '"+DTOS(dDataDe)+"' "
  4316. cQuery += " AND '"+DTOS(dDataAte)+"' "
  4317. cQuery += " AND SD3.D3_EMISSAO = '"+cEmissao+"' "
  4318. cQuery += " AND SD3.D3_COD = '"+cProdPA+"' "
  4319. cQuery += " AND SD3.D_E_L_E_T_ = ' ' "
  4320. If lCpoBZTP
  4321. cQuery += " AND COALESCE(SBZ.BZ_TIPO,SB1.B1_TIPO) IN ( "
  4322. Else
  4323. cQuery += " AND SB1.B1_TIPO IN ( "
  4324. EndIf
  4325. cQuery += cTipo03+","+cTipo04
  4326. cQuery += " ) "
  4327. cQuery += "GROUP BY SD3.D3_FILIAL "
  4328. cQuery += " ,SD3.D3_EMISSAO "
  4329. cQuery += " ,SD3.D3_COD "
  4330. cQuery += "HAVING SUM(D3_QUANT) > 0 "
  4331. cQuery += "UNION ALL "
  4332. cQuery += "SELECT SUM(SD3.D3_QUANT) QUANT "
  4333. cQuery += " ,SD3.D3_COD "
  4334. cQuery += " ,SD3.D3_FILIAL "
  4335. cQuery += " ,SD3.D3_EMISSAO "
  4336. cQuery += "FROM "+RetSQLName("SD3")+" SD3 "
  4337. cQuery += "JOIN "+RetSQLName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial("SB1")+"' "
  4338. cQuery += " AND SB1.B1_COD = SD3.D3_COD "
  4339. cQuery += " AND SB1.B1_FANTASM != 'S' "
  4340. cQuery += " AND SB1.B1_CCCUSTO = ' ' "
  4341. cQuery += " AND SB1.D_E_L_E_T_ = ' ' "
  4342. cQuery += " INNER JOIN "+RetSQLName("SC2")+" SC2 ON SC2.C2_NUM||SC2.C2_ITEM||SC2.C2_SEQUEN||SC2.C2_ITEMGRD = SD3.D3_OP "
  4343. cQuery += " AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' "
  4344. cQuery += " AND SC2.C2_PRODUTO = '"+cProdPA+"' "
  4345. cQuery += "AND SC2.C2_ITEM <> 'OS' "
  4346. cQuery += "AND SC2.C2_TPPR IN ('E') "
  4347. cQuery += "AND SC2.D_E_L_E_T_ = ' ' "
  4348. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial("SD3")+"' "
  4349. cQuery += " AND SD3.D3_CF = 'DE1' "
  4350. cQuery += " AND SD3.D3_ESTORNO = ' ' "
  4351. cQuery += " AND SD3.D3_COD NOT LIKE 'MOD%' "
  4352. cQuery += " AND SD3.D3_EMISSAO BETWEEN '"+DTOS(dDataDe)+"' "
  4353. cQuery += " AND '"+DTOS(dDataAte)+"' "
  4354. cQuery += " AND SD3.D3_EMISSAO = '"+cEmissao+"' "
  4355. cQuery += " AND SD3.D_E_L_E_T_ = ' '"
  4356. If lCpoBZTP
  4357. cQuery += " AND COALESCE(SBZ.BZ_TIPO,SB1.B1_TIPO) IN ( "
  4358. Else
  4359. cQuery += " AND SB1.B1_TIPO IN ( "
  4360. EndIf
  4361. cQuery += " "+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+" "
  4362. cQuery += " ) "
  4363. cQuery += "GROUP BY SD3.D3_FILIAL "
  4364. cQuery += " ,SD3.D3_EMISSAO "
  4365. cQuery += " ,SD3.D3_COD "
  4366. cQuery += "HAVING SUM(D3_QUANT) > 0 "
  4367.  
  4368. cQuery := ChangeQuery(cQuery)
  4369. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  4370.  
  4371.  
  4372. While !(cAliasTmp)->(Eof())
  4373. Reclock(cAliK301,.T.)
  4374. (cAliK301)->FILIAL := (cAliasTmp)->D3_FILIAL
  4375. (cAliK301)->CHAVE := cEmissao+cProdPA
  4376. (cAliK301)->REG := "K301"
  4377. (cAliK301)->COD_ITEM := (cAliasTmp)->D3_COD
  4378. (cAliK301)->QTD := (cAliasTmp)->QUANT
  4379. (cAliK301)->(MsUnLock())
  4380. nRegsto++
  4381. lK301 := .T.
  4382. If !((cAliK300)->(MsSeek((cAliasTmp)->D3_FILIAL+cEmissao)))
  4383. Reclock(cAliK300,.T.)
  4384. (cAliK300)->FILIAL := (cAliasTmp)->D3_FILIAL
  4385. (cAliK300)->REG := "K300"
  4386. (cAliK300)->DT_PROD := STOD((cAliasTmp)->D3_EMISSAO)
  4387. (cAliK300)->CHAVE := cEmissao
  4388. (cAliK300)->(MsUnLock())
  4389. nRegsto++
  4390. EndIf
  4391. (cAliasTmp)->(dbSkip())
  4392. EndDo
  4393.  
  4394.  
  4395. Return lK301
  4396.  
  4397. /*/{Protheus.doc} REGK302
  4398. Geracao dos registros do K301 referentes ao movimentos internos de produ玢o de
  4399. ordem de producao em terceiros, a qual a estrutura do produto seja negativa
  4400. ocorrido no periodo de apuracao do SPED FISCAL
  4401. @author reynaldo
  4402. @since 19/09/2018
  4403. @version 1.0
  4404. @return ${return}, ${return_description}
  4405. @param cAliK302, characters, descricao
  4406. @param cAliK301, characters, descricao
  4407. @param cAliK300, characters, descricao
  4408. @param dDataDe, date, descricao
  4409. @param dDataAte, date, descricao
  4410. @param lGerLogPro, logical, descricao
  4411. @param lRepross, logical, descricao
  4412. @type function
  4413. /*/
  4414. Static Function REGK302(cAliK302,cAliK301,cAliK300,dDataDe,dDataAte,lGerLogPro,lRepross)
  4415. Local cAliasTmp := GetNextAlias()
  4416. Local cQuery := ""
  4417. Local lRet := .F.
  4418.  
  4419. Default lGerLogPro := .T.
  4420. Default lRepross := .T.
  4421.  
  4422. cQuery := ""
  4423. cQuery += "SELECT SUM(CASE "
  4424. cQuery += " WHEN SD3.D3_CF LIKE ('DE%') "
  4425. cQuery += " THEN (SD3.D3_QUANT * - 1) "
  4426. cQuery += " WHEN SD3.D3_CF LIKE ('RE%') "
  4427. cQuery += " THEN (SD3.D3_QUANT) "
  4428. cQuery += " ELSE 0 "
  4429. cQuery += " END) QUANT "
  4430. cQuery += " ,SD3.D3_COD "
  4431. cQuery += " ,SD3.D3_EMISSAO "
  4432. cQuery += " ,SC2.C2_PRODUTO "
  4433. cQuery += " ,SD3.D3_FILIAL "
  4434. cQuery += "FROM "+RetSqlName("SD3")+" SD3 "
  4435. cQuery += "JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial('SB1')+"' "
  4436. cQuery += " AND SB1.B1_COD = SD3.D3_COD "
  4437. cQuery += " AND SB1.B1_CCCUSTO = ' ' "
  4438. cQuery += " AND SB1.B1_COD NOT LIKE 'MOD%' "
  4439. cQuery += " AND SB1.D_E_L_E_T_ = ' ' "
  4440. If lCpoBZTP
  4441. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' "
  4442. cQuery += "AND SBZ.BZ_COD = SB1.B1_COD "
  4443. cQuery += "AND SBZ.D_E_L_E_T_ = ' ' "
  4444. EndIf
  4445. cQuery += "JOIN "+RetSqlName("SC2")+" SC2 ON SD3.D3_OP = SC2.C2_NUM||SC2.C2_ITEM||SC2.C2_SEQUEN||SC2.C2_ITEMGRD "
  4446. cQuery += "AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' "
  4447. cQuery += "AND SC2.C2_ITEM <> 'OS' "
  4448. cQuery += "AND SC2.C2_TPPR IN ('E') "
  4449. cQuery += "AND SC2.D_E_L_E_T_ = ' ' "
  4450. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  4451. cQuery += " AND SD3.D3_ESTORNO = ' ' "
  4452. cQuery += " AND (SD3.D3_CF LIKE ('RE%') OR SD3.D3_CF LIKE ('DE%')) "
  4453. cQuery += " AND SD3.D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' AND '"+DtoS(dDataAte)+"' "
  4454. cQuery += " AND SD3.D3_CF <> 'DE1' "
  4455. cQuery += " AND SD3.D_E_L_E_T_ = ' ' "
  4456. cQuery += " AND "
  4457. If lCpoBZTP
  4458. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  4459. Else
  4460. cQuery += "SB1.B1_TIPO "
  4461. EndIf
  4462. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  4463. cQuery += " AND EXISTS ( "
  4464. cQuery += " SELECT 1 FROM "+RetSQLName("SG1")+" SG1 "
  4465. cQuery += " JOIN "+RetSQLName("SB1")+" SB1COMP ON SB1COMP.B1_FILIAL = '"+xFilial("SB1")+"' "
  4466. cQuery += " AND SB1COMP.B1_COD = SG1.G1_COMP "
  4467. cQuery += " AND SB1COMP.B1_CCCUSTO = ' ' "
  4468. cQuery += " AND SB1COMP.B1_COD NOT LIKE 'MOD%' "
  4469. cQuery += " AND SB1COMP.D_E_L_E_T_ = ' ' "
  4470. cQuery += " WHERE SG1.G1_FILIAL = '"+xFilial("SG1")+"' "
  4471. cQuery += " AND SG1.G1_COD = SC2.C2_PRODUTO "
  4472. cQuery += " AND SG1.G1_REVINI <= CASE WHEN SC2.C2_REVISAO = ' ' THEN SB1COMP.B1_REVATU ELSE SC2.C2_REVISAO END "
  4473. cQuery += " AND SG1.G1_REVFIM >= CASE WHEN SC2.C2_REVISAO = ' ' THEN SB1COMP.B1_REVATU ELSE SC2.C2_REVISAO END "
  4474. cQuery += " AND SG1.G1_QUANT < 0 "
  4475. cQuery += " AND SG1.G1_INI <= '"+DTOS(dDataDe)+"' "
  4476. cQuery += " AND SG1.G1_FIM >= '"+DTOS(dDataAte)+"' "
  4477. cQuery += " AND SG1.D_E_L_E_T_ = ' ' "
  4478. cQuery += " ) "
  4479. cQuery += "GROUP BY SD3.D3_EMISSAO,SC2.C2_PRODUTO, SD3.D3_COD, SD3.D3_FILIAL "
  4480. cQuery += "HAVING SUM(D3_QUANT) >0 "
  4481. cQuery += "ORDER BY 4,3,2"
  4482.  
  4483. cQuery := ChangeQuery(cQuery)
  4484. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  4485.  
  4486. While !(cAliasTmp)->(Eof())
  4487. If REGK301(cAliK301,cAliK300,dDataDe,dDataAte,(cAliasTmp)->D3_EMISSAO,(cAliasTmp)->C2_PRODUTO )
  4488. Reclock(cAliK302,.T.)
  4489. (cAliK302)->FILIAL := (cAliasTmp)->D3_FILIAL
  4490. (cAliK302)->CHAVE := (cAliasTmp)->D3_EMISSAO+(cAliasTmp)->C2_PRODUTO
  4491. (cAliK302)->REG := "K302"
  4492. (cAliK302)->COD_ITEM := (cAliasTmp)->D3_COD
  4493. (cAliK302)->QTD := (cAliasTmp)->QUANT
  4494. (cAliK302)->(MsUnLock())
  4495. nRegsto++
  4496. EndIf
  4497. (cAliasTmp)->(dbSkip())
  4498. EndDo
  4499.  
  4500. // atualiza os registros SD3 que foram processados no periodo
  4501. If lGerLogPro
  4502. BlkPro302(dDataDe,dDataAte)
  4503. BlkPro301(dDataDe,dDataAte)
  4504. EndIf
  4505. //----------------------//
  4506. // Grava Tabela de Hist //
  4507. //----------------------//
  4508. BlkGrvTab(cAliK300,"D3R",aTmpRegK[K300][4],dDataAte,lRepross)
  4509. BlkGrvTab(cAliK301,"D3S",aTmpRegK[K301][4],dDataAte,lRepross)
  4510. BlkGrvTab(cAliK302,"D3T",aTmpRegK[K302][4],dDataAte,lRepross)
  4511.  
  4512. (cAliasTmp)->(dbCloseArea())
  4513.  
  4514. Return lRet
  4515.  
  4516. /*/{Protheus.doc} GetSldTerc
  4517. Gera registros para o K200 referentes a produtos de terceiros ou em terceiros
  4518. @author reynaldo
  4519. @since 08/10/2018
  4520. @version 1.0
  4521. @return ${return}, ${return_description}
  4522. @param cTipoTerc, characters, descricao
  4523. @param dDataAte, date, descricao
  4524. @param cCodProdDe, characters, descricao
  4525. @param cCodProdAte, characters, descricao
  4526. @param cAliK200, characters, descricao
  4527. @param nSldTesN3, numeric, descricao
  4528. @type function
  4529. /*/
  4530. Static Function GetSldTerc(cTipoTerc ,dDataAte ,cCodProdDe ,cCodProdAte ,cAliK200 ,nSldTesN3)
  4531. Local cQuery := ""
  4532. Local cSB9Filial:= xFilial("SB9")
  4533. Local cAliTerc := GetNextAlias()
  4534. Local cIND_EST := 0
  4535.  
  4536. cQuery := QryTerc(cTipoTerc,dDataAte,nSldTesN3,cCodProdDe,cCodProdAte)
  4537.  
  4538. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliTerc,.T.,.T.)
  4539. While !(cAliTerc)->(Eof())
  4540. // descontar do saldo proprio, o saldo DE Terceiro
  4541. If (cAliK200)->(MsSeek(cSB9Filial+DTOS(dDataAte)+(cAliTerc)->(B6_PRODUTO)+"0"))
  4542. If (cAliTerc)->F4_ESTOQUE == "S"
  4543. If ((cAliK200)->QTD - (cAliTerc)->SALDO) <= 0
  4544. Reclock(cAliK200,.F.)
  4545. DbDelete()
  4546. (cAliK200)->(MsUnLock())
  4547. Else
  4548. If !Empty((cAliTerc)->(B6_CLIFOR+B6_LOJA))
  4549. Reclock(cAliK200,.F.)
  4550. (cAliK200)->QTD -= (cAliTerc)->SALDO
  4551. (cAliK200)->(MsUnLock())
  4552. EndIf
  4553. EndIf
  4554. EndIf
  4555. EndIf
  4556. If cTipoTerc == "D"
  4557. cIND_EST := "2"
  4558. Else
  4559. If cTipoTerc == "E"
  4560. cIND_EST := "1"
  4561. EndIf
  4562. EndIf
  4563.  
  4564. If !Empty((cAliTerc)->(B6_CLIFOR+B6_LOJA))
  4565. If (cAliK200)->(MsSeek(cSB9Filial+DTOS(dDataAte)+(cAliTerc)->(B6_PRODUTO+cIND_EST+LEFT(PESSOA,3)+B6_CLIFOR+B6_LOJA)))
  4566. If ((cAliK200)->QTD + (cAliTerc)->SALDO) <= 0
  4567. Reclock(cAliK200,.F.)
  4568. DbDelete()
  4569. (cAliK200)->(MsUnLock())
  4570. Else
  4571. Reclock(cAliK200,.F.)
  4572. (cAliK200)->QTD += (cAliTerc)->SALDO
  4573. (cAliK200)->(MsUnLock())
  4574. EndIf
  4575. Else
  4576. if (cAliTerc)->SALDO>0
  4577. Reclock(cAliK200,.T.)
  4578. (cAliK200)->FILIAL := cSB9Filial
  4579. (cAliK200)->REG := "K200"
  4580. (cAliK200)->DT_EST := dDataAte
  4581. (cAliK200)->COD_ITEM := (cAliTerc)->B6_PRODUTO
  4582. (cAliK200)->QTD := (cAliTerc)->SALDO
  4583. (cAliK200)->IND_EST := cIND_EST
  4584. (cAliK200)->COD_PART := (cAliTerc)->(LEFT(PESSOA,3)+B6_CLIFOR+B6_LOJA)
  4585. (cAliK200)->(MsUnLock())
  4586. EndIf
  4587. EndIf
  4588. EndIf
  4589. (cAliTerc)->(dbSkip())
  4590. EndDo
  4591.  
  4592. (cAliTerc)->(dbCloseArea())
  4593. Return
  4594.  
  4595. /*/{Protheus.doc} QryTerc
  4596. Montagem de query para selecionar os produtos que tem saldo em terceiro ou de terceiro
  4597. @author reynaldo
  4598. @since 04/10/2018
  4599. @version 1.0
  4600. @return ${return}, ${return_description}
  4601. @param cTipoTerc, characters, descricao
  4602. @param dDataAte, date, descricao
  4603. @param nSldTesN3, numeric, descricao
  4604. @param cCodProdDe, characters, descricao
  4605. @param cCodProdAte, characters, descricao
  4606. @type function
  4607. /*/
  4608. Static Function QryTerc(cTipoTerc,dDataAte,nSldTesN3,cCodProdDe,cCodProdAte)
  4609. Local cQuery := ""
  4610. Local lAliasD3E := AliasInDic("D3E")
  4611. Local lAliasD3K := AliasInDic("D3K")
  4612.  
  4613. cQuery := ""
  4614. cQuery += "SELECT B6_PRODUTO "
  4615. cQuery += " ,PESSOA "
  4616. cQuery += " ,B6_CLIFOR "
  4617. cQuery += " ,B6_LOJA "
  4618. cQuery += " ,F4_ESTOQUE "
  4619. cQuery += " ,CASE "
  4620. cQuery += " WHEN SUM(REQUISICAO)<=0 "
  4621. cQuery += "AND SUM(RETORNO)*-1>SUM(REQUISICAO)*-1 THEN SUM(REMESSA)+ SUM(RETORNO) "
  4622. cQuery += "ELSE SUM(REMESSA)+ SUM(REQUISICAO) "
  4623. cQuery += "END SALDO "
  4624. cQuery += "FROM ( "
  4625. // Seleciona os registros da SB6 que s鉶 remessa DE e EM terceiros
  4626. cQuery += "SELECT B6_PRODUTO "
  4627. cQuery += " ,( "
  4628. cQuery += " CASE "
  4629. cQuery += " WHEN B6_TPCF = 'C' "
  4630. cQuery += " THEN 'SA1' "
  4631. cQuery += " WHEN B6_TPCF = 'F' "
  4632. cQuery += " THEN 'SA2' "
  4633. cQuery += " END "
  4634. cQuery += " ) PESSOA "
  4635. cQuery += ",B6_CLIFOR "
  4636. cQuery += ",B6_LOJA "
  4637. If nSldTesN3 == 1
  4638. cQuery += " ,'S' F4_ESTOQUE "
  4639. Else
  4640. cQuery += " ,F4_ESTOQUE "
  4641. EndIf
  4642. cQuery += ",B6_QUANT REMESSA "
  4643. cQuery += ",0 RETORNO "
  4644. cQuery += ",0 REQUISICAO "
  4645. cQuery += "FROM "+RetSqlName("SB6")+" SB6 "
  4646. cQuery += "INNER JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial("SB1")+"' "
  4647. cQuery += "AND SB1.B1_COD = SB6.B6_PRODUTO "
  4648. cQuery += "AND SB1.B1_COD NOT LIKE 'MOD%' "
  4649. cQuery += "AND SB1.B1_CCCUSTO = ' ' "
  4650. cQuery += "AND SB1.D_E_L_E_T_ = ' ' "
  4651. If lCpoBZTP
  4652. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  4653. EndIf
  4654. cQuery += "INNER JOIN "+RetSqlName("SF4")+" SF4 ON SF4.F4_FILIAL = '"+xFilial("SF4")+"' "
  4655. cQuery += " AND SF4.F4_CODIGO = SB6.B6_TES "
  4656. cQuery += " AND SF4.F4_PODER3 = 'R' "
  4657. If nSldTesN3 == 0
  4658. cQuery += " AND SF4.F4_ESTOQUE = 'S' "
  4659. EndIf
  4660. cQuery += " AND SF4.D_E_L_E_T_ = ' ' "
  4661. cQuery += "WHERE SB6.B6_FILIAL = '"+xFilial("SB6")+"' "
  4662. cQuery += " AND SB6.B6_PRODUTO BETWEEN '"+cCodProdDe+"' AND '"+cCodProdAte+"' "
  4663. cQuery += " AND SB6.B6_TIPO = '"+cTipoTerc+"' "
  4664. cQuery += " AND SB6.B6_DTDIGIT <= '"+dtos(dDataAte)+"' "
  4665. cQuery += " AND SB6.D_E_L_E_T_ = ' ' AND "
  4666. If lCpoBZTP
  4667. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  4668. Else
  4669. cQuery += "SB1.B1_TIPO "
  4670. EndIF
  4671. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo06+","+cTipo10+") "
  4672. If lAliasD3E
  4673. cQuery += "AND NOT EXISTS( "
  4674. cQuery += "SELECT 1 FROM "+ RetSqlName("D3E") +" D3E "
  4675. cQuery += "JOIN "+ RetSqlName("SA1") +" SA1 "
  4676. cQuery += "ON SA1.A1_FILIAL = '"+ xFilial("SA1") +"' AND SA1.A1_COD = D3E.D3E_CLIENT AND SA1.A1_LOJA = D3E.D3E_LOJA AND SA1.D_E_L_E_T_ = ' ' "
  4677. cQuery += "WHERE D3E.D3E_FILIAL = '"+ xFilial("D3E") +"' AND D3E.D3E_COD = SB6.B6_PRODUTO AND D3E.D_E_L_E_T_ = ' ' "
  4678. cQuery += ") "
  4679. EndIf
  4680. cQuery += "UNION ALL "
  4681. // Seleciona os registros da SB6 que s鉶 retorno de remessa DE e EM terceiros, desde que encontre a remessa de terceiro respectivo
  4682. cQuery += "SELECT SB6.B6_PRODUTO "
  4683. cQuery += " ,( "
  4684. cQuery += " CASE "
  4685. cQuery += " WHEN SB6REM.B6_TPCF = 'C' "
  4686. cQuery += " THEN 'SA1' "
  4687. cQuery += " WHEN SB6REM.B6_TPCF = 'F' "
  4688. cQuery += " THEN 'SA2' "
  4689. cQuery += " END "
  4690. cQuery += " ) PESSOA "
  4691. cQuery += " ,SB6REM.B6_CLIFOR "
  4692. cQuery += " ,SB6REM.B6_LOJA "
  4693. If nSldTesN3 == 1
  4694. cQuery += " ,'S' F4_ESTOQUE "
  4695. Else
  4696. cQuery += " ,SF4REM.F4_ESTOQUE "
  4697. EndIf
  4698. cQuery += " ,0 "
  4699. cQuery += " ,SB6.B6_QUANT * - 1 B6_QUANT "
  4700. cQuery += " ,0 "
  4701. cQuery += "FROM "+RetSqlName("SB6")+" SB6 "
  4702. cQuery += "INNER JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial("SB1")+"' "
  4703. cQuery += " AND SB1.B1_COD = SB6.B6_PRODUTO "
  4704. cQuery += " AND SB1.B1_COD NOT LIKE 'MOD%' "
  4705. cQuery += " AND SB1.B1_CCCUSTO = ' ' "
  4706. cQuery += " AND SB1.D_E_L_E_T_ = ' ' "
  4707. If lCpoBZTP
  4708. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  4709. EndIf
  4710. cQuery += "LEFT JOIN "+RetSqlName("SB6")+" SB6REM ON SB6REM.B6_FILIAL = '"+xFilial("SB6")+"' "
  4711. cQuery += " AND SB6REM.B6_IDENT = SB6.B6_IDENT "
  4712. cQuery += " AND SB6REM.B6_TIPO = '"+cTipoTerc+"' "
  4713. cQuery += " AND SB6REM.B6_PRODUTO = SB6.B6_PRODUTO "
  4714. cQuery += " AND SB6REM.B6_DTDIGIT <= '"+dtos(dDataAte)+"' "
  4715. cQuery += " AND SB6REM.D_E_L_E_T_ = ' ' "
  4716. cQuery += "INNER JOIN "+RetSqlName("SF4")+" SF4REM ON SF4REM.F4_FILIAL = '"+xFilial("SF4")+"' "
  4717. cQuery += " AND SF4REM.F4_CODIGO = SB6REM.B6_TES "
  4718. cQuery += " AND SF4REM.F4_PODER3 = 'R' "
  4719. If nSldTesN3 == 0
  4720. cQuery += " AND SF4REM.F4_ESTOQUE = 'S' "
  4721. EndIf
  4722. cQuery += " AND SF4REM.D_E_L_E_T_ = ' ' "
  4723. cQuery += "INNER JOIN "+RetSqlName("SF4")+" SF4 ON SF4.F4_FILIAL = '"+xFilial("SF4")+"' "
  4724. cQuery += " AND SF4.F4_CODIGO = SB6.B6_TES "
  4725. cQuery += " AND SF4.F4_PODER3 = 'D' "
  4726. If nSldTesN3 == 0
  4727. cQuery += " AND SF4.F4_ESTOQUE = 'S' "
  4728. EndIf
  4729. cQuery += " AND SF4.D_E_L_E_T_ = ' ' "
  4730. cQuery += "WHERE SB6.B6_FILIAL = '"+xFilial("SB6")+"' "
  4731. cQuery += " AND SB6.B6_PRODUTO BETWEEN '"+cCodProdDe+"' AND '"+cCodProdAte+"' "
  4732. cQuery += " AND SB6.B6_TIPO = '"+cTipoTerc+"' "
  4733. cQuery += " AND SB6.B6_DTDIGIT <= '"+dtos(dDataAte)+"' "
  4734. cQuery += " AND SB6.D_E_L_E_T_ = ' ' AND "
  4735. If lCpoBZTP
  4736. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  4737. Else
  4738. cQuery += "SB1.B1_TIPO "
  4739. EndIF
  4740. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo06+","+cTipo10+") "
  4741. If lAliasD3E
  4742. cQuery += "AND NOT EXISTS( "
  4743. cQuery += "SELECT 1 FROM "+ RetSqlName("D3E") +" D3E "
  4744. cQuery += "JOIN "+ RetSqlName("SA1") +" SA1 "
  4745. cQuery += "ON SA1.A1_FILIAL = '"+ xFilial("SA1") +"' AND SA1.A1_COD = D3E.D3E_CLIENT AND SA1.A1_LOJA = D3E.D3E_LOJA AND SA1.D_E_L_E_T_ = ' ' "
  4746. cQuery += "WHERE D3E.D3E_FILIAL = '"+ xFilial("D3E") +"' AND D3E.D3E_COD = SB6.B6_PRODUTO AND D3E.D_E_L_E_T_ = ' ' "
  4747. cQuery += ") "
  4748. EndIf
  4749. cQuery += "UNION ALL "
  4750. cQuery += "SELECT "
  4751. cQuery += "SD3.D3_COD ,'SA1' "
  4752. If lAliasD3K
  4753. cQuery += ",D3K.D3K_CLIENT ,D3K.D3K_LOJA ,'S' ,0 ,0 ,D3K.D3K_QTDE*-1 "
  4754. Else
  4755. cQuery += ",' ' D3K_CLIENT ,' ' D3K_LOJA ,'S' ,0 ,0 ,0 "
  4756. EndIf
  4757. cQuery += "FROM "+RetSqlName("SD3")+" SD3 "
  4758. If lAliasD3K
  4759. cQuery += "JOIN "+RetSqlName("D3K")+" D3K ON D3K.D3K_FILIAL = '"+xFilial("D3K")+"' "
  4760. cQuery += "AND D3K.D3K_NUMSEQ = SD3.D3_NUMSEQ "
  4761. cQuery += "AND D3K.D3K_COD = SD3.D3_COD "
  4762. cQuery += "AND D3K.D_E_L_E_T_ = ' ' "
  4763. EndIf
  4764. cQuery += "INNER JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial("SB1")+"' "
  4765. cQuery += " AND SB1.B1_COD = SD3.D3_COD "
  4766. cQuery += " AND SB1.B1_COD NOT LIKE 'MOD%' "
  4767. cQuery += " AND SB1.B1_CCCUSTO = ' ' "
  4768. cQuery += " AND SB1.D_E_L_E_T_ = ' ' "
  4769. If lCpoBZTP
  4770. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  4771. EndIf
  4772. cQuery += "WHERE "
  4773. cQuery += "SD3.D3_FILIAL = '"+xFilial("SD3")+"' "
  4774. cQuery += "AND SD3.D3_EMISSAO <= '"+dtos(dDataAte)+"' "
  4775. cQuery += "AND SD3.D3_CF LIKE 'RE%' "
  4776. cQuery += "AND SD3.D3_OP <> ' ' "
  4777. cQuery += "AND SD3.D_E_L_E_T_ = ' ' AND "
  4778. If lCpoBZTP
  4779. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  4780. Else
  4781. cQuery += "SB1.B1_TIPO "
  4782. EndIF
  4783. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo06+","+cTipo10+") "
  4784. If lAliasD3E
  4785. cQuery += "AND NOT EXISTS( "
  4786. cQuery += "SELECT 1 FROM "+ RetSqlName("D3E") +" D3E "
  4787. cQuery += "JOIN "+ RetSqlName("SA1") +" SA1 "
  4788. cQuery += "ON SA1.A1_FILIAL = '"+ xFilial("SA1") +"' AND SA1.A1_COD = D3E.D3E_CLIENT AND SA1.A1_LOJA = D3E.D3E_LOJA AND SA1.D_E_L_E_T_ = ' ' "
  4789. cQuery += "WHERE D3E.D3E_FILIAL = '"+ xFilial("D3E") +"' AND D3E.D3E_COD = SD3.D3_COD AND D3E.D_E_L_E_T_ = ' ' "
  4790. cQuery += ") "
  4791. EndIf
  4792.  
  4793. If cTipoTerc == "D"
  4794. cQuery += "UNION ALL "
  4795. cQuery += "SELECT "
  4796. cQuery += "SD3.D3_COD ,'SA1' "
  4797. If lAliasD3K
  4798. cQuery += ",D3K.D3K_CLIENT ,D3K.D3K_LOJA ,'S' ,0 ,0 ,D3K.D3K_QTDE "
  4799. Else
  4800. cQuery += ",' ' D3K_CLIENT ,' ' D3K_LOJA ,'S' ,0 ,0 ,0 "
  4801. EndIf
  4802. cQuery += "FROM "+RetSqlName("SD3")+" SD3 "
  4803. cQuery += "INNER JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial("SB1")+"' "
  4804. cQuery += " AND SB1.B1_COD = SD3.D3_COD "
  4805. cQuery += " AND SB1.B1_COD NOT LIKE 'MOD%' "
  4806. cQuery += " AND SB1.B1_CCCUSTO = ' ' "
  4807. cQuery += " AND SB1.D_E_L_E_T_ = ' ' "
  4808. cQuery += " AND SB1.D_E_L_E_T_ = ' ' "
  4809. If lCpoBZTP
  4810. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  4811. EndIf
  4812. If lAliasD3K
  4813. cQuery += "JOIN "+RetSqlName("D3K")+" D3K ON D3K.D3K_FILIAL = '"+xFilial("D3K")+"' "
  4814. cQuery += "AND D3K.D3K_NUMSEQ = SD3.D3_NUMSEQ "
  4815. cQuery += "AND D3K.D3K_COD = SD3.D3_COD "
  4816. cQuery += "AND D3K.D_E_L_E_T_ = ' ' "
  4817. EndIf
  4818. cQuery += "WHERE "
  4819. cQuery += "SD3.D3_FILIAL = '"+xFilial("SD3")+"' "
  4820. cQuery += "AND SD3.D3_EMISSAO <= '"+dtos(dDataAte)+"' "
  4821. cQuery += "AND (SD3.D3_CF LIKE 'PR%' OR SD3.D3_CF LIKE 'DE%' ) "
  4822. cQuery += "AND SD3.D3_OP <> ' ' "
  4823. cQuery += "AND SD3.D_E_L_E_T_ = ' ' AND "
  4824. If lCpoBZTP
  4825. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  4826. Else
  4827. cQuery += "SB1.B1_TIPO "
  4828. EndIf
  4829. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo06+","+cTipo10+") "
  4830. If lAliasD3E
  4831. cQuery += "AND NOT EXISTS( "
  4832. cQuery += "SELECT 1 FROM "+ RetSqlName("D3E") +" D3E "
  4833. cQuery += "JOIN "+ RetSqlName("SA1") +" SA1 "
  4834. cQuery += "ON SA1.A1_FILIAL = '"+ xFilial("SA1") +"' AND SA1.A1_COD = D3E.D3E_CLIENT AND SA1.A1_LOJA = D3E.D3E_LOJA AND SA1.D_E_L_E_T_ = ' ' "
  4835. cQuery += "WHERE D3E.D3E_FILIAL = '"+ xFilial("D3E") +"' AND D3E.D3E_COD = SD3.D3_COD AND D3E.D_E_L_E_T_ = ' ' "
  4836. cQuery += ") "
  4837. EndIf
  4838. cQuery += "UNION ALL "
  4839. cQuery += "SELECT "
  4840. cQuery += "SD2.D2_COD ,'SA1' ,SD2.D2_CLIENTE ,SD2.D2_LOJA ,'S' ,0 ,0 ,SD2.D2_QUANT*-1 "
  4841. cQuery += "FROM "+RetSqlName("SD2")+" SD2 "
  4842. cQuery += "INNER JOIN "+RetSqlName("SB6")+" SB6 ON "
  4843. cQuery += "SB6.B6_FILIAL = '"+xFilial("SB6")+"' "
  4844. cQuery += "AND SB6.B6_DOC = SD2.D2_DOC "
  4845. cQuery += "AND SB6.B6_SERIE = SD2.D2_SERIE "
  4846. cQuery += "AND SB6.B6_CLIFOR = SD2.D2_CLIENTE "
  4847. cQuery += "AND SB6.B6_LOJA = SD2.D2_LOJA "
  4848. cQuery += "AND SB6.B6_TPCF = 'C' "
  4849. cQuery += "AND SB6.B6_TIPO = 'D' "
  4850. cQuery += "AND SB6.B6_PRODUTO <> SD2.D2_COD "
  4851. cQuery += "AND SB6.B6_DTDIGIT <= '"+dtos(dDataAte)+"' "
  4852. cQuery += "AND SB6.D_E_L_E_T_ = ' ' "
  4853. cQuery += "INNER JOIN "+RetSqlName("SF4")+" SF4 ON "
  4854. cQuery += "SF4.F4_FILIAL = '"+xFilial("SB6")+"' "
  4855. cQuery += "AND SF4.F4_CODIGO = SB6.B6_TES "
  4856. cQuery += "AND SF4.F4_PODER3 = 'D' "
  4857. cQuery += "AND SF4.D_E_L_E_T_ = ' ' "
  4858. cQuery += "INNER JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial("SB1")+"' "
  4859. cQuery += " AND SB1.B1_COD = SD2.D2_COD "
  4860. cQuery += " AND SB1.B1_COD NOT LIKE 'MOD%' "
  4861. cQuery += " AND SB1.B1_CCCUSTO = ' ' "
  4862. cQuery += " AND SB1.D_E_L_E_T_ = ' ' "
  4863. If lCpoBZTP
  4864. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  4865. EndIf
  4866. cQuery += "WHERE "
  4867. cQuery += "SD2.D2_FILIAL = '"+xFilial("SB6")+"' "
  4868. cQuery += "AND SD2.D2_EMISSAO <= '"+dtos(dDataAte)+"' "
  4869. cQuery += "AND SD2.D_E_L_E_T_ = ' ' AND "
  4870. If lCpoBZTP
  4871. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  4872. Else
  4873. cQuery += "SB1.B1_TIPO "
  4874. EndIf
  4875. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo06+","+cTipo10+") "
  4876. EndIf
  4877. cQuery += ") SaldoTerceiro "
  4878. cQuery += " GROUP BY B6_PRODUTO, PESSOA ,F4_ESTOQUE, B6_CLIFOR ,B6_LOJA "
  4879. cQuery += " ORDER BY 1 "
  4880.  
  4881. cQuery := ChangeQuery(cQuery)
  4882.  
  4883. Return cQuery
  4884.  
  4885. /*/{Protheus.doc} BlkPRO21x
  4886. Grava a data de apuracao do SPED FISCAL nos registros de movimentacoes internas
  4887. referente a desmontagem utilizados na geracao dos registros K210/K215
  4888. @Andr?Maximo
  4889. @since 08/10/2018
  4890. @version 1.0
  4891. @return ${return}, ${return_description}
  4892. @param dDataDe, date, descricao
  4893. @param dDataAte, date, descricao
  4894. @type function
  4895. /*/
  4896. Function BlkPRO21x(dDataDe,dDataAte)
  4897. Local cQuery := " "
  4898. Local cPeriodo := ""
  4899.  
  4900. cPeriodo := Left(dtos(dDataAte),6)
  4901.  
  4902. cQuery:= "UPDATE "+RetSQLName("SD3")+" "
  4903. cQuery+= " SET D3_PERBLK = '"+cPeriodo+"'"
  4904. cQuery+= " WHERE R_E_C_N_O_ IN (SELECT SD3.R_E_C_N_O_ "
  4905. cQuery+= " FROM "+RetSQLName("SD3")+" SD3"
  4906. cQuery+= " JOIN "+RetSQLName("SB1")+" SB1"
  4907. cQuery+= " ON SB1.B1_FILIAL = '"+xFilial("SB1")+"'"
  4908. cQuery+= " AND SB1.B1_COD = SD3.D3_COD"
  4909. cQuery+= " AND SB1.B1_COD NOT LIKE 'MOD%'"
  4910. cQuery+= " AND SB1.B1_CCCUSTO = ' '"
  4911. cQuery+= " AND SB1.D_E_L_E_T_ = ' '"
  4912. If lCpoBZTP
  4913. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ "
  4914. cQuery += "ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' "
  4915. cQuery += " AND SBZ.BZ_COD = SB1.B1_COD "
  4916. cQuery += " AND SBZ.D_E_L_E_T_ = ' ' "
  4917. EndIf
  4918. cQuery+= "WHERE SD3.D3_FILIAL = '"+xFilial("SD3")+"'"
  4919. cQuery+= " AND SD3.D3_CF IN ( 'DE7', 'RE7' )"
  4920. cQuery+= " AND SD3.D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' AND '"+DtoS(dDataAte)+"'"
  4921. cQuery+= " AND SD3.D_E_L_E_T_ = ' '"
  4922. If lCpoBZTP
  4923. cQuery += " AND "+MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  4924. Else
  4925. cQuery += " AND SB1.B1_TIPO "
  4926. EndIf
  4927. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+")"
  4928. cQuery += " )"
  4929.  
  4930. MATExecQry(cQuery)
  4931. Return
  4932.  
  4933.  
  4934. /*/{Protheus.doc} BlkK220
  4935. Grava a data de apuracao do SPED FISCAL nos registros de movimentacoes internas
  4936. referente a transferencia de produtos utilizados na geracao dos registros K220
  4937. @Andr?Maximo
  4938. @since 08/10/2018
  4939. @version 1.0
  4940. @return ${return}, ${return_description}
  4941. @param dDataDe, date, descricao
  4942. @param dDataAte, date, descricao
  4943. @type function
  4944. /*/
  4945. Function BlkK220(dDataDe,dDataAte)
  4946. Local cQuery := " "
  4947. Local cPeriodo := ""
  4948.  
  4949. cPeriodo := Left(dtos(dDataAte),6)
  4950.  
  4951. cQuery := ""
  4952. cQuery += "UPDATE "+RetSQLName("SD3")+" "
  4953. cQuery += "SET D3_PERBLK = '"+cPeriodo+"' "
  4954. cQuery += "WHERE R_E_C_N_O_ IN(SELECT SD3ORI.R_E_C_N_O_ "
  4955. cQuery += "FROM "+RetSQLName("SD3")+" SD3ORI "
  4956. cQuery += "JOIN "+RetSqlName("SD3")+" SD3DES "
  4957. cQuery += "ON SD3DES.D3_FILIAL = SD3ORI.D3_FILIAL "
  4958. cQuery += "AND SD3DES.D3_NUMSEQ = SD3ORI.D3_NUMSEQ "
  4959. cQuery += "AND SD3DES.D_E_L_E_T_ = ' ' "
  4960. cQuery += "AND EXISTS( "
  4961. cQuery += "SELECT 1 FROM "+RetSqlName("SB1")+" SB1DES "
  4962. If lCpoBZTP
  4963. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZDES ON SBZDES.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZDES.BZ_COD = SB1DES.B1_COD AND SBZORI.D_E_L_E_T_ = ' ' "
  4964. EndIf
  4965. cQuery += "WHERE SB1DES.B1_FILIAL = '"+xFilial('SB1')+"' "
  4966. cQuery += "AND SB1DES.B1_COD = SD3DES.D3_COD "
  4967. cQuery += "AND SB1DES.B1_COD NOT LIKE 'MOD%' "
  4968. cQuery += "AND SB1DES.B1_CCCUSTO = ' ' "
  4969. cQuery += "AND SB1DES.D_E_L_E_T_ = ' ' "
  4970. cQuery += "AND "
  4971. If lCpoBZTP
  4972. cQuery += MatIsNull()+"(SBZDES.BZ_TIPO,SB1DES.B1_TIPO) "
  4973. Else
  4974. cQuery += "SB1DES.B1_TIPO "
  4975. EndIf
  4976. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+")"
  4977. cQuery += ") "
  4978. cQuery += "WHERE SD3ORI.D3_FILIAL = '"+xFilial('SD3')+"' "
  4979. cQuery += "AND SD3ORI.D3_COD <> SD3DES.D3_COD "
  4980. cQuery += "AND ( ( SD3ORI.D3_CF = 'RE4' "
  4981. cQuery += "AND SD3DES.D3_CF = 'DE4' ) "
  4982. cQuery += "OR ( SD3ORI.D3_CF = 'DE4' "
  4983. cQuery += "AND SD3DES.D3_CF = 'RE4' ) ) "
  4984. cQuery += "AND SD3ORI.D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' AND '"+DtoS(dDataAte)+"' "
  4985. cQuery += "AND SD3ORI.D_E_L_E_T_ = ' ' "
  4986. cQuery += "AND EXISTS( "
  4987. cQuery += "SELECT 1 FROM "+RetSqlName("SB1")+" SB1ORI "
  4988. If lCpoBZTP
  4989. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZORI ON SBZORI.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZORI.BZ_COD = SB1ORI.B1_COD AND SBZORI.D_E_L_E_T_ = ' ' "
  4990. EndIf
  4991. cQuery += "WHERE SB1ORI.B1_FILIAL = '"+xFilial('SB1')+"' "
  4992. cQuery += "AND SB1ORI.B1_COD = SD3ORI.D3_COD "
  4993. cQuery += "AND SB1ORI.B1_COD NOT LIKE 'MOD%' "
  4994. cQuery += "AND SB1ORI.B1_CCCUSTO = ' ' "
  4995. cQuery += "AND SB1ORI.D_E_L_E_T_ = ' ' "
  4996. cQuery += "AND "
  4997. If lCpoBZTP
  4998. cQuery += MatIsNull()+"(SBZORI.BZ_TIPO,SB1ORI.B1_TIPO) "
  4999. Else
  5000. cQuery += "SB1ORI.B1_TIPO "
  5001. EndIf
  5002. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+")"
  5003. cQuery += ")) "
  5004. MATExecQry(cQuery)
  5005. Return
  5006.  
  5007.  
  5008. /*/{Protheus.doc} BlkPro250
  5009. Grava a data de apuracao do SPED FISCAL nos registros de movimentacoes internas
  5010. referente a producao de uma ordem de producao de terceiros utilizados na
  5011. geracao dos registros K250
  5012. @Andr?Maximo
  5013. @since 08/10/2018
  5014. @version 1.0
  5015. @return ${return}, ${return_description}
  5016. @param dDataDe, date, descricao
  5017. @param dDataAte, date, descricao
  5018. @type function
  5019. /*/
  5020. Function BlkPro250(dDataDe,dDataAte)
  5021. Local cQuery := " "
  5022. Local cPeriodo := ""
  5023.  
  5024. cPeriodo := cPeriodo := Left(dtos(dDataAte),6)
  5025.  
  5026. cQuery := "UPDATE "+RetSQLName("SD3")+" "
  5027. cQuery += "SET D3_PERBLK = '"+cPeriodo+"' "
  5028. cQuery += "WHERE R_E_C_N_O_ IN(SELECT SD3.R_E_C_N_O_ "
  5029. cQuery += "FROM "+RetSQLName("SD3")+" SD3 "
  5030. cQuery += "JOIN "+RetSqlName("SC2")+" SC2 ON SC2.C2_FILIAL = '"+xFilial('SC2')+"' "
  5031. cQuery += "AND SD3.D3_OP = SC2.C2_NUM " + MatiConcat()+" SC2.C2_ITEM " + MatiConcat()+" SC2.C2_SEQUEN " + MatiConcat()+" SC2.C2_ITEMGRD "
  5032. cQuery += "AND SC2.C2_PRODUTO = SD3.D3_COD "
  5033. cQuery += "AND SC2.C2_ITEM <> 'OS' "
  5034. cQuery += "AND SC2.C2_TPPR = 'E' "
  5035. cQuery += " AND SC2.D_E_L_E_T_ = ' ' "
  5036. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  5037. cQuery += "AND SD3.D3_OP <> ' ' "
  5038. cQuery += "AND SD3.D3_CF IN ('PR0','PR1','ER0','ER1') "
  5039. cQuery += "AND SD3.D3_COD NOT LIKE 'MOD%' "
  5040. cQuery += "AND SD3.D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' AND '"+DtoS(dDataAte)+"' "
  5041. cQuery += "AND SD3.D_E_L_E_T_ = ' ' "
  5042. cQuery += "AND EXISTS( "
  5043. cQuery += "SELECT 1 FROM "+RetSqlName("SB1")+" SB1 "
  5044. If lCpoBZTP
  5045. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  5046. EndIf
  5047. cQuery += "WHERE SB1.B1_FILIAL = '"+xFilial('SB1')+"' "
  5048. cQuery += "AND SB1.B1_COD = SD3.D3_COD "
  5049. cQuery += "AND SB1.B1_COD NOT LIKE 'MOD%' "
  5050. cQuery += "AND SB1.B1_CCCUSTO = ' ' "
  5051. cQuery += "AND SB1.D_E_L_E_T_ = ' ' "
  5052. cQuery += "AND "
  5053. If lCpoBZTP
  5054. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  5055. Else
  5056. cQuery += "SB1.B1_TIPO "
  5057. EndIf
  5058. cQuery += "IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  5059. cQuery += ") "
  5060. cQuery += "AND NOT EXISTS( "
  5061. cQuery += "SELECT 1 FROM "+RetSqlName("SD4")+" SD4 "
  5062. cQuery += "WHERE SD4.D4_FILIAL = '"+xFilial("SD4")+"' "
  5063. cQuery += "AND SD4.D4_OP = SD3.D3_OP "
  5064. cQuery += "AND SD4.D4_PRODUTO = SC2.C2_PRODUTO "
  5065. cQuery += "AND SD4.D4_COD = SD3.D3_COD "
  5066. cQuery += "AND SD4.D4_QTDEORI < 0 "
  5067. cQuery += "AND SD4.D_E_L_E_T_ = ' ' "
  5068. cQuery += "))"
  5069. MATExecQry(cQuery)
  5070. Return
  5071.  
  5072. /*/{Protheus.doc} BlkPro255
  5073. Grava a data de apuracao do SPED FISCAL nos registros de movimentacoes internas
  5074. referente a requisicao de uma ordem de producao de terceiros utilizados na
  5075. geracao dos registros K255
  5076. @Andr?Maximo
  5077. @since 08/10/2018
  5078. @version 1.0
  5079. @return ${return}, ${return_description}
  5080. @param dDataDe, date, descricao
  5081. @param dDataAte, date, descricao
  5082. @type function
  5083. /*/
  5084. Function BlkPro255(dDataDe,dDataAte)
  5085. Local cQuery := " "
  5086. Local cPeriodo := ""
  5087.  
  5088. cPeriodo := Left(dtos(dDataAte),6)
  5089.  
  5090. cQuery := "UPDATE "+RetSQLName("SD3")+" "
  5091. cQuery += "SET D3_PERBLK = '"+cPeriodo+"' "
  5092. cQuery += "WHERE R_E_C_N_O_ IN(SELECT SD3.R_E_C_N_O_ "
  5093. cQuery += "FROM "+RetSQLName("SD3")+" SD3 "
  5094. cQuery += "JOIN "+RetSqlName("SC2")+" SC2 ON SC2.C2_FILIAL = '"+xFilial('SC2')+"' "
  5095. cQuery += "AND SD3.D3_OP = SC2.C2_NUM " + MatiConcat()+" SC2.C2_ITEM " + MatiConcat()+" SC2.C2_SEQUEN " + MatiConcat()+" SC2.C2_ITEMGRD "
  5096. cQuery += "AND SC2.C2_ITEM <> 'OS' "
  5097. cQuery += "AND SC2.C2_TPPR = 'E' "
  5098. cQuery += "AND SC2.D_E_L_E_T_ = ' ' "
  5099. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  5100. cQuery += "AND (SD3.D3_CF LIKE ('RE%') OR SD3.D3_CF LIKE ('DE%')) "
  5101. cQuery += "AND SD3.D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' AND '"+DtoS(dDataAte)+"' "
  5102. cQuery += "AND SD3.D_E_L_E_T_ = ' ' "
  5103. cQuery += "AND EXISTS( "
  5104. cQuery += "SELECT 1 FROM "+RetSqlName("SB1")+" SB1 "
  5105. If lCpoBZTP
  5106. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' AND SBZ.BZ_COD = SB1.B1_COD AND SBZ.D_E_L_E_T_ = ' ' "
  5107. EndIf
  5108. cQuery += "WHERE SB1.B1_FILIAL = '"+xFilial('SB1')+"' "
  5109. cQuery += "AND SB1.B1_COD = SD3.D3_COD "
  5110. cQuery += "AND SB1.B1_COD NOT LIKE 'MOD%' "
  5111. cQuery += "AND SB1.B1_CCCUSTO = ' ' "
  5112. cQuery += "AND SB1.D_E_L_E_T_ = ' ' "
  5113. cQuery += "AND "
  5114. If lCpoBZTP
  5115. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  5116. Else
  5117. cQuery += "SB1.B1_TIPO "
  5118. EndIf
  5119. cQuery += "IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+") "
  5120. cQuery += ") "
  5121. cQuery += "AND NOT EXISTS( "
  5122. cQuery += "SELECT 1 FROM "+RetSqlName("SD4")+" SD4 "
  5123. cQuery += "WHERE SD4.D4_FILIAL = '"+xFilial("SD4")+"' "
  5124. cQuery += "AND SD4.D4_OP = SD3.D3_OP "
  5125. cQuery += "AND SD4.D4_PRODUTO = SC2.C2_PRODUTO "
  5126. cQuery += "AND SD4.D4_COD = SD3.D3_COD "
  5127. cQuery += "AND SD4.D4_QTDEORI < 0 "
  5128. cQuery += "AND SD4.D_E_L_E_T_ = ' ' "
  5129. cQuery += "))"
  5130. MATExecQry(cQuery)
  5131. Return
  5132.  
  5133. /*/{Protheus.doc} BlkPro302
  5134. Grava a data de apuracao do SPED FISCAL nos registros de movimentacoes internas
  5135. referente a requisicao de uma ordem de producao de terceiros com estrutura
  5136. negativa utilizados na geracao dos registros K255
  5137. @Andr?Maximo
  5138. @since 08/10/2018
  5139. @version 1.0
  5140. @return ${return}, ${return_description}
  5141. @param dDataDe, date, descricao
  5142. @param dDataAte, date, descricao
  5143. @type function
  5144. /*/
  5145. Function BlkPro302(dDataDe,dDataAte,cOP)
  5146. Local cQuery := " "
  5147. Local cData
  5148.  
  5149. cData := Substr(dTOS(dDataAte),1,6)
  5150. cQuery:= "UPDATE "+RetSQLName("SD3")+" "
  5151. cQuery+= " SET D3_PERBLK = '"+cData+"'"
  5152. cQuery+= " WHERE R_E_C_N_O_ IN(SELECT SD3.R_E_C_N_O_ "
  5153. cQuery += "FROM "+RetSqlName("SD3")+" SD3 "
  5154. cQuery += "JOIN "+RetSqlName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial('SB1')+"' "
  5155. cQuery += " AND SB1.B1_COD = SD3.D3_COD "
  5156. cQuery += " AND SB1.B1_CCCUSTO = ' ' "
  5157. cQuery += " AND SB1.B1_COD NOT LIKE 'MOD%' "
  5158. cQuery += " AND SB1.D_E_L_E_T_ = ' ' "
  5159. If lCpoBZTP
  5160. cQuery += "LEFT JOIN "+RetSqlName("SBZ")+" SBZ ON SBZ.BZ_FILIAL = '"+xFilial('SBZ')+"' "
  5161. cQuery += "AND SBZ.BZ_COD = SB1.B1_COD "
  5162. cQuery += "AND SBZ.D_E_L_E_T_ = ' ' "
  5163. EndIf
  5164. cQuery += "JOIN "+RetSqlName("SC2")+" SC2 ON SD3.D3_OP = SC2.C2_NUM " + MatiConcat()+" SC2.C2_ITEM " + MatiConcat()+" SC2.C2_SEQUEN " + MatiConcat()+" SC2.C2_ITEMGRD "
  5165. cQuery += "AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' "
  5166. cQuery += "AND SC2.C2_ITEM <> 'OS' "
  5167. cQuery += "AND SC2.C2_TPPR IN ('E') "
  5168. cQuery += "AND SC2.D_E_L_E_T_ = ' ' "
  5169. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial('SD3')+"' "
  5170. cQuery += " AND (SD3.D3_CF LIKE ('RE%') OR SD3.D3_CF LIKE ('DE%')) "
  5171. cQuery += " AND SD3.D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' AND '"+DtoS(dDataAte)+"' "
  5172. cQuery += " AND SD3.D_E_L_E_T_ = ' ' "
  5173. cQuery += " AND "
  5174. If lCpoBZTP
  5175. cQuery += MatIsNull()+"(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  5176. Else
  5177. cQuery += "SB1.B1_TIPO "
  5178. EndIf
  5179. cQuery += " IN ("+cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","
  5180. cQuery += cTipo04+","+cTipo05+","+cTipo10+") "
  5181. cQuery += "AND EXISTS( "
  5182. cQuery += "SELECT 1 "
  5183. cQuery += "FROM "
  5184. cQuery += RetSqlName("SD4")+" SD4 "
  5185. cQuery += "WHERE SD4.D4_FILIAL = '"+xFilial("SD4")+"' "
  5186. cQuery += "AND SD4.D4_OP = SD3.D3_OP "
  5187. cQuery += "AND SD4.D4_PRODUTO = SC2.C2_PRODUTO "
  5188. cQuery += "AND SD4.D4_QTDEORI < 0 "
  5189. cQuery += "AND SD4.D_E_L_E_T_ = ' ' )"
  5190. cQuery += "AND EXISTS( "
  5191. cQuery += "SELECT 1 "
  5192. cQuery += "FROM "
  5193. cQuery += RetSqlName("SD4")+" SD4 "
  5194. cQuery += "WHERE SD4.D4_FILIAL = '"+xFilial("SD4")+"' "
  5195. cQuery += "AND SD4.D4_OP = SD3.D3_OP "
  5196. cQuery += "AND SD4.D4_COD = SD3.D3_COD "
  5197. cQuery += "AND SD4.D4_QTDEORI > 0 "
  5198. cQuery += "AND SD4.D_E_L_E_T_ = ' ' )"
  5199. cQuery += ") "
  5200.  
  5201. MATExecQry(cQuery)
  5202. Return
  5203.  
  5204. /*/{Protheus.doc} BlkPro301
  5205. Grava a data de apuracao do SPED FISCAL nos registros de movimentacoes internas
  5206. referente a producao de uma ordem de producao de terceiros com estrutura
  5207. negativa utilizados na geracao dos registros K255
  5208. @Andr?Maximo
  5209. @since 08/10/2018
  5210. @version 1.0
  5211. @return ${return}, ${return_description}
  5212. @param dDataDe, date, descricao
  5213. @param dDataAte, date, descricao
  5214. @type function
  5215. /*/
  5216. Function BlkPro301(dDataDe,dDataAte)
  5217. Local cQuery := " "
  5218. Local cPeriodo := ""
  5219.  
  5220. cPeriodo := Substr(dTOS(dDataAte),1,6)
  5221.  
  5222. cQuery := ""
  5223. cQuery += "UPDATE "+RetSQLName("SD3")+" "
  5224. cQuery += "SET D3_PERBLK = '"+cPeriodo+"' "
  5225. cQuery += "WHERE R_E_C_N_O_ IN(SELECT SD3.R_E_C_N_O_ "
  5226. cQuery += "FROM "+RetSQLName("SD3")+" SD3 "
  5227. cQuery += "JOIN "+RetSQLName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial("SB1")+"' "
  5228. cQuery += "AND SB1.B1_COD = SD3.D3_COD "
  5229. cQuery += "AND SB1.B1_CCCUSTO = ' ' "
  5230. cQuery += "AND SB1.D_E_L_E_T_ = ' ' "
  5231. cQuery += "INNER JOIN "+RetSQLName("SC2")+" SC2 ON SC2.C2_NUM " + MatiConcat()+" SC2.C2_ITEM " + MatiConcat()+" SC2.C2_SEQUEN " + MatiConcat()+" SC2.C2_ITEMGRD = SD3.D3_OP "
  5232. cQuery += "AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' "
  5233. cQuery += "AND SC2.C2_ITEM <> 'OS' "
  5234. cQuery += "AND SC2.C2_TPPR = 'E' "
  5235. cQuery += "AND SC2.D_E_L_E_T_ = ' ' "
  5236. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial("SD3")+"' "
  5237. cQuery += "AND SD3.D3_CF IN ( "
  5238. cQuery += "'PR0','PR1' "
  5239. cQuery += ",'ER0','ER1' ) "
  5240. cQuery += "AND SD3.D3_COD NOT LIKE 'MOD%' "
  5241. cQuery += "AND SD3.D3_EMISSAO BETWEEN '"+DTOS(dDataDe)+"' "
  5242. cQuery += "AND '"+DTOS(dDataAte)+"' "
  5243. cQuery += "AND SD3.D_E_L_E_T_ = ' ' "
  5244. If lCpoBZTP
  5245. cQuery += "AND COALESCE(SBZ.BZ_TIPO,SB1.B1_TIPO) "
  5246. Else
  5247. cQuery += "AND SB1.B1_TIPO "
  5248. EndIf
  5249. cQuery += "IN ( "+cTipo03+","+cTipo04
  5250. cQuery += ") "
  5251. cQuery += "UNION ALL "
  5252. cQuery += "SELECT SD3.R_E_C_N_O_ "
  5253. cQuery += "FROM "+RetSQLName("SD3")+" SD3 "
  5254. cQuery += "JOIN "+RetSQLName("SB1")+" SB1 ON SB1.B1_FILIAL = '"+xFilial("SB1")+"' "
  5255. cQuery += "AND SB1.B1_COD = SD3.D3_COD "
  5256. cQuery += "AND SB1.B1_FANTASM != 'S' "
  5257. cQuery += "AND SB1.B1_CCCUSTO = ' ' "
  5258. cQuery += "AND SB1.D_E_L_E_T_ = ' ' "
  5259. cQuery += "INNER JOIN "+RetSQLName("SC2")+" SC2 ON SC2.C2_NUM " + MatiConcat()+" SC2.C2_ITEM " + MatiConcat()+" SC2.C2_SEQUEN " + MatiConcat()+" SC2.C2_ITEMGRD = SD3.D3_OP "
  5260. cQuery += "AND SC2.C2_FILIAL = '"+xFilial('SC2')+"' "
  5261. cQuery += "AND SC2.C2_ITEM <> 'OS' "
  5262. cQuery += "AND SC2.C2_TPPR = 'E' "
  5263. cQuery += "AND SC2.D_E_L_E_T_ = ' ' "
  5264. cQuery += "WHERE SD3.D3_FILIAL = '"+xFilial("SD3")+"' "
  5265. cQuery += "AND SD3.D3_CF IN ('RE1','DE1') "
  5266. cQuery += "AND SD3.D3_COD NOT LIKE 'MOD%' "
  5267. cQuery += "AND SD3.D3_EMISSAO BETWEEN '"+DTOS(dDataDe)+"' "
  5268. cQuery += "AND '"+DTOS(dDataAte)+"' "
  5269. cQuery += "AND SD3.D_E_L_E_T_ = ' ' "
  5270. If lCpoBZTP
  5271. cQuery += "AND COALESCE(SBZ.BZ_TIPO,SB1.B1_TIPO) IN ( "
  5272. Else
  5273. cQuery += "AND SB1.B1_TIPO IN ( "
  5274. EndIf
  5275. cQuery += cTipo00+","+cTipo01+","+cTipo02+","+cTipo03+","+cTipo04+","+cTipo05+","+cTipo10+" "
  5276. cQuery += ") "
  5277. cQuery += "AND EXISTS( "
  5278. cQuery += "SELECT 1 FROM "+RetSqlName("SD4")+" SD4 "
  5279. cQuery += "WHERE SD4.D4_FILIAL = '"+xFilial("SD4")+"' "
  5280. cQuery += "AND SD4.D4_OP = SD3.D3_OP "
  5281. cQuery += "AND SD4.D4_PRODUTO = SC2.C2_PRODUTO "
  5282. cQuery += "AND SD4.D4_COD = SD3.D3_COD "
  5283. cQuery += "AND SD4.D4_QTDEORI < 0 "
  5284. cQuery += "AND SD4.D_E_L_E_T_ = ' ' "
  5285. cQuery += "))"
  5286. MATExecQry(cQuery)
  5287. Return
  5288.  
  5289. /*/{Protheus.doc} BlkPrLimp
  5290. Limpa o campo D3_PERBLK para permitir re-processar os registros de movimentacao interna
  5291. @Andr?Maximo
  5292. @since 08/10/2018
  5293. @version 1.0
  5294. @return ${return}, ${return_description}
  5295. @param dDataDe, date, descricao
  5296. @param dDataAte, date, descricao
  5297. @type function
  5298. /*/
  5299. Function BlkPrLimp(dDataAte)
  5300. Local cQuery := " "
  5301. Local cPeriodo := ""
  5302.  
  5303. cPeriodo := Left(dtos(dDataAte),6)
  5304.  
  5305. cQuery:= "UPDATE "+RetSQLName("SD3")+" SET D3_PERBLK = '"+space(TamSX3("D3_PERBLK")[1])+"' WHERE D3_PERBLK = '"+cPeriodo+"' AND D3_FILIAL = '" +xFilial("SD3")+ "'"
  5306.  
  5307. MATExecQry(cQuery)
  5308. Return
  5309.  
  5310. /*/{Protheus.doc} MatiConcat
  5311. realizaajuste na concatena玢o na string da query de UPDATE
  5312. @author andre.maximo
  5313. @since 09/10/2018
  5314. @version 1.0
  5315.  
  5316. @return ${cFunConcat}, ${C骴igo para concatenar}
  5317. /*/
  5318. Function MatiConcat()
  5319.  
  5320. Local cFunConcat := " "
  5321. Local cDbType := TCGetDB()
  5322.  
  5323. Do Case
  5324. Case cDbType $ "DB2|POSTGRES|ORACLE|INFORMIX"
  5325. cFunConcat := "||"
  5326. Otherwise
  5327. cFunConcat := "+"
  5328. EndCase
  5329.  
  5330. Return cFunConcat
  5331.  
  5332. /*/{Protheus.doc} MatLimpD3K
  5333. Limpa o campo D3_PERBLK, pois o registro que est?sendo estornado n鉶 pode ter
  5334. o campo PREENCHIDO. J?que o mesmo s??preenchido quando ?gerado o SPED Fiscal
  5335. @Andr?Maximo
  5336. @since 24/10/2018
  5337. @version 1.0
  5338. @return ${return}, ${return_description}
  5339. @param dDataDe, date, descricao
  5340. @param dDataAte, date, descricao
  5341. @type function
  5342. /*/
  5343. Function MatLimpD3K(cProduto,cNumSeq)
  5344. Local AreaAtiv := GetArea()
  5345.  
  5346. Default cProduto := ""
  5347. Default cNumSeq := ""
  5348.  
  5349. If SD3->(ColumnPos("D3_PERBLK")) >0
  5350. RecLock("SD3",.F.)
  5351. D3_PERBLK := space(TamSX3("D3_PERBLK")[1])
  5352. msUnLock()
  5353. EndIf
  5354.  
  5355. /*If AliasInDic("D3K")
  5356. DbSelectArea("D3K")
  5357. DbSetOrder(1)
  5358. cFilialD3K := xFilial("D3K")
  5359. MsSeek(cFilialD3K+cNumSeq+cProduto)
  5360. While D3K->(!Eof() .And. D3K->(D3K_FILIAL+D3K_NUMSEQ+D3K_COD) == cFilialD3K+cNumSeq+cProduto )
  5361. RecLock("D3K",.F.)
  5362. dbDelete()
  5363. MsUnlock()
  5364. D3K->(DbSkip())
  5365. EndDo
  5366. EndIf*/
  5367. RestArea(AreaAtiv)
  5368. Return
  5369.  
  5370. /*/{Protheus.doc} MATExecQry
  5371. Funcao generica para executar uma query de INSERT ou DELETE e caso seja gerado
  5372. uma inconsistencia possa abortar o processo
  5373. @author reynaldo
  5374. @since 24/10/2018
  5375. @version 1.0
  5376. @return ${return}, ${return_description}
  5377. @param cQuery, characters, descricao
  5378. @type function
  5379. /*/
  5380. Function MATExecQry(cQuery)
  5381. Local cMensErro := ""
  5382.  
  5383. If (TcSqlExec(cQuery) < 0)
  5384. cMensErro := TCSQLError() + " ocorrida fun玢o " +ProcName(-1)+ " na linha " +cValtoChar(ProcLine(-1))+ ". "
  5385. UserException(cMensErro)
  5386. EndIf
  5387.  
  5388. Return
  5389.  
  5390. // ---------------------------------------------------------------------------
  5391. /*/{Protheus.doc} EstProsSPE
  5392. realiza ajuste na concatena玢o na string da query de UPDATE
  5393. @author andre.maximo
  5394. @since 09/10/2018
  5395. @version 1.0
  5396.  
  5397. @return ${cFunConcat}, ${C骴igo para concatenar}
  5398. /*/
  5399. // ---------------------------------------------------------------------------
  5400. Function EstProsSPE(dDataDe,dDataAte)
  5401.  
  5402. Local cQuery := ""
  5403. Local lRet := .T.
  5404. Local cFilialSC2 := xfilial("SC2")
  5405. Local cFilialSD3 := xfilial("SD3")
  5406. Local cAliasTmp := GetNextAlias()
  5407.  
  5408. cQuery:="SELECT 1 "
  5409. cQuery+= "FROM "+RetSQLName("SD3")+" SD3 "
  5410. cQuery+= "LEFT JOIN "+RetSQLName("SC2")+" SC2 "
  5411. cQuery+= "ON SD3.D3_OP = SC2.C2_NUM + SC2.C2_ITEM + SC2.C2_SEQUEN+ SC2.C2_ITEMGRD "
  5412. cQuery+= "AND SC2.C2_FILIAL ='"+cFilialSC2+"' "
  5413. cQuery+= "AND SC2.D_E_L_E_T_ = ' ' "
  5414. cQuery+= "LEFT JOIN "+RetSQLName("D3K")+" D3K "
  5415. cQuery+= "ON D3K_FILIAL = '"+cFilialSD3+"' "
  5416. cQuery+= "AND D3K.D3K_COD = SD3.D3_COD "
  5417. cQuery+= "AND D3K.D3K_NUMSEQ = SD3.D3_NUMSEQ "
  5418. cQuery+= "AND D3K.D3K_OP = SD3.D3_OP "
  5419. cQuery+= "AND D3K.D_E_L_E_T_ =' ' "
  5420. cQuery+="WHERE SD3.D3_FILIAL = '"+cFilialSD3+"' "
  5421. cQuery+= "AND SD3.D_E_L_E_T_ = ' ' "
  5422. cQuery+= "AND SD3.D3_ESTORNO = ' ' "
  5423. cQuery+= "AND SD3.D3_OP <> ' ' "
  5424. cQuery+= "AND SD3.D3_CF IN ( 'RE5','RE9','RE6','RE3','RE2','RE0','RE1','PR0','PR1') "
  5425. cQuery+= "AND SD3.D3_EMISSAO BETWEEN '"+DtoS(dDataDe)+"' "
  5426. cQuery+= "AND '"+DtoS(dDataAte)+"' "
  5427. cQuery+= "AND SD3.D_E_L_E_T_ = ' ' "
  5428. cQuery+= "AND SC2.C2_OPTERCE = '1' "
  5429. cQuery+= "group by D3_COD, D3_OP,D3_NUMSEQ, D3_QUANT "
  5430. cQuery+= "having COALESCE(SD3.D3_QUANT,-1) - SUM(COALESCE(D3K.D3K_QTDE,-1)) > 0 "
  5431.  
  5432. cQuery := ChangeQuery(cQuery)
  5433. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
  5434.  
  5435. While !(cAliasTmp)->(Eof())
  5436. lRet := .F.
  5437. Exit
  5438. EndDo
  5439.  
  5440. (cAliasTmp)->(dbCloseArea())
  5441.  
  5442. Return(lRet)
  5443.  
  5444. /*/{Protheus.doc} BlkGrvTab
  5445. Funcao generica para gravar os registros do bloco k processados nas tabelas de historico.
  5446. @author andre.maximo
  5447. @since 09/10/2018
  5448. @version 1.0
  5449. @return ${return}, ${return_description}
  5450. @param cAliREG, characters, descricao
  5451. @param cBlk, characters, descricao
  5452. @param aTabBLK, array, descricao
  5453. @param dDataAte, date, descricao
  5454. @param lRepross, logical, descricao
  5455. @param lJbK200, logical, descricao
  5456. @type function
  5457. /*/
  5458. Function BlkGrvTab(cAliREG,cBlk,aTabBLK,dDataAte,lRepross,lJbK200)
  5459. Local nY
  5460. Local cQuery
  5461. Local cQuerDel
  5462. Local cTabConvert
  5463. Local aTabTemp := {}
  5464. Local aTabAlias := {}
  5465.  
  5466. Default cAliREG := " "
  5467. Default cBlk := " "
  5468. Default aTabBLK := {}
  5469. Default lRepross:= .F.
  5470. Default dDataAte:= DTOS('')
  5471. Default lJbK200 := .F.
  5472.  
  5473. cData := Substr(dTOS(dDataAte),1,6)
  5474.  
  5475. If lRepross
  5476. aTabTemp := (cBlk)->(dbStruct())
  5477. aTabAlias:= (cAliREG)->(dbStruct())
  5478.  
  5479. cQuerDel := "DELETE FROM "+RetSqlName(cBlk)+" "
  5480. cQuerDel += "WHERE "+ cBlk+"_FILIAL = '"+ xFilial(cBlk)+"' "
  5481. cQuerDel += "AND "+ cBlk+"_PERBLK = '"+cData+"' "
  5482. MATExecQry(cQuerDel)
  5483.  
  5484. If !lJbK200
  5485. cQuery := " INSERT INTO " + RetSQLName(cBlk)+" ( "
  5486. For nY := 1 to Len(aTabAlias)
  5487. If Len(aTabAlias[ny][1])>6
  5488. cTabConvert := BlkConvTab(cBlk,aTabAlias[ny][1])
  5489. cQuery += cBlk +"_" +cTabConvert+","
  5490. Else
  5491. cQuery += cBlk +"_" + LEFT(aTabAlias[ny][1],6)+","
  5492. EndIf
  5493. Next nY
  5494. cQuery += cBlk +"_PERBLK"
  5495. cQuery+=") "
  5496. cQuery += "SELECT "
  5497. For nY := 1 to Len(aTabAlias)
  5498. cQuery += aTabAlias[ny][1]+","
  5499. Next nY
  5500. cQuery+= "'"+cData+"' "
  5501. cQuery+="FROM " + aTabBLK:GetRealName()+ " "
  5502. cQuery+="WHERE D_E_L_E_T_ = ' ' "
  5503.  
  5504. MATExecQry(cQuery)
  5505. EndIf
  5506. EndIf
  5507.  
  5508. Return
  5509.  
  5510. //---------------------------------------------------------------
  5511. /*/{Protheus.doc} BlkReg280
  5512. grava registros processados nos registro K270/K275
  5513. @author andre.maximo
  5514. @since 29/10/2018
  5515. @version 1.0
  5516.  
  5517. @return ${cFunConcat}, ${C骴igo para concatenar}
  5518. /*/
  5519. Function BlkReg280(cFilK,cReg,dCorr,dApur,cProduto,nQuant,cCliente,cLoja,cAliK280)
  5520. Local nMes := 0
  5521. Local nX := 0
  5522. Local cIND_EST := ""
  5523. Local cCOD_PART := ""
  5524. Local cChave := ""
  5525. Local dCalc := ""
  5526.  
  5527. Default cCliente := " "
  5528. Default cLoja := " "
  5529.  
  5530. nMes := DateDiffMonth(dCorr,dApur)
  5531.  
  5532. For nX := 1 to nMes
  5533. dCalc := MonthSub(dCorr,(nMes-Nx))
  5534.  
  5535. cChave := cFilK+DTOS(dCalc)+cProduto
  5536. If Empty(cCliente+cLoja)
  5537. cIND_EST := "0"
  5538. Else
  5539. Do CASE
  5540. case cReg =="K210" .Or. cReg =="K215"
  5541. cIND_EST := "2"
  5542. cCOD_PART:= "C:"+cCliente+"-"+cLoja
  5543. case cReg =="K220"
  5544. cIND_EST := "2"
  5545. cCOD_PART:= "C:"+cCliente+"-"+cLoja
  5546. case cReg =="K250" .Or. cReg =="K255"
  5547. cIND_EST := "1"
  5548. cCOD_PART:= "F:"+cCliente+"-"+cLoja
  5549. case cReg =="K301" .Or. cReg =="K302"
  5550. cIND_EST := "1"
  5551. cCOD_PART:= "F:"+cCliente+"-"+cLoja
  5552. endcase
  5553.  
  5554. EndIf
  5555. cChave += cIND_EST+cCOD_PART
  5556.  
  5557. If (cAliK280)->(MsSeek(cChave))
  5558. RecLock(cAliK280,.F.)
  5559. If nQuant >0
  5560. (cAliK280)->QTD_COR_P += nQuant
  5561. Else
  5562. (cAliK280)->QTD_COR_N += nQuant*-1
  5563. EndIf
  5564. Else
  5565. Reclock(cAliK280,.T.)
  5566. (cAliK280)->FILIAL := cFilK
  5567. (cAliK280)->REG := "K280"
  5568. (cAliK280)->DT_EST := dCalc
  5569. (cAliK280)->COD_ITEM := cProduto
  5570. If nQuant >0
  5571. (cAliK280)->QTD_COR_P := nQuant
  5572. Else
  5573. (cAliK280)->QTD_COR_N := nQuant*-1
  5574. EndIf
  5575. (cAliK280)->IND_EST := cIND_EST
  5576. (cAliK280)->COD_PART := cCOD_PART
  5577. EndIf
  5578. (cAliK280)->(MsUnLock())
  5579. nRegsto++
  5580. Next nX
  5581.  
  5582. Return
  5583.  
  5584. /*/{Protheus.doc} MatiSubStr
  5585. Ajuste na concatena玢o na string da query
  5586. @author andre.maximo
  5587. @since 09/10/2018
  5588. @version 1.0
  5589.  
  5590. @return ${cFunConcat}, ${C骴igo para concatenar}
  5591. /*/
  5592. Function MatiSubStr()
  5593.  
  5594. Local cFunConcat := " "
  5595. Local cDbType := TCGetDB()
  5596.  
  5597. Do Case
  5598. Case cDbType $ "DB2|POSTGRES|ORACLE|INFORMIX"
  5599. cFunConcat := "SUBSTR"
  5600. Otherwise
  5601. cFunConcat := "SUBSTRING"
  5602. EndCase
  5603.  
  5604. Return cFunConcat
  5605. /*/{Protheus.doc} BlkConvTab
  5606. @author andre.maximo
  5607. @since 13/11/2018
  5608. @version 1.0
  5609.  
  5610. @return ${cFunConcat}, ${C骴igo para concatenar}
  5611. /*/
  5612.  
  5613. Function BlkConvTab(cBlk,cCpoBlk)
  5614.  
  5615. Local cCampos:= ''
  5616.  
  5617. Do Case
  5618. Case cBlk == 'D3F'
  5619. If cCpoBlk == 'COD_ITEM'
  5620. cCampos := 'COD_IT'
  5621. Elseif cCpoBlk == 'COD_I_COMP'
  5622. cCampos := 'COD_CP'
  5623.  
  5624. Elseif cCpoBlk == 'QTD_COMP'
  5625. cCampos := 'QTD_CO'
  5626.  
  5627. Elseif cCpoBlk == 'QTD_PROD'
  5628. cCampos := 'QTD_PR'
  5629.  
  5630. else //QTD_CON
  5631. cCampos := 'QTD_CS'
  5632. EndIf
  5633. Case cBlk == 'D3G'
  5634. If cCpoBlk == 'IND_MOV'
  5635. cCampos := 'IND_MO'
  5636. EndIf
  5637. Case cBlk == 'D3H'
  5638. If cCpoBlk == 'DT_INI
  5639. cCampos := 'DT_INI'
  5640. else
  5641. cCampos := 'DT_FIN'
  5642. EndIf
  5643. Case cBlk == 'D3I'
  5644. If cCpoBlk == 'DT_EST'
  5645. cCampos := 'DT_EST'
  5646. elseIf cCpoBlk == 'COD_ITEM'
  5647. cCampos := 'COD_IT'
  5648. elseIf cCpoBlk == 'IND_EST'
  5649. cCampos := 'IND_ES'
  5650. else // 'COD_PART'
  5651. cCampos := 'COD_PA'
  5652. EndIf
  5653.  
  5654. Case cBlk == 'D3J'
  5655. If cCpoBlk == 'DT_INI_OS'
  5656. cCampos := 'DT_INI'
  5657. ElseIf cCpoBlk == 'DT_FIN_OS'
  5658. cCampos := 'DT_FIN'
  5659. ElseIf cCpoBlk == 'COD_DOC_OS'
  5660. cCampos := 'COD_DO'
  5661. ElseIf cCpoBlk == 'COD_ITEM_O'
  5662. cCampos := 'COD_IT'
  5663. Else //QTD_ORI
  5664. cCampos := 'QTD_OR'
  5665. EndIf
  5666. Case cBlk == 'D3L'
  5667. If cCpoBlk == 'COD_DOC_OS'
  5668. cCampos := 'COD_DO'
  5669. ElseIf cCpoBlk == 'COD_ITEM_D'
  5670. cCampos := 'COD_IT'
  5671. Else //'QTD_DES'
  5672. cCampos := 'QTD_DE'
  5673. EndIf
  5674. Case cBlk == 'D3M'
  5675. If cCpoBlk == 'COD_ITEM_O'
  5676. cCampos := 'COD_IO'
  5677. ElseIf cCpoBlk == 'COD_ITEM_D'
  5678. cCampos := 'COD_ID'
  5679. ElseIf cCpoBlk == 'QTD_ORI'
  5680. cCampos := 'QTD_OR'
  5681. Else //'QTD_DEST'
  5682. cCampos := 'QTD_DE'
  5683. EndIf
  5684. Case cBlk == 'D3N'
  5685. If cCpoBlk == 'DT_PROD'
  5686. cCampos := 'DT_PRO'
  5687. Else//'COD_ITEM'
  5688. cCampos := 'COD_IT'
  5689. EndIf
  5690.  
  5691. Case cBlk == 'D3O'
  5692. If cCpoBlk == 'DT_CONS'
  5693. cCampos := 'DT_CON'
  5694. elseif cCpoBlk == 'COD_ITEM'
  5695. cCampos := 'COD_IT'
  5696. Else //COD_INS_SU
  5697. cCampos := 'COD_IN'
  5698. EndIf
  5699. Case cBlk == 'D3P'
  5700. If cCpoBlk == 'DT_EST'
  5701. cCampos := 'DT_EST'
  5702. ElseIf cCpoBlk == 'COD_ITEM'
  5703. cCampos := 'COD_IT'
  5704. ElseIf cCpoBlk == 'QTD_COR_P'
  5705. cCampos := 'QTD_PO'
  5706. ElseIf cCpoBlk == 'QTD_COR_N'
  5707. cCampos := 'QTD_NE'
  5708. ElseIf cCpoBlk == 'IND_EST
  5709. cCampos := 'IND_ES'
  5710. Else //COD_PART
  5711. cCampos := 'COD_PA'
  5712. EndIf
  5713. Case cBlk == 'D3R'
  5714. If cCpoBlk == 'DT_PROD'
  5715. cCampos := 'DT_PRO'
  5716. EndIf
  5717. Case cBlk == 'D3S'
  5718. If cCpoBlk == 'COD_ITEM'
  5719. cCampos := 'COD_IT'
  5720. EndIf
  5721. Case cBlk == 'D3T'
  5722. If cCpoBlk =='COD_ITEM'
  5723. cCampos := 'COD_IT'
  5724. EndIf
  5725. Case cBlk == 'D3U'
  5726. If cCpoBlk == 'QTD_LIN_K'
  5727. cCampos := 'QTD_LI'
  5728. EndIf
  5729. EndCase
  5730.  
  5731.  
  5732. return cCampos
  5733.  
  5734. /*/{Protheus.doc} ChkUpd
  5735. Fun玢o de verifica玢o do UPD
  5736. @author Reynaldo
  5737. @since 26/11/2018
  5738. @version 1.0
  5739.  
  5740. @return ${cFunConcat}, ${C骴igo para concatenar}
  5741. /*/
  5742. Static Function ChkUpd()
  5743. Local aFields := {}
  5744. Local cMensErro := ""
  5745. Local cMsgLib := ""
  5746. Local lVerClas := .F.
  5747. Local aVerClas := GetSrcArray("FWSX3Util.*")
  5748.  
  5749.  
  5750. If Len(aVerClas)
  5751. lVerClas:= .T.
  5752. EndIf
  5753.  
  5754.  
  5755. cMsgLib:= cMensErro := ""
  5756. cMsgLib+= cMensErro += Chr(10)
  5757. cMsgLib+= cMensErro += "========================================================"+chr(10)
  5758. cMsgLib+= cMensErro += "ATEN敲O!!! "+Chr(10)
  5759. cMensErro += "Este ambiente est?com o dicion醨io de dados incompativel "+Chr(10)
  5760. cMensErro += "com a vers鉶 dos fontes existentes no repositorio de dados, "+Chr(10)
  5761. cMensErro += "este problema ocorre devido a n鉶 execu玢o do compatibilizador"+Chr(10)
  5762. cMensErro += "do produto."+Chr(10)
  5763. cMensErro += Chr(10)
  5764. cMensErro += "Sera necess醨io executar o UPDDISTR com o 鷏timo arquivo "+Chr(10)
  5765. cMensErro += "diferencial (SDFBRA) disponivel no portal do cliente."+Chr(10)
  5766. cMensErro += Chr(10)
  5767. cMensErro += "Siga as instru珲es do Link abaixo para realizar a atualiza玢o:"+Chr(10)
  5768. cMensErro += "http://tdn.totvs.com/pages/viewpage.action?pageId=438279934"+Chr(10)
  5769. cMensErro += "Ap髎 seguir os passos acima a gera玢o do bloco K atrav閟 do "+Chr(10)
  5770. cMensErro += "MATR241 e/ou SPED FISCAL ser?liberado!!"+Chr(10)
  5771. cMsgLib+= "Este ambiente est?com a LIB desatualizada, favor atualzar com,"+Chr(10)
  5772. cMsgLib+= " a 鷏tima disponibilizada no portal do cliente. ,"+Chr(10)
  5773. cMsgLib+= "========================================================"+chr(10)
  5774. cMensErro +="========================================================"+chr(10)
  5775.  
  5776. If lVerClas
  5777. aFields := FWSX3Util():GetAllFields( "T4E" , .T. )
  5778. If aScan(aFields,{|x|x=="T4E_SEMRET"})>0
  5779. dbSelectArea("T4E")
  5780. If T4E->(FieldPos("T4E_SEMRET"))==0
  5781. UserException(cMensErro)
  5782. EndIf
  5783. Else
  5784. UserException(cMensErro)
  5785. EndIf
  5786.  
  5787. cMensErro := ""
  5788. Else
  5789. UserException(cMsgLib)
  5790. EndIf
  5791.  
  5792. Return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement