Advertisement
Guest User

MATV410

a guest
Sep 17th, 2019
2,118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 114.93 KB | None | 0 0
  1. #INCLUDE "RWMAKE.CH"
  2. #INCLUDE "MATA410.CH"
  3. #INCLUDE "PROTHEUS.CH"
  4. #INCLUDE "XMLXFUN.CH"
  5. #INCLUDE "TBICONN.CH"
  6. #INCLUDE "FWEVENTVIEWCONSTS.CH"
  7. #INCLUDE "FWADAPTEREAI.CH"
  8. #INCLUDE "FWMVCDEF.CH"
  9. #INCLUDE "CRMDEF.CH"
  10.  
  11.  
  12. #DEFINE ITENSSC6 300
  13.  
  14. /*/
  15. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  16. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  17. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  18. ±±³Fun‡…o ³A410VldTOk ³ Autor ³Eduardo Riera ³ Data ³01/06/2001³±±
  19. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  20. ±±³Descri‡…o ³Rotina de validacao da tudoOk da Enchoice ³±±
  21. ±±³ ³ ³±±
  22. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  23. ±±³Parametros³ Nenhum ³±±
  24. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  25. ±±³Retorno ³ ExpL1: Dados validos? ³±±
  26. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  27. ±±³Observacao³Esta rotina efetua a validacao da TudoOk da Enchoice ³±±
  28. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  29. ±±³ Uso ³ MATA410 ³±±
  30. ±±ÃÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  31. ±±³ ATUALIZACOES SOFRIDAS ³±±
  32. ±±ÃÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  33. ±±³LuisEnríquez³17/07/18³DMINA- ³Se replica funcionalidad atendida en ³±±
  34. ±±³(PER) ³ ³3630 ³DMINA-62 de Facturación de Anticipos. ³±±
  35. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  36. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  37. /*/
  38. Function A410VldTOk(nOpc, aRecnoSE1RA)
  39.  
  40. Local lRet := .T.
  41. Local lMt410TOK := Existblock("MT410TOK")
  42. Local lDclNew := SuperGetMv("MV_DCLNEW",.F.,.F.)
  43. Local cString := ""
  44. Local aRecnoSE1 := {}
  45.  
  46. If nOpc == 4
  47. cString := STR0141 //"Este Documento não poderá ser alterado pois existe um vinculo com pedido de compras ja recebido"
  48. Else
  49. cString := STR0142 //"Este Documento não poderá ser excluido pois existe um vinculo com pedido de compras ja recebido"
  50. EndIf
  51.  
  52. Default aRecnoSE1RA := {}
  53.  
  54. If cPaisLoc=="ARG" .And. lRet
  55. SA1->(DbSetOrder(1))
  56. If( SA1->(DbSeek(xFilial("SA1") + M->C5_CLIENTE+M->C5_LOJACLI)) .And. M->C5_PAISENT <> SA1->A1_PAIS) .And. ;
  57. (Empty(M->C5_IDIOMA) .OR. Empty(M->C5_INCOTER) .OR. Empty(M->C5_TPVENT) ;
  58. .OR. Empty(M->C5_PAISENT))
  59. MsgStop(STR0143,STR0140)
  60. lRet := .F.
  61. EndIf
  62. EndIf
  63. If !__lPyme
  64.  
  65. //
  66. // Template GEM
  67. //
  68. If lRet
  69. If ExistBlock("GMCVndVLD")
  70. lRet := ExecBlock("GMCVndVLD",.F.,.F.,{ lRet ,aHeader ,aCols ,aGEMCVnd })
  71. ElseIf ExistTemplate("GMCVndVLD",,.T.)
  72. //
  73. // executa a validacao da condicao de venda
  74. //
  75. lRet := ExecTemplate("GMCVndVLD",.F.,.F.,{ lRet ,aHeader ,aCols ,aGEMCVnd })
  76. Endif
  77.  
  78. EndIf
  79.  
  80. Endif
  81.  
  82. If ( ( nOpc == 3 .Or. nOpc == 4 ) .And. M->C5_TIPO == "D" .And. M->C5_MOEDA <> 1 )
  83. lRet := .F.
  84. //"Moeda inválida para pedido do tipo de Devolução de Compras"
  85. //"Altere o campo Moeda para moeda corrente do sistema."
  86. Help("",1,"MT410TOK",,STR0343,1,0,,,,,,{STR0344})
  87. EndIf
  88.  
  89. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  90. //³ Ponto de entrada para validar ao clicar botao OK ³
  91. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  92. If lMt410TOK
  93. lRet := Execblock("MT410TOK",.F.,.F.,{nOpc,aRecnoSE1RA})
  94. Endif
  95.  
  96. //Caso o parâmetro MV_DCLNEW esteja ativo valida se o campo C5_MODANP está preenchido
  97. If lRet .And. lDclNew
  98. If Empty(M->C5_MODANP)
  99. lRet := .F.
  100. //"Campo obrigatório não preenchido no cabeçalho."
  101. //"Preencha o campo Modal ANP"
  102. Help("",1,"410NoAnp",,STR0345,1,0,,,,,,{STR0346})
  103. EndIf
  104. EndIf
  105.  
  106. //Valida Natureza e Condicao de Pagamento. (Anticipo Mexico)
  107. If lRet .AND. cPaisLoc $ "MEX|PER"
  108. //Qdo Natureza Compensa Adiantamento nao permite condicao de Pagamento que usa Adiantamento
  109. //Logo:
  110. //NF de Adiantamento: Natureza Comp. Adiantamento = SIM e Cond. Pag. Usa Adiant. = NAO
  111. //NF que usa Adiantamento: Natureza Comp. Adiantamento = Nao e Cond. Pag. Usa Adiant. = SIM
  112. If a410NatAdi(M->C5_NATUREZ) .AND. A410UsaAdi( M->C5_CONDPAG )
  113. Aviso(STR0038,STR0178,{STR0040}) //"ATENCAO!"###"Quando a natureza compensar adiantamento não será possivel utilizar condicao de pagamento que usa adiantamentos."###"OK"
  114. lRet := .F.
  115. Endif
  116. EndIf
  117.  
  118. If A410UsaAdi(SC5->C5_CONDPAG)
  119. If !A410UsaAdi(M->C5_CONDPAG)
  120. If !A410UsaAdi( M->C5_CONDPAG ) .AND. Len(aRecnoSE1RA) > 0 .AND. lRet
  121. Help(" ",1,"A410CONDNADT")
  122. lRet := .F.
  123. ElseIf !A410UsaAdi( M->C5_CONDPAG ) .AND. Len(aRecnoSE1RA) <= 0 .AND. lRet
  124. aRecnoSE1 := FPedAdtPed( "R", { SC5->C5_NUM }, .F. )
  125. FPedAdtGrv("R", 2, SC5->C5_NUM, aRecnoSE1,,,,IIf(Type("aAdtPC")=="U",Nil,aAdtPC),IIf(Type("nAutoAdt")=="U",Nil,nAutoAdt))
  126. EndIf
  127. EndIf
  128. EndIf
  129.  
  130.  
  131. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  132. //³Valida se há relacionamentos de Adiantamentos³
  133. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  134. If !( cPaisLoc $ "MEX|PER") .AND. ( Type("l410Auto") == "U" .OR. !l410Auto ) .AND.;
  135. A410UsaAdi( M->C5_CONDPAG ) .AND.;
  136. Len(aRecnoSE1RA) <= 0 .AND.;
  137. lRet
  138.  
  139. lRet := MsgYesNo( STR0125 ) // "Não foram relacionados Adiantamentos para este pedido. Deseja prosseguir?"
  140. EndIf
  141.  
  142. lRet := lRet .AND. A410CkClRA(M->C5_CLIENTE, M->C5_LOJACLI, aRecnoSE1RA) // Verifica se os adiantamentos (RA) associados pertencem ao mesmo cliente / loja do Pedido de Vendas
  143.  
  144. If lRet .AND. Len(aCols) > 0 .And. Type("INCLUI") == "L" .And. !INCLUI
  145. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  146. //³Verifica se existe Vinculo com SC6 E SC7, se ³
  147. //³houve recebimento do SC7 O sc6 nao podera ser ³
  148. //³alterado. ³
  149. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  150. lRet := A410VerISC6(SC5->C5_FILIAL,SC5->C5_NUM ,aCols,aHeader)
  151. If !lRet
  152. Aviso(STR0140,cString,{"Ok"}) // "ATENÇÃO" | "Este Documento não poderá ser alterado/excluido pois existe um vinculo com pedido de compras ja recebido"
  153. EndIf
  154. EndIf
  155.  
  156. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  157. //³Verifica se este pedido possui Orcamentos-DAV em aberto no SIGALOJA ³
  158. //³Se sim, entao exclui todos. Se orcamento ja se tornou uma venda, entao ³
  159. //³bloqueia a alteracao do pedido ³
  160. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  161. If lRet .AND. nOpc == 4 .AND. cPaisLoc == "BRA" .AND. SuperGetMV("MV_LJPAFEC",,.F.) .AND. LjNfPafEcf(SM0->M0_CGC)
  162. MsgRun(STR0341,STR0342,{|| lRet := Ma410VlDav(M->C5_NUM)}) //"Verificando DAV relacionado..."##"Aguarde..."
  163. EndIf
  164.  
  165. //Validações referentes à integração do OMS com o Cockpit Logístico Neolog
  166. If nOpc == 4 .And. SuperGetMV("MV_CPLINT",.F.,"2") == "1" .And. FindFunction('OMSCPLVlPd')
  167. lRet := OMSCPLVlPd(4,SC5->C5_NUM,aHeader,aCols)
  168. EndIf
  169.  
  170. Return(lRet)
  171.  
  172.  
  173. //------------------------------------------------------------------------------
  174. /*/{Protheus.doc} A410CkClRA
  175. @description Verifica se os adiantamentos (RA) associados pertencem ao mesmo cliente / loja do Pedido de Vendas
  176. @sample A410CkClRA(cCliente, cLoja, aRecnoSE1RA)
  177. @param cCliente: Código do Cliente
  178. @param cLoja: Loja do Cliente
  179. @param aRecnoSE1RA: Títulos RA do Cliente/Loja vinculados ao Pedido de Vendas
  180. @return lRet - Retorno lógico
  181. @author Vendas CRM
  182. @since Maio/2018
  183. @version 12
  184. /*/
  185. //------------------------------------------------------------------------------
  186. Static Function A410CkClRA(cCliente, cLoja, aRecnoSE1RA)
  187.  
  188. Local aArea := {}
  189. Local aAreaSE1 := {}
  190. Local lRet := .T.
  191.  
  192. Default cCliente := Space(GetSX3Cache("C5_CLIENTE","X3_TAMANHO"))
  193. Default cLoja := Space(GetSX3Cache("C5_LOJACLI","X3_TAMANHO"))
  194. Default aRecnoSE1RA := {}
  195.  
  196. If ! Empty(cCliente) .AND. ! Empty(cLoja) .AND. Len(aRecnoSE1RA) > 0
  197. aArea := (Alias())->(GetArea())
  198. aAreaSE1 := SE1->(GetArea())
  199. SE1->(DbGoTo(aRecnoSE1RA[01][02]))
  200. If SE1->E1_CLIENTE <> cCliente .OR. SE1->E1_LOJA <> cLoja
  201. Help("",1,"A410CkClRA",,STR0339,1,0,,,,,,{STR0340}) //"Não é possível alterar o cliente/loja do Pedido de Vendas, pois o mesmo possui adiantamentos (RA) vinculados."##"Desvincule os adiantamentos antes de alterar o cliente/loja do Pedido de Vendas."
  202. lRet := .F.
  203. EndIf
  204. RestArea(aAreaSE1)
  205. RestArea(aArea)
  206. EndIf
  207. Return lRet
  208.  
  209. /*
  210. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  211. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  212. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  213. ±±³Funcao ³Ma410VldUs³ Autor ³ Henry Fila ³ Data ³17/03/2003³±±
  214. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  215. ±±³Descri‡…o ³ Tratamento da confirmacao / nao confirmacao da inclusao ³±±
  216. ±±³ ³ ou alteracao ³±±
  217. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  218. ±±³Sintaxe ³ ExpL1 := Ma410VldUs( ExpN1 ) ³±±
  219. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  220. ±±³Parametros³ ExpN1 -> Opcao : 1 -> Confirma / 0 -> Nao Confirma ³±±
  221. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  222. ±±³Retorno ³ ExpL1 -> Validacao ³±±
  223. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  224. ±±³ DATA ³ Programador ³Manutencao Efetuada ³±±
  225. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  226. ±±³ ³ ³ ³±±
  227. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  228. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  229. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  230. */
  231.  
  232. Function Ma410VldUs( nOpca )
  233.  
  234. Local lRet := .T.
  235. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  236. //³ Faz a chamada do ponto passando nOpca como parametro ³
  237. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  238.  
  239. If ExistBlock( "MA410VLD" )
  240. lRet := ExecBlock( "MA410VLD", .F., .F., { nOpca } )
  241. EndIf
  242.  
  243. Return( lRet )
  244.  
  245. /*
  246. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  247. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  248. ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
  249. ±±ºPrograma |A410VldGCTºAutor ³Microsiga º Data ³ 31/07/09 º±±
  250. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  251. ±±ºDescricao ³ Valida se o contrato possui alcada. Em caso positivo alertaº±±
  252. ±±º ³ e bloqueia, pois devera ter a medicao aprovada. º±±
  253. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  254. ±±ºUso ³ MATA410 º±±
  255. ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
  256. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  257. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  258. */
  259. Function A410VldGCT()
  260. Local lRet := .T.
  261. CN9->(DbSetOrder(1))
  262. CN9->(dbSeek(xFilial("CN9")+&(ReadVar())))
  263.  
  264. If !Empty(CN1->(FieldPos("CN1_GRPAPR"))) .And. SuperGetMV("MV_CNMDALC",.F.,"N") == "S"
  265. CN1->(dbSetOrder(1))
  266. CN1->(dbSeek(xFilial("CN1")+CN9->CN9_TPCTO))
  267. If !Empty(CN1->CN1_GRPAPR)
  268. Aviso(STR0127,STR0132,{"Ok"}) //SIGAGCT - Este contrato possui controle de alçadas e por isto exige a prévia inclusão de medições.
  269. lRet := .F.
  270. EndIf
  271. EndIf
  272. If CN1->(dbSeek(xFilial("CN1")+CN9->CN9_TPCTO)) .aND. CN1->CN1_ESPCTR <> '2'
  273. Aviso(STR0127,STR0158,{"Ok"}) //SIGAGCT - O CONTRATO SELECIONADO NAO E DE VENDA!
  274. lRet := .F.
  275. EndIf
  276.  
  277. Return lRet
  278.  
  279. /*
  280. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  281. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  282. ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
  283. ±±ºPrograma ³A410UsaAdiºAutor ³Vendas CRM º Data ³ 24/08/09 º±±
  284. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  285. ±±ºDescricao ³ Verifica se a condicao de pagto utiliza Adiantamento. º±±
  286. ±±º ³ º±±
  287. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  288. ±±ºUso ³ MATA410, FATXFUN º±±
  289. ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
  290. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  291. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  292. */
  293. Function A410UsaAdi( cCondPagto,cCondPAdt )
  294. Local aAreaSE4 := SE4->(GetArea())
  295. Local lRet := .F.
  296. Default cCondPAdt:="0"
  297.  
  298. #IFDEF TOP
  299. If cPaisLoc $ "ANG|BRA|MEX|PER" .AND. !Empty(cCondPagto)
  300. DbSelectArea("SE4")
  301. DbSetOrder(1)
  302. If DbSeek(xFilial("SE4")+cCondPagto) .AND.;
  303. SE4->E4_CTRADT == "1"
  304. lRet:= .T.
  305. cCondPAdt:="1"
  306. EndIf
  307. EndIf
  308. RestArea(aAreaSE4)
  309. #ENDIF
  310.  
  311. Return lRet
  312.  
  313.  
  314. /*
  315. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  316. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  317. ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
  318. ±±ºPrograma ³A410NatAdiºAutor ³Vendas CRM º Data ³ 17/05/11 º±±
  319. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  320. ±±ºDescricao ³ Verifica se a condicao de pagto utiliza Adiantamento. º±±
  321. ±±º ³ º±±
  322. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  323. ±±ºUso ³ MATA410, FATXFUN,LOCXNF º±±
  324. ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
  325. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  326. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  327. */
  328. Function a410NatAdi(cNatureza)
  329. Local lRet := .F.
  330. Local aArea := GetArea()
  331. DbSelectArea("SED")
  332. DbSetOrder(1)
  333. If MsSeek(XFilial("SED")+cNatureza) .AND. SED->ED_OPERADT == "1"
  334. lRet := .T.
  335. EndIf
  336. RestArea(aArea)
  337. Return lRet
  338.  
  339.  
  340. /*
  341. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  342. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  343. ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
  344. ±±ºPrograma ³a410VlAdtCpo ºAutor ³Microsiga º Data ³ 07/15/10 º±±
  345. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  346. ±±ºDesc. ³Valida se todos os campos da rotina automatica de adianta º±±
  347. ±±º ³mento º±±
  348. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  349. ±±ºUso ³ AP º±±
  350. ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
  351. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  352. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  353. */
  354. Function a410VlAdtCpo(aAdtPC)
  355. Local lRet := .T.
  356. Local aCpo := {}
  357. Local nX := 0
  358. Local nPos := 0
  359. Local nY := 0
  360. Local cCpoAdt := ""
  361.  
  362. aAdd(aCpo,"FIE_FILIAL")
  363. aAdd(aCpo,"FIE_PREFIX")
  364. aAdd(aCpo,"FIE_NUM")
  365. aAdd(aCpo,"FIE_PARCEL")
  366. aAdd(aCpo,"FIE_TIPO")
  367. aAdd(aCpo,"FIE_VALOR")
  368. aAdd(aCpo,"FIE_CART")
  369. aAdd(aCpo,"FIE_CLIENT")
  370. aAdd(aCpo,"FIE_LOJA")
  371.  
  372. For nX := 1 to Len(aAdtPC)
  373. For nY := 1 to Len(aCpo)
  374. nPos := AScan(aAdtPC[nX], { |x| Alltrim(x[1]) == aCpo[nY]} )
  375. If nPos == 0
  376. lRet := .F.
  377. cCpoAdt += aCpo[nY] + " "
  378. EndIf
  379. Next
  380. If !lRet
  381. Exit
  382. EndIf
  383. Next nX
  384.  
  385. If !lRet
  386. Help(" ",1,"A410CPOSADT",,"CAMPOS"+" [ "+cCpoAdt+" ] "+"NAO INFORMADO NA ESTRUTURA!")
  387. EndIf
  388.  
  389. Return lRet
  390.  
  391. /*/
  392. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  393. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄ¿±±
  394. ±±³Função ³a410VldAnt³ Autor ³ Vendas e eCRM ³ Data ³10/01/2011 ³±±
  395. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄ´±±
  396. ±±³ ³Funcao para validacao Antes de Vincular Adiantamentos. ³±±
  397. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  398. ±±³Retorno ³ Logico - .T. ok .F. nao ok ³±±
  399. ±±³ ³ ³±±
  400. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  401. ±±³Uso ³SIGAFAT - Pedido de Venda ³±±
  402. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  403. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  404. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  405. /*/
  406. Function a410VldAnt()
  407. Local lRet := .T.
  408. /* -- Localizacao Mexico
  409. Qdo Natureza é uma Operação de Adiantamento (NF de Anticipo) nao permite condicao de Pagamento que compensa títulos de Adiantamento (RA).
  410. Logo:
  411. NF de Adiantamento: Natureza Oper. Adiantamento = SIM e Cond. Pag. Usa Adiant. = NÃO
  412. NF Normal compensando títulos de adiantamento: Natureza Oper. Adiantamento = NAO e Cond. Pag. Compensa Adiant. = SIM
  413. */
  414. If cPaisLoc $ "MEX|PER"
  415. If Empty(M->C5_NATUREZ)
  416. MsgAlert(STR0179) //"Para relacionar adiantamentos é necessário preencher a natureza"
  417. lRet := .F.
  418. EndIf
  419. If a410NatAdi(M->C5_NATUREZ) .AND. A410UsaAdi(M->C5_CONDPAG)
  420. MsgAlert(STR0180) //"Quando a natureza for uma operacao de adiantamento não é permitido compensar titulos. A condição de pagamento não deve permitir compensar. Verifique."
  421. lRet := .F.
  422. EndIf
  423. EndIf
  424. Return lRet
  425.  
  426. /*
  427. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  428. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  429. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  430. ±±³Funcao ³ a410lCkAdtFR3 ³ Autor ³ Totvs ³Data ³ 27/10/10 ³±±
  431. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  432. ±±³Descricao ³ Verifica se houve efetivacao do relacionamento com FIE apos ³±±
  433. ±±³ ³ emissao da nota fiscal ³±±
  434. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  435. ±±³Parametros³ Nenhum ³±±
  436. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  437. ±±³Retorno ³0 - Nenhuma efetivacao ³±±
  438. ±±³ ³1 - Foi encontrado efetivacao ³±±
  439. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  440. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  441. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  442. */
  443. Function a410lCkAdtFR3( cNumPed, nAutoAdt )
  444. Local aAreaFR3 := {}
  445. Local nRet := 0
  446.  
  447. aAreaFR3 := FR3->( GetArea() )
  448. SIX->(dbSetOrder(1))
  449. If SIX->(MsSeek("FR34"))
  450. FR3->( DbsetOrder( 4 ) )
  451. If FR3->( DbSeek( xFilial( "FR3" ) + "R" + cNumPed ) )
  452. nRet := 1
  453. EndIf
  454. EndIf
  455. RestArea( aAreaFR3 )
  456.  
  457. Return nRet
  458.  
  459. /*
  460. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  461. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  462. ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
  463. ±±ºPrograma ³a410ISSCAMARK ºAutor ³ Vitor Felipe º Data ³ 29/06/2012 º±±
  464. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  465. ±±ºDesc. ³ Validar o cancelamento do Pedido de Venda. º±±
  466. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  467. ±±ºUso ³ MATA410 º±±
  468. ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
  469. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  470. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  471. */
  472. Function a410ISSCAMARK()
  473.  
  474. Local lRet := .T.
  475.  
  476. If !Empty(M->C5_NUM)
  477. dbSelectArea("CE2")
  478. dbSetOrder(1)
  479. If CE2->(msSeek(xFilial("CE2")+M->C5_NUM))
  480. lRet := .F.
  481. Alert("Atenção !!! Existem Abatimentos de ISS selecionados. Desmarque a seleção.")
  482. EndIF
  483. CE2->(dbCloseArea())
  484. EndIf
  485.  
  486. Return(lRet)
  487.  
  488. /*
  489. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  490. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  491. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  492. ±±³Fun‡ao ³A410LiqPro ³ Autor ³ Marco Aurelio - Mano ³ Data ³13/06/11 ³±±
  493. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  494. ±±³Descri‡ao ³Valida relacao entre os campos C5_LIQPRO/C5_TIPOREM e ³±±
  495. ±±³ ³F2_LIQPROD/F2_TIPOREM processo "Liquido Produto". ³±±
  496. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  497. ±±³Sintaxe ³A410LiqPro(ExpC1,ExpC2) ³±±
  498. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  499. ±±³Parametros³ExpC1=Alias da tabela do campo a ser validado ³±±
  500. ±±³ ³ExpC2=Campo a ser validado pela funcao ³±±
  501. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  502. ±±³Uso ³Chamada a partir do X3_VALID dos campos C5_LIQPROD, C5_TIPOREM ³±±
  503. ±±³ ³F2_LIQPROD e F2_TIPOREM ³±±
  504. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  505. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  506. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  507. */
  508. Function A410LiqPro()
  509.  
  510. Local cVar := ReadVar() // Nome da variavel de memoria editada
  511. Local cContVar := &(ReadVar()) // Conteudo da variavel
  512. Local cCampo := StrTran(cVar,"M->","") // Nome da campo a ser validado
  513. Local lRet := .T. // Conteudo de retorno
  514. Local cAlias := Posicione("SX3",2,cCampo,"X3_ARQUIVO") // Alias do arquivo
  515. Local lFieldOK := ((cAlias)->(FieldPos(cCampo)) > 0) // Determina se o campo existe na estrutura da tabela
  516.  
  517. If ( ( cCampo=="C5_LIQPROD" .and. M->C5_LIQPROD == "1" .and. M->C5_TIPOREM # "A" ) .or.;
  518. ( cCampo=="C5_TIPOREM" .and. M->C5_TIPOREM # "A" .and. M->C5_LIQPROD == "1" ) .or.;
  519. ( cCampo=="F2_LIQPROD" .and. M->F2_LIQPROD == "1" .and. M->F2_TIPOREM # "A" ) .or.;
  520. ( cCampo=="F2_TIPOREM" .and. M->F2_TIPOREM # "A" .and. M->F2_LIQPROD == "1" ) )
  521.  
  522. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  523. //³HELP: Para "Tipo de Remito=Consignacao", campo "Liquido Prod" deve ser preenchido com "Sim" ³
  524. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  525. Help(" ",1,Iif(cCampo$"C5_LIQPROD.F2_LIQPROD","A410LIQPRO","A410TIPREM"))
  526. lRet := .f.
  527.  
  528. EndIf
  529.  
  530. Return(lRet)
  531.  
  532. /*
  533. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  534. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  535. ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
  536. ±±ºPrograma ³MTA410ChkEmit ºAutor ³VENDAS/CRM º Data ³ 19/03/14 º±±
  537. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  538. ±±ºDesc. ³ Função para verificar se existe o emitente com o codigo º±±
  539. ±±º ³ informado. Não foi utilizado a funcao existchav ou existcpoº±±
  540. ±±º ³ para não apresentar a mensagem caso nao encontrado º±±
  541. ±±º ³ º±±
  542. ±±º ³ Parämetro: cCod - Codigo a verificar º±±
  543. ±±º ³ º±±
  544. ±±º ³ º±±
  545. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  546. ±±ºUso ³ P11 º±±
  547. ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
  548. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  549. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  550. */
  551. Function MTA410ChkEmit(cCod)
  552.  
  553. Local aArea := GetArea()
  554. Local lEncontrou := .F.
  555.  
  556. dbSelectArea("GU3")
  557. dbSetOrder(1)
  558.  
  559. If DBSeek(xFilial("GU3") + cCod)
  560. lEncontrou := .T.
  561. EndIf
  562.  
  563. RestArea(aArea)
  564.  
  565. Return lEncontrou
  566.  
  567.  
  568. /*/
  569. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  570. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  571. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  572. ±±³Funcao ³A410Vend ³ Autor ³Eduardo Riera ³ Data ³27.02.99 ³±±
  573. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  574. ±±³Descri‡…o ³Validacao do Codigo do Vendedor ³±±
  575. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  576. ±±³Retorno ³ExpL1: Logico ³±±
  577. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  578. ±±³Parametros³Nenhum ³±±
  579. ±±³ ³ ³±±
  580. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  581. ±±³ DATA ³ Programador ³Manutencao Efetuada ³±±
  582. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  583. ±±³ ³ ³ ³±±
  584. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  585. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  586. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  587. /*/
  588. Function A410Vend()
  589. Local cCampoGet := ReadVar()
  590. Local cConteudo := &(ReadVar())
  591. Local cContra := M->C5_MDCONTR
  592. Local cFilCtr := ""
  593. Local cVendedores:= ""
  594. Local cVend := "1"
  595. Local cComissao := ""
  596. Local nNumVend := Fa440CntVen()
  597. Local nComissao := 0
  598. Local nCntFor := 0
  599. Local nEndereco := 0
  600. Local bVendedor := {|x| "M->C5_VEND"+x}
  601. Local lRetorna := .T.
  602.  
  603. cConteudo := If(Empty(cConteudo),"",cConteudo)
  604.  
  605. dbSelectArea("SA3")
  606. dbSetOrder(1)
  607. If ( !MsSeek(xFilial("SA3")+cConteudo) )
  608. Help(" ",1,"REGNOIS")
  609. lRetorna := .F.
  610. Else
  611. lRetorna := RegistroOk("SA3")
  612. EndIf
  613.  
  614. If lRetorna .And. INCLUI .And. !Empty(cContra) .And. !Empty(cConteudo)
  615. If IsInCallStack('CN120MedEnc') .Or. IsInCallStack('CN121Encerr')
  616. cFilCtr := POSICIONE("CND",4,xFilial("CND")+M->C5_MDNUMED,"CND_FILCTR")
  617. Else
  618. cFilCtr := xFilial("CNU")
  619. EndIf
  620.  
  621. CNU->(dbSetOrder(1))
  622. If !CNU->(dbSeek(cFilCtr+cContra+cConteudo))
  623. Aviso(STR0127,STR0129,{"Ok"}) //SIGAGCT - Este pedido foi vinculado a um contrato e este vendedor não consta no mesmo.
  624. lRetorna := .F.
  625. EndIf
  626. EndIf
  627.  
  628. If lRetorna
  629. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  630. //³Analisa todos os vendedores ³
  631. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  632. For nCntFor := 1 To nNumVend
  633. If ( !Empty(&(Eval(bVendedor,cVend))) .And. cCampoGet != EVAL(bVendedor,cVend) )
  634. cVendedores := cVendedores + "\" + &(EVAL(bVendedor,cVend))
  635. EndIf
  636. cVend := Soma1(cVend,1)
  637. Next nCntFor
  638. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  639. //³Valida o Vendedor, para nao permitir duplicacao de codigos ³
  640. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  641. If ( cConteudo $ cVendedores )
  642. Help(" ",1,"VENDED")
  643. lRetorna := .F.
  644. EndIf
  645. EndIf
  646.  
  647. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  648. //³ Coloca na tela o percentual da comissao conforme o vendedor ³
  649. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  650. IF ( lRetorna )
  651. If ( !Empty(cConteudo) )
  652. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  653. //³ Atualiza comissao ³
  654. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  655. cVend := Substr(cCampoGet,11,1)
  656. M->&("C5_COMIS"+cVend) := IF(Empty(SA3->A3_COMIS),M->&("C5_COMIS"+cVend),SA3->A3_COMIS)
  657. Else
  658. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  659. //³ Limpa campo de comissao ³
  660. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  661. cVend := Substr(cCampoGet,11,1)
  662. M->&("C5_COMIS"+cVend) := 0.00
  663. EndIf
  664. cComissao :="M->C5_COMIS" + cVend
  665. cComissao := Substr(cComissao,4,9)
  666. nEndereco := Ascan(aGets,{ |x| Subs(x,9,9) ==cComissao } )
  667. If ( nEndereco > 0 )
  668. aTela[Val(Subs(aGets[nEndereco],1,2))][Val(Subs(aGets[nEndereco],3,1))*2] := If(!Empty(cConteudo),TransNum("A3_COMIS"),TransNum("C5_COMIS"+cVend))
  669. EndIf
  670. EndIf
  671.  
  672. Return(lRetorna)
  673.  
  674. /*
  675. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  676. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  677. ±±³Fun‡„o ³a410IPIDEV³ Autor³ Claudinei M. Benzi ³ Data ³ 10.01.92 ³±±
  678. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  679. ±±³Descri‡„o ³ Quando o pedido de venda for devolucao o usuario pode ³±±
  680. ±±³ ³ digitar o valor do ipi ³±±
  681. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  682. ±±³Uso ³ Mata410 ³±±
  683. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  684. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  685. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  686. */
  687. Function A410DevIpi()
  688. If M->C5_TIPO != "D"
  689. Help(" ",1,"A410DevIpi")
  690. Return .F.
  691. EndIf
  692. Return .T.
  693.  
  694. /*/
  695. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  696. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  697. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  698. ±±³Funcao ³A410PedFat³ Autor ³ Eduardo Riera ³ Data ³ 24.02.99 ³±±
  699. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  700. ±±³Descri‡…o ³ Verifica se um Pedido Foi Totalmente Faturado ³±±
  701. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  702. ±±³Retorno ³ ExpL1: Indica se o Pedido foi faturado ³±±
  703. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  704. ±±³Parametros³ ³±±
  705. ±±³ ³ ³±±
  706. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  707. ±±³ DATA ³ Programador ³Manutencao Efetuada ³±±
  708. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  709. ±±³ ³ ³ ³±±
  710. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  711. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  712. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  713. /*/
  714.  
  715. Function A410PedFat(cProduto,lVldGrade,nQuantDig,lQtdVen)
  716.  
  717. Local aArea := GetArea()
  718. Local lRetorno := .T.
  719. Local nPItem := 0
  720. Local nPProduto := 0
  721. Local cItem := ""
  722. Local nTes := 0
  723. Local cTes := ""
  724.  
  725. DEFAULT cProduto := ""
  726. DEFAULT lVldGrade := .F.
  727. DEFAULT nQuantDig := 0
  728. DEFAULT lQtdVen := .F.
  729.  
  730. If (( Altera .And. SuperGetMv("MV_ALTPED")=="N" ) .And. !(SC5->C5_TIPO $ "CIP")) .And. !(!Empty(SC5->C5_PEDEXP) .And. SuperGetMv("MV_EECFAT").And. AvIntEmb())
  731. If !lVldGrade
  732. nPItem := aScan(aHeader,{|x| AllTrim(x[2])=="C6_ITEM"})
  733. nPProduto := aScan(aHeader,{|x| AllTrim(x[2])=="C6_PRODUTO"})
  734. nTes := aScan(aHeader,{|x| AllTrim(x[2])=="C6_TES"})
  735. cItem := aCols[n][nPItem]
  736. cProduto := aCols[n][nPProduto]
  737. cTes := aCols[n][nTes]
  738. Else
  739. nPItem := aScan(oGrade:aHeadAux,{|x| AllTrim(x[2])=="C6_ITEM"})
  740. nPProduto := aScan(oGrade:aHeadAux,{|x| AllTrim(x[2])=="C6_PRODUTO"})
  741. nTes := aScan(oGrade:aHeadAux,{|x| AllTrim(x[2])=="C6_TES"})
  742. cItem := oGrade:aColsAux[oGrade:nPosLinO][nPItem]
  743. cTes := oGrade:aColsAux[oGrade:nPosLinO][nTes]
  744. EndIf
  745.  
  746. dbSelectArea("SF4")
  747. dbSetOrder(1)
  748. dbSeek(xFilial("SF4")+cTes)
  749.  
  750. dbSelectArea("SC6")
  751. dbSetOrder(1)
  752. If ( MsSeek(xFilial("SC6")+M->C5_NUM+cItem+cProduto) )
  753. If (lVldGrade) .Or. (!lVldGrade .And. SC6->C6_GRADE <> "S" )
  754. If ( SC6->C6_QTDENT >= SC6->C6_QTDVEN .And. SF4->F4_QTDZERO <> "1" ) .Or.;
  755. (SC6->C6_QTDENT == SC6->C6_QTDVEN .AND. SF4->F4_QTDZERO == "1" .AND. !Empty(SC6->C6_NOTA))
  756. Help(" ",1,"A410PRODFA")
  757. lRetorno := .F.
  758. EndIf
  759. If (lRetorno) .And. (lVldGrade) .And. (lQtdVen) .And. (nQuantDig < SC6->C6_QTDENT)
  760. Help(" ",1,"A410PEDJFT")
  761. lRetorno := .F.
  762. EndIf
  763. EndIf
  764. EndIf
  765. EndIf
  766.  
  767. RestArea(aArea)
  768.  
  769. Return(lRetorno)
  770.  
  771. /*/
  772. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  773. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  774. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  775. ±±³Funcao ³A410ReCalc³ Autor ³ Eduardo Riera ³ Data ³ 19.02.99 ³±±
  776. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  777. ±±³Descri‡…o ³Esta funcao corrige os dados entre o cabecalho e a GetDados ³±±
  778. ±±³ ³avaliando Desconto, CFOP , Tipo do Pedido e Tabela de Preco ³±±
  779. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  780. ±±³Retorno ³ExpL1: Sempre .T. ³±±
  781. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  782. ±±³Parametros³ExpL1: Indica se o recalculo eh somente do desconto de cabe ³±±
  783. ±±³ ³calho. ³±±
  784. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  785. ±±³ DATA ³ Programador ³Manutencao Efetuada ³±±
  786. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  787. ±±³12/11/99 ³ Alves ³ Quando estiver sendo executada a partir de ³±±
  788. ±±³ ³ ³ uma rotina automatica nao deixar sobrescre-³±±
  789. ±±³ ³ ³ ver o aCols ³±±
  790. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  791. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  792. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  793. /*/
  794. Function A410ReCalc(lDescCab,lBenefPodT)
  795.  
  796. Local aArea := GetArea()
  797. Local aAreaSX3 := SX3->(GetArea())
  798. Local aCont := {}
  799. Local aStruSC6 := {}
  800. Local aDadosCfo := {}
  801. Local cEstado :=SuperGetMv("MV_ESTADO")
  802. Local cAliasQry:= ""
  803. Local cAltPreco:= GetNewPar( "MV_ALTPREC", "T" )
  804. Local cCliTab := ""
  805. Local cLojaTab := ""
  806. Local lAltPreco:= .F.
  807. Local nDesc := 0
  808. Local ni := 0
  809. Local nTmp := 1
  810. Local nx := 0
  811. Local nCntFor := 0
  812. Local nPCFOP := aScan(aHeader,{|x| AllTrim(x[2])=="C6_CF" })
  813. Local nPTes := aScan(aHeader,{|x| AllTrim(x[2])=="C6_TES"})
  814. Local nPProd := aScan(aHeader,{|x| AllTrim(x[2])=="C6_PRODUTO"})
  815. Local nPPrUnit := aScan(aHeader,{|x| AllTrim(x[2])=="C6_PRUNIT"})
  816. Local nPPrcVen := aScan(aHeader,{|x| AllTrim(x[2])=="C6_PRCVEN"})
  817. Local nPDescon := aScan(aHeader,{|x| AllTrim(x[2])=="C6_DESCONT"})
  818. Local nPVlDesc := aScan(aHeader,{|x| AllTrim(x[2])=="C6_VALDESC"})
  819. Local nPQtdVen := aScan(aHeader,{|x| AllTrim(x[2])=="C6_QTDVEN"})
  820. Local nPValor := aScan(aHeader,{|x| AllTrim(x[2])=="C6_VALOR"})
  821. Local nPLoteCtl := aScan(aHeader,{|x| AllTrim(x[2])=="C6_LOTECTL"})
  822. Local nPNumLote := aScan(aHeader,{|x| AllTrim(x[2])=="C6_NUMLOTE"})
  823. Local nPItem := GDFieldPos( "C6_ITEM" )
  824. Local nPGrdQtd := 0
  825. Local nPGrdPrc := 0
  826. Local nPGrdTot := 0
  827. Local nPGrdVDe := 0
  828. Local nPGrdPrU := 0
  829. Local nVlrTabela:= 0
  830. Local nScan := 0
  831. Local nLinha := 0
  832. Local nColuna := 0
  833. Local lGrade := MaGrade()
  834. Local lGradeReal:= .F.
  835. Local cProduto := ""
  836. Local lCondPg := (ReadVar()=="M->C5_CONDPAG")
  837. Local lCondTab := .F. // Verifica se a condicao escolhida esta na tabela de precos
  838. Local nDescont := 0
  839.  
  840. Local lDescEsca := GetNewPar("MV_DESCLOT",.F.)
  841. Local lTabCli := (SuperGetMv("MV_TABCENT",.F.,"2") == "1")
  842. Local lGrdMult := "MATA410" $ SuperGetMV("MV_GRDMULT",.F.,"")
  843.  
  844. // Indica se o preco unitario sera arredondado em 0 casas decimais ou nao. Se .T. respeita MV_CENT (Apenas Chile).
  845. Local lPrcDec := SuperGetMV("MV_PRCDEC",,.F.)
  846.  
  847. //Tratamento para opcionais
  848. Local lOpcPadrao := SuperGetMv("MV_REPGOPC",.F.,"N") == "N"
  849. Local nPOpcional := aScan(aHeader,{|x| AllTrim(x[2])==IIf(lOpcPadrao,"C6_OPC","C6_MOPC")})
  850. Local cOpcional := ""
  851. Local cOpc := ""
  852. Local nVlrOpc := 0
  853.  
  854. l410Auto := If (Type("l410Auto") == "U", .F., l410Auto)
  855. DEFAULT lDescCab := GetNewPar("MV_PVRECAL",.F.) //Desabilita o recalculo automatico do Pedido de Venda.
  856. DEFAULT lBenefPodT := .F.
  857. If Type("lShowOpc") == "L"
  858. lShowOpc := .T.
  859. EndIf
  860.  
  861. If !lDescCab
  862. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  863. //³ Zera os descontos caso o Pedido seja de Complemento. ³
  864. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  865. If ( At(M->C5_TIPO,"CIP") != 0 )
  866. M->C5_DESC1 := M->C5_DESC2 := M->C5_DESC3 := M->C5_DESC4 := 0
  867. For nCntFor := 1 To 4
  868. nDesc := Ascan(aGets,{ |x| Subs(x,9,10) == "C5_DESC"+Str(nCntFor,1,0)+" " } )
  869. If nDesc != 0
  870. ni := Val(Subs(aGets[nDesc],1,2))
  871. nx := Val(Subs(aGets[nDesc],3,1))*2
  872. If Val(aTela[ni][nx]) != 0
  873. dbSelectArea("SX3")
  874. dbSetOrder(2)
  875. MsSeek("C5_DESC"+Str(nCntFor,1,0)+" ")
  876. aTela[ni][nx] := Str(0,SX3->X3_DECIMAL+3,SX3->X3_DECIMAL)
  877. EndIf
  878. EndIf
  879. Next nCntFor
  880. EndIf
  881. EndIf
  882.  
  883. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  884. //³ Corrige o Codigo Fiscal, caso o Cliente tenha sido alterado. ³
  885. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  886. If ( INCLUI .Or. ALTERA )
  887. dbSelectArea(IIF(M->C5_TIPO$"DB","SA2","SA1"))
  888. dbSetOrder(1)
  889. MsSeek(xFilial()+IIf(!Empty(M->C5_CLIENT),M->C5_CLIENT,M->C5_CLIENTE)+IIf(!Empty(M->C5_LOJAENT),M->C5_LOJAENT,M->C5_LOJACLI))
  890.  
  891. For nCntFor := 1 to Len(aCols)
  892. dbSelectArea("SF4")
  893. dbSetOrder(1)
  894. If ( MsSeek(xFilial("SF4")+aCols[nCntFor][nPTes],.F.) )
  895. If At(M->C5_TIPO,"DB") == 0
  896.  
  897. Aadd(aDadosCfo,{"OPERNF","S"})
  898. Aadd(aDadosCfo,{"TPCLIFOR",M->C5_TIPOCLI})
  899. Aadd(aDadosCfo,{"UFDEST",SA1->A1_EST})
  900. Aadd(aDadosCfo,{"INSCR" ,SA1->A1_INSCR})
  901. Aadd(aDadosCfo,{"CONTR", SA1->A1_CONTRIB})
  902. Aadd(aDadosCfo,{"FRETE", M->C5_TPFRETE})
  903.  
  904. aCols[nCntFor][nPCFOP] := MaFisCfo(,SF4->F4_CF,aDadosCfo)
  905.  
  906. Else
  907. Aadd(aDadosCfo,{"OPERNF","S"})
  908. Aadd(aDadosCfo,{"TPCLIFOR",M->C5_TIPOCLI})
  909. Aadd(aDadosCfo,{"UFDEST",SA2->A2_EST})
  910. Aadd(aDadosCfo,{"INSCR" ,SA2->A2_INSCR})
  911. aCols[nCntFor][nPCFOP] := MaFisCfo(,SF4->F4_CF,aDadosCfo)
  912. EndIf
  913. EndIf
  914. Next nCntFor
  915. EndIf
  916.  
  917. If cAltPreco <> "T"
  918.  
  919. aCont := {}
  920.  
  921. #IFDEF TOP
  922.  
  923. cAliasQry := GetNextAlias()
  924.  
  925. cQuery := "SELECT C6_NUM, C6_ITEM, C6_QTDENT, C6_QTDEMP FROM " + SC6->( RetSqlName( "SC6" ) ) + " "
  926. cQuery += "WHERE "
  927. cQuery += "C6_FILIAL='" + xFilial("SC6") + "' AND "
  928. cQuery += "C6_NUM='" + M->C5_NUM + "' AND "
  929. cQuery += "D_E_L_E_T_=' '"
  930.  
  931. cQuery := ChangeQuery( cQuery )
  932.  
  933. dbUseArea( .T., "TOPCONN", TcGenQry( ,,cQuery ), cAliasQry, .F., .T. )
  934.  
  935. aStruSC6 := SC6->( dbStruct())
  936.  
  937. If !Empty( nScan := AScan( aStruSC6, { |x| x[1]=="C6_QTDENT" } ) )
  938. TcSetField( cAliasQry, aStruSC6[ nScan, 1 ], aStruSC6[ nScan, 2 ], aStruSC6[ nScan, 3 ], aStruSC6[ nScan, 4 ] )
  939. EndIf
  940.  
  941. If !Empty( nScan := AScan( aStruSC6, { |x| x[1]=="C6_QTDEMP" } ) )
  942. TcSetField( cAliasQry, aStruSC6[ nScan, 1 ], aStruSC6[ nScan, 2 ], aStruSC6[ nScan, 3 ], aStruSC6[ nScan, 4 ] )
  943. EndIf
  944.  
  945. While !Eof()
  946. AAdd( aCont, { C6_NUM + C6_ITEM, C6_QTDENT, C6_QTDEMP } )
  947. dbSkip()
  948. EndDo
  949.  
  950. dbCloseArea()
  951.  
  952. dbSelectArea( "SC6" )
  953.  
  954. #ELSE
  955.  
  956. SC6->( dbSetOrder( 1 ) )
  957. If SC6->( dbSeek( xFilial( "SC6" ) + M->C5_NUM ) )
  958. While !SC6->( Eof() ) .And. xFilial( "SC6" ) + M->C5_NUM == SC6->C6_FILIAL + SC6->C6_NUM
  959. AAdd( aCont, { SC6->C6_NUM + SC6->C6_ITEM, SC6->C6_QTDENT, SC6->C6_QTDEMP } )
  960. SC6->( dbSkip() )
  961. EndDo
  962. EndIf
  963.  
  964. #ENDIF
  965.  
  966. EndIf
  967.  
  968. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  969. //³ Corrige o preco de tabela e preco unitario p/ tab.alterada ³
  970. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  971.  
  972. If (M->C5_TIPO == "N" .And. !("M->C5_CLIENT"==Alltrim(ReadVar()).Or."M->C5_LOJAENT"==ReadVar()) .And. !lBenefPodT ) .Or.;
  973. (M->C5_TIPO == "N" .And. lTabCli)
  974.  
  975. If lCondPg
  976. dbSelectArea("DA0")
  977. dbSetOrder(1)
  978. If MsSeek(xFilial("DA0")+M->C5_TABELA)
  979. lCondTab := DA0_CONDPG == M->C5_CONDPAG
  980. Endif
  981. Endif
  982.  
  983. nTmp := n
  984. For nCntFor := 1 to Len(aCols)
  985.  
  986. nVlrOpc := 0
  987.  
  988. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  989. //³ Verifica se deve atualizar os precos conforme a regra ³
  990. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  991. If cAltPreco == "T"
  992. lAltPreco := .T.
  993. ElseIf cAltPreco $ "LF"
  994. lAltPreco := .T.
  995.  
  996. If !Empty( nScan := AScan( aCont, { |x| x[1] == M->C5_NUM + aCols[nCntFor,nPItem] } ) )
  997. If cAltPreco == "L"
  998. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  999. //³ Nao permite itens liberados ³
  1000. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1001. lAltPreco := Empty( aCont[ nScan, 2 ] ) .And. Empty( aCont[ nScan, 3 ] )
  1002. ElseIf cAltPreco == "F"
  1003. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1004. //³ Nao permite itens faturados ³
  1005. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1006. lAltPreco := Empty( aCont[ nScan, 2 ] )
  1007. EndIf
  1008. EndIf
  1009. Else
  1010. lAltPreco := .F.
  1011. EndIf
  1012.  
  1013. If lAltPreco
  1014. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1015. //³Verifica se eh grade para calcular o valor total por item da grade³
  1016. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1017. cProduto := aCols[nCntFor][nPProd]
  1018. If lGrade .And. MatGrdPrrf(@cProduto)
  1019. lGradeReal := .T.
  1020. Else
  1021. lGradeReal := .F.
  1022. Endif
  1023.  
  1024. If lTabCli
  1025. Do Case
  1026. Case !Empty(M->C5_LOJAENT) .And. !Empty(M->C5_CLIENT)
  1027. cCliTab := M->C5_CLIENT
  1028. cLojaTab := M->C5_LOJAENT
  1029. Case Empty(M->C5_CLIENT)
  1030. cCliTab := M->C5_CLIENTE
  1031. cLojaTab := M->C5_LOJAENT
  1032. OtherWise
  1033. cCliTab := M->C5_CLIENTE
  1034. cLojaTab := M->C5_LOJACLI
  1035. EndCase
  1036. Else
  1037. cCliTab := M->C5_CLIENTE
  1038. cLojaTab := M->C5_LOJACLI
  1039. Endif
  1040.  
  1041. If !lDescCab
  1042. If !(lGrdMult .And. IsAtNewGrd() .And. lGrade .And. lGradeReal)
  1043. nVlrTabela := A410Tabela( aCols[nCntFor][nPProd],;
  1044. M->C5_TABELA,;
  1045. nCntFor,;
  1046. aCols[nCntFor][nPQtdVen],;
  1047. cCliTab,;
  1048. cLojaTab,;
  1049. If(nPLoteCtl>0,aCols[nCntFor][nPLoteCtl],""),;
  1050. If(nPNumLote>0,aCols[nCntFor][nPNumLote],"") )
  1051.  
  1052. EndIf
  1053. Else
  1054. nVlrTabela := aCols[nCntFor][nPPrUnit]
  1055. EndIf
  1056.  
  1057. If !(lGrdMult .And. IsAtNewGrd() .And. lGrade .And. lGradeReal)
  1058.  
  1059. If nPOpcional > 0 .And. !Empty(aCols[nCntFor][nPOpcional])
  1060. cOpcional := aCols[nCntFor][nPOpcional]
  1061. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1062. //³ Aqui ‚ efetuado o tratamento diferencial de Precos para os ³
  1063. //³ Opcionais do Produto. ³
  1064. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1065. dbSelectArea("SGA")
  1066. dbSetOrder(1)
  1067. While !Empty(cOpcional)
  1068. cOpc := SubStr(cOpcional,1,At("/",cOpcional)-1)
  1069. cOpcional := SubStr(cOpcional,At("/",cOpcional)+1)
  1070. If ( MsSeek(xFilial("SGA")+cOpc) )
  1071. If AT(M->C5_TIPO,"CIP") == 0
  1072. nVlrOpc += SGA->GA_PRCVEN
  1073. EndIf
  1074. EndIf
  1075. EndDo
  1076. EndIf
  1077.  
  1078. If lCondPg
  1079. n := nCntFor
  1080. If ( nPPrcVen > 0 ) .And. ( nVlrTabela <> 0 )
  1081.  
  1082. nDescont := FtRegraDesc(1)
  1083.  
  1084. If(lCondTab .And. aPesqDA1(M->C5_TABELA,aCols[nCntFor][nPProd])) .Or. M->C5_DESC4 > 0 .Or. nDescont >0
  1085.  
  1086. aCols[nCntFor][nPPrcVen] := FtDescCab(nVlrTabela,{M->C5_DESC1,M->C5_DESC2,M->C5_DESC3,M->C5_DESC4},If(cPaisLoc $ "CHI|PAR" .And. lPrcDec,M->C5_MOEDA,NIL))
  1087.  
  1088. If nVlrOpc > 0
  1089. aCols[nCntFor][nPPrcVen] := (aCols[nCntFor][nPPrcVen] + nVlrOpc) //Soma o valor do opcional
  1090. EndIf
  1091. aCols[nCntFor][nPValor] := a410Arred( aCols[nCntFor][nPQtdVen]*aCols[nCntFor][nPPrcVen],"C6_VALOR",If(cPaisLoc $ "CHI|PAR" .And. lPrcDec,M->C5_MOEDA,NIL))
  1092. aCols[nCntFor,nPDescon] := 0
  1093. aCols[nCntFor,nPVlDesc] := 0
  1094.  
  1095. If ( nPPrUnit > 0 )
  1096. aCols[nCntFor][nPPrUnit] := nVlrTabela
  1097. EndIf
  1098.  
  1099. aCols[nCntFor,nPDescon] := nDescont
  1100.  
  1101. If ( nPDescon > 0 .And. nPVlDesc > 0 .And. nPPrcVen > 0 .And. nPValor > 0 .And. nPPrUnit>0 )
  1102. aCols[nCntFor][nPPrcVen] := FtDescItem(If(aCols[nCntFor][nPPrUnit] == 0, aCols[nCntFor][nPPrUnit],@aCols[nCntFor][nPPrcVen]),;
  1103. @aCols[nCntFor,nPPrcVen],;
  1104. aCols[nCntFor,nPQtdVen],;
  1105. @aCols[nCntFor,nPValor],;
  1106. @aCols[nCntFor,nPDescon],;
  1107. @aCols[nCntFor,nPVlDesc],;
  1108. @aCols[nCntFor,nPVlDesc],1,,If(cPaisLoc $ "CHI|PAR" .And. lPrcDec,M->C5_MOEDA,NIL))
  1109. EndIf
  1110. EndIf
  1111. EndIf
  1112. Else
  1113. If ( nPPrcVen > 0 ) .And. ( nVlrTabela <> 0 )
  1114. aCols[nCntFor][nPPrcVen] := FtDescCab(nVlrTabela,{M->C5_DESC1,M->C5_DESC2,M->C5_DESC3,M->C5_DESC4},If(cPaisLoc $ "CHI|PAR" .And. lPrcDec,M->C5_MOEDA,NIL))
  1115. If nVlrOpc > 0
  1116. aCols[nCntFor][nPPrcVen] := (aCols[nCntFor][nPPrcVen] + nVlrOpc) //Soma o valor do opcional
  1117. EndIf
  1118. EndIf
  1119. If ( nPPrUnit > 0 )
  1120. aCols[nCntFor][nPPrUnit] := nVlrTabela
  1121. EndIf
  1122.  
  1123. n := nCntFor
  1124. nDescont := FtRegraDesc(1)
  1125.  
  1126. If nDescont > 0
  1127. aCols[nCntFor,nPDescon] := nDescont
  1128. EndIf
  1129.  
  1130. If ( nPDescon > 0 .And. nPVlDesc > 0 .And. nPPrcVen > 0 .And. nPValor > 0 .And. nPPrUnit>0 )
  1131. aCols[nCntFor][nPPrcVen] := FtDescItem(If(aCols[nCntFor][nPPrUnit] == 0, aCols[nCntFor][nPPrUnit],@aCols[nCntFor][nPPrcVen]),;
  1132. @aCols[nCntFor,nPPrcVen],;
  1133. aCols[nCntFor,nPQtdVen],;
  1134. @aCols[nCntFor,nPValor],;
  1135. @aCols[nCntFor,nPDescon],;
  1136. @aCols[nCntFor,nPVlDesc],;
  1137. @aCols[nCntFor,nPVlDesc],1,,If(cPaisLoc $ "CHI|PAR" .And. lPrcDec,M->C5_MOEDA,NIL))
  1138. EndIf
  1139. EndIf
  1140. EndIf
  1141.  
  1142. If IsAtNewGrd()
  1143. If lGrade .And. lGradeReal .And. Type("oGrade")=="O" .And. Len(oGrade:aColsGrade) > 0
  1144. If !lGrdMult
  1145. aCols[nCntFor,nPValor] := 0
  1146. nPGrdQtd := oGrade:GetFieldGrdPos("C6_QTDVEN")
  1147. For nLinha := 1 To Len(oGrade:aColsGrade[nCntFor])
  1148. For nColuna := 2 To Len(oGrade:aHeadGrade[nCntFor])
  1149. If ( oGrade:aColsGrade[nCntFor,nLinha,nColuna][nPGrdQtd] <> 0 )
  1150. aCols[nCntFor,nPValor] += a410Arred( oGrade:aColsGrade[nCntFor,nLinha,nColuna][nPGrdQtd]*aCols[nCntFor,nPPrcVen],"C6_VALOR",If(cPaisLoc $ "CHI|PAR" .And. lPrcDec,M->C5_MOEDA,NIL))
  1151. Endif
  1152. Next nColuna
  1153. Next nLinha
  1154. Else
  1155. n := nCntFor
  1156. oGrade:cProdRef := aCols[nCntFor][nPProd]
  1157. oGrade:nPosLinO := n
  1158. aCols[n,nPValor] := 0
  1159. nPGrdQtd := oGrade:GetFieldGrdPos("C6_QTDVEN")
  1160. nPGrdPrc := oGrade:GetFieldGrdPos("C6_PRCVEN")
  1161. nPGrdTot := oGrade:GetFieldGrdPos("C6_VALOR")
  1162. nPGrdVDe := oGrade:GetFieldGrdPos("C6_VALDESC")
  1163. nPGrdPrU := oGrade:GetFieldGrdPos("C6_PRUNIT")
  1164. For nLinha := 1 To Len(oGrade:aColsGrade[n])
  1165. For nColuna := 2 To Len(oGrade:aHeadGrade[n])
  1166. If ( oGrade:aColsGrade[n,nLinha,nColuna,nPGrdQtd] <> 0 )
  1167.  
  1168. nVlrTabela := A410Tabela( oGrade:GetNameProd(,nLinha,nColuna),;
  1169. M->C5_TABELA,;
  1170. nCntFor,;
  1171. oGrade:aColsFieldByName("C6_QTDVEN",,nLinha,nColuna),;
  1172. cCliTab,;
  1173. cLojaTab,;
  1174. ,;
  1175. ,;
  1176. ,;
  1177. ,;
  1178. ,;
  1179. oGrade:aColsGrade[n,nLinha,nColuna,oGrade:GetFieldGrdPos("C6_OPC")])
  1180.  
  1181. If nVlrTabela <> 0
  1182. oGrade:aColsGrade[n,nLinha,nColuna,nPGrdPrU] := nVlrTabela
  1183. oGrade:aColsGrade[n,nLinha,nColuna,nPGrdPrc] := FtDescCab(nVlrTabela,{M->C5_DESC1,M->C5_DESC2,M->C5_DESC3,M->C5_DESC4},If(cPaisLoc $ "CHI|PAR" .And. lPrcDec,M->C5_MOEDA,NIL))
  1184. oGrade:aColsGrade[n,nLinha,nColuna,nPGrdVDe] := A410Arred((nVlrTabela - oGrade:aColsGrade[n,nLinha,nColuna,nPGrdPrc])*oGrade:aColsGrade[n,nLinha,nColuna,nPGrdQtd],"C6_VALOR")
  1185. oGrade:aColsGrade[n,nLinha,nColuna,nPGrdTot] := A410Arred(oGrade:aColsGrade[n,nLinha,nColuna,nPGrdQtd] * oGrade:aColsGrade[n,nLinha,nColuna,nPGrdPrc],"C6_VALOR")
  1186. EndIf
  1187. Endif
  1188. Next nColuna
  1189. Next nLinha
  1190.  
  1191. aCols[n,nPPrcVen] := oGrade:SomaGrade("C6_PRCVEN",n)
  1192. aCols[n,nPDescon] := FtRegraDesc(1)
  1193.  
  1194. If ( nPDescon > 0 .And. nPVlDesc > 0 .And. nPPrcVen > 0 .And. nPValor > 0 .And. nPPrUnit>0 )
  1195. For nLinha := 1 To Len(oGrade:aColsGrade[n])
  1196. For nColuna := 2 To Len(oGrade:aHeadGrade[n])
  1197. oGrade:aColsGrade[n,nLinha,nColuna,nPGrdPrc] := FtDescItem(0,;
  1198. @oGrade:aColsGrade[n,nLinha,nColuna,nPGrdPrc],;
  1199. oGrade:aColsGrade[n,nLinha,nColuna,nPGrdQtd],;
  1200. @oGrade:aColsGrade[n,nLinha,nColuna,nPGrdTot],;
  1201. @aCols[nCntFor,nPDescon],;
  1202. @oGrade:aColsGrade[n,nLinha,nColuna,nPGrdVDe],;
  1203. 0,1,,If(cPaisLoc $ "CHI|PAR" .And. lPrcDec,M->C5_MOEDA,NIL))
  1204. Next nColuna
  1205. Next nLinha
  1206. EndIf
  1207. aCols[n,nPPrcVen] := oGrade:SomaGrade("C6_PRCVEN",n)
  1208. aCols[n,nPValor] := oGrade:SomaGrade("C6_VALOR",n)
  1209. aCols[n,nPVlDesc] := oGrade:SomaGrade("C6_VALDESC",n)
  1210. EndIf
  1211. EndIf
  1212. Else
  1213. If lGrade .And. lGradeReal .And. Len(aColsGrade) > 0
  1214. aCols[nCntFor,nPValor] := 0
  1215. For nLinha := 1 To Len(aColsGrade[nCntFor])
  1216. For nColuna := 2 To Len(aHeadGrade[nCntFor])
  1217. If ( aColsGrade[nCntFor][nLinha][nColuna][1] <> 0 )
  1218. aCols[nCntFor,nPValor] += a410Arred(aColsGrade[nCntFor][nLinha][nColuna][1]*aCols[nCntFor,nPPrcVen],"C6_VALOR",If(cPaisLoc $ "CHI|PAR" .And. lPrcDec,M->C5_MOEDA,NIL))
  1219. Endif
  1220. Next nColuna
  1221. Next nLinha
  1222. EndIf
  1223. EndIf
  1224.  
  1225. EndIf
  1226.  
  1227. Next nCntFor
  1228. n := nTmp
  1229. EndIf
  1230. //Atualiza desconto financeiro se informado pelo cabecalho do pedido de vendas.
  1231. If ("M->C5_CONDPAG" $ ReadVar()) .AND. M->C5_DESCFI <> SE4->E4_DESCFIN
  1232. M->C5_DESCFI := SE4->E4_DESCFIN
  1233. Endif
  1234.  
  1235. If Type('oGetDad:oBrowse')<>"U"
  1236. oGetDad:oBrowse:Refresh()
  1237. Ma410Rodap()
  1238. Endif
  1239.  
  1240.  
  1241. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1242. //³Retorna o estado de entrada da rotina ³
  1243. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1244. RestArea(aAreaSX3)
  1245. RestArea(aArea)
  1246.  
  1247. Return(.T.)
  1248.  
  1249.  
  1250. /*/
  1251. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  1252. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  1253. ±±³Fun‡…o ³A410Titulo³ Autor ³ Jose Lucas ³ Data ³ 25/08/98 ³±±
  1254. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  1255. ±±³Descri‡…o ³ Verifica o Tipo do titulo informado (Argentina...). ³±±
  1256. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  1257. ±±³Sintaxe ³ A410Titulo() ³±±
  1258. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  1259. ±±³ Uso ³ MATA410 ³±±
  1260. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  1261. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  1262. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  1263. /*/
  1264. Function A410Titulo(cCampo)
  1265. Local lRet := .T.
  1266. Local cSavAreaCur := Alias()
  1267.  
  1268. If cCampo == NIL
  1269. cCampo := &(ReadVar())
  1270. EndIf
  1271.  
  1272. dbSelectArea("SX5")
  1273. dbSetOrder(1)
  1274. If ! MsSeek( xFilial("SX5")+"05"+cCampo )
  1275. lRet := .F.
  1276. Else
  1277. If M->C5_TIPO == "D"
  1278. If Empty( cCampo )
  1279. lRet := .F.
  1280. EndIf
  1281. EndIf
  1282. EndIf
  1283. If ! lRet
  1284. Help(" ",1,"C5_TIPOTIT")
  1285. EndIf
  1286. dbSelectArea( cSavAreaCur )
  1287. Return( lRet )
  1288.  
  1289.  
  1290. /*/
  1291. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  1292. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  1293. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  1294. ±±³Funcao ³A410Cli ³ Autor ³Eduardo Riera ³ Data ³ 21.01.92 ³±±
  1295. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  1296. ±±³Descri‡…o ³Validacao de Cliente ³±±
  1297. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  1298. ±±³Retorno ³ExpL1: Cliente Valido ³±±
  1299. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  1300. ±±³Parametros³ExpC1: Nome da Variavel do PV ³±±
  1301. ±±³ ³ExpC2: Codigo do Cliente ³±±
  1302. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  1303. ±±³ DATA ³ Programador ³Manutencao Efetuada ³±±
  1304. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  1305. ±±³ ³ ³ ³±±
  1306. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  1307. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  1308. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  1309. /*/
  1310. Function A410Cli(cA410CliV,cA410Cli,lInterface)
  1311.  
  1312. Local lRetorno := .F.
  1313. Local cLoja :=""
  1314. Local lConPadOk := .F.
  1315. Local nEndereco := 0
  1316. Local nX := 0
  1317. Local nProv := 0
  1318. Local oDlg
  1319. Local aArea := {}
  1320. Local aArea2 := {}
  1321. Local cProxCli := ""
  1322. Local cProvAnt := ""
  1323. Local cTes := ""
  1324. Local nPosProv := Ascan(aHeader,{|x| Alltrim(x[2]) == "C6_PROVENT"})
  1325. Local nPosTes := Ascan(aHeader,{|x| Alltrim(x[2]) == "C6_TES"})
  1326. Local lBloq := .F. //Variável de controle para verificar se o cliente/fornecedor + loja estiver bloqueado
  1327. Local lRet := .T.
  1328.  
  1329. DEFAULT lInterface := .T.
  1330. If nModulo == 73
  1331. lRet:= CRMXLibReg("SA1")
  1332. If LRet == .F.
  1333. Return LRet
  1334. EndIf
  1335. EndIf
  1336.  
  1337. l410Auto := If (Type("l410Auto") == "U",.f.,l410Auto)
  1338. l416Auto := If (Type("l416Auto") == "U",.f.,l416Auto)
  1339.  
  1340. If !(l416Auto) .and. !(l410Auto) .And. lInterface
  1341. oDlg := GetWndDefault()
  1342. EndIf
  1343.  
  1344. cA410CliV := If(cA410CliV==Nil,ReadVar(),cA410CliV)
  1345. cA410Cli := If(cA410Cli==Nil,&(cA410CliV),cA410Cli)
  1346.  
  1347. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1348. //³Se cliente/fornecedor possui o mesmo codigo em lojas diferentes, ³
  1349. //³deixa campo C5_LOJACLI vazio para usuario preencher. ³
  1350. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1351. dbSelectArea(IIF(M->C5_TIPO$"DB","SA2","SA1"))
  1352. If l410Auto
  1353. nPos := aScan( aAutoCab, {|x| Alltrim( Upper( x[1] ) ) == "C5_LOJACLI" } )
  1354. If nPos > 0
  1355. cLoja := aAutoCab[nPos][2]
  1356. Endif
  1357. Else
  1358. cLoja := IIf(M->C5_TIPO$"DB",SA2->A2_LOJA,SA1->A1_LOJA)
  1359. EndIf
  1360.  
  1361. If !l410Auto
  1362.  
  1363. aArea := GetArea()
  1364. If Empty(cLoja)
  1365. MsSeek( xFilial()+cA410Cli,.F.)
  1366. Else
  1367. MsSeek( xFilial()+cA410Cli+cLoja,.F.)
  1368. EndIf
  1369. aArea2 := GetArea()
  1370.  
  1371. dbSkip()
  1372. cProxCli := &(IIF(M->C5_TIPO$"DB","SA2->A2_COD","SA1->A1_COD"))
  1373. cProxCli := IIF(cProxCli <> cA410Cli,"",cProxcli)
  1374.  
  1375. MsSeek( xFilial()+cA410Cli+cLoja,.F.)
  1376. If (Recno() == aArea2[3]) .And. !Empty(M->C5_LOJACLI)
  1377. cProxCli := ""
  1378. EndIf
  1379.  
  1380. RestArea(aArea2)
  1381. If Empty(cProxCli)
  1382. cLoja := IIf(M->C5_TIPO$"DB",SA2->A2_LOJA,SA1->A1_LOJA)
  1383. Else
  1384. cLoja := Space( Len(SA2->A2_LOJA) )
  1385. M->C5_LOJACLI := cLoja
  1386. EndIf
  1387.  
  1388. RestArea(aArea)
  1389.  
  1390. EndIf
  1391.  
  1392. If ( !Empty(cA410Cli) )
  1393. dbSelectArea(IIF(M->C5_TIPO$"DB","SA2","SA1"))
  1394. dbSetOrder(1)
  1395. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1396. //³Procura por Codigo + Loja ³
  1397. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1398. If ( !MsSeek( xFilial()+cA410Cli+cLoja,.F.) )
  1399. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1400. //³Procura por Codigo ³
  1401. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1402. If !MsSeek( xFilial()+cA410Cli,.F.)
  1403. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1404. //³Procura pelo nome do cliente ³
  1405. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1406. dbSetOrder(2)
  1407. If ( !MsSeek( xFilial()+Trim(cA410Cli),.F.) )
  1408. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1409. //³Procura pelo CGC ³
  1410. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1411. dbSetOrder(3)
  1412. If ( MsSeek( xFilial()+Trim(cA410Cli),.F.) )
  1413. lRetorno := .T.
  1414. Else
  1415. lRetorno := .F.
  1416. EndIf
  1417. Else
  1418. lRetorno := .T.
  1419. EndIf
  1420. If lRetorno
  1421. &(cA410CliV) := IF(M->C5_TIPO $ "DB",SA2->A2_COD,SA1->A1_COD)
  1422. EndIf
  1423. Else
  1424. lRetorno := .T.
  1425. EndIf
  1426. Else
  1427. lRetorno := .T.
  1428. EndIf
  1429. EndIf
  1430. If ( lRetorno )
  1431. If M->C5_TIPO $ "DB"
  1432.  
  1433. If SA2->A2_MSBLQL == '1' .AND. Empty(cLoja)
  1434. lBloq = .T.
  1435. Else
  1436. cLoja := IIf(Empty(cProxcli),SA2->A2_LOJA,Space(Len(SA2->A2_LOJA)))
  1437. EndIf
  1438.  
  1439. cA410Cli := SA2->A2_COD
  1440. lConPadOk := .T.
  1441. If cPaisLoc =="ARG"
  1442. cProvAnt := M->C5_PROVENT
  1443. M->C5_PROVENT := SA2->A2_EST // Provincia de Entrega do Fornecedor
  1444. Endif
  1445. Else
  1446.  
  1447. If SA1->A1_MSBLQL == '1' .AND. Empty(cLoja)
  1448. lBloq = .T.
  1449. Else
  1450. cLoja := IIf(Empty(cProxcli),SA1->A1_LOJA,Space(Len(SA1->A1_LOJA)))
  1451. EndIf
  1452.  
  1453. cA410Cli := SA1->A1_COD
  1454. lConPadOk := .T.
  1455. If cPaisLoc =="ARG"
  1456. cProvAnt := M->C5_PROVENT
  1457. M->C5_PROVENT := SA1->A1_EST // Provincia de Entrega do Cliente
  1458. Endif
  1459. EndIf
  1460. If cPaisLoc == "COL"
  1461. If M->C5_TIPO $ "DB"
  1462. M->C5_CODMUN := SA2->A2_COD_MUN // Municipio de Entrega do Fornecedor
  1463. Else
  1464. M->C5_CODMUN := SA1->A1_COD_MUN // Municipio de Entrega do Cliente
  1465. EndIf
  1466. Endif
  1467. If cPaisLoc == "ARG"
  1468. If nPosProv > 0
  1469. If cProvAnt <> M->C5_PROVENT
  1470. For nX := 1 to Len(aCols)
  1471. cTes := aCols[n,nPosTes]
  1472. If VerProEnIt(M->C5_PROVENT,cTes,.F.,.F.)
  1473. aCols[nx,nPosProv]:= M->C5_PROVENT
  1474. Else
  1475. nProv++
  1476. Endif
  1477. Next
  1478. If nProv > 0
  1479. MsgAlert(STR0117,STR0118) //Alguns itens não tiveram a província alterada pois possuem impostos gravados em um mesmo campo.
  1480. Endif
  1481. Endif
  1482. Endif
  1483. Endif
  1484. Else
  1485. Help(" ",1,"A410NCLIE")
  1486. EndIf
  1487.  
  1488. If !Empty(M->C5_MDCONTR) .And. M->C5_CLIENTE+M->C5_LOJACLI # CNC->CNC_CLIENT+CNC->CNC_LOJACL
  1489. Aviso(STR0127,STR0128,{"Ok"}) //SIGAGCT - Este pedido foi vinculado a um contrato e por isto não pode ter este campo alterado.
  1490. lRetorno := .F.
  1491. EndIf
  1492.  
  1493. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1494. //³Quando for alteracao deve-se verificar se o pedido ja foi entregue, ³
  1495. //³em caso afirmativo, nao deve-se permitir alterar o cliente. ³
  1496. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1497. If ( lRetorno ) .And. ALTERA .And. !Empty( cA410Cli )
  1498. dbSelectArea("SC5")
  1499. dbSetOrder(1)
  1500. If ( MsSeek(xFilial("SC5")+M->C5_NUM,.F.) )
  1501. If ( SC5->C5_CLIENTE != cA410Cli )
  1502. dbSelectArea("SC6")
  1503. dbSetOrder(1)
  1504. MsSeek(xFilial("SC6")+M->C5_NUM)
  1505. While ( !Eof() .And. xFilial("SC6") == SC6->C6_FILIAL .And.;
  1506. SC6->C6_NUM == SC5->C5_NUM )
  1507. If ( SC6->C6_QTDENT != 0 .Or. !Empty(SC6->C6_NOTA) )
  1508. lRetorno := .F.
  1509. Help(" ",1,"A410CLIOK")
  1510. Exit
  1511. EndIf
  1512. dbSkip()
  1513. EndDo
  1514. EndIf
  1515. EndIf
  1516. EndIf
  1517. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1518. //³Efetua o Acerto na Enchoice ³
  1519. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1520. If ( lConPadOk .And. lRetorno ) .And. ("C5_CLIENTE" $ cA410CliV)
  1521. M->C5_CLIENTE := cA410Cli
  1522. M->C5_CLIENT := cA410Cli
  1523. If !lBloq
  1524. M->C5_LOJAENT := cLoja
  1525. M->C5_LOJACLI := cLoja
  1526. If lInterface
  1527. nEndereco := Ascan(aGets,{ |x| Subs(x,9,10) == "C5_CLIENTE" } )
  1528. If nEndereco > 0
  1529. aTela[Val(Subs(aGets[nEndereco],1,2))][Val(Subs(aGets[nEndereco],3,1))*2] := cA410Cli
  1530. EndIf
  1531. nEndereco := Ascan(aGets,{ |x| Subs(x,9,10) == "C5_LOJAENT" } )
  1532. If nEndereco > 0
  1533. aTela[Val(Subs(aGets[nEndereco],1,2))][Val(Subs(aGets[nEndereco],3,1))*2] := M->C5_LOJAENT
  1534. EndIf
  1535. nEndereco := Ascan(aGets,{ |x| Subs(x,9,10) == "C5_LOJACLI" } )
  1536. If nEndereco > 0
  1537. aTela[Val(Subs(aGets[nEndereco],1,2))][Val(Subs(aGets[nEndereco],3,1))*2] := M->C5_LOJACLI
  1538. EndIf
  1539. EndIf
  1540. EndIf
  1541. ElseIf ( lConPadOk .And. lRetorno ) .And. ("C5_CLIENT" $ cA410CliV)
  1542. M->C5_LOJAENT := cLoja
  1543. EndIf
  1544. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1545. //³Se o pedido estiver sendo gerado a partir de uma aprovacao de Orcamento³
  1546. //³o conteudo da READVAR sera limpo para a chamada da a410Loja() ³
  1547. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1548. If l416Auto
  1549. __READVAR := ""
  1550. EndIf
  1551.  
  1552. If !Empty(cLoja) .And.!lBloq
  1553. lRetorno := lRetorno .And. A410Loja(IIF("C5_CLIENTE"$cA410CliV,"C5_LOJACLI","C5_LOJAENT"),IIF("C5_CLIENTE"$cA410CliV,M->C5_LOJACLI,M->C5_LOJAENT),lInterface,Upper(AllTrim(cA410CliV)) == "M->C5_CLIENT" )
  1554. EndIf
  1555.  
  1556. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1557. //³Atualiza o Rodape ³
  1558. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1559. If lRetorno .And. lInterface
  1560. Ma410Rodap()
  1561. EndIf
  1562. Return ( lRetorno )
  1563.  
  1564. /*/
  1565. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  1566. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  1567. ±±³Fun‡„o ³ A410Loja ³ Autor ³ Claudinei M. Benzi ³ Data ³ 21.01.92 ³±±
  1568. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  1569. ±±³Descri‡„o ³ Critica de Cliente ³±±
  1570. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  1571. ±±³Uso ³ Mata410 ³±±
  1572. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  1573. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  1574. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  1575. /*/
  1576. Function A410Loja(cLojaV,cLoja,lInterface,lEntrega)
  1577.  
  1578. Local aArea := GetArea()
  1579. Local aAreaSA1 := SA1->(GetArea())
  1580. Local aSvArea := {}
  1581. Local cCliAnt := ""
  1582. Local cProvAnt := ""
  1583. Local nPosicao := 0
  1584. Local nEndereco:= 0
  1585. Local nLojaCli := 0
  1586. Local nPosNfOri:= Ascan(aHeader,{|x| Alltrim(x[2]) == "C6_NFORI"})
  1587. Local nPosSOri := Ascan(aHeader,{|x| Alltrim(x[2]) == "C6_SERIORI"})
  1588. Local nPosItOri:= Ascan(aHeader,{|x| Alltrim(x[2]) == "C6_ITEMORI"})
  1589. Local nPosIdent:= Ascan(aHeader,{|x| Alltrim(x[2]) == "C6_IDENTB6"})
  1590. Local nPosProv := Ascan(aHeader,{|x| Alltrim(x[2]) == "C6_PROVENT"})
  1591. Local nMaxArray:= Len(aHeader)+1
  1592. Local nX := 0
  1593. Local lRetorno := .T.
  1594. Local lA410PVCL:= ExistBlock("A410PVCL") //O Tratamento deste ponto de entrada pode ser extendido para outros campos.
  1595. Local cCodVdBlk:= Space(TamSX3("A1_VEND")[1])
  1596. Local cTabela := ""
  1597. Local cCondPag := ""
  1598. Local lCondOk := .F. //Variavel para verificar se existe condição de Pagamento amarrada ao cliente, para filial ativa.
  1599. Local cNfOri := Space(TamSX3("C6_NFORI")[1])
  1600. Local cSOri := Space(TamSX3("C6_SERIORI")[1])
  1601. Local cItOri := Space(TamSX3("C6_ITEMORI")[1])
  1602. Local cIdent := Space(TamSX3("C6_IDENTB6")[1])
  1603.  
  1604. DEFAULT lInterface := .T.
  1605. DEFAULT cLojaV := ReadVar()
  1606. DEFAULT cLoja := &(ReadVar())
  1607. DEFAULT lEntrega := .F. //Indicador quando apenas o campo CLIENTE DE ENTREGA eh alterado, em caso de DEV./RETORNO
  1608.  
  1609. l410Auto := If (Type("l410Auto") == "U",.f.,l410Auto)
  1610.  
  1611. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1612. //³Verifica se trocou de cliente e existem documentos originais preenchidos³
  1613. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1614. cCliAnt := a410ChgCli()
  1615.  
  1616. If !Empty(cCliAnt) .And. lInterface
  1617. If Ascan(aCols,{|x| !Empty(x[nPosNfOri]) .And. !x[Len(x)]}) > 0 .And. !lEntrega .And. ((M->C5_CLIENTE+M->C5_LOJACLI) <> cCliAnt)
  1618. lRetorno :=(Aviso(OemToAnsi(STR0014),OemToAnsi(STR0061),{STR0030,STR0031}) == 1)
  1619. If lRetorno
  1620. For nX := 1 to Len(aCols)
  1621. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1622. //³Limpa os documentos originais caso troque o cliente e confirme ³
  1623. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1624. If !aCols[nX][nMAxArray] .And. (!Empty(aCols[nX][nPosNfOri]) .Or. !Empty(aCols[nX][nPosIdent]))
  1625. aCols[nX][nPosNfOri] := cNfOri
  1626. aCols[nX][nPosSOri] := cSOri
  1627. aCols[nX][nPosItOri] := cItOri
  1628. aCols[nX][nPosIdent] := cIdent
  1629. Endif
  1630. Next
  1631. Else
  1632. M->C5_CLIENTE := Left(cCliAnt,Len(M->C5_CLIENTE))
  1633. M->C5_LOJACLI := Right(cCliAnt,Len(M->C5_LOJACLI))
  1634. M->C5_CLIENT := Left(cCliAnt,Len(M->C5_CLIENTE))
  1635. M->C5_LOJAENT := Right(cCliAnt,Len(M->C5_LOJACLI))
  1636. Endif
  1637. Endif
  1638. Endif
  1639.  
  1640. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1641. //³Verifica se o pedido corrente foi faturado. ³
  1642. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1643.  
  1644. If lRetorno
  1645.  
  1646. If ( ALTERA .And. !Empty(cLoja) )
  1647. dbSelectArea("SC6")
  1648. dbSetOrder(1)
  1649. If ( MsSeek(xFilial()+M->C5_NUM,.F.) )
  1650. While ( !Eof() .And. xFilial("SC6") == SC6->C6_FILIAL .And.;
  1651. SC6->C6_NUM == M->C5_NUM .And.;
  1652. lRetorno )
  1653. If ( SC6->C6_QTDENT > 0 .Or. !Empty(SC6->C6_NOTA) )
  1654. lRetorno := .F.
  1655. Help(" ",1,"A410CLIOK")
  1656. M->C5_LOJACLI := SC5->C5_LOJACLI
  1657. M->C5_LOJAENT := SC5->C5_LOJAENT
  1658. EndIf
  1659. dbSelectArea("SC6")
  1660. dbSkip()
  1661. EndDo
  1662. EndIf
  1663. EndIf
  1664.  
  1665. Endif
  1666.  
  1667. If ( lRetorno )
  1668. dbSelectArea(IIF( M->C5_TIPO $ "DB","SA2","SA1"))
  1669. dbSetOrder(1)
  1670. If ( "C5_LOJACLI" $ cLojaV )
  1671. If ( !MsSeek(xFilial()+M->C5_CLIENTE+cLoja,.F.) )
  1672. Help(" ",1,"C5_LOJACLI")
  1673. lRetorno := .F.
  1674. Else
  1675. lRetorno := RegistroOk(IIF( M->C5_TIPO $ "DB","SA2","SA1"))
  1676. EndIf
  1677. Else
  1678. If ( "C5_LOJAENT" $ cLojaV )
  1679. If !l410Auto .And. ( !MsSeek(xFilial()+IIf(!Empty(M->C5_CLIENT),M->C5_CLIENT,M->C5_CLIENTE)+cLoja,.F.) )
  1680. Help(" ",1,"C5_LOJAENT")
  1681. lRetorno := .F.
  1682. ElseIf l410Auto
  1683. If Type("aAutoCab") == "A"
  1684. nEndereco := Ascan(aAutocab,{ |x| x[1] == "C5_LOJAENT" } )
  1685. If nEndereco > 0
  1686. cLoja := aAutocab[nEndereco][2]
  1687. M->C5_LOJAENT := cLoja
  1688. EndIf
  1689. EndIf
  1690. If (!MsSeek(xFilial()+IIf(!Empty(M->C5_CLIENT),Padr(M->C5_CLIENT,TAMSX3("C5_CLIENT")[1]),M->C5_CLIENTE)+cLoja,.F.) )
  1691. Help(" ",1,"C5_LOJAENT")
  1692. lRetorno := .F.
  1693. Else
  1694. lRetorno := RegistroOk(IIF( M->C5_TIPO $ "DB","SA2","SA1"))
  1695. EndIf
  1696. Else
  1697. lRetorno := RegistroOk(IIF( M->C5_TIPO $ "DB","SA2","SA1"))
  1698. EndIf
  1699. EndIf
  1700. EndIf
  1701. If cPaisLoc == "COL"
  1702. If M->C5_TIPO $ "DB"
  1703. M->C5_CODMUN := SA2->A2_COD_MUN // Municipio de Entrega do Fornecedor
  1704. Else
  1705. M->C5_CODMUN := SA1->A1_COD_MUN // Municipio de Entrega do Cliente
  1706. EndIf
  1707. Endif
  1708. If cPaisLoc =="ARG"
  1709. cProvAnt := M->C5_PROVENT
  1710. If M->C5_TIPO $ "DB"
  1711. M->C5_PROVENT := SA2->A2_EST // Provincia de Entrega do Fornecedor
  1712. Else
  1713. M->C5_PROVENT := SA1->A1_EST // Provincia de Entrega do Cliente
  1714. Endif
  1715.  
  1716. If nPosProv > 0
  1717. If cProvAnt <> M->C5_PROVENT
  1718. For nX := 1 to Len(aCols)
  1719. aCols[nx,nPosProv]:= M->C5_PROVENT
  1720. Next
  1721. Endif
  1722. Endif
  1723. Endif
  1724. EndIf
  1725. If lRetorno .And. !Empty(cLoja)
  1726. M->C5_TIPOCLI := IIF(M->C5_TIPO $ "DB",IIF(SA2->A2_TIPO=="J","R",SA2->A2_TIPO),SA1->A1_TIPO)
  1727.  
  1728. If !("C5_LOJAENT" $ cLojaV)
  1729. M->C5_LOJAENT := IIF( M->C5_TIPO $ "DB", SA2->A2_LOJA, SA1->A1_LOJA )
  1730.  
  1731. If !("C5_LOJAENT" $ cLojaV ) .And. !("C5_CLIENT" $ cLojaV )
  1732. M->C5_LOJACLI := IIF( M->C5_TIPO $ "DB", A2_LOJA, A1_LOJA )
  1733. Endif
  1734.  
  1735. If lInterface
  1736. nEndereco := Ascan(aGets,{ |x| Subs(x,9,10) == "C5_LOJAENT" } )
  1737. If nEndereco > 0
  1738. aTela[Val(Subs(aGets[nEndereco],1,2))] ;
  1739. [Val(Subs(aGets[nEndereco],3,1))*2]:= M->C5_LOJAENT
  1740. EndIf
  1741. nEndereco := Ascan(aGets,{ |x| Subs(x,9,10) == "C5_LOJACLI" } )
  1742. If nEndereco > 0
  1743. aTela[Val(Subs(aGets[nEndereco],1,2))] ;
  1744. [Val(Subs(aGets[nEndereco],3,1))*2] := M->C5_LOJACLI
  1745. EndIf
  1746. nEndereco := Ascan(aGets,{ |x| Subs(x,9,10) == "C5_TIPOCLI" } )
  1747. If nEndereco > 0
  1748. aTela[Val(Subs(aGets[nEndereco],1,2))] ;
  1749. [Val(Subs(aGets[nEndereco],3,1))*2] := M->C5_TIPOCLI
  1750. EndIf
  1751. EndIf
  1752.  
  1753. If ( !M->C5_TIPO $ "DB" .And. lRetorno )
  1754. M->C5_TRANSP := SA1->A1_TRANSP
  1755. If lA410PVCL
  1756. cCodVdBlk := Execblock("A410PVCL",.F.,.F.,"A1_VEND")
  1757. If ValType(cCodVdBlk) <> TamSX3("A1_VEND")[3] //Se o retorno tiver o tipo e/ou tamanho diferente do campo assume valor Default
  1758. cCodVdBlk := If(Empty(M->C5_MDCONTR),SA1->A1_VEND,M->C5_VEND1)
  1759. Else //Atualiza variavel de memoria
  1760. M->C5_VEND1 := PADR(cCodVdBlk,TamSX3("A1_VEND")[1])// Garante que a informação tenha o tamanho do campo
  1761. EndIf
  1762. Else //Se o ponto nao existir assume valor Default
  1763. M->C5_VEND1 := If(Empty(M->C5_MDCONTR),SA1->A1_VEND,M->C5_VEND1)
  1764. EndIf
  1765. aSvArea := GetArea()
  1766. dbSelectArea("SA3")
  1767. SA3->(dbSetOrder(1))
  1768. If ( !MsSeek(xFilial("SA3")+M->C5_VEND1) )
  1769. M->C5_VEND1 := Space(TamSX3("A1_VEND")[1])
  1770. Else
  1771. If !RegistroOk("SA3",.F.)
  1772. If !l410Auto
  1773. Aviso(STR0038,STR0172 + M->C5_VEND1 + STR0173,{STR0040}) // "Atencao!"##"Codigo do vendedor: "##" utilizado por este cliente esta bloqueado no cadastro de vendedores!"##"Ok"
  1774. EndIf
  1775. M->C5_VEND1 := Space(TamSX3("A1_VEND")[1])
  1776. EndIf
  1777. EndIf
  1778. RestArea(aSvArea)
  1779. M->C5_COMIS1 := If(Empty(M->C5_MDCONTR),Iif(!Empty(SA1->A1_COMIS),SA1->A1_COMIS,SA3->A3_COMIS),M->C5_COMIS1)
  1780. lCondOk := Posicione("SE4",1,XFILIAL("SE4")+SA1->A1_COND, "E4_CODIGO") == SA1->A1_COND
  1781.  
  1782. If Empty(M->C5_MDCONTR)
  1783. If lCondOk
  1784. M->C5_CONDPAG := SA1->A1_COND
  1785. Else
  1786. M->C5_CONDPAG := Space(TamSx3("C5_CONDPAG")[1])
  1787. EndIf
  1788. EndIf
  1789.  
  1790. M->C5_TABELA:= IIF(Empty(SA1->A1_TABELA)," ",SA1->A1_TABELA)
  1791.  
  1792. If Empty(M->C5_TABELA) .Or. Empty(M->C5_CONDPAG)
  1793. cTabela := M->C5_TABELA
  1794. cCondPag := M->C5_CONDPAG
  1795.  
  1796. A410TabRNg( SA1->A1_COD, SA1->A1_LOJA, @cTabela, @cCondPag )
  1797.  
  1798. M->C5_CONDPAG := Iif(Empty(M->C5_CONDPAG),cCondPag,M->C5_CONDPAG)
  1799. M->C5_TABELA := IiF(Empty(M->C5_TABELA),cTabela,M->C5_TABELA)
  1800. EndIf
  1801.  
  1802. M->C5_BANCO := SA1->A1_BCO1
  1803. M->C5_TPFRETE := SA1->A1_TPFRET
  1804. M->C5_INCISS := SA1->A1_INCISS
  1805. If !Empty(SA1->A1_DESC)
  1806. M->C5_DESC1 := SA1->A1_DESC
  1807. Else
  1808. M->C5_DESC1 := 0
  1809. EndIf
  1810. If lInterface
  1811. nEndereco := Ascan(aGets,{ |x| Subs(x,9,9) == "C5_TRANSP" } )
  1812. If nEndereco > 0
  1813. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1814. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1815. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1816. Else
  1817. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1818. EndIf
  1819. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := SA1->A1_TRANSP
  1820. EndIf
  1821. nEndereco := Ascan(aGets,{ |x| Subs(x,9,8) == "C5_VEND1" } )
  1822. If nEndereco > 0
  1823. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1824. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1825. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1826. Else
  1827. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1828. EndIf
  1829. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := Iif(Empty(cCodVdBlk),SA1->A1_VEND,cCodVdBlk)
  1830. EndIf
  1831. nEndereco := Ascan(aGets,{ |x| Subs(x,9,9) == "C5_COMIS1" } )
  1832. If nEndereco > 0
  1833. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1834. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1835. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1836. Else
  1837. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1838. EndIf
  1839. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := TransNum("SA1->A1_COMIS")
  1840. EndIf
  1841. nEndereco := Ascan(aGets,{ |x| Subs(x,9,10) == "C5_CONDPAG" } )
  1842. If nEndereco > 0
  1843. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1844. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1845. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1846. Else
  1847. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1848. EndIf
  1849. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := SA1->A1_COND
  1850. EndIf
  1851. nEndereco := Ascan(aGets,{ |x| Subs(x,9,9) == "C5_TABELA" } )
  1852. If nEndereco > 0
  1853. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1854. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1855. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1856. Else
  1857. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1858. EndIf
  1859. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := M->C5_TABELA
  1860. EndIf
  1861. nEndereco := Ascan(aGets,{ |x| Subs(x,9,8) == "C5_BANCO" } )
  1862. If nEndereco > 0
  1863. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1864. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1865. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1866. Else
  1867. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1868. EndIf
  1869. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := SA1->A1_BCO1
  1870. EndIf
  1871. nEndereco := Ascan(aGets,{ |x| Subs(x,9,10) == "C5_TPFRETE" } )
  1872. If nEndereco > 0
  1873. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1874. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1875. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1876. Else
  1877. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1878. EndIf
  1879. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := M->C5_TPFRETE
  1880. EndIf
  1881. nEndereco := Ascan(aGets,{ |x| Subs(x,9,9) == "C5_INCISS" } )
  1882. If nEndereco > 0
  1883. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1884. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1885. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1886. Else
  1887. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1888. EndIf
  1889. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := M->C5_INCISS
  1890. EndIf
  1891. nEndereco := Ascan(aGets,{ |x| Subs(x,9,9) == "C5_DESC1 " } )
  1892. If nEndereco > 0
  1893. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1894. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1895. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1896. Else
  1897. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1898. EndIf
  1899. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := Str(M->C5_DESC1,5,2)
  1900. EndIf
  1901. IF Empty(M->C5_COMIS1).And.!Empty(M->C5_VEND1)
  1902. dbSelectArea("SA3")
  1903. If MsSeek(xFilial()+M->C5_VEND1,.F.)
  1904. M->C5_COMIS1 := A3_COMIS
  1905. nEndereco := Ascan(aGets,{ |x| Subs(x,9,9) == "C5_COMIS1" } )
  1906. If nEndereco > 0
  1907. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1908. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1909. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1910. Else
  1911. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1912. EndIf
  1913. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := TransNum("A3_COMIS")
  1914. EndIf
  1915. EndIf
  1916. EndIf
  1917. If !Empty(M->C5_CONDPAG)
  1918. dbSelectArea("SE4")
  1919. If MsSeek(xFilial()+M->C5_CONDPAG,.F.)
  1920. M->C5_ACRSFIN := E4_ACRSFIN
  1921. M->C5_DESCFI := E4_DESCFIN
  1922. nEndereco := Ascan(aGets,{ |x| Subs(x,9,10) == "C5_ACRSFIN" } )
  1923. If nEndereco > 0
  1924. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1925. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1926. nPosicao := Iif(ValType(nEndereco)=='C', Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco ), nEndereco )
  1927. Else
  1928. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1929. EndIf
  1930. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := TransNum("E4_ACRSFIN")
  1931. EndIf
  1932. EndIf
  1933. EndIf
  1934. EndIf
  1935. ElseIf ( M->C5_TIPO $ "DB" .And. lRetorno )
  1936. M->C5_TRANSP := SA2->A2_TRANSP
  1937. M->C5_CONDPAG := SA2->A2_COND
  1938. If lInterface
  1939. nEndereco := Ascan(aGets,{ |x| Subs(x,9,9) == "C5_TRANSP" } )
  1940. If nEndereco > 0
  1941. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1942. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1943. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1944. Else
  1945. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1946. EndIf
  1947. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := SA2->A2_TRANSP
  1948. EndIf
  1949. nEndereco := Ascan(aGets,{ |x| Subs(x,9,10) == "C5_CONDPAG" } )
  1950. If nEndereco > 0
  1951. If ASC(SubStr(aGets[nEndereco],1,1)) > 64
  1952. nPosicao := Str(ASC(SubStr(aGets[nEndereco],1,1))-55,2)+SubStr(aGets[nEndereco],2,1)
  1953. nPosicao := Iif(ValType(nEndereco)=='C', Val(nEndereco), nEndereco )
  1954. Else
  1955. nPosicao := Val(SubStr(aGets[nEndereco],1,2))
  1956. EndIf
  1957. aTela[nPosicao][Val(Subs(aGets[nEndereco],3,1))*2] := SA2->A2_COND
  1958. EndIf
  1959. EndIf
  1960. EndIf
  1961. EndIf
  1962. EndIf
  1963. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1964. //³Atualiza o Rodape ³
  1965. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1966. If ( lRetorno .And. lInterface)
  1967. a410ChgCli(M->C5_CLIENTE+M->C5_LOJACLI)
  1968. Ma410Rodap()
  1969. EndIf
  1970. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1971. //³Restaura a entrada da rotina ³
  1972. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1973. If ( !lRetorno )
  1974. RestArea(aAreaSA1)
  1975. EndIf
  1976.  
  1977. If aArea[1] <> "SA1"
  1978. RestArea(aArea)
  1979. EndIf
  1980.  
  1981. Return(lRetorno)
  1982.  
  1983. /*
  1984. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  1985. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  1986. ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
  1987. ±±ºPrograma ³a410RvPlanºAutor ³ Daniel Leme º Data ³ 03/21/11 º±±
  1988. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  1989. ±±ºDesc. ³ Verifica se há integração com revisão de Planilha de For- º±±
  1990. ±±º ³ mação de preços através de ligação entre tabela de preço º±±
  1991. ±±º ³ e Publicação de Preços e interpreta a integração º±±
  1992. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  1993. ±±ºUso ³ MATA410A º±±
  1994. ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
  1995. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  1996. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  1997. */
  1998. Function A410RvPlan(cTabPrec,cProduto,lClear,lDeleta)
  1999. Local lRet := .T.
  2000. Local lSvCols, aSvCols, aSvHead, nSvN, nLin, aCombo, aAreas, nDif
  2001. Local nPosQtd, nPosCpo, nPosStatic
  2002. Local bError
  2003.  
  2004. Default lClear := .F.
  2005. Default lDeleta := .F.
  2006.  
  2007. Static a410IntRvPlan
  2008. Static aDadRevPlan
  2009.  
  2010. If a410IntRvPlan == Nil
  2011. a410IntRvPlan := (Type("l410Auto") == "U" .Or. l410Auto == .F.) ;
  2012. .And. (Type("l416Auto") == "U" .Or. l416Auto == .F.) ;
  2013. .And. SuperGetMV("MV_REVPLAN",.F.,.F.)
  2014. EndIf
  2015.  
  2016. If a410IntRvPlan .And. Type("n") == "N" .And. n > 0
  2017.  
  2018. If lClear .Or. aDadRevPlan == Nil
  2019. aDadRevPlan := {}
  2020. EndIf
  2021.  
  2022. If (!aTail(aCols[n]) .Or. (aTail(aCols[n]) .And. aScan( aDadRevPlan, {|x| x[1] == n }) >= 0 ));
  2023. .And. !Empty(cProduto) .And. !Empty(cTabPrec)
  2024.  
  2025. aAreas := { DA0->(GetArea()),;
  2026. SAX->(GetArea()),;
  2027. SCO->(GetArea()),;
  2028. SB1->(GetArea()),;
  2029. SDY->(GetArea()),;
  2030. GetArea()}
  2031.  
  2032. nPosQtd := GdFieldPos("C6_QTDVEN")
  2033.  
  2034. SB1->( DbSetOrder( 1 ) ) //-- B1_FILIAL+B1_COD
  2035. If SB1->( MsSeek( xFilial("SB1") + cProduto ) )
  2036. DA0->( DbSetOrder( 1 ) ) //-- DA0_FILIAL+DA0_CODTAB
  2037. If DA0->(MsSeek( xFilial("DA0") + cTabPrec)) .And. !Empty(DA0->DA0_CODPUB)
  2038.  
  2039. SAX->( DbSetOrder( 1 ))
  2040. If SAX->( MsSeek( DA0->(DA0_FILPUB+DA0_CODPUB) ) ) .And. !Empty(SAX->AX_CODPLA)
  2041.  
  2042. SCO->( DbSetOrder( 1 ) ) //-- CO_FILIAL+CO_CODIGO+CO_REVISAO+CO_LINHA
  2043. If SCO->( MsSeek( xFilial("SCO",DA0->DA0_FILPUB) + SAX->(AX_CODPLA+AX_REVPLA) + StrZero( 1, TamSX3("CO_LINHA")[1] ) ) )
  2044.  
  2045. If !aTail(aCols[n])
  2046.  
  2047. Private cArqMemo := SCO->CO_NOME
  2048. Private lDirecao := .T.
  2049. Private nQualCusto := 1
  2050. Private cProg := "R430"
  2051.  
  2052. Pergunte( "MTC010", .F. ) //-- Este pergunte serve para a funcao MC010Forma, sem os MV_PARXX ocorre error log.
  2053. If lSvCols := (Type("aCols") == "A" .And. Type("aHeader") == "A")
  2054. aSvCols := aClone( aCols )
  2055. aSvHead := aClone( aHeader )
  2056. nSvN := n
  2057. n := 1
  2058. EndIf
  2059.  
  2060. bError := ErrorBlock( {|| A410RvErr( @lRet, .F. ) } )
  2061. Begin Sequence
  2062. //-- Inicializa conteudo da publicação na Formação
  2063. C010ClrVLine()
  2064. SDY->( DbSetOrder(1)) //-- DY_FILIAL+DY_CODIGO+DY_PRODUTO+DY_SEQUEN
  2065. SDY->( MsSeek( DA0->(DA0_FILPUB+DA0_CODPUB) + cProduto ) )
  2066. Do While SDY->(!Eof()) .And. SDY->(DY_FILIAL+DY_CODIGO+DY_PRODUTO) == DA0->(DA0_FILPUB+DA0_CODPUB) + cProduto
  2067. If !Empty( SDY->DY_LINHA )
  2068. C010SetVLin( Val(SDY->DY_LINHA) + 1, SDY->DY_VALOR )
  2069. Else
  2070. MA317IniPr( SDY->DY_CODPRC, SDY->DY_VALOR )
  2071. EndIf
  2072.  
  2073. SDY->(DbSkip())
  2074. EndDo
  2075.  
  2076. //-- Faz Chamada ao Cálculo da Planilha de Formação de Preços
  2077. aVet := MC010Form2( "SB1", SB1->( RecNo() ), 98,,, .F. )
  2078.  
  2079. //-- Limpa Dados estáticos da Planilha de Formação e do Cadastro de Itens de Precificação x Categoria x Produto
  2080. C010ClrVLine()
  2081. MA317FimPr()
  2082.  
  2083. End Sequence
  2084.  
  2085. If lSvCols
  2086. aCols := aClone( aSvCols )
  2087. aHeader := aClone( aSvHead )
  2088. n := nSvN
  2089. EndIf
  2090. Pergunte("MTA410",.F.)
  2091. EndIf
  2092.  
  2093. If lRet
  2094. bError := ErrorBlock( {|| A410RvErr( @lRet, .F. ) } )
  2095. Begin Sequence
  2096. Do While SCO->(!Eof()) .And. SCO->(CO_FILIAL+CO_CODIGO+CO_REVISAO) == xFilial("SCO",DA0->DA0_FILPUB) + SAX->(AX_CODPLA+AX_REVPLA)
  2097.  
  2098. nLin := Val(SCO->CO_LINHA) + 1
  2099. If aCombo == Nil
  2100. aCombo := aClone(Mata315Cmb( .T., .T. ))
  2101. EndIf
  2102.  
  2103. If !Empty(SCO->CO_INTPV) .And. SCO->CO_INTPV != "0"
  2104.  
  2105. cCampo := aCombo[Val(SCO->CO_INTPV)]
  2106. nPosStatic := 0
  2107. nDif := 0
  2108.  
  2109. If aTail(aCols[n]) .And. (nPosStatic := aScan( aDadRevPlan, {|x| x[1] == n .And. x[2] == nLin })) > 0
  2110.  
  2111. If Left(cCampo,3) == "C5_"
  2112.  
  2113. &("M->"+cCampo) := Max( &("M->"+cCampo)-aDadRevPlan[nPosStatic][3], 0 )
  2114. aDadRevPlan[nPosStatic][3] := 0
  2115.  
  2116. EndIf
  2117.  
  2118. ElseIf !aTail(aCols[n]) .And. Len(aVet) >= nLin .And. ValType(aVet[nLin][6]) == "N"
  2119.  
  2120. If (nPosStatic := aScan( aDadRevPlan, {|x| x[1] == n .And. x[2] == nLin })) == 0
  2121. aAdd( aDadRevPlan,{n,nLin,0,aCols[n][nPosQtd]})
  2122. nPosStatic := Len(aDadRevPlan)
  2123. If !lDeleta
  2124. nDif := aVet[nLin][6] * aCols[n][nPosQtd]
  2125. EndIf
  2126. Else
  2127. nDif := ( aVet[nLin][6] * aCols[n][nPosQtd] ) - aDadRevPlan[nPosStatic][3]
  2128. EndIf
  2129.  
  2130. If Left(cCampo,3) == "C5_"
  2131.  
  2132. &("M->"+cCampo) := Max( &("M->"+cCampo)+nDif, 0 )
  2133. aDadRevPlan[nPosStatic][3] := aVet[nLin][6] * aCols[n][nPosQtd]
  2134. aDadRevPlan[nPosStatic][4] := aCols[n][nPosQtd]
  2135.  
  2136. ElseIf Left(cCampo,3) == "C6_" .And. lSvCols;
  2137. .And. n <= Len(aCols) .And. (nPosCpo := GdFieldPos(cCampo)) > 0
  2138.  
  2139. aCols[n][nPosCpo] := aVet[nLin][6]
  2140. aDadRevPlan[nPosStatic][3] := aVet[nLin][6]
  2141. aDadRevPlan[nPosStatic][4] := aCols[n][nPosQtd]
  2142. EndIf
  2143. EndIf
  2144. EndIf
  2145.  
  2146. SCO->(DbSkip())
  2147. EndDo
  2148. End Sequence
  2149.  
  2150. If lRet
  2151. If Type("oGetDad") == "O"
  2152. oGetDad:Refresh(.T.)
  2153. EndIf
  2154. If Type("oGetPV") == "O"
  2155. oGetPV:Refresh()
  2156. EndIf
  2157. EndIf
  2158.  
  2159. EndIf
  2160. EndIf
  2161. EndIf
  2162. EndIf
  2163. EndIf
  2164. aEval( aAreas, { |x| RestArea(x) } )
  2165. EndIf
  2166. EndIf
  2167. Return lRet
  2168.  
  2169. /*
  2170. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  2171. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  2172. ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
  2173. ±±ºPrograma ³A410RvErr ºAutor ³ Daniel Leme º Data ³ 03/21/11 º±±
  2174. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  2175. ±±ºDesc. ³ Tratamento de erros º±±
  2176. ±±º ³ º±±
  2177. ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
  2178. ±±ºUso ³ MATA410A º±±
  2179. ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
  2180. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  2181. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  2182. */
  2183. Function A410RvErr( uRet, uVal )
  2184.  
  2185. If uVal == Nil
  2186. uRet := Nil
  2187. Else
  2188. uRet := uVal
  2189. EndIf
  2190.  
  2191. Break
  2192.  
  2193. Return
  2194.  
  2195. /*/
  2196. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  2197. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  2198. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  2199. ±±³Funcao ³a410ChecaB³ Rev. ³Aline Correa do Vale ³ Data ³ 19.03.99 ³±±
  2200. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  2201. ±±³Descri‡…o ³Validacao do Codigo do Produto ou do Codigo de Barras quando³±±
  2202. ±±³ ³utiliza-se codigo de barra. ³±±
  2203. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  2204. ±±³Retorno ³ExpL1: Codigo Valido ³±±
  2205. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  2206. ±±³Parametros³ExpC1: Codigo ³±±
  2207. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  2208. ±±³ DATA ³ Programador ³Manutencao Efetuada ³±±
  2209. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  2210. ±±³ ³ ³ ³±±
  2211. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  2212. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  2213. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  2214. /*/
  2215. Function A410ChecaB1(cCodigo, oCod, lLoop)
  2216.  
  2217. Local lRetorno := .T.
  2218. Local nBytes := IIf(SuperGetMv("MV_CONSBAR")>Len(SB1->B1_COD),Len(SB1->B1_COD),SuperGetMv("MV_CONSBAR") )
  2219. Local nPProduto := aScan(aHeader,{|x| AllTrim(x[2])=="C6_PRODUTO"})
  2220. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  2221. //³Ponto de Entrada ³
  2222. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  2223. If ( ExistBlock("MTA410BR") )
  2224. cCodigo := ExecBlock("MTA410BR",.f.,.f.,cCodigo)
  2225. EndIf
  2226. cCodigo := PadR(SubStr(cCodigo,1,nBytes),Len(SB1->B1_CODBAR))
  2227.  
  2228. dbSelectArea("SB1")
  2229. dbSetOrder(1)
  2230.  
  2231. If !Empty(cCodigo) .AND. (lRetorno .And. !dbSeek(xFilial("SB1")+cCodigo,.F.) )
  2232.  
  2233. dbSetOrder(5)
  2234. lRetorno := dbSeek(xFilial("SB1")+Subs(cCodigo,1,Len(SB1->B1_CODBAR)),.F.)
  2235.  
  2236. If !lRetorno
  2237. cCodigo := trim(cCodigo)+eandigito(trim(cCodigo))
  2238. lRetorno := dbSeek(xFilial("SB1")+Subs(cCodigo,1,Len(SB1->B1_CODBAR)),.F.)
  2239. EndIf
  2240.  
  2241. cCodigo := SB1->B1_COD
  2242. If !lRetorno
  2243. oCod:Refresh()
  2244. Help(" ",1,"A410NPROD")
  2245. EndIf
  2246.  
  2247. dbSetOrder(1)
  2248.  
  2249. EndIf
  2250. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  2251. //³Verifica se o produto ja existe no aCols ³
  2252. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  2253. If .T.// .or. aScan(aCols,{|x| x[nPProduto] == cCodigo})==0
  2254. If ( lRetorno ) .And. !Empty(cCodigo)
  2255. nPosProd := Ascan(aListBox,{|x|x[1]==cCodigo})
  2256. If nPosProd==0
  2257. If Len(aListBox)==1 .And. Empty(Trim(aListBox[1,1]))
  2258. aListBox[1,1] := cCodigo
  2259. aListBox[1,2] := SB1->B1_DESC
  2260. aListBox[1,3] := 1
  2261. nPosProd := 1
  2262. Else
  2263. If (Len(aListBox)+1)>ITENSSC6
  2264. Help(" ",1,"A410LIMMAX")
  2265. nPosProd:=oListBox:nAt
  2266. Else
  2267. Aadd(aListBox,{cCodigo,SB1->B1_DESC,1})
  2268. nPosProd:=Len(aListBox)
  2269. EndIf
  2270. EndIf
  2271. Else
  2272. aListBox[nPosProd,3]+=1
  2273. EndIf
  2274. oListBox:SetArray(aListBox)
  2275. oListBox:bLine:={||{aListBox[oListBox:nAt,1],;
  2276. aListBox[oListBox:nAt,2],;
  2277. xPadl(Str(aListBox[oListBox:nAt,3]),100)}}
  2278. oListBox:nAt:=nPosProd
  2279. oListBox:Refresh()
  2280. cCodigo:=Space(Len(SB1->B1_COD))
  2281. oCod:Refresh()
  2282. EndIf
  2283. EndIf
  2284. lLoop:=.T.
  2285. Return( lRetorno )
  2286.  
  2287. /*
  2288. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  2289. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  2290. ±±³Fun‡„o ³a410Venc ³ Autor³ Cristina Ogura ³ Data ³ 18.09.96 ³±±
  2291. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  2292. ±±³Descri‡„o ³Verifica se os vencimentos digitados no pedido sao menores ³±±
  2293. ±±³ ³que a data de emissao do pedido. ³±±
  2294. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  2295. ±±³Uso ³ Mata410 ³±±
  2296. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  2297. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  2298. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  2299. */
  2300. Function A410Venc()
  2301. Local cVar := &(ReadVar())
  2302. Local cAlias := Alias()
  2303. Local lRet := .T.
  2304.  
  2305. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  2306. //³Somente obriga a digita‡ao da data do vencimento ³
  2307. //³quando a condi‡„o de pagamento for tipo 9. ³
  2308. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  2309. dbSelectArea("SE4")
  2310. dbSetOrder(1)
  2311. If dbSeek(xFilial()+m->c5_condpag)
  2312. If SE4->E4_TIPO == "9"
  2313. If DtoS(cVar) < DtoS(M->C5_EMISSAO) .And. !Empty(cVar)
  2314. Help(" ",1,"A410VENC")
  2315. lRet := .F.
  2316. Endif
  2317. Endif
  2318. Endif
  2319. dbSelectArea(cAlias)
  2320. Return lRet
  2321.  
  2322. /*
  2323. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  2324. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  2325. ±±³Fun‡„o ³A410BloqIss³ Autor ³ Vendas/CRM ³ Data ³ 10.04.14 ³±±
  2326. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  2327. ±±³Descri‡„o ³Verifica se existem itens com códigos de serviço diferentes ³±±
  2328. ±±³ ³quando o parâmetro MV_NFEQUEB estiver ativo. ³±±
  2329. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  2330. ±±³Uso ³ Mata410 ³±±
  2331. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  2332. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  2333. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  2334. */
  2335. Function A410BloqIss(cNumPed)
  2336.  
  2337. Local aArea := GetArea()
  2338. Local lRet := .T.
  2339.  
  2340. #IFDEF TOP
  2341. Local cQuery := ""
  2342. Local cAliasSC6 := GetNextAlias()
  2343. Local nTot := 0
  2344.  
  2345. cQuery := "SELECT DISTINCT SC6.C6_CODISS FROM "+RetSqlName("SC6")+" SC6 "
  2346. cQuery += "WHERE SC6.C6_FILIAL = '"+xFilial('SC6')+"' AND "
  2347. cQuery += "SC6.C6_NUM ='"+cNumPed+"' AND "
  2348. cQuery += "SC6.C6_CODISS <> ' ' AND "
  2349. cQuery += "SC6.D_E_L_E_T_= ' ' "
  2350.  
  2351. cQuery := ChangeQuery(cQuery)
  2352. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasSC6)
  2353.  
  2354. While (cAliasSC6)->(!Eof())
  2355. nTot++
  2356. If nTot > 1
  2357. lRet := .F.
  2358. Exit
  2359. EndIf
  2360. (cAliasSC6)->(dbSkip())
  2361. EndDo
  2362.  
  2363. If Select(cAliasSC6) > 0
  2364. (cAliasSC6)->(dbCloseArea())
  2365. EndIf
  2366. #ENDIF
  2367.  
  2368. RestArea(aArea)
  2369.  
  2370. Return lRet
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement