Advertisement
Guest User

Matr700

a guest
Sep 6th, 2019
760
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 91.58 KB | None | 0 0
  1. #INCLUDE "MATR700.CH"
  2. #INCLUDE "PROTHEUS.CH"
  3.  
  4. /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  5. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  6. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  7. ±±³Programa ³ MATR700 ³ Autor ³ Marco Bianchi ³ Data ³ 07/07/06 ³±±
  8. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  9. ±±³Descri‡…o ³ Relacao de Pedidos aptos a faturar ³±±
  10. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  11. ±±³Uso ³ SIGAFAT - R4 ³±±
  12. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  13. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  14. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
  15. Function MATR700()
  16.  
  17. Local oReport
  18.  
  19. If FindFunction("TRepInUse") .AND. TRepInUse()
  20. //-- Interface de impressao
  21. oReport := ReportDef()
  22. oReport:PrintDialog()
  23. Else
  24. Matr700R3()
  25. EndIf
  26.  
  27. Return
  28.  
  29. /*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  30. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  31. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  32. ±±³Programa ³ReportDef ³ Autor ³ Marco Bianchi ³ Data ³ 07/07/06 ³±±
  33. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  34. ±±³Descri‡…o ³A funcao estatica ReportDef devera ser criada para todos os ³±±
  35. ±±³ ³relatorios que poderao ser agendados pelo usuario. ³±±
  36. ±±³ ³ ³±±
  37. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  38. ±±³Retorno ³ExpO1: Objeto do relatório ³±±
  39. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  40. ±±³Parametros³Nenhum ³±±
  41. ±±³ ³ ³±±
  42. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  43. ±±³ DATA ³ Programador ³Manutencao efetuada ³±±
  44. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  45. ±±³ ³ ³ ³±±
  46. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  47. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  48. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  49. /*/
  50. Static Function ReportDef()
  51.  
  52. Local oReport
  53. Local oCabec
  54. Local oPedaFat
  55. Local oTemp
  56. Local cVends := ""
  57. Local cItem := ""
  58. Local cProduto := ""
  59. Local cDescricao:= ""
  60. Local nTotLocal := 0
  61. Local nQtdVen := 0
  62. Local nQtdEnt := 0
  63. Local nQtLib := 0
  64. Local nQtBloq := 0
  65. Local nValDesc := 0
  66. Local nPrcVen := 0
  67. Local nImpLinha := 0
  68. Local nTFat := 0
  69. Local dEntreg := dDataBAse
  70. Local cOP := ""
  71. Local cDescTab := ""
  72. Local nTamData := Len(DTOC(MsDate()))
  73. Local cAliasSC5 := ""
  74. Local cAliasSC6 := ""
  75. Local cAliasSC9 := ""
  76. Local cAliasSF4 := ""
  77.  
  78. cAliasSF4 := GetNextAlias()
  79. cAliasSC9 := cAliasSF4
  80. cAliasSC6 := cAliasSC9
  81. cAliasSC5 := cAliasSC6
  82.  
  83. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  84. //³Criacao do componente de impressao ³
  85. //³ ³
  86. //³TReport():New ³
  87. //³ExpC1 : Nome do relatorio ³
  88. //³ExpC2 : Titulo ³
  89. //³ExpC3 : Pergunte ³
  90. //³ExpB4 : Bloco de codigo que sera executado na confirmacao da impressao ³
  91. //³ExpC5 : Descricao ³
  92. //³ ³
  93. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  94. oReport := TReport():New("MATR700",STR0031,"MTR700", {|oReport| ReportPrint(oReport,oCabec,oPedaFat,oTemp,cAliasSC5,cAliasSC6,cAliasSC9,cAliasSF4)},STR0032 + " " + STR0033 + " " + STR0034) // "Relacao de Pedidos de Vendas"###"Este programa ira emitir a relacao dos Pedidos de Vendas"###"Sera feita a pesquisa no armazem e verificado"###"se a quantidade esta disponivel"
  95. oReport:SetLandscape()
  96. oReport:SetTotalInLine(.F.)
  97.  
  98.  
  99. Pergunte(oReport:uParam,.F.)
  100.  
  101. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  102. //³Criacao da secao utilizada pelo relatorio ³
  103. //³ ³
  104. //³TRSection():New ³
  105. //³ExpO1 : Objeto TReport que a secao pertence ³
  106. //³ExpC2 : Descricao da seçao ³
  107. //³ExpA3 : Array com as tabelas utilizadas pela secao. A primeira tabela ³
  108. //³ sera considerada como principal para a seção. ³
  109. //³ExpA4 : Array com as Ordens do relatório ³
  110. //³ExpL5 : Carrega campos do SX3 como celulas ³
  111. //³ Default : False ³
  112. //³ExpL6 : Carrega ordens do Sindex ³
  113. //³ Default : False ³
  114. //³ ³
  115. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  116. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  117. //³Criacao da celulas da secao do relatorio ³
  118. //³ ³
  119. //³TRCell():New ³
  120. //³ExpO1 : Objeto TSection que a secao pertence ³
  121. //³ExpC2 : Nome da celula do relatório. O SX3 será consultado ³
  122. //³ExpC3 : Nome da tabela de referencia da celula ³
  123. //³ExpC4 : Titulo da celula ³
  124. //³ Default : X3Titulo() ³
  125. //³ExpC5 : Picture ³
  126. //³ Default : X3_PICTURE ³
  127. //³ExpC6 : Tamanho ³
  128. //³ Default : X3_TAMANHO ³
  129. //³ExpL7 : Informe se o tamanho esta em pixel ³
  130. //³ Default : False ³
  131. //³ExpB8 : Bloco de código para impressao. ³
  132. //³ Default : ExpC2 ³
  133. //³ ³
  134. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  135. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  136. //³Secao de Cabecalho - Section(1) ³
  137. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  138. oCabec := TRSection():New(oReport,STR0060,{"SC6","SC5"},{STR0043,STR0044,STR0045},/*Campos do SX3*/,/*Campos do SIX*/) // "Relacao de Pedidos de Vendas"###"Pedido""Produto"###"Data de Entrega"
  139. oCabec:SetTotalInLine(.F.)
  140. oCabec:SetReadOnly()
  141.  
  142. TRCell():New(oCabec,"C5_NUM" ,/*Tabela*/,STR0047 ,PesqPict("SC5","C5_NUM") ,TamSx3("C5_NUM" )[1] ,/*lPixel*/,{|| SC5->C5_NUM })
  143. TRCell():New(oCabec,"C5_CLIENTE" ,/*Tabela*/," " ,PesqPict("SC5","C5_CLIENTE") ,16 ,/*lPixel*/,{|| IIF( SC5->C5_TIPO$"BD",STR0048,STR0049) + SC5->C5_CLIENTE })
  144. TRCell():New(oCabec,"C5_LOJA" ,/*Tabela*/,STR0050 ,PesqPict("SC5","C5_LOJACLI") ,TamSx3("C5_LOJACLI" )[1] ,/*lPixel*/,{|| SC5->C5_LOJACLI })
  145. TRCell():New(oCabec,"CNOME" ,/*Tabela*/,RetTitle("A1_NOME") ,PesqPict("SA1","A1_NOME") ,TamSx3("A1_NOME" )[1] ,/*lPixel*/,{|| IIF(SC5->C5_TIPO$"BD",SA2->A2_NOME,SA1->A1_NOME) })
  146. TRCell():New(oCabec,"C5_EMISSAO" ,/*Tabela*/,STR0051 ,PesqPict("SC5","C5_EMISSAO") ,nTamData ,/*lPixel*/,{|| SC5->C5_EMISSAO},,,,,,.F.)
  147. TRCell():New(oCabec,"C5_TRANS" ,/*Tabela*/,STR0052 ,PesqPict("SC5","C5_TRANSP") ,TamSx3("C5_TRANSP" )[1] ,/*lPixel*/,{|| SC5->C5_TRANSP })
  148. TRCell():New(oCabec,"CVENDS" ,/*Tabela*/,STR0053 ,PesqPict("SC5","C5_VEND1") ,34 ,/*lPixel*/,{|| cVends })
  149. TRCell():New(oCabec,"C5_CONDPAG" ,/*Tabela*/,STR0054 ,PesqPict("SC5","C5_CONDPAG") ,TamSx3("C5_CONDPAG" )[1] ,/*lPixel*/,{|| SC5->C5_CONDPAG })
  150. oReport:Section(1):SetLineStyle(.T.)
  151.  
  152. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  153. //³Secao de Itens - Section(1):Section(1) ³
  154. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  155. oPedaFat := TRSection():New(oCabec,STR0061,{"SC6"},/*{STR0043,STR0044,STR0045}*/,/*Campos do SX3*/,/*Campos do SIX*/) // "Relacao de Pedidos de Vendas"###"Pedido""Produto"###"Data de Entrega"
  156. oPedaFat:SetTotalInLine(.F.)
  157. oPedaFat:SetReadOnly()
  158.  
  159. TRCell():New(oPedaFat,"CITEM" ,/*Tabela*/,STR0035 ,PesqPict("SC6","C6_ITEM" ),TamSx3("C6_ITEM" )[1],/*lPixel*/,{|| cItem }) // "IT"
  160. TRCell():New(oPedaFat,"CPRODUTO" ,/*Tabela*/,RetTitle("C6_PRODUTO") ,PesqPict("SC6","C6_PRODUTO" ),TamSx3("C6_PRODUTO" )[1],/*lPixel*/,{|| cProduto }) // Codigo do Produto
  161. TRCell():New(oPedaFat,"CDESCRICAO" ,/*Tabela*/,RetTitle("C6_DESCRI") ,PesqPict("SC6","C6_DESCRI" ),30 ,/*lPixel*/,{|| cDescricao }) // Descricao do Produto
  162. TRCell():New(oPedaFat,"NTOTLOCAL" ,/*Tabela*/,STR0036 ,PesqPict("SB2","B2_QATU" ),TamSx3("B2_QATU" )[1],/*lPixel*/,{|| nTotLocal },,,"RIGHT") // "Estoque Disponivel"
  163. TRCell():New(oPedaFat,"NQTDVEN" ,/*Tabela*/,STR0037 ,PesqPict("SC6","C6_PRCVEN" ),TamSx3("C6_PRCVEN" )[1],/*lPixel*/,{|| nQtdVen },,,"RIGHT") // "Vendido"
  164. TRCell():New(oPedaFat,"NQTDENT" ,/*Tabela*/,STR0038 ,PesqPict("SC6","C6_PRCVEN" ),TamSx3("C6_PRCVEN" )[1],/*lPixel*/,{|| nQtdEnt },,,"RIGHT") // "Atendido"
  165. TRCell():New(oPedaFat,"NSALDO" ,/*Tabela*/,STR0039 ,PesqPict("SC6","C6_PRCVEN" ),TamSx3("C6_PRCVEN" )[1],/*lPixel*/,{|| nQtdVen-nQtdEnt },,,"RIGHT") // "Saldo"
  166. TRCell():New(oPedaFat,"NQTLIB" ,/*Tabela*/,RetTitle("C6_QTDLIB") ,PesqPict("SC6","C6_PRCVEN" ),TamSx3("C6_PRCVEN" )[1],/*lPixel*/,{|| nQtLib },,,"RIGHT") // Quantidade Liberada
  167. TRCell():New(oPedaFat,"NQTBLOQ" ,/*Tabela*/,STR0040 ,PesqPict("SC6","C6_PRCVEN" ),TamSx3("C6_PRCVEN" )[1],/*lPixel*/,{|| nQtBloq },,,"RIGHT") // "Qtd.Bloqueada"
  168. TRCell():New(oPedaFat,"NVALDESC" ,/*Tabela*/,RetTitle("C6_VALDESC") ,PesqPict("SC6","C6_VALDESC" ),TamSx3("C6_VALDESC" )[1],/*lPixel*/,{|| nValDesc },,,"RIGHT") // Valor do Desconto
  169. TRCell():New(oPedaFat,"NPRCVEN" ,/*Tabela*/,RetTitle("C6_PRCVEN") ,PesqPict("SC6","C6_VALDESC" ),TamSx3("C6_VALDESC" )[1] ,/*lPixel*/,{|| nPrcVen },,,"RIGHT") // Preco Unitario
  170. TRCell():New(oPedaFat,"CDESCTAB" ,/*Tabela*/,STR0059 , ,28 ,/*lPixel*/,{|| cOP+"-"+cDescTab }) // Situacao do Pedido
  171. TRCell():New(oPedaFat,"NIMPLINHA" ,/*Tabela*/,STR0041 ,PesqPict("SC6","C6_VALDESC" ),TamSx3("C6_VALDESC" )[1],/*lPixel*/ ,{|| nImpLinha },,,"RIGHT") // "Impostos"
  172. TRCell():New(oPedaFat,"NTFAT" ,/*Tabela*/,STR0042 ,PesqPict("SC6","C6_VALOR" ),TamSx3("C6_VALOR" )[1],/*lPixel*/ ,{|| nTFat },,,"RIGHT") // "Valor a Entregar"
  173.  
  174. // Quando nome da celular nao e do SX3 e o campo for do tipo Data, o tamanho deve ser preenchido com
  175. // Len(DTOC(MsDate())), para que nao haja problema na utilizacao de ano com 4 digitos.
  176. TRCell():New(oPedaFat,"DENTREG" ,/*Tabela*/,RetTitle("C6_ENTREG") ,PesqPict("SC6","C6_ENTREG" ),nTamData ,/*lPixel*/ ,{|| dEntreg },,,,,,.F.) // Data de Entrega
  177.  
  178. TRFunction():New(oPedaFat:Cell("NQTDVEN" ),/* cID */,"SUM",/*oBreak*/,/*cTitle*/,/*cPicture*/,/*uFormula*/,.F./*lEndSection*/,.T./*lEndReport*/,/*lEndPage*/)
  179. TRFunction():New(oPedaFat:Cell("NQTDENT" ),/* cID */,"SUM",/*oBreak*/,/*cTitle*/,/*cPicture*/,/*uFormula*/,.F./*lEndSection*/,.T./*lEndReport*/,/*lEndPage*/)
  180. TRFunction():New(oPedaFat:Cell("NSALDO" ),/* cID */,"SUM",/*oBreak*/,/*cTitle*/,/*cPicture*/,/*uFormula*/,.F./*lEndSection*/,.T./*lEndReport*/,/*lEndPage*/)
  181. TRFunction():New(oPedaFat:Cell("NQTLIB" ),/* cID */,"SUM",/*oBreak*/,/*cTitle*/,/*cPicture*/,/*uFormula*/,.F./*lEndSection*/,.T./*lEndReport*/,/*lEndPage*/)
  182. TRFunction():New(oPedaFat:Cell("NQTBLOQ" ),/* cID */,"SUM",/*oBreak*/,/*cTitle*/,/*cPicture*/,/*uFormula*/,.F./*lEndSection*/,.T./*lEndReport*/,/*lEndPage*/)
  183. TRFunction():New(oPedaFat:Cell("NVALDESC" ),/* cID */,"SUM",/*oBreak*/,/*cTitle*/,/*cPicture*/,/*uFormula*/,.T./*lEndSection*/,.T./*lEndReport*/,/*lEndPage*/)
  184. TRFunction():New(oPedaFat:Cell("NPRCVEN" ),/* cID */,"SUM",/*oBreak*/,/*cTitle*/,/*cPicture*/,/*uFormula*/,.F./*lEndSection*/,.T./*lEndReport*/,/*lEndPage*/)
  185. TRFunction():New(oPedaFat:Cell("NIMPLINHA" ),/* cID */,"SUM",/*oBreak*/,/*cTitle*/,/*cPicture*/,/*uFormula*/,.T./*lEndSection*/,.T./*lEndReport*/,/*lEndPage*/)
  186. TRFunction():New(oPedaFat:Cell("NTFAT" ),/* cID */,"SUM",/*oBreak*/,/*cTitle*/,/*cPicture*/,/*uFormula*/,.T./*lEndSection*/,.T./*lEndReport*/,/*lEndPage*/)
  187.  
  188. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  189. //³Faz a quebra de linha para impressao da descricao do produto ³
  190. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  191. oReport:Section(1):Section(1):SetLineBreak()
  192.  
  193. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  194. //³ Impressao do Cabecalho no top da pagina ³
  195. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  196. oReport:Section(1):Section(1):SetHeaderPage()
  197.  
  198. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  199. //³ Secao temporaria para receber filtro da tabela SC9. ³
  200. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  201. oTemp := TRSection():New(oReport,"",{"SC9"},{STR0043,STR0044,STR0045},/*Campos do SX3*/,/*Campos do SIX*/) // "Todos Pedidos"###"Relacao de Pedidos de Vendas"###"Pedido""Produto"###"Data de Entrega"
  202. oTemp:SetTotalInLine(.F.)
  203. oTemp:SetReadOnly()
  204.  
  205. oReport:Section(2):SetEdit(.F.)
  206.  
  207. Return(oReport)
  208.  
  209. /*/
  210. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  211. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  212. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  213. ±±³Programa ³ReportPrin³ Autor ³ Marco Bianchi ³ Data ³ 07/07/06 ³±±
  214. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  215. ±±³Descri‡…o ³A funcao estatica ReportDef devera ser criada para todos os ³±±
  216. ±±³ ³relatorios que poderao ser agendados pelo usuario. ³±±
  217. ±±³ ³ ³±±
  218. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  219. ±±³Retorno ³Nenhum ³±±
  220. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  221. ±±³Parametros³ExpO1: Objeto Report do Relatório ³±±
  222. ±±³ ³ ³±±
  223. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  224. ±±³ DATA ³ Programador ³Manutencao efetuada ³±±
  225. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  226. ±±³ ³ ³ ³±±
  227. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  228. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  229. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  230. /*/
  231. Static Function ReportPrint(oReport,oCabec,oPedaFat,oTemp,cAliasSC5,cAliasSC6,cAliasSC9,cAliasSF4)
  232.  
  233. Local cWhere := ""
  234. Local cDescOrdem := ""
  235. Local cTipo := ""
  236. Local cPedido := ""
  237. Local cFilter := ""
  238. Local cKey := ""
  239. Local cCampo := ""
  240. Local cVends := ""
  241. Local cNumero := ""
  242. Local cLocal := ""
  243. Local cTes := ""
  244. LOCAL cTmpTable := GetNextAlias()
  245. Local dC5Emissao := dDataBase
  246. Local nOrdem := oReport:Section(1):GetOrder()
  247. Local nX := 1
  248. Local nQtBloq := 0
  249. Local nItem := 0
  250. Local nC5Moeda := 0
  251. Local nPos := 0
  252. Local nPrunit := 0
  253. Local nVldesc := 0
  254. Local nValIPI := 0
  255. Local nAcresFin := 0
  256. Local nPacresFin := 0
  257. Local nQuant := 0
  258. Local aQuant := {}
  259. Local aCampos := {}
  260. Local aTam := {}
  261. Local aImpostos := MaFisRelImp("MTR700",{"SC5","SC6"})
  262. Local lContInt := .T.
  263. Local lFiltro := .T.
  264. Local lCabPed := .T.
  265. Local lBarra := .F.
  266. Local lImp := .F.
  267. Local cQueryAdd := ""
  268. Local cFilUsuSC5 := oReport:Section(1):GetSqlExp("SC5")
  269. Local cFilUsuSC6 := oReport:Section(1):GetSqlExp("SC6")
  270.  
  271. Private oTempTable := Nil
  272.  
  273. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  274. //³ SetBlock: faz com que as variaveis locais possam ser ³
  275. //³ utilizadas em outras funcoes nao precisando declara-las ³
  276. //³ como private. ³
  277. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  278. oReport:Section(1):Cell("CVENDS"):SetBlock({|| cVends })
  279. oReport:Section(1):Section(1):Cell("CITEM" ):SetBlock({|| cItem })
  280. oReport:Section(1):Section(1):Cell("CPRODUTO" ):SetBlock({|| cProduto })
  281. oReport:Section(1):Section(1):Cell("CDESCRICAO" ):SetBlock({|| cDescricao })
  282. oReport:Section(1):Section(1):Cell("NTOTLOCAL" ):SetBlock({|| nTotLocal })
  283. oReport:Section(1):Section(1):Cell("NQTDVEN" ):SetBlock({|| nQtdVen })
  284. oReport:Section(1):Section(1):Cell("NQTDENT" ):SetBlock({|| nQtdEnt })
  285. oReport:Section(1):Section(1):Cell("NSALDO" ):SetBlock({|| nQtdVen-nQtdEnt })
  286. oReport:Section(1):Section(1):Cell("NQTLIB" ):SetBlock({|| nQtLib })
  287. oReport:Section(1):Section(1):Cell("NQTBLOQ" ):SetBlock({|| nQtBloq })
  288. oReport:Section(1):Section(1):Cell("NVALDESC" ):SetBlock({|| nValDesc })
  289. oReport:Section(1):Section(1):Cell("NPRCVEN" ):SetBlock({|| nPrcVen })
  290. oReport:Section(1):Section(1):Cell("CDESCTAB" ):SetBlock({|| cOP+"-"+cDescTab })
  291. oReport:Section(1):Section(1):Cell("NIMPLINHA" ):SetBlock({|| nImpLinha })
  292. oReport:Section(1):Section(1):Cell("NTFAT" ):SetBlock({|| nTFat })
  293. oReport:Section(1):Section(1):Cell("DENTREG" ):SetBlock({|| dEntreg })
  294. cVends := ""
  295. cItem := ""
  296. cProduto := ""
  297. cDescricao := ""
  298. nTotLocal := 0
  299. nQtdVen := 0
  300. nQtdEnt := 0
  301. nQtLib := 0
  302. nQtBloq := 0
  303. nValDesc := 0
  304. nPrcVen := 0
  305. cOP := ""
  306. cDescTab := ""
  307. nImpLinha := 0
  308. nTFat := 0
  309. dEntreg := dDataBAse
  310.  
  311. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  312. //³ Define array com base no SB2 e Monta arquivo de trabalho ³
  313. //³ para baixar estoque na listagem. ³
  314. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  315. aTam := TamSX3("B2_LOCAL")
  316. AADD(aCampos, {"TB_LOCAL", "C", aTam[1], aTam[2]})
  317. aTam := TamSX3("B2_COD")
  318. AADD(aCampos, {"TB_COD", "C", aTam[1], aTam[2]})
  319. aTam := TamSX3("B2_QATU")
  320. AADD(aCampos, {"TB_SALDO", "N", aTam[1], aTam[2]})
  321. aTam := {}
  322.  
  323. //-------------------------------------------------------------------
  324. // Instancia tabela temporária.
  325. //-------------------------------------------------------------------
  326. oTempTable := FWTemporaryTable():New(cTmpTable)
  327.  
  328. //-------------------------------------------------------------------
  329. // Atribui o os índices.
  330. //-------------------------------------------------------------------
  331. oTempTable:SetFields( aCampos )
  332.  
  333. oTempTable:AddIndex("1",{"TB_LOCAL","TB_COD"})
  334.  
  335. //------------------
  336. //Criação da tabela
  337. //------------------
  338. oTempTable:Create()
  339.  
  340. dbSelectArea("SC6")
  341. dbSetOrder(nOrdem)
  342.  
  343. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  344. //³Transforma parametros Range em expressao SQL ³
  345. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  346. MakeSqlExpr(oReport:uParam)
  347.  
  348. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  349. //³ ³
  350. //³ Filtros do Relatorio ³
  351. //³ ³
  352. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  353. cQueryAdd := ""
  354.  
  355. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  356. //³ ³
  357. //³ Montagem das variaveis da Query ³
  358. //³ ³
  359. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  360. cWhere := "%"
  361. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  362. //³ Trata o Relacionamento com C9 conforme a opcao do MV_PAR06 -> "IMPRIMIR PEDIDOS ?" ³
  363. //³ "IMPRIMIR PEDIDOS ?" ³
  364. //³ MV_PAR06 == 1 -> Pedidos Aptos a Faturar com C9 liberado. ³
  365. //³ MV_PAR06 == 2 -> Pedidos Nao Aptos a Faturar com C9 bloqueado no Credito ou Estoque³
  366. //³ MV_PAR06 == 3 -> Todos - pedidos liberados e bloqueados do C9 + os C6 sem os C9 ³
  367. //³ para MV_PAR06 == 3 o relacionamento com C9 na Query e feito atraves de UNION. ³
  368. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  369. If mv_par06 == 1
  370. cWhere += "SC9.C9_BLEST = '" + space(TamSx3("C9_BLEST")[1]) + "' AND "
  371. cWhere += "SC9.C9_BLCRED = '" + space(TamSx3("C9_BLCRED")[1]) + "' AND "
  372. cWhere += "SC9.C9_QTDLIB > 0 AND "
  373. ElseIf mv_par06 == 2
  374. cWhere += "(SC9.C9_BLEST <> '" + space(TamSx3("C9_BLEST")[1]) + "' OR "
  375. cWhere += "SC9.C9_BLCRED <> '" + space(TamSx3("C9_BLCRED")[1]) + "') AND "
  376. EndIf
  377. If mv_par09 == 1
  378. cWhere += "SF4.F4_DUPLIC = 'S' AND "
  379. ElseIf mv_par09 == 2
  380. cWhere += "SF4.F4_DUPLIC <> 'S' AND "
  381. EndIf
  382.  
  383. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  384. //³Ponto de entrada para tratamento do filtro do usuario.³
  385. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  386. If ExistBlock("F700QRY")
  387. cQueryAdd := ExecBlock("F700QRY", .F., .F.)
  388. If ValType(cQueryAdd) == "C" .AND. !Empty(cQueryAdd)
  389. cWhere += " ( " + cQueryAdd + ") AND"
  390. EndIf
  391. EndIf
  392. If !Empty(cFilUsuSC5)
  393. cWhere += " (" + cFilUsuSC5 + ") AND"
  394. EndIf
  395. If !Empty(cFilUsuSC6)
  396. cWhere += " (" + cFilUsuSC6 + ") AND"
  397. EndIf
  398. cWhere += "%"
  399.  
  400. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  401. //³ ATENCAO !!!! ao manipular os campos do SELECT ou a ordem da Clausula ORDER BY verificar ³
  402. //³ a concordancia entre os mesmos !!!!!!!!! ³
  403. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  404. If nOrdem = 1
  405. cDescOrdem:= STR0043 // "Pedido"
  406. cOrder := "%C5_FILIAL,C5_NUM,C6_ITEM%"
  407. ElseIf nOrdem = 2
  408. cDescOrdem:= STR0044 // "Produto"
  409. cOrder :="%C6_FILIAL,C6_PRODUTO,C6_NUM%"
  410. ELSE
  411. cDescOrdem:= STR0045 // "Data de Entrega"
  412. cOrder := "%C6_FILIAL,C6_ENTREG,C5_NUM,C6_ITEM%"
  413. EndIf
  414.  
  415. If mv_par06 == 3
  416. cWhere2 := "%"
  417. If mv_par09 == 1
  418. cWhere2 += "SF4.F4_DUPLIC = 'S' AND "
  419. ElseIf mv_par09 == 2
  420. cWhere2 += "SF4.F4_DUPLIC <> 'S' AND "
  421. EndIf
  422.  
  423. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  424. //³Tratamento do filtro do usuario por PE. ³
  425. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  426. If ValType(cQueryAdd) == "C" .AND. !Empty(cQueryAdd)
  427. cWhere2 += " ( " + cQueryAdd + ") AND"
  428. EndIf
  429. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  430. //³Tratamento do filtro do usuario por personalização. ³
  431. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  432. If !Empty(cFilUsuSC5)
  433. cWhere2 += " (" + cFilUsuSC5 + ") AND"
  434. EndIf
  435. If !Empty(cFilUsuSC6)
  436. cWhere2 += " (" + cFilUsuSC6 + ") AND"
  437. EndIf
  438. cWhere2 += "%"
  439. EndIf
  440.  
  441. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  442. //³ Explicacoes da Query ³
  443. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  444. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  445. //³o Campo C9_QTDLIB e somado por haver varios C9 para cada C6. ³
  446. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  447. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  448. //³ Agrupamento de todos os campos comuns do SELECT para que nos relacionamentos com ³
  449. //³ C5,C6 e C9 com varios C9 para cada C6 gerem apenas um registro com o campo C9_QTDLIB ³
  450. //³ somado. ³
  451. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  452. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  453. //³ Quando o MV_PAR06 ==3 ->"TODOS OS PEDIDOS" esse UNION acrescenta a Query os registros³
  454. //³ do C6 que nao possuem C9. ³
  455. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  456. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  457. //³ Se mv_par06 == 3 ³
  458. //³ ATENCAO !!!! ao manipular os campos do SELECT ou a ordem da Clausula ORDER BY verifi-³
  459. //³ car a concordancia entre os mesmos !!!!!!!!! ³
  460. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  461. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  462. //³ Para o uso de UNION a estrutura deste SELECT deve ser igual a do SELECT anterior ³
  463. //³ note que a nomeclatura do C9 usa os mesmos nomes dos campos da TABELA, porem com o ³
  464. //³ uso de ' ' para nao fazer referencia a ela. ³
  465. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  466. If mv_par06 == 3
  467.  
  468. oReport:Section(1):BeginQuery()
  469. BeginSql Alias cAliasSC5
  470. SELECT
  471. SC5.C5_FILIAL,SC5.C5_NUM,SC5.C5_CLIENTE,SC5.C5_LOJACLI,SC5.C5_TIPO,SC5.C5_TIPOCLI,SC5.C5_TRANSP,SC5.C5_EMISSAO,
  472. SC5.C5_CONDPAG,SC5.C5_MOEDA,SC5.C5_VEND1,SC5.C5_VEND2,SC5.C5_VEND3,SC5.C5_VEND4,SC5.C5_VEND5,
  473. SC6.C6_FILIAL,SC6.C6_NUM,SC6.C6_PRODUTO,SC6.C6_DESCRI,SC6.C6_OP,SC6.C6_TES,SC6.C6_QTDVEN,SC6.C6_PRUNIT,SC6.C6_VALDESC,
  474. SC6.C6_VALOR,SC6.C6_ITEM,SC6.C6_PRCVEN,SC6.C6_CLI,SC6.C6_LOJA,SC6.C6_ENTREG,SC6.C6_LOCAL,SC6.C6_QTDENT,SC6.C6_BLQ,
  475. SC9.C9_FILIAL,SC9.C9_PEDIDO,SC9.C9_ITEM,SC9.C9_NFISCAL,SC9.C9_BLEST,SC9.C9_BLCRED,SC9.C9_PRODUTO,
  476. SUM(SC9.C9_QTDLIB) C9_QTDLIB,SF4.F4_FILIAL,SF4.F4_DUPLIC,SF4.F4_CODIGO,SC5.C5_ACRSFIN
  477. FROM %Table:SC5% SC5 ,%Table:SC6% SC6 ,%Table:SC9% SC9 ,%Table:SF4% SF4
  478. WHERE
  479. SC5.C5_FILIAL = %xFilial:SC5% AND SC5.C5_NUM >= %Exp:mv_par01% AND SC5.C5_NUM <= %Exp:mv_par02% AND
  480. SC5.%notdel% AND SC6.C6_FILIAL = %xFilial:SC6% AND SC6.C6_NUM = SC5.C5_NUM AND
  481. SC6.C6_PRODUTO >= %Exp:mv_par03% AND
  482. SC6.C6_PRODUTO <= %Exp:mv_par04% AND
  483. SC6.C6_ENTREG >= %Exp:dtos(mv_par10)% AND
  484. SC6.C6_ENTREG <= %Exp:dtos(mv_par11)% AND
  485. SC6.C6_QTDVEN-SC6.C6_QTDENT > 0 AND SC6.C6_BLQ <> 'R ' AND SC6.%notdel% AND
  486. SC9.C9_FILIAL = %xFilial:SC9% AND SC9.C9_PEDIDO = SC6.C6_NUM AND SC6.C6_ITEM = SC9.C9_ITEM AND
  487. SC6.C6_PRODUTO = SC9.C9_PRODUTO AND SC9.C9_NFISCAL = ' ' AND SC9.%notdel% AND
  488. SF4.F4_FILIAL = %xFilial:SF4% AND
  489. SC6.C6_TES = SF4.F4_CODIGO AND
  490. %Exp:cWhere%
  491. SF4.%notdel%
  492. GROUP BY
  493. SC5.C5_FILIAL,SC5.C5_NUM,SC5.C5_CLIENTE,SC5.C5_LOJACLI,SC5.C5_TIPO,SC5.C5_TIPOCLI,SC5.C5_TRANSP,SC5.C5_EMISSAO,
  494. SC5.C5_CONDPAG,SC5.C5_MOEDA,SC5.C5_VEND1,SC5.C5_VEND2,SC5.C5_VEND3,SC5.C5_VEND4,SC5.C5_VEND5,
  495. SC6.C6_FILIAL,SC6.C6_NUM,SC6.C6_PRODUTO,SC6.C6_DESCRI,SC6.C6_OP,SC6.C6_TES,SC6.C6_QTDVEN,SC6.C6_PRUNIT,SC6.C6_VALDESC,
  496. SC6.C6_VALOR,SC6.C6_ITEM,SC6.C6_PRCVEN,SC6.C6_CLI,SC6.C6_LOJA,SC6.C6_ENTREG,SC6.C6_LOCAL,SC6.C6_QTDENT,SC6.C6_BLQ,
  497. SC9.C9_FILIAL,SC9.C9_PEDIDO,SC9.C9_ITEM,SC9.C9_NFISCAL,SC9.C9_BLEST,SC9.C9_BLCRED,SC9.C9_PRODUTO,
  498. SF4.F4_FILIAL,SF4.F4_DUPLIC,SF4.F4_CODIGO,SC5.C5_ACRSFIN
  499.  
  500. UNION
  501.  
  502. SELECT
  503. SC5.C5_FILIAL,SC5.C5_NUM,SC5.C5_CLIENTE,SC5.C5_LOJACLI,SC5.C5_TIPO,SC5.C5_TIPOCLI,SC5.C5_TRANSP,SC5.C5_EMISSAO,
  504. SC5.C5_CONDPAG,SC5.C5_MOEDA,SC5.C5_VEND1,SC5.C5_VEND2,SC5.C5_VEND3,SC5.C5_VEND4,SC5.C5_VEND5,
  505. SC6.C6_FILIAL,SC6.C6_NUM,SC6.C6_PRODUTO,SC6.C6_DESCRI,SC6.C6_OP,SC6.C6_TES,SC6.C6_QTDVEN,SC6.C6_PRUNIT,SC6.C6_VALDESC,
  506. SC6.C6_VALOR,SC6.C6_ITEM,SC6.C6_PRCVEN,SC6.C6_CLI,SC6.C6_LOJA,SC6.C6_ENTREG,SC6.C6_LOCAL,SC6.C6_QTDENT,SC6.C6_BLQ,
  507. ' ' C9_FILIAL,' ' C9_PEDIDO,' ' C9_ITEM,' ' C9_NFISCAL,' ' C9_BLEST,' ' C9_BLCRED,' ' C9_PRODUTO,0 C9_QTDLIB,
  508. SF4.F4_FILIAL,SF4.F4_DUPLIC,SF4.F4_CODIGO,SC5.C5_ACRSFIN
  509. FROM %Table:SC5% SC5 ,%Table:SC6% SC6, %Table:SF4% SF4
  510. WHERE
  511. SC5.C5_FILIAL = %xFilial:SC5% AND SC5.C5_NUM >= %Exp:mv_par01% AND SC5.C5_NUM <= %Exp:mv_par02% AND
  512. SC5.%notdel% AND SC6.C6_FILIAL = %xFilial:SC6% AND SC6.C6_NUM = SC5.C5_NUM AND
  513. SC6.C6_PRODUTO >= %Exp:mv_par03% AND
  514. SC6.C6_PRODUTO <= %Exp:mv_par04% AND
  515. SC6.C6_ENTREG >= %Exp:dtos(mv_par10)% AND
  516. SC6.C6_ENTREG <= %Exp:dtos(mv_par11)% AND
  517. SC6.C6_QTDVEN-SC6.C6_QTDENT > 0 AND SC6.C6_BLQ <> 'R ' AND SC6.%notdel% AND
  518. SF4.F4_FILIAL = %xFilial:SF4% AND SC6.C6_TES = SF4.F4_CODIGO AND
  519. NOT EXISTS (SELECT SC9.C9_PEDIDO FROM %Table:SC9% SC9
  520. WHERE
  521. SC9.C9_FILIAL = %xFilial:SC9% AND SC9.C9_PEDIDO = SC6.C6_NUM AND SC6.C6_ITEM = SC9.C9_ITEM AND
  522. SC9.C9_NFISCAL = ' ' AND
  523. SC6.C6_PRODUTO = SC9.C9_PRODUTO AND SC9.%notdel%) AND
  524. %Exp:cWhere2%
  525. SF4.%notdel%
  526. ORDER BY %Exp:cOrder%
  527. EndSql
  528. oReport:Section(1):EndQuery()
  529.  
  530. Else
  531.  
  532. oReport:Section(1):BeginQuery()
  533. BeginSql Alias cAliasSC5
  534. SELECT
  535. SC5.C5_FILIAL,SC5.C5_NUM,SC5.C5_CLIENTE,SC5.C5_LOJACLI,SC5.C5_TIPO,SC5.C5_TIPOCLI,SC5.C5_TRANSP,SC5.C5_EMISSAO,
  536. SC5.C5_CONDPAG,SC5.C5_MOEDA,SC5.C5_VEND1,SC5.C5_VEND2,SC5.C5_VEND3,SC5.C5_VEND4,SC5.C5_VEND5,
  537. SC6.C6_FILIAL,SC6.C6_NUM,SC6.C6_PRODUTO,SC6.C6_DESCRI,SC6.C6_OP,SC6.C6_TES,SC6.C6_QTDVEN,SC6.C6_PRUNIT,SC6.C6_VALDESC,
  538. SC6.C6_VALOR,SC6.C6_ITEM,SC6.C6_PRCVEN,SC6.C6_CLI,SC6.C6_LOJA,SC6.C6_ENTREG,SC6.C6_LOCAL,SC6.C6_QTDENT,SC6.C6_BLQ,
  539. SC9.C9_FILIAL,SC9.C9_PEDIDO,SC9.C9_ITEM,SC9.C9_NFISCAL,SC9.C9_BLEST,SC9.C9_BLCRED,SC9.C9_PRODUTO,
  540. SUM(SC9.C9_QTDLIB) C9_QTDLIB,SF4.F4_FILIAL,SF4.F4_DUPLIC,SF4.F4_CODIGO,SC5.C5_ACRSFIN
  541. FROM %Table:SC5% SC5 ,%Table:SC6% SC6 ,%Table:SC9% SC9 ,%Table:SF4% SF4
  542. WHERE
  543. SC5.C5_FILIAL = %xFilial:SC5% AND SC5.C5_NUM >= %Exp:mv_par01% AND SC5.C5_NUM <= %Exp:mv_par02% AND
  544. SC5.%notdel% AND SC6.C6_FILIAL = %xFilial:SC6% AND SC6.C6_NUM = SC5.C5_NUM AND
  545. SC6.C6_PRODUTO >= %Exp:mv_par03% AND
  546. SC6.C6_PRODUTO <= %Exp:mv_par04% AND
  547. SC6.C6_ENTREG >= %Exp:dtos(mv_par10)% AND
  548. SC6.C6_ENTREG <= %Exp:dtos(mv_par11)% AND
  549. SC6.C6_QTDVEN-SC6.C6_QTDENT > 0 AND SC6.C6_BLQ <> 'R ' AND SC6.%notdel% AND
  550. SC9.C9_FILIAL = %xFilial:SC9% AND SC9.C9_PEDIDO = SC6.C6_NUM AND SC6.C6_ITEM = SC9.C9_ITEM AND
  551. SC6.C6_PRODUTO = SC9.C9_PRODUTO AND SC9.C9_NFISCAL = ' ' AND
  552. SC9.%notdel% AND
  553. SF4.F4_FILIAL = %xFilial:SF4% AND
  554. SC6.C6_TES = SF4.F4_CODIGO AND
  555. %Exp:cWhere%
  556. SF4.%notdel%
  557. GROUP BY
  558. SC5.C5_FILIAL,SC5.C5_NUM,SC5.C5_CLIENTE,SC5.C5_LOJACLI,SC5.C5_TIPO,SC5.C5_TIPOCLI,SC5.C5_TRANSP,SC5.C5_EMISSAO,
  559. SC5.C5_CONDPAG,SC5.C5_MOEDA,SC5.C5_VEND1,SC5.C5_VEND2,SC5.C5_VEND3,SC5.C5_VEND4,SC5.C5_VEND5,
  560. SC6.C6_FILIAL,SC6.C6_NUM,SC6.C6_PRODUTO,SC6.C6_DESCRI,SC6.C6_OP,SC6.C6_TES,SC6.C6_QTDVEN,SC6.C6_PRUNIT,SC6.C6_VALDESC,
  561. SC6.C6_VALOR,SC6.C6_ITEM,SC6.C6_PRCVEN,SC6.C6_CLI,SC6.C6_LOJA,SC6.C6_ENTREG,SC6.C6_LOCAL,SC6.C6_QTDENT,SC6.C6_BLQ,
  562. SC9.C9_FILIAL,SC9.C9_PEDIDO,SC9.C9_ITEM,SC9.C9_NFISCAL,SC9.C9_BLEST,SC9.C9_BLCRED,SC9.C9_PRODUTO,
  563. SF4.F4_FILIAL,SF4.F4_DUPLIC,SF4.F4_CODIGO,SC5.C5_ACRSFIN
  564. ORDER BY %Exp:cOrder%
  565. EndSql
  566. oReport:Section(1):EndQuery()
  567.  
  568. EndIf
  569.  
  570. If MV_PAR06 == 1
  571. cTipo := STR0056 // " Aptos a Faturar "
  572. ELSEIf MV_PAR06 == 2
  573. cTipo := STR0057 // " nao Liberados "
  574. ELSE
  575. cTipo := ""
  576. EndIf
  577.  
  578. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  579. //³Metodo TrPosition() ³
  580. //³ ³
  581. //³Posiciona em um registro de uma outra tabela. O posicionamento será ³
  582. //³realizado antes da impressao de cada linha do relatório. ³
  583. //³ ³
  584. //³ ³
  585. //³ExpO1 : Objeto Report da Secao ³
  586. //³ExpC2 : Alias da Tabela ³
  587. //³ExpX3 : Ordem ou NickName de pesquisa ³
  588. //³ExpX4 : String ou Bloco de código para pesquisa. A string será macroexe-³
  589. //³ cutada. ³
  590. //³ ³
  591. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  592. TRPosition():New(oReport:Section(1),"SA1",1,{|| xFilial()+(cAliasSC6)->C6_CLI+(cAliasSC6)->C6_LOJA })
  593. TRPosition():New(oReport:Section(1),"SA2",1,{|| xFilial()+(cAliasSC6)->C6_CLI+(cAliasSC6)->C6_LOJA })
  594. TRPosition():New(oReport:Section(1),"SC5",1,{|| xFilial()+(cAliasSC6)->C6_NUM})
  595.  
  596. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  597. //³ Altera titulo do relatorio de acordo com parametros ³
  598. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  599. oReport:SetTitle(oReport:Title() + " " + cTipo + STR0046 + cDescOrdem + " - " + GetMv("MV_MOEDA"+STR(mv_par08,1))) // "Relacao de Pedidos de Vendas"###" - Ordem de "
  600.  
  601. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  602. //³ ³
  603. //³ I M P R E S S A O ³
  604. //³ ³
  605. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  606. dbselectArea(cAliasSC6)
  607. oReport:SetMeter(SC6->(RecCount()))
  608. oReport:Section(1):Init()
  609. oReport:Section(1):Section(1):Init()
  610. While !oReport:Cancel() .AND. !( cAliasSC6 )->( Eof() ) .AND. (cAliasSC6)->C6_FILIAL == xFilial("SC6")
  611.  
  612. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  613. //³ Executa a validacao dos filtros do usuario e Parametros ³
  614. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  615. dbSelectArea( cAliasSC6 )
  616. lFiltro := IIf(!(ValidMasc((cAliasSC6)->C6_PRODUTO,MV_PAR05)),.F.,.T.)
  617.  
  618. If lFiltro
  619.  
  620. dbSelectArea(cAliasSC6)
  621. cNumero := (cAliasSC6)->C6_NUM
  622. cItem := (cAliasSC6)->C6_ITEM
  623. cProduto := (cAliasSC6)->C6_PRODUTO
  624. cDescricao := (cAliasSC6)->C6_DESCRI
  625. If mv_par14 == 2
  626. SB1->(dbSetOrder(1))
  627. If SB1->(dbSeek(xFilial("SB1")+(cAliasSC6)->C6_PRODUTO))
  628. cDescricao := SB1->B1_DESC
  629. EndIf
  630. EndIf
  631. cLocal := (cAliasSC6)->C6_LOCAL
  632. cOp := (cAliasSC6)->C6_OP
  633. cTes := (cAliasSC6)->C6_TES
  634. nQtdven := (cAliasSC6)->C6_QTDVEN
  635. nQtdent := (cAliasSC6)->C6_QTDENT
  636. nPrunit := (cAliasSC6)->C6_PRUNIT
  637. nPrcven := (cAliasSC6)->C6_PRCVEN
  638. nVldesc := (cAliasSC6)->C6_VALDESC
  639. dEntreg := (cAliasSC6)->C6_ENTREG
  640.  
  641. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  642. //³ VerIfica se o pedido de venda esta apto a faturar(nQtLib!=0) ³
  643. //³ ou com bloqueio(nQtBloq!=0) , conforme o parametro mv_par06 ³
  644. //³ seleciona os reguistros a serem impressos. ³
  645. //³ Elementos do Array aQuant : ³
  646. //³ 1. Produto ³
  647. //³ 2. Quantidade Liberada ³
  648. //³ 3. Quantidade Bloqueada ³
  649. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  650. aQuant := {}
  651. nPos := Ascan(aQuant, {|x|x[1]== (cAliasSC9)->C9_PRODUTO})
  652. If (cAliasSC9)->C9_BLEST == space(TamSx3("C9_BLEST")[1]).AND.(cAliasSC9)->C9_BLCRED == space(TamSx3("C9_BLCRED")[1]).AND.(cAliasSC9)->C9_QTDLIB > 0
  653. If mv_par06 <> 2
  654. If nPos != 0
  655. aQuant[nPos,2]+= (cAliasSC9)->C9_QTDLIB
  656. Else
  657. Aadd(aQuant,{(cAliasSC9)->C9_PRODUTO,(cAliasSC9)->C9_QTDLIB,0})
  658. EndIf
  659. EndIf
  660. ElseIf (cAliasSC9)->C9_BLEST <> space(TamSx3("C9_BLEST")[1]).OR.(cAliasSC9)->C9_BLCRED <> space(TamSx3("C9_BLCRED")[1])
  661. If mv_par06 <> 1
  662. If nPos != 0
  663. aQuant[nPos,3]+= (cAliasSC9)->C9_QTDLIB
  664. Else
  665. Aadd(aQuant,{(cAliasSC9)->C9_PRODUTO,0,(cAliasSC9)->C9_QTDLIB})
  666. EndIf
  667. EndIf
  668. EndIf
  669.  
  670. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  671. //³ Varre o Array aQuant e alimenta as variaveis nQtLib e nQtBloq com o conteudo. ³
  672. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  673. For nX := 1 To Len(aQuant)
  674. If mv_par06 == 2 .AND. aQuant[1,2] > 0 .OR. mv_par06 == 1 .AND. aQuant[1,3] > 0
  675. lContInt := .F.
  676. Else
  677. nQtlib += aQuant[nX,2]
  678. nQtBloq+= aQuant[nX,3]
  679. EndIf
  680. Next nX
  681.  
  682. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  683. //³ Imprime o cabecalho do pedido no relatorio. ³
  684. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  685. If (lCabPed .AND. lContInt .AND. Len(aQuant)>0 .AND. mv_par06 <> 3) .OR. (lCabPed .AND. lContInt .AND. mv_par06 == 3)
  686.  
  687. dbSelectArea(cAliasSC5)
  688.  
  689. MaFisIni((cAliasSC5)->C5_CLIENTE,(cAliasSC5)->C5_LOJACLI,"C",(cAliasSC5)->C5_TIPO,(cAliasSC5)->C5_TIPOCLI,aImpostos,,,"SB1","MTR700")
  690.  
  691. //Na argentina o calculo de impostos depende da serie.
  692. If cPaisLoc == 'ARG'
  693. SA1->(DbSetOrder(1))
  694. SA1->(MsSeek(xFilial()+(cAliasSC5)->C5_CLIENTE+(cAliasSC5)->C5_LOJACLI))
  695. MaFisAlt('NF_SERIENF',LocXTipSer('SA1',MVNOTAFIS))
  696. Endif
  697.  
  698. For nX:= 1 TO 5
  699. cCampo := "C5_VEND"+STR(nX,1)
  700. cCampo := (cAliasSC5)->(FieldGet(FieldPos(cCampo)))
  701. If !Empty(cCampo)
  702. cVends += If(lBarra,"/","") + cCampo
  703. lBarra :=.T.
  704. EndIf
  705. Next nX
  706.  
  707. oReport:Section(1):PrintLine()
  708.  
  709. cPedido := (cAliasSC6)->C6_NUM
  710. nC5Moeda := (cAliasSC5)->C5_MOEDA
  711. dC5Emissao := (cAliasSC5)->C5_EMISSAO
  712. nPacresFin := (cAliasSC5)->C5_ACRSFIN
  713. lCabPed := .F.
  714.  
  715. EndIf
  716.  
  717. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  718. //³ o Skip dos dados Validos do C6 e dado antes da impressao dos itens do relatorio por ³
  719. //³ causa da compatibilizacao das logicas com Query e codbase onde a disposicao dos dados³
  720. //³ se deram de formas dIferentes. ³
  721. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  722. dbSelectArea(cAliasSC6)
  723. dbSkip()
  724. oReport:IncMeter()
  725.  
  726. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  727. //³ Imprime os itens do pedido no relatorio. ³
  728. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  729. If cNumero + cItem + cProduto <> (cAliasSC6)->C6_NUM + (cAliasSC6)->C6_ITEM + (cAliasSC6)->C6_PRODUTO
  730.  
  731. If ( lContInt .AND. Len(aQuant)>0 .AND. mv_par06 <> 3 ) .OR. ( lContInt .AND. mv_par06 == 3 )
  732.  
  733. If (nQtLib+nQtBloq)<> 0
  734. nQuant := (nQtLib+nQtBloq)
  735. nTFat := (nQtLib+nQtBloq) * nPrcven
  736. Else
  737. nQuant := (nQtdven - nQtdent)
  738. nTFat := (nQtdven - nQtdent) * nPrcVen
  739. Endif
  740.  
  741. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  742. //³Calcula o preco de lista ³
  743. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  744. If ( nPrUnit == 0 )
  745. nPrUnit := NoRound(nTFat/nQuant,TamSX3("C6_PRCVEN")[2])
  746. EndIf
  747. nAcresFin := A410Arred(nPrcVen*nPacresFin/100,"D2_PRCVEN")
  748. nTFat += A410Arred(nQuant*nAcresFin,"D2_TOTAL")
  749. nValDesc := a410Arred(nPrUnit*nQuant,"D2_DESCON")-nTFat
  750. nValDesc := IIf(nVlDesc==0,nVlDesc,nValDesc)
  751. nValDesc := Max(0,nValDesc)
  752. nPrUnit += nAcresFin
  753.  
  754. MaFisAdd(cProduto,cTes,(nQtLib+nQtBloq),nPrunit,nValdesc,,,,0,0,0,0,(nTFat+nValDesc),0,0,0)
  755.  
  756. nItem += 1
  757. lImp := .T.
  758. nTotLocal := 0
  759. nImpLinha := 0
  760.  
  761. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  762. //³ Atualizacao do saldo disponivel em estoque com base no SB2 atraves de arquivo de trab³
  763. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  764. dbSelectArea(cTmpTable)
  765. If msSeek(cLocal+cProduto)
  766. nTotLocal := (cTmpTable)->TB_SALDO
  767. RecLock(cTmpTable,.F.)
  768. ELSE
  769. SB2->(MsSeek(xFilial("SB2")+cProduto+cLocal))
  770. nTotLocal := SB2->(SaldoSB2())
  771. (cTmpTable)->(RecLock(cTmpTable,.T.))
  772. (cTmpTable)->TB_COD := cProduto
  773. (cTmpTable)->TB_LOCAL := cLocal
  774. (cTmpTable)->TB_SALDO := nTotLocal
  775. EndIf
  776.  
  777. If nQtLib <= 0
  778. (cTmpTable)->TB_SALDO := (cTmpTable)->TB_SALDO - (nQtdven - nQtdent)
  779. EndIf
  780.  
  781. (cTmpTable)->(MsUnLock())
  782.  
  783. cDescTab := ""
  784. If !Empty(cOp)
  785. SX5->(MsSeek(xFilial("SX5")+"E2"+cOp))
  786. cDescTab := SX5->(X5Descri())
  787. EndIf
  788.  
  789. If cPaisLoc == "BRA"
  790. nValIPI := MaFisRet(nItem,"IT_VALIPI")
  791. Else
  792. nValIPI := MaRetIncIV(nItem,"2")
  793. EndIf
  794. nImpLinha := nValIPI
  795.  
  796. If MV_PAR13 == 2 .AND. cPaisLoc == "BRA"
  797. nImpLinha += ( MaFisRet(nItem,"IT_VALICM") + MaFisRet(nItem,"IT_VALISS") )
  798. EndIf
  799.  
  800. If mv_par07 = 1
  801. nTFat += nValIPI
  802. EndIf
  803.  
  804. nValDesc := xMoeda(nValDesc,nC5Moeda,mv_par08,IIf(mv_par12 == 1,dC5Emissao,dDataBase))
  805. nPrcVen := xMoeda(nPrcVen ,nC5Moeda,mv_par08,IIf(mv_par12 == 1,dC5Emissao,dDataBase))
  806. nImpLinha := xMoeda(nImpLinha,nC5Moeda,mv_par08,IIf(MV_PAR12 == 1,dC5Emissao,dDataBase))
  807. nTFat := xMoeda(nTFat,nC5Moeda,mv_par08,IIf(MV_PAR12 == 1,dC5Emissao,dDataBase))
  808. oReport:Section(1):Section(1):PrintLine()
  809.  
  810. nQtlib := 0
  811. nQtBloq := 0
  812.  
  813. EndIf
  814. dbSelectArea(cAliasSC6)
  815.  
  816. EndIf
  817. Else
  818. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  819. //³ Skip somente dos registros invalidos do C6 recusados pelo filtro -> lFiltro = .F. ³
  820. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  821. dbSelectArea(cAliasSC6)
  822. dbSkip()
  823. EndIf
  824.  
  825. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  826. //³ Imprime o Rodape do pedido no relatorio. ³
  827. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  828. If (cAliasSC6)->C6_NUM <> cPedido .AND. lImp
  829.  
  830. If nOrdem == 1
  831. oReport:Section(1):Section(1):SetTotalText(STR0055) // "Total do Pedido-->"
  832. ElseIf nOrdem == 2
  833. oReport:Section(1):Section(1):SetTotalText(STR0062) // "Total do Produto-->"
  834. Else
  835. oReport:Section(1):Section(1):SetTotalText(STR0063) // "Total da Data-->"
  836. EndIf
  837. oReport:Section(1):Section(1):Finish()
  838. oReport:Section(1):Finish()
  839. oReport:Section(1):Init()
  840. oReport:Section(1):Section(1):Init()
  841.  
  842. nQtlib := 0
  843. nQtBloq := 0
  844. nItem := 0
  845. cVends := ""
  846. lCabPed := .T.
  847. lBarra := .F.
  848. lImp := .F.
  849.  
  850. MaFisEnd()
  851. EndIf
  852.  
  853. Enddo
  854.  
  855. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  856. //³ Finaliza Relatorio ³
  857. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  858. oReport:Section(1):SetPageBreak()
  859.  
  860. If( valtype(oTempTable) == "O")
  861. oTempTable:Delete()
  862. freeObj(oTempTable)
  863. oTempTable := nil
  864. EndIf
  865.  
  866. dbSelectArea(cAliasSC5)
  867. dbCloseArea()
  868. dbSelectArea("SC6")
  869. Return(.T.)
  870.  
  871.  
  872. /*/
  873. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  874. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  875. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄ¿±±
  876. ±±³Fun‡„o ³ MATR700 ³ Autor ³Alexandre Inacio Lemes ³ Data ³ 25/10/2002³±±
  877. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄ´±±
  878. ±±³Descri‡„o ³ Relacao de Pedidos aptos a faturar ³±±
  879. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  880. ±±³Observacao³ Baseado no original de Claudinei M. Benzi Data 05/09/1991 ³±±
  881. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  882. ±±³ Uso ³ Generico ³±±
  883. ±±ÃÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  884. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  885. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  886. /*/
  887. Function Matr700R3()
  888.  
  889. LOCAL titulo := OemToAnsi(STR0001) //"Relacao de Pedidos de Vendas"
  890. LOCAL cDesc1 := OemToAnsi(STR0002) //"Este programa ira emitir a relacao dos Pedidos de Vendas"
  891. LOCAL cDesc2 := OemToAnsi(STR0003) //"Sera feita a pesquisa no almoxarIfado e verIficado"
  892. LOCAL cDesc3 := OemToAnsi(STR0004) //"se a quantidade esta disponivel"
  893. LOCAL nomeprog := "MATR700"
  894. LOCAL wnrel := "MATR700"
  895. LOCAL cString := "SC6"
  896.  
  897. PRIVATE aOrdem := {OemToAnsi(STR0005),OemToAnsi(STR0006),OemToAnsi(STR0007)} //" Por n§ pedido "###" Por produto "###" Por data entrega "
  898. PRIVATE aReturn := {STR0008, 1,STR0009, 1, 2, 1, "",1} // " Zebrado"###"Administracao"
  899. PRIVATE cPerg := "MTR700"
  900. PRIVATE tamanho := "G"
  901. PRIVATE limite := 220
  902. PRIVATE li := 80
  903. PRIVATE m_pag := 1
  904. PRIVATE nLastKey := 0
  905. PRIVATE lEnd := .F.
  906.  
  907. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  908. //³ VerIfica as perguntas selecionadas ³
  909. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  910. pergunte("MTR700",.F.)
  911. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  912. //³ Variaveis utilizadas para parametros ³
  913. //³ mv_par01 // Do Pedido ³
  914. //³ mv_par02 // Ate o Pedido ³
  915. //³ mv_par03 // Do Produto ³
  916. //³ mv_par04 // Ate o Produto ³
  917. //³ mv_par05 // Mascara ³
  918. //³ mv_par06 // Aptos a Faturar Nao Aptos Todos ³
  919. //³ mv_par07 // Soma Ipi ao Tot Sim Nao ³
  920. //³ mv_par08 // Qual moeda ³
  921. //³ mv_par09 // Quanto ao Tes- Gera Dupl, Nao Gera, Todos ³
  922. //³ mv_par10 // Data de entrega de ³
  923. //³ mv_par11 // Data de entrega Ate ³
  924. //³ mv_par12 // Converter valores 1-emissao 2-Data Base ³
  925. //³ mv_par13 // Coluna impostos 1-IPI/2-IPI/ICMS/ISS ³
  926. //³ mv_par14 // Pedidos c/ grade imprime 1 Desc SC6 2 Desc SB1 ³
  927. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  928.  
  929. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  930. //³ Envia controle para a funcao SETPRINT ³
  931. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  932. wnrel:=SetPrint(cString,wnrel,cPerg,@titulo,cDesc1,cDesc2,cDesc3,.F.,aOrdem,,Tamanho)
  933.  
  934. If ( nLastKey == 27 )
  935. dbSelectArea(cString)
  936. dbSetOrder(1)
  937. dbClearFilter()
  938. Return
  939. EndIf
  940.  
  941. SetDefault(aReturn,cString)
  942.  
  943. If ( nLastKey == 27 )
  944. dbSelectArea(cString)
  945. dbSetOrder(1)
  946. dbClearFilter()
  947. Return
  948. EndIf
  949.  
  950. RptStatus({|lEnd| C700Imp(@lEnd,wnRel,cString,aReturn,aOrdem,tamanho,limite,titulo,cDesc1,cDesc2,cDesc3)},Titulo)
  951.  
  952. Return(.T.)
  953.  
  954. /*/
  955. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  956. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  957. ±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
  958. ±±³Fun‡…o ³ C700IMP ³ Autor ³ Alexandre Inacio Lemes³ Data ³25/10/2002³±±
  959. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
  960. ±±³Descri‡…o ³ Chamada do Relatorio ³±±
  961. ±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
  962. ±±³ Uso ³ MATR700 ³±±
  963. ±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
  964. ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  965. ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  966. /*/
  967. Static Function C700Imp(lEnd,WnRel,cString,aReturn,aOrdem,tamanho,limite,titulo,cDesc1,cDesc2,cDesc3)
  968.  
  969. LOCAL nomeprog := "MATR700"
  970. LOCAL cabec1 := STR0010 //"IT CODIGO PRODUTO DESCRICAO DO PRODUTO ESTOQUE ----------- PEDIDO -------------- QUANTIDADE QUANTIDADE VALOR DO PRECO UNITARIO VALOR A"
  971. LOCAL cabec2 := STR0011 //" DISPONIVEL VENDIDO ATENDIDO SALDO LIBERADA BLOQUEADA DESCONTO LIQUIDO ORDEM DE PRODUCAO VALOR DO IPI FATURAR ENTREGA"
  972. LOCAL cbtxt := SPACE(10)
  973. LOCAL cAliasSC5 := "SC5"
  974. LOCAL cAliasSC6 := "SC6"
  975. LOCAL cAliasSC9 := "SC9"
  976. LOCAL cAliasSF4 := "SF4"
  977. LOCAL cDescOrdem := ""
  978. LOCAL cTipo := ""
  979. LOCAL cQuery := ""
  980. LOCAL cQryAd := ""
  981. LOCAL cName := ""
  982. LOCAL cPedido := ""
  983. LOCAL cFilter := ""
  984. LOCAL cIndexSC5 := ""
  985. LOCAL cIndexSC6 := ""
  986. LOCAL cIndexSC9 := ""
  987. LOCAL cKey := ""
  988. LOCAL cCampo := ""
  989. LOCAL cVends := ""
  990. LOCAL cDescTab := ""
  991. LOCAL cNumero := ""
  992. LOCAL cItem := ""
  993. LOCAL cProduto := ""
  994. LOCAL cDescricao := ""
  995. LOCAL cLocal := ""
  996. LOCAL cOp := ""
  997. LOCAL cTes := ""
  998. LOCAL cTmpTable := GetNextAlias()
  999. LOCAL dEntreg := dDataBase
  1000. LOCAL dC5Emissao := dDataBase
  1001. LOCAL nTipo := GetMv("MV_COMP")
  1002. LOCAL nOrdem := aReturn[8]
  1003. LOCAL nX := 1
  1004. LOCAL CbCont := 0
  1005. LOCAL nAcTotFat := 0
  1006. LOCAL nTotFat := 0
  1007. LOCAL nAcdescont := 0
  1008. LOCAL nTotDesc := 0
  1009. LOCAL nTotImp := 0
  1010. LOCAL nTotImpPar := 0
  1011. LOCAL nQtLib := 0
  1012. LOCAL nQtBloq := 0
  1013. LOCAL nTQtde := 0
  1014. LOCAL nTPed := 0
  1015. LOCAL nTQLib := 0
  1016. LOCAL nTQBLoq := 0
  1017. LOCAL nTQEnt := 0
  1018. LOCAL nSC5 := 0
  1019. LOCAL nSC6 := 0
  1020. LOCAL nSC9 := 0
  1021. LOCAL nTotLocal := 0
  1022. LOCAL nValdesc := 0
  1023. LOCAL nTFat := 0
  1024. LOCAL nImpLinha := 0
  1025. LOCAL nItem := 0
  1026. LOCAL nC5Moeda := 0
  1027. LOCAL nPos := 0
  1028. LOCAL nQtdven := 0
  1029. LOCAL nQtdent := 0
  1030. LOCAL nPrunit := 0
  1031. LOCAL nValor := 0
  1032. LOCAL nValEnt := 0
  1033. LOCAL nPrcven := 0
  1034. LOCAL nVldesc := 0
  1035. LOCAL nValIPI := 0
  1036. LOCAL aQuant := {}
  1037. LOCAL aCampos := {}
  1038. LOCAL aTam := {}
  1039. LOCAL aStruSC5 := {}
  1040. LOCAL aStruSC6 := {}
  1041. LOCAL aStruSC9 := {}
  1042. LOCAL aStruSF4 := {}
  1043. LOCAL aImpostos := MaFisRelImp("MTR700",{"SC5","SC6"})
  1044. LOCAL lContInt := .T.
  1045. LOCAL lFiltro := .T.
  1046. LOCAL lCabPed := .T.
  1047. LOCAL lBarra := .F.
  1048. LOCAL lImp := .F.
  1049. LOCAL cQueryAdd := ""
  1050. Local nAcresFin := 0
  1051. Local nQuant := 0
  1052. Local nPacresFin := 0
  1053.  
  1054. Private oTempTable := Nil
  1055.  
  1056. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1057. //³ Define array com base no SB2 e Monta arquivo de trabalho ³
  1058. //³ para baixar estoque na listagem. ³
  1059. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1060. aTam := TamSX3("B2_LOCAL")
  1061. AADD(aCampos, {"TB_LOCAL", "C", aTam[1], aTam[2]})
  1062. aTam := TamSX3("B2_COD")
  1063. AADD(aCampos, {"TB_COD", "C", aTam[1], aTam[2]})
  1064. aTam := TamSX3("B2_QATU")
  1065. AADD(aCampos, {"TB_SALDO", "N", aTam[1], aTam[2]})
  1066. aTam := {}
  1067.  
  1068. //-------------------------------------------------------------------
  1069. // Instancia tabela temporária.
  1070. //-------------------------------------------------------------------
  1071. oTempTable := FWTemporaryTable():New(cTmpTable)
  1072.  
  1073. //-------------------------------------------------------------------
  1074. // Atribui o os índices.
  1075. //-------------------------------------------------------------------
  1076. oTempTable:SetFields( aCampos )
  1077.  
  1078. oTempTable:AddIndex("1",{"TB_LOCAL","TB_COD"})
  1079.  
  1080. //------------------
  1081. //Criação da tabela
  1082. //------------------
  1083. oTempTable:Create()
  1084.  
  1085. dbSelectArea("SC6")
  1086. dbSetOrder(nOrdem)
  1087.  
  1088. cQueryAdd := ""
  1089. cAliasSC5 := "QRYSC6"
  1090. cAliasSC6 := "QRYSC6"
  1091. cAliasSC9 := "QRYSC6"
  1092. cAliasSF4 := "QRYSC6"
  1093.  
  1094. aStruSC5 := SC5->(dbStruct())
  1095. aStruSC6 := SC6->(dbStruct())
  1096. aStruSC9 := SC9->(dbStruct())
  1097. aStruSF4 := SF4->(dbStruct())
  1098.  
  1099. cQuery := "SELECT "
  1100. cQuery += "SC5.C5_FILIAL,SC5.C5_NUM,SC5.C5_CLIENTE,SC5.C5_LOJACLI,SC5.C5_TIPO,SC5.C5_TIPOCLI,SC5.C5_TRANSP,SC5.C5_EMISSAO,
  1101. cQuery += "SC5.C5_CONDPAG,SC5.C5_MOEDA,SC5.C5_VEND1,SC5.C5_VEND2,SC5.C5_VEND3,SC5.C5_VEND4,SC5.C5_VEND5,"
  1102. cQuery += "SC6.C6_FILIAL,SC6.C6_NUM,SC6.C6_PRODUTO,SC6.C6_DESCRI,SC6.C6_OP,SC6.C6_TES,SC6.C6_QTDVEN,SC6.C6_PRUNIT,SC6.C6_VALDESC,"
  1103. cQuery += "SC6.C6_VALOR,SC6.C6_ITEM,SC6.C6_PRCVEN,SC6.C6_CLI,SC6.C6_LOJA,SC6.C6_ENTREG,SC6.C6_LOCAL,SC6.C6_QTDENT,SC6.C6_BLQ,"
  1104.  
  1105. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1106. //³Esta rotina foi escrita para adicionar no select os campos do SC6 ³
  1107. //³usados no filtro do usuario quando houver, a rotina acrecenta ³
  1108. //³somente os campos que forem adicionados ao filtro testando ³
  1109. //³se os mesmo já existem no select ou se forem definidos novamente ³
  1110. //³pelo o usuario no filtro. ³
  1111. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1112. If !Empty(aReturn[7])
  1113. For nX := 1 To SC6->(FCount())
  1114. cName := SC6->(FieldName(nX))
  1115. If AllTrim(cName) $ aReturn[7]
  1116. If aStruSC6[nX,2] <> "M"
  1117. If !cName $ cQuery .AND. !cName $ cQryAd
  1118. cQryAd += cName +","
  1119. EndIf
  1120. EndIf
  1121. EndIf
  1122. Next nX
  1123. EndIf
  1124.  
  1125. cQuery += cQryAd
  1126.  
  1127. cQuery += "SC9.C9_FILIAL,SC9.C9_PEDIDO,SC9.C9_ITEM,SC9.C9_NFISCAL,SC9.C9_BLEST,SC9.C9_BLCRED,SC9.C9_PRODUTO,"
  1128. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1129. //³o Campo C9_QTDLIB e somado por haver varios C9 para cada C6. ³
  1130. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1131. cQuery += "SUM(SC9.C9_QTDLIB) C9_QTDLIB,"
  1132. cQuery += "SF4.F4_FILIAL,SF4.F4_DUPLIC,SF4.F4_CODIGO,SC5.C5_ACRSFIN "
  1133. cQuery += "FROM "
  1134. cQuery += RetSqlName("SC5")+" SC5 ,"+RetSqlName("SC6")+" SC6 ,"+RetSqlName("SC9")+" SC9 ,"+RetSqlName("SF4")+" SF4 "
  1135. cQuery += "WHERE "
  1136. cQuery += "SC5.C5_FILIAL = '"+xFilial("SC5")+"' AND SC5.C5_NUM >= '"+mv_par01+"' AND SC5.C5_NUM <= '"+mv_par02+"' AND "
  1137. cQuery += "SC5.D_E_L_E_T_ = ' ' AND SC6.C6_FILIAL = '"+xFilial("SC6")+"' AND SC6.C6_NUM = SC5.C5_NUM AND "
  1138. cQuery += "SC6.C6_PRODUTO >= '" + mv_par03 + "' AND "
  1139. cQuery += "SC6.C6_PRODUTO <= '" + mv_par04 + "' AND "
  1140. cQuery += "SC6.C6_ENTREG >= '" + dtos(mv_par10) + "' AND "
  1141. cQuery += "SC6.C6_ENTREG <= '" + dtos(mv_par11) + "' AND "
  1142. cQuery += "SC6.C6_QTDVEN-SC6.C6_QTDENT > 0 AND SC6.C6_BLQ<>'R ' AND SC6.D_E_L_E_T_ = ' ' AND "
  1143. cQuery += "SC9.C9_FILIAL = '"+xFilial("SC9")+"' AND SC9.C9_PEDIDO = SC6.C6_NUM AND SC6.C6_ITEM = SC9.C9_ITEM AND "
  1144. cQuery += "SC6.C6_PRODUTO = SC9.C9_PRODUTO AND SC9.C9_NFISCAL = '" + space(TamSx3("C9_NFISCAL")[1]) + "' AND "
  1145. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1146. //³ Trata o Relacionamento com C9 conforme a opcao do MV_PAR06 -> "IMPRIMIR PEDIDOS ?" ³
  1147. //³ "IMPRIMIR PEDIDOS ?" ³
  1148. //³ MV_PAR06 == 1 -> Pedidos Aptos a Faturar com C9 liberado. ³
  1149. //³ MV_PAR06 == 2 -> Pedidos Nao Aptos a Faturar com C9 bloqueado no Credito ou Estoque³
  1150. //³ MV_PAR06 == 3 -> Todos - pedidos liberados e bloqueados do C9 + os C6 sem os C9 ³
  1151. //³ para MV_PAR06 == 3 o relacionamento com C9 na Query e feito atraves de UNION. ³
  1152. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1153. If mv_par06 == 1
  1154. cQuery += "SC9.C9_BLEST = '" + space(TamSx3("C9_BLEST")[1]) + "' AND "
  1155. cQuery += "SC9.C9_BLCRED = '" + space(TamSx3("C9_BLCRED")[1]) + "' AND "
  1156. cQuery += "SC9.C9_QTDLIB > 0 AND "
  1157. ElseIf mv_par06 == 2
  1158. cQuery += "(SC9.C9_BLEST <> '" + space(TamSx3("C9_BLEST")[1]) + "' OR "
  1159. cQuery += "SC9.C9_BLCRED <> '" + space(TamSx3("C9_BLCRED")[1]) + "') AND "
  1160. EndIf
  1161. cQuery += "SC9.D_E_L_E_T_ = ' ' "
  1162.  
  1163. cQuery += " AND SF4.F4_FILIAL = '"+xFilial("SF4")+"'"
  1164. cQuery += " AND SC6.C6_TES = SF4.F4_CODIGO AND "
  1165. If mv_par09 == 1
  1166. cQuery += "SF4.F4_DUPLIC = 'S' AND "
  1167. ElseIf mv_par09 == 2
  1168. cQuery += "SF4.F4_DUPLIC <> 'S' AND "
  1169. EndIf
  1170. cQuery += "SF4.D_E_L_E_T_ = ' ' "
  1171.  
  1172. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1173. //³Ponto de entrada para tratamento do filtro do usuario.³
  1174. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1175. If ExistBlock("F700QRY")
  1176. cQueryAdd := ExecBlock("F700QRY", .F., .F., {aReturn[7]})
  1177. If ValType(cQueryAdd) == "C"
  1178. cQuery += " AND ( " + cQueryAdd + ")"
  1179. EndIf
  1180. EndIf
  1181.  
  1182. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1183. //³ Agrupamento de todos os campos comuns do SELECT para que nos relacionamentos com ³
  1184. //³ C5,C6 e C9 com varios C9 para cada C6 gerem apenas um registro com o campo C9_QTDLIB ³
  1185. //³ somado. ³
  1186. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1187. cQuery += "GROUP BY "
  1188. cQuery += "SC5.C5_FILIAL,SC5.C5_NUM,SC5.C5_CLIENTE,SC5.C5_LOJACLI,SC5.C5_TIPO,SC5.C5_TIPOCLI,SC5.C5_TRANSP,SC5.C5_EMISSAO,
  1189. cQuery += "SC5.C5_CONDPAG,SC5.C5_MOEDA,SC5.C5_VEND1,SC5.C5_VEND2,SC5.C5_VEND3,SC5.C5_VEND4,SC5.C5_VEND5,"
  1190. cQuery += "SC6.C6_FILIAL,SC6.C6_NUM,SC6.C6_PRODUTO,SC6.C6_DESCRI,SC6.C6_OP,SC6.C6_TES,SC6.C6_QTDVEN,SC6.C6_PRUNIT,SC6.C6_VALDESC,"
  1191. cQuery += "SC6.C6_VALOR,SC6.C6_ITEM,SC6.C6_PRCVEN,SC6.C6_CLI,SC6.C6_LOJA,SC6.C6_ENTREG,SC6.C6_LOCAL,SC6.C6_QTDENT,SC6.C6_BLQ,"
  1192. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1193. //³ Adiciona os campos fornecidos pelo filtro do usuario. ³
  1194. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1195. cQuery += cQryAd
  1196. cQuery += "SC9.C9_FILIAL,SC9.C9_PEDIDO,SC9.C9_ITEM,SC9.C9_NFISCAL,SC9.C9_BLEST,SC9.C9_BLCRED,SC9.C9_PRODUTO,"
  1197. cQuery += "SF4.F4_FILIAL,SF4.F4_DUPLIC,SF4.F4_CODIGO,SC5.C5_ACRSFIN "
  1198.  
  1199. If mv_par06 == 3
  1200. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1201. //³ Quando o MV_PAR06 ==3 ->"TODOS OS PEDIDOS" esse UNION acrescenta a Query os registros³
  1202. //³ do C6 que nao possuem C9. ³
  1203. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1204.  
  1205. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1206. //³ ATENCAO !!!! ao manipular os campos do SELECT ou a ordem da Clausula ORDER BY verificar ³
  1207. //³ a concordancia entre os mesmos !!!!!!!!! ³
  1208. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1209. cQuery += "UNION "
  1210. cQuery += "SELECT "
  1211. cQuery += "SC5.C5_FILIAL,SC5.C5_NUM,SC5.C5_CLIENTE,SC5.C5_LOJACLI,SC5.C5_TIPO,SC5.C5_TIPOCLI,SC5.C5_TRANSP,SC5.C5_EMISSAO,
  1212. cQuery += "SC5.C5_CONDPAG,SC5.C5_MOEDA,SC5.C5_VEND1,SC5.C5_VEND2,SC5.C5_VEND3,SC5.C5_VEND4,SC5.C5_VEND5,"
  1213. cQuery += "SC6.C6_FILIAL,SC6.C6_NUM,SC6.C6_PRODUTO,SC6.C6_DESCRI,SC6.C6_OP,SC6.C6_TES,SC6.C6_QTDVEN,SC6.C6_PRUNIT,SC6.C6_VALDESC,"
  1214. cQuery += "SC6.C6_VALOR,SC6.C6_ITEM,SC6.C6_PRCVEN,SC6.C6_CLI,SC6.C6_LOJA,SC6.C6_ENTREG,SC6.C6_LOCAL,SC6.C6_QTDENT,SC6.C6_BLQ,"
  1215. cQuery += cQryAd
  1216. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1217. //³ Para o uso de UNION a estrutura deste SELECT deve ser igual a do SELECT anterior ³
  1218. //³ note que a nomeclatura do C9 usa os mesmos nomes dos campos da TABELA, porem com o ³
  1219. //³ uso de ' ' para nao fazer referencia a ela. ³
  1220. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1221. cQuery += "' ' C9_FILIAL,' ' C9_PEDIDO,' ' C9_ITEM,' ' C9_NFISCAL,' ' C9_BLEST,' ' C9_BLCRED,' ' C9_PRODUTO, 0 C9_QTDLIB,"
  1222. cQuery += "SF4.F4_FILIAL,SF4.F4_DUPLIC,SF4.F4_CODIGO,SC5.C5_ACRSFIN "
  1223. cQuery += "FROM "
  1224. cQuery += RetSqlName("SC5")+" SC5 ,"+RetSqlName("SC6")+" SC6 ,"+RetSqlName("SF4")+" SF4 "
  1225. cQuery += "WHERE "
  1226. cQuery += "SC5.C5_FILIAL = '"+xFilial("SC5")+"' AND SC5.C5_NUM >= '"+mv_par01+"' AND SC5.C5_NUM <= '"+mv_par02+"' AND "
  1227. cQuery += "SC5.D_E_L_E_T_ = ' ' AND SC6.C6_FILIAL = '"+xFilial("SC6")+"' AND SC6.C6_NUM = SC5.C5_NUM AND "
  1228. cQuery += "SC6.C6_PRODUTO >= '" + mv_par03 + "' AND "
  1229. cQuery += "SC6.C6_PRODUTO <= '" + mv_par04 + "' AND "
  1230. cQuery += "SC6.C6_ENTREG >= '" + dtos(mv_par10) + "' AND "
  1231. cQuery += "SC6.C6_ENTREG <= '" + dtos(mv_par11) + "' AND "
  1232. cQuery += "SC6.C6_QTDVEN-SC6.C6_QTDENT > 0 AND SC6.C6_BLQ<>'R ' AND SC6.D_E_L_E_T_ = ' ' AND "
  1233. cQuery += "SF4.F4_FILIAL = '"+xFilial("SF4")+"' AND SC6.C6_TES = SF4.F4_CODIGO AND "
  1234. cQuery += "NOT EXISTS (SELECT SC9.C9_PEDIDO FROM "+RetSqlName("SC9")+" SC9 "
  1235. cQuery += "WHERE "
  1236. cQuery += "SC9.C9_FILIAL = '"+xFilial("SC9")+"' AND SC9.C9_PEDIDO = SC6.C6_NUM AND SC6.C6_ITEM = SC9.C9_ITEM AND "
  1237. cQuery += "SC9.C9_NFISCAL = '"+Space(Len(SC9->C9_NFISCAL))+"' AND "
  1238. cQuery += "SC6.C6_PRODUTO = SC9.C9_PRODUTO AND SC9.D_E_L_E_T_ = ' ') AND "
  1239. If mv_par09 == 1
  1240. cQuery += "SF4.F4_DUPLIC = 'S' AND "
  1241. ElseIf mv_par09 == 2
  1242. cQuery += "SF4.F4_DUPLIC <> 'S' AND "
  1243. EndIf
  1244. cQuery += "SF4.D_E_L_E_T_ = ' ' "
  1245.  
  1246. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1247. //³Tratamento do filtro do usuario. ³
  1248. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1249. If ValType(cQueryAdd) == "C" .AND. !Empty(cQueryAdd)
  1250. cQuery += " AND ( " + cQueryAdd + ")"
  1251. EndIf
  1252.  
  1253. EndIf
  1254.  
  1255. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1256. //³ ATENCAO !!!! ao manipular os campos do SELECT ou a ordem da Clausula ORDER BY verificar ³
  1257. //³ a concordancia entre os mesmos !!!!!!!!! ³
  1258. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1259. If nOrdem = 1
  1260. cDescOrdem:= STR0013 //"PEDIDO"
  1261. cQuery += "ORDER BY 2,26"
  1262. ElseIf nOrdem = 2
  1263. cDescOrdem:= STR0014 //"PRODUTO"
  1264. cQuery += "ORDER BY 18"
  1265. ELSE
  1266. cDescOrdem:= STR0015 //"DATA DE ENTREGA"+"PEDIDO"
  1267. cQuery += "ORDER BY 30,2,26"
  1268. EndIf
  1269.  
  1270. cQuery := ChangeQuery(cQuery)
  1271.  
  1272. dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasSC5,.T.,.T.)
  1273.  
  1274. For nSC5 := 1 To Len(aStruSC5)
  1275. If aStruSC5[nSC5][2] <> "C" .AND. FieldPos(aStruSC5[nSC5][1]) > 0
  1276. TcSetField(cAliasSC5,aStruSC5[nSC5][1],aStruSC5[nSC5][2],aStruSC5[nSC5][3],aStruSC5[nSC5][4])
  1277. EndIf
  1278. Next nSC5
  1279.  
  1280. For nSC6 := 1 To Len(aStruSC6)
  1281. If aStruSC6[nSC6][2] <> "C" .AND. FieldPos(aStruSC6[nSC6][1]) > 0
  1282. TcSetField(cAliasSC6,aStruSC6[nSC6][1],aStruSC6[nSC6][2],aStruSC6[nSC6][3],aStruSC6[nSC6][4])
  1283. EndIf
  1284. Next nSC6
  1285.  
  1286. For nSC9 := 1 To Len(aStruSC9)
  1287. If aStruSC9[nSC9][2] <> "C" .AND. FieldPos(aStruSC9[nSC9][1]) > 0
  1288. TcSetField(cAliasSC9,aStruSC9[nSC9][1],aStruSC9[nSC9][2],aStruSC9[nSC9][3],aStruSC9[nSC9][4])
  1289. EndIf
  1290. Next nSC9
  1291.  
  1292. If MV_PAR06 == 1
  1293. cTipo := STR0016 //" APTOS A FATURAR "
  1294. ELSEIf MV_PAR06 == 2
  1295. cTipo := STR0017 //" NAO LIBERADOS "
  1296. ELSE
  1297. cTipo := ""
  1298. EndIf
  1299. titulo += cTipo + STR0018 + cDescOrdem + " - " + GetMv("MV_MOEDA"+STR(mv_par08,1)) //" - ORDEM DE "
  1300.  
  1301. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1302. //³ Seleciona Area do While e retorna o total Elementos da regua ³
  1303. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1304. dbselectArea(cAliasSC6)
  1305. SetRegua(SC6->(RecCount()))
  1306.  
  1307. While !( cAliasSC6 )->( Eof() ) .AND. (cAliasSC6)->C6_FILIAL == xFilial("SC6")
  1308.  
  1309. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1310. //³ Se cancelado pelo usuario ³
  1311. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1312. If lEnd
  1313. @ PROW()+1,001 Psay STR0019 // "CANCELADO PELO OPERADOR"
  1314. Exit
  1315. EndIf
  1316.  
  1317. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1318. //³ Executa a validacao dos filtros do usuario e Parametros ³
  1319. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1320. dbSelectArea( cAliasSC6 )
  1321. lFiltro := IIf((!Empty(aReturn[7]).AND.!&(aReturn[7])) .OR. !(ValidMasc((cAliasSC6)->C6_PRODUTO,MV_PAR05)),.F.,.T.)
  1322.  
  1323. If lFiltro
  1324.  
  1325. dbSelectArea(cAliasSC6)
  1326.  
  1327. cNumero := (cAliasSC6)->C6_NUM
  1328. cItem := (cAliasSC6)->C6_ITEM
  1329. cProduto := (cAliasSC6)->C6_PRODUTO
  1330. cDescricao := (cAliasSC6)->C6_DESCRI
  1331. If mv_par14 == 2
  1332. SB1->(dbSetOrder(1))
  1333. If SB1->(dbSeek(xFilial("SB1")+(cAliasSC6)->C6_PRODUTO))
  1334. cDescricao := SB1->B1_DESC
  1335. EndIf
  1336. EndIf
  1337. cLocal := (cAliasSC6)->C6_LOCAL
  1338. cOp := (cAliasSC6)->C6_OP
  1339. cTes := (cAliasSC6)->C6_TES
  1340. nQtdven := (cAliasSC6)->C6_QTDVEN
  1341. nQtdent := (cAliasSC6)->C6_QTDENT
  1342. nPrunit := (cAliasSC6)->C6_PRUNIT
  1343. nValor := (cAliasSC6)->C6_VALOR
  1344. nPrcven := (cAliasSC6)->C6_PRCVEN
  1345. nVldesc := (cAliasSC6)->C6_VALDESC
  1346. dEntreg := (cAliasSC6)->C6_ENTREG
  1347.  
  1348. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1349. //³ VerIfica se o pedido de venda esta apto a faturar(nQtLib!=0) ³
  1350. //³ ou com bloqueio(nQtBloq!=0) , conforme o parametro mv_par06 ³
  1351. //³ seleciona os reguistros a serem impressos. ³
  1352. //³ Elementos do Array aQuant : ³
  1353. //³ 1. Produto ³
  1354. //³ 2. Quantidade Liberada ³
  1355. //³ 3. Quantidade Bloqueada ³
  1356. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1357. aQuant := {}
  1358.  
  1359. nPos := Ascan(aQuant, {|x|x[1]== (cAliasSC9)->C9_PRODUTO})
  1360. If (cAliasSC9)->C9_BLEST == space(TamSx3("C9_BLEST")[1]).AND.(cAliasSC9)->C9_BLCRED == space(TamSx3("C9_BLCRED")[1]).AND.(cAliasSC9)->C9_QTDLIB > 0
  1361. If mv_par06 <> 2
  1362. If nPos != 0
  1363. aQuant[nPos,2]+= (cAliasSC9)->C9_QTDLIB
  1364. Else
  1365. Aadd(aQuant,{(cAliasSC9)->C9_PRODUTO,(cAliasSC9)->C9_QTDLIB,0})
  1366. EndIf
  1367. EndIf
  1368. ElseIf (cAliasSC9)->C9_BLEST <> space(TamSx3("C9_BLEST")[1]).OR.(cAliasSC9)->C9_BLCRED <> space(TamSx3("C9_BLCRED")[1])
  1369. If mv_par06 <> 1
  1370. If nPos != 0
  1371. aQuant[nPos,3]+= (cAliasSC9)->C9_QTDLIB
  1372. Else
  1373. Aadd(aQuant,{(cAliasSC9)->C9_PRODUTO,0,(cAliasSC9)->C9_QTDLIB})
  1374. EndIf
  1375. EndIf
  1376. EndIf
  1377.  
  1378.  
  1379. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1380. //³ Varre o Array aQuant e alimenta as variaveis nQtLib e nQtBloq com o conteudo. ³
  1381. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1382. For nX := 1 To Len(aQuant)
  1383. If mv_par06 == 2 .AND. aQuant[1,2] > 0 .OR. mv_par06 == 1 .AND. aQuant[1,3] > 0
  1384. lContInt := .F.
  1385. Else
  1386. nQtlib += aQuant[nX,2]
  1387. nQtBloq+= aQuant[nX,3]
  1388. EndIf
  1389. Next nX
  1390.  
  1391. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1392. //³ Imprime o cabecalho do pedido no relatorio. ³
  1393. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1394. If (lCabPed .AND. lContInt .AND. Len(aQuant)>0 .AND. mv_par06 <> 3) .OR. (lCabPed .AND. lContInt .AND. mv_par06 == 3)
  1395.  
  1396. If li > 58
  1397. cabec(titulo,cabec1,cabec2,nomeprog,tamanho,nTipo)
  1398. EndIf
  1399.  
  1400. dbSelectArea(cAliasSC5)
  1401.  
  1402. MaFisIni((cAliasSC5)->C5_CLIENTE,(cAliasSC5)->C5_LOJACLI,"C",(cAliasSC5)->C5_TIPO,(cAliasSC5)->C5_TIPOCLI,aImpostos,,,"SB1","MTR700")
  1403.  
  1404. //Na argentina o calculo de impostos depende da serie.
  1405. If cPaisLoc == 'ARG'
  1406. SA1->(DbSetOrder(1))
  1407. SA1->(MsSeek(xFilial()+(cAliasSC5)->C5_CLIENTE+(cAliasSC5)->C5_LOJACLI))
  1408. MaFisAlt('NF_SERIENF',LocXTipSer('SA1',MVNOTAFIS))
  1409. Endif
  1410.  
  1411. For nX:= 1 TO 5
  1412. cCampo := "C5_VEND"+STR(nX,1)
  1413. cCampo := (cAliasSC5)->(FieldGet(FieldPos(cCampo)))
  1414. If !Empty(cCampo)
  1415. cVends += If(lBarra,"/","") + cCampo
  1416. lBarra :=.T.
  1417. EndIf
  1418. Next nX
  1419.  
  1420. @li, 0 Psay STR0023 + (cAliasSC5)->C5_NUM //"PEDIDO : "
  1421.  
  1422. If (cAliasSC5)->C5_TIPO $ "BD"
  1423. dbSelectArea("SA2")
  1424. dbSetOrder(1)
  1425. If msSeek( xFilial()+(cAliasSC6)->C6_CLI+(cAliasSC6)->C6_LOJA )
  1426. @li, PCol()+2 Psay STR0024 + SA2->A2_COD+' - '+ Subs(SA2->A2_NOME,1,40) //"FORNECEDOR : "
  1427. EndIf
  1428. Else
  1429. dbSelectArea("SA1")
  1430. dbSetOrder(1)
  1431. If msSeek( xFilial()+(cAliasSC6)->C6_CLI+(cAliasSC6)->C6_LOJA )
  1432. @li, PCol()+2 Psay STR0029 + SA1->A1_COD+' - '+ Subs(SA1->A1_NOME,1,40) //"CLIENTE : "
  1433. EndIf
  1434. EndIf
  1435.  
  1436. @li, PCol()+2 Psay STR0025 + (cAliasSC5)->C5_LOJACLI //"LOJA : "
  1437. @li, PCol()+2 Psay STR0026 + DTOC((cAliasSC5)->C5_EMISSAO) //"EMISSAO : "
  1438. @li, PCol()+2 Psay STR0027 + (cAliasSC5)->C5_TRANSP //"TRANSPORTADORA: "
  1439. @li, PCol()+2 Psay STR0028 + cVends //"VENDEDOR(ES): "
  1440. @li, PCol()+2 Psay STR0030 + (cAliasSC5)->C5_CONDPAG //"COND.PGTO: "
  1441. li+=2
  1442.  
  1443. cPedido := (cAliasSC6)->C6_NUM
  1444. nC5Moeda := (cAliasSC5)->C5_MOEDA
  1445. dC5Emissao := (cAliasSC5)->C5_EMISSAO
  1446. nPacresFin := (cAliasSC5)->C5_ACRSFIN
  1447. lCabPed := .F.
  1448.  
  1449. EndIf
  1450.  
  1451. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1452. //³ o Skip dos dados Validos do C6 e dado antes da impressao dos itens do relatorio por ³
  1453. //³ causa da compatibilizacao das logicas com Query e codbase onde a disposicao dos dados³
  1454. //³ se deram de formas dIferentes. ³
  1455. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1456. dbSelectArea(cAliasSC6)
  1457. dbSkip()
  1458. IncRegua()
  1459.  
  1460. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1461. //³ Imprime os itens do pedido no relatorio. ³
  1462. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1463. If cNumero + cItem + cProduto <> (cAliasSC6)->C6_NUM + (cAliasSC6)->C6_ITEM + (cAliasSC6)->C6_PRODUTO
  1464.  
  1465. If ( lContInt .AND. Len(aQuant)>0 .AND. mv_par06 <> 3 ) .OR. ( lContInt .AND. mv_par06 == 3 )
  1466.  
  1467. If li > 58
  1468. cabec(titulo,cabec1,cabec2,nomeprog,tamanho,nTipo)
  1469. EndIf
  1470.  
  1471. If (nQtLib+nQtBloq)<> 0
  1472. nQuant := (nQtLib+nQtBloq)
  1473. nTFat := (nQtLib+nQtBloq) * nPrcven
  1474. Else
  1475. nQuant := (nQtdven - nQtdent)
  1476. nTFat := (nQtdven - nQtdent) * nPrcVen
  1477. Endif
  1478.  
  1479. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1480. //³Calcula o preco de lista ³
  1481. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1482. If ( nPrUnit == 0 )
  1483. nPrUnit := NoRound(nTFat/nQuant,TamSX3("C6_PRCVEN")[2])
  1484. EndIf
  1485. nAcresFin := A410Arred(nPrcVen*nPacresFin/100,"D2_PRCVEN")
  1486. nTFat += A410Arred(nQuant*nAcresFin,"D2_TOTAL")
  1487. nValDesc := a410Arred(nPrUnit*nQuant,"D2_DESCON")-nTFat
  1488. nValDesc := IIf(nVlDesc==0,nVlDesc,nValDesc)
  1489. nValDesc := Max(0,nValDesc)
  1490. nPrUnit += nAcresFin
  1491.  
  1492. MaFisAdd(cProduto,cTes,(nQtLib+nQtBloq),nPrunit,nValdesc,,,,0,0,0,0,(nTFat+nValDesc),0,0,0)
  1493.  
  1494. nItem += 1
  1495.  
  1496. lImp := .T.
  1497.  
  1498. nTotLocal := 0
  1499. nImpLinha := 0
  1500.  
  1501. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1502. //³ Atualizacao do saldo disponivel em estoque com base no SB2 atraves de arquivo de trab³
  1503. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1504. dbSelectArea(cTmpTable)
  1505. If msSeek(cLocal+cProduto)
  1506. nTotLocal := (cTmpTable)->TB_SALDO
  1507. RecLock(cTmpTable,.F.)
  1508. ELSE
  1509. SB2->(MsSeek(xFilial("SB2")+cProduto+cLocal))
  1510. nTotLocal := SB2->(SaldoSB2())
  1511. (cTmpTable)->(RecLock(cTmpTable,.T.))
  1512. (cTmpTable)->TB_COD := cProduto
  1513. (cTmpTable)->TB_LOCAL := cLocal
  1514. (cTmpTable)->TB_SALDO := nTotLocal
  1515. EndIf
  1516.  
  1517. If nQtLib <= 0
  1518. (cTmpTable)->TB_SALDO := (cTmpTable)->TB_SALDO - (nQtdven - nQtdent)
  1519. EndIf
  1520.  
  1521. (cTmpTable)->(MsUnLock())
  1522.  
  1523. cDescTab := ""
  1524. If !Empty(cOp)
  1525. SX5->(MsSeek(xFilial("SX5")+"E2"+cOp))
  1526. cDescTab := SX5->(X5Descri())
  1527. EndIf
  1528.  
  1529. If cPaisLoc == "BRA"
  1530. nValIPI := MaFisRet(nItem,"IT_VALIPI")
  1531. Else
  1532. nValIPI := MaRetIncIV(nItem,"2")
  1533. EndIf
  1534. nImpLinha := nValIPI
  1535.  
  1536. If MV_PAR13 == 2 .AND. cPaisLoc == "BRA"
  1537. nImpLinha += ( MaFisRet(nItem,"IT_VALICM") + MaFisRet(nItem,"IT_VALISS") )
  1538. EndIf
  1539.  
  1540. nTotImpPar += nImpLinha
  1541.  
  1542. If mv_par07 = 1
  1543. nTFat += nValIPI
  1544. EndIf
  1545.  
  1546. @li, 00 Psay SubStr(cItem + " " + AllTrim(cProduto) + " - " + cDescricao,1,46)
  1547. @li, 47 Psay nTotLocal Picture PesqPictQt("B2_QATU",15)
  1548. @li, 62 Psay nQtdVen PicTure PesqPictQt("C6_QTDVEN",11)
  1549. @li, 74 Psay nQtdEnt PicTure PesqPictQt("C6_QTDENT",11)
  1550. @li, 86 Psay (nQtdVen - nQtdEnt) PicTure PesqPictQt("C6_QTDVEN",11)
  1551. @li, 98 Psay nQtLib Picture PesqPictQt("C6_QTDVEN",11)
  1552. @li,110 Psay nQtBloq Picture PesqPictQt("C6_QTDVEN",11)
  1553. @li,122 Psay xMoeda(nValDesc,nC5Moeda,mv_par08,IIf(mv_par12 == 1,dC5Emissao,dDataBase)) PicTure tm(nValDesc,11)
  1554. @li,134 Psay xMoeda(nPrcVen ,nC5Moeda,mv_par08,IIf(mv_par12 == 1,dC5Emissao,dDataBase)) PicTure PesqPict((cAliasSC6),"C6_PRCVEN",13)
  1555. @li,148 Psay Substr (cOp+"-"+cDescTab,1,24)
  1556. If nImpLinha > 0
  1557. @li,174 Psay xMoeda(nImpLinha,nC5Moeda,mv_par08,IIf(MV_PAR12 == 1,dC5Emissao,dDataBase)) PicTure PesqPict((cAliasSC6),"C6_VALOR",13)
  1558. EndIf
  1559. If nTFat > 0
  1560. @li,192 Psay xMoeda(nTFat,nC5Moeda,mv_par08,IIf(MV_PAR12 == 1,dC5Emissao,dDataBase)) PicTure tm(nTFat,15)
  1561. EndIf
  1562. @li,210 Psay dEntreg
  1563.  
  1564. nTQLib += nQtLib
  1565. nTQBloq += nQtBloq
  1566. nTQtde += nQtdVen
  1567. nTQEnt += nQtdEnt
  1568. nTPed += xMoeda(nPrcVen,nC5Moeda,mv_par08,IIf(MV_PAR12 == 1,dC5Emissao,dDataBase))
  1569. nAcTotFat += nTFat
  1570.  
  1571. nAcdescont += nValDesc
  1572. nQtlib := 0
  1573. nQtBloq := 0
  1574.  
  1575. li++
  1576.  
  1577. EndIf
  1578.  
  1579. dbSelectArea(cAliasSC6)
  1580. EndIf
  1581. Else
  1582. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1583. //³ Skip somente dos registros invalidos do C6 recusados pelo filtro -> lFiltro = .F. ³
  1584. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1585. dbSelectArea(cAliasSC6)
  1586. dbSkip()
  1587. EndIf
  1588.  
  1589. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1590. //³ Imprime o Rodape do pedido no relatorio. ³
  1591. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1592. If (cAliasSC6)->C6_NUM <> cPedido .AND. lImp
  1593.  
  1594. If li > 58
  1595. cabec(titulo,cabec1,cabec2,nomeprog,tamanho,nTipo)
  1596. EndIf
  1597.  
  1598. @li,0 Psay STR0020 //"TOTAL DO PEDIDO--> "
  1599. @li,118 Psay xMoeda(nAcDescont,nC5Moeda,MV_PAR08,IIf(MV_PAR12 == 1,dC5Emissao,dDataBase)) PicTure tm(nAcDescont,15)
  1600. If nTotImpPar > 0
  1601. @li,170 Psay xMoeda(nTotImpPar,nC5Moeda,MV_PAR08,IIf(MV_PAR12 == 1,dC5Emissao,dDataBase)) Picture PesqPict((cAliasSC6),"C6_VALOR",15)
  1602. EndIf
  1603. If nAcTotFat > 0
  1604. @li,192 Psay xMoeda(nAcTotFat,nC5Moeda,MV_PAR08,IIf(MV_PAR12 == 1,dC5Emissao,dDataBase)) PicTure tm(nAcTotFat,15)
  1605. EndIf
  1606.  
  1607. nTotFat += xMoeda(nAcTotFat, nC5Moeda,mv_par08,IIf(MV_PAR12 == 1,dC5Emissao,dDataBase))
  1608. nTotDesc += xMoeda(nAcDescont,nC5Moeda,mv_par08,IIf(MV_PAR12 == 1,dC5Emissao,dDataBase))
  1609. nTotImp += xMoeda(nTotImpPar,nC5Moeda,mv_par08,IIf(MV_PAR12 == 1,dC5Emissao,dDataBase))
  1610.  
  1611. nAcTotFat := 0
  1612. nAcdescont := 0
  1613. nTotImpPar := 0
  1614. nQtlib := 0
  1615. nQtBloq := 0
  1616. nItem := 0
  1617. cVends := ""
  1618. lCabPed := .T.
  1619. lBarra := .F.
  1620. lImp := .F.
  1621. li += 2
  1622.  
  1623. MaFisEnd()
  1624. EndIf
  1625.  
  1626. Enddo
  1627.  
  1628. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  1629. //³ Imprime os valores totais do final do Relatorio. ³
  1630. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  1631. If nTotFat > 0
  1632. If li > 58
  1633. cabec(titulo,cabec1,cabec2,nomeprog,tamanho,nTipo)
  1634. EndIf
  1635. @li, 0 Psay STR0022 //"TOTAL GERAL--> "
  1636. @li, 60 Psay nTQtde PicTure PesqPictQt("C6_PRCVEN",13)
  1637. @li, 72 Psay nTQent PicTure PesqPictQt("C6_PRCVEN",13)
  1638. @li, 84 Psay (nTQtde-nTQEnt) PicTure PesqPictQt("C6_PRCVEN",13)
  1639. @li, 96 Psay nTQLib Picture PesqPictQt("C6_PRCVEN",13)
  1640. @li,108 Psay nTQBloq Picture PesqPictQt("C6_PRCVEN",13)
  1641. @li,119 Psay nTotDesc PicTure tm(nTotDesc,14)
  1642. @li,134 Psay nTPed PicTure PesqPict((cAliasSC6),"C6_PRCVEN",13)
  1643. If nTotImp > 0
  1644. @li,170 Psay nTotImp Picture PesqPict((cAliasSC6),"C6_VALOR",15)
  1645. EndIf
  1646. @li,192 Psay nTotFat PicTure tm(nTotFat,15)
  1647. li++
  1648. EndIf
  1649.  
  1650. If li != 80
  1651. roda(cbcont,cbtxt,Tamanho)
  1652. EndIf
  1653.  
  1654. If( valtype(oTempTable) == "O")
  1655. oTempTable:Delete()
  1656. freeObj(oTempTable)
  1657. oTempTable := nil
  1658. EndIf
  1659.  
  1660. dbSelectArea(cAliasSC5)
  1661. dbCloseArea()
  1662. dbSelectArea("SC6")
  1663.  
  1664. If aReturn[5] = 1
  1665. Set Printer To
  1666. dbCommitAll()
  1667. ourspool(wnrel)
  1668. EndIf
  1669. MS_FLUSH()
  1670. Return(.T.)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement