;** IMP_TRAY *******************************************************************
;*  Importa Pedidos do Site TrayCorpo                                          *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 26/08/2020 por Bruno Carvalho
;Ultima Alteracao: 31/08/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado cliente gen‚rico p/ quando h  um CGC incorreto no arquivo de importa‡Æo 
;Ultima Alteracao: 01/09/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes na destina‡Æo, no c¢digo do cliente gen‚rico e IE recebendo NAOCONTRIBUINTE #0227#  
;Ultima Alteracao: 04/09/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc Ajusta_Preco() onde ‚ verificado se o valor tem sinal negativo *VR_DESCONTO 
;Ultima Alteracao: 08/09/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes para calcular impostos nos itens do PedidoI e PedidoG
;Ultima Alteracao: 11/09/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes implementados  
;Ultima Alteracao: 11/09/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado relt¢rio com inconsistˆncia de erros na importa‡Æo do pedido para o site 
;Ultima Alteracao: 10/11/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IsRegimeSimplesNacional, IsRegimeSimplesNacionalESRB
;Ultima Alteracao: 06/01/2020 por Bruno Carvalho
;Motivo Alteracao: Alterado Codigo da Destina‡Æo 001 para 003 e 002 para 004
;Ultima Alteracao: 08/01/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ pegar a tabela de pre‡o corresponde a empresa selecionada -> Importa_Pedido()
;Ultima Alteracao: 11/01/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao importar o pedidog, registrar valor dos impostos conforme o "pedidoi"  
;Ultima Alteracao: 11/01/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes para permitir selecionar mais de um arquivo para a importa‡Æo de pedido(s) no sistema  
;Ultima Alteracao: 13/01/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ buscar o pre‡o unitario do item conforme tabela de pre‡o quando empresa 0001 

;Formato do arquivo com a extensÆo .CSV 
;Arquivo a ser importado no sistema da vise deve come‡ar com PEDIDO*.csv

;Cadastrar um cliente gen‚rico e atribuir o codigo aqui conforme empresa
;Cadastrar a Destina‡Æo correta conforme cliente
;IE recebendo o valor de NAOCONTRIBUINTE p/ todos os clientes         

;*******************************************************************************
;* Cabe‡alho                                                                   *
;*******************************************************************************
Proc Cabecalho()

Print File ARQIMP CI_10CPP
Print File ARQIMP "\n\n\n"
Print File ARQIMP Spaces(2)+Fill("-",76) + "\n"
Print File ARQIMP Spaces(2)+Format("W76,AC","INCONSISTENCIA NA IMPORTACAO DE PEDIDOS DO SITE")+ "\n"        
Print File ARQIMP Spaces(2)+Fill("-",76)+ "\n"
Print File ARQIMP "\n\n"
Print File ARQIMP Spaces(2)+ "**   CIDADE = CIDADE COM DIVERGENCIA NO CADASTRO"+"\n"
Print File ARQIMP Spaces(2)+ "** ENDERECO = ENDERECO COM MAIS DE 40 POSICOES"+"\n"
Print File ARQIMP "\n\n"
Print File ARQIMP Spaces(2)+"Pedido Erro     Ocorrencia"+ "\n"
Print File ARQIMP Spaces(2)+"------ -------- -----------------------------------------------------------"+ "\n"

NLINHA = 14

EndProc ;Cabecalho()

;*******************************************************************************
;* Impressao                                                                   *
;*******************************************************************************
Proc IMPRIMIR()

COR_MENSAGEM = "ALERTA"
MSG =       Completa("Foi detectado inconsistˆncia na importa‡Æo.",56," ")+"//"
MSG = MSG + Completa("Deseja visualizar o relat¢rio com essas inconsistˆncias?",56," ")
If Not ConfGeral(MSG)
   Then Return
EndIf

Dispositivo()
If OK="" 
   Then Return 
EndIf
          
ARQIMP = PrivDir()+"IMP_TRAY.TXT"
If IsFile(ARQIMP)
   Then Deleta_Arquivo(ARQIMP)
EndIf

Cabecalho()        
For ty From 1 To DynArraySize(Array_Erro)
  NLINHA = NLINHA + 1
  Print File ARQIMP Array_Erro[ty] +"\n"
  If NLINHA >= 40
     Then Print File ARQIMP "\f"
          Cabecalho() 
  EndIf
EndFor

ImpriArq(ARQIMP)
Deleta_Arquivo(ARQIMP)

EndProc ;IMPRIMIR()

;*******************************************************************************
;* Ajusta Pre‡o                                                                *
;*******************************************************************************
Proc Ajusta_Data(DATA)
Private DATA,ii

If DATA=""
   Then DATA = BlankDate()
   Else For ii From 1 To 2
          PosI = Search("/",DATA)
          If PosI>0
             Then DATA = SubStr(DATA,1,PosI-1)+"."+SubStr(DATA,PosI+1,Len(DATA))
          EndIf
        EndFor
        If Type(DateVal(DATA))="D" 
           Then DATA = DateVal(DATA) 
        EndIf         
EndIf

Return DATA          

EndProc ;Ajusta_DATA

;*******************************************************************************
;* Ajusta Pre‡o                                                                *
;*******************************************************************************
Proc Ajusta_Preco(PRECO)
Private PRECO,PosI

PosI=Search("R$",Upper(PRECO))
If PosI>0
   Then PRECO = Rtrim(Ltrim(SubStr(PRECO,1,PosI-1)+SubStr(PRECO,PosI+2,Len(PRECO))))
EndIf

PosI=Search("-",Upper(PRECO))
If PosI>0
   Then PRECO = Rtrim(Ltrim(SubStr(PRECO,1,PosI-1)+SubStr(PRECO,PosI+2,Len(PRECO))))
EndIf   

If PRECO=""
   Then PRECO = BlankNum()
   Else PosI = Search(".",PRECO)
        If PosI>0
           Then PRECO = SubStr(PRECO,1,PosI-1)+SubStr(PRECO,PosI+1,Len(PRECO))
        EndIf
        PosI = Search(",",PRECO)
        If PosI>0
           Then PRECO = SubStr(PRECO,1,PosI-1)+"."+SubStr(PRECO,PosI+1,Len(PRECO))
        EndIf
        PRECO = NumVal(PRECO)
EndIf

Return PRECO

EndProc ;Ajusta_Preco()

;*******************************************************************************
;* Rotina Importa Clientes                                                     *
;*******************************************************************************
Proc CriaCliente()

Moveto "\\Sistemas\\Cadastro\\Destinat"
Moveto [Codigo]
If Not Proximo_Codigo("C")
   Then Return False
   Else Return True 
EndIf

EndProc ;CriaCliente()

;*******************************************************************************
;* Rotina para Gerar Proximo Codigo no Intervalo                               *
;*******************************************************************************
Proc Proximo_Codigo(Tipo)
Private codreg, newreg,cod,vr
                    
If PARAM_REUTILIZA<>"S"
   Then While True
          End
          CODCLI=[Codigo]
          If IsBlank(CODCLI)
             Then CODCLI="0"
          EndIf
          vr=SubStr(CODCLI,1,1)
          If vr>"9" or CODCLI="9999"
             Then If SubStr(CODCLI,2,3)="999"
          	         Then Switch
  					        Case vr="9" : CODCLI="A000"
  					        Case vr="Z" : CODCLI=""
  					        OtherWise   : CODCLI=Chr(asc(vr)+1)+"000"
  					      EndSwitch
  				 	 Else CODCLI=AlinhE(vr+StrVal(NumVal(SubStr(CODCLI,2,3))+1))     
  				  EndIf	      
             Else CODCLI=AlinhE(StrVal(NumVal(CODCLI)+1))
          EndIf
          Down
          [Codigo]=CODCLI
          If IsLockRecord()
             Then Del
             Else Locate CODCLI
                  Return True
          EndIf
        EndWhile
EndIf

CODCLI=""
Home
CodLivre=AlinhE(PARAM_INICIAL)
Moveto [Codigo]
Locate IndexOrder by "Codigo" BestMatch AlinhE(PARAM_INICIAL)
While True
   If CodLivre<=AlinhE(PARAM_FINAL) and CodLivre>=AlinhE(PARAM_INICIAL)
      Then If CodLivre=[Codigo]
              Then CodLivre=Novo_Codigo()
                   Skip
              Else CODCLI=CodLivre
                   QuitLoop
           EndIf
           If EOT() Then Loop EndIf
      Else Mensagem("Fim dos c¢digos livres!!")
           CODCLI=""
           QuitLoop
   EndIf
EndWhile

If CODCLI<>""
   Then End Down
        [Codigo]=CODCLI
        If IsLockRecord()
           Then Del
           Else Locate CODCLI
                Return True
        EndIf
EndIf

EndProc

;*******************************************************************************
;* Rotina para Criar Novo C¢digo                                               *
;*******************************************************************************
proc Novo_Codigo()
Private cod,vr

cod=[Codigo]
If IsBlank(cod)
   Then cod="0"
EndIf  
vr=SubStr(cod,1,1)
If vr>"9" or cod="9999"
   Then If SubStr(cod,2,3)="999"
	         Then Switch
					        Case vr="9" : cod="A000"
					        Case vr="Z" : Mensagem("Fim de codigo disponivel !")
									              cod=""
					        OtherWise   : cod=Chr(asc(vr)+1)+"000"
					      EndSwitch
					 Else cod=AlinhE(vr+StrVal(NumVal(SubStr(cod,2,3))+1))     
				EndIf	      
   Else cod=AlinhE(StrVal(NumVal(cod)+1))
EndIf

Return cod 
EndProc

;*******************************************************************************
;* Rotina Carrega_Parametros Cadastro                                          *
;*******************************************************************************
Proc Carrega_ParametrosC()
View NoWindow "\\Sistemas\\Cadastro\\P_Dest"
If IsEmpty("\\Sistemas\\Cadastro\\P_Dest")
   Then CoEditKey
        [Utiliza_CGC_Cliente]="N"
        Do_It!
EndIf
PARAM_CGC_CLIENTE   =[Utiliza_CGC_Cliente]
PARAM_CGC_FORNECEDOR=[Utiliza_CGC_Fornecedor]
PARAM_REUTILIZA     =[Reutiliza_Cod      ]
If sys_codigo_Cliente="0428"
   Then PARAM_REUTILIZA     ="S"  
EndIf
PARAM_INICIAL       =[Cliente_Inicial    ]
PARAM_FINAL         =[Cliente_Final      ]
PARAM_AUT           =[Utiliza_Autorizacao]
ClearImage                           

Return True
EndProc ; (Carrega_ParametrosC)

;*******************************************************************************
;* Rotina Monta Aray Grade                                                     *
;*******************************************************************************
Proc Verifica_Array_Grade()
Private i,wsite,CODANTERIOR

WSREF =[Codigo do Item]
COLUNA=0

GetRecord "\\Sistemas\\Estoque\\Itens" WSREF To REG_BUSCA_LOOKUP                 
If Not RetVal
   Then Mensagem("Item "+WSREF+" n„o cadastrado !")
        Return    
EndIf

WSREF  = REG_BUSCA_LOOKUP["Referencia"]
WGRADE = REG_BUSCA_LOOKUP["Codigo da Grade"]

GetRecord "\\Sistemas\\Estoque\\TpGrade" WGRADE To REG_BUSCA_LOOKUP
If Not RetVal
   Then Mensagem("Item "+[PedidoI->Codigo do Item]+" sem grade definida !")
        Return
EndIf

Moveto "PedidoI"
Array_TM[1] =LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item1"]))
Array_TM[2] =LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item2"]))
Array_TM[3] =LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item3"]))
Array_TM[4] =LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item4"]))
Array_TM[5] =LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item5"]))
Array_TM[6] =LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item6"]))
Array_TM[7] =LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item7"]))
Array_TM[8] =LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item8"]))
Array_TM[9] =LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item9"]))
Array_TM[10]=LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item10"]))
Array_TM[11]=LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item11"]))
Array_TM[12]=LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item12"]))

For i from 1 to 12
  If Not IsBlank(WSREF) Then QuitLoop EndIf
  If LTrim(RTrim(SubStr(Array_TM[i],1,2)))<>""
     Then If Len(Array_TM[i])=1
             Then CODANTERIOR=SubStr([Codigo do Item],1,7)+"00"+Array_TM[i]
             Else CODANTERIOR=SubStr([Codigo do Item],1,6)+"00"+Array_TM[i]
          EndIf
          GetRecord "\\Sistemas\\Estoque\\Itens" CODANTERIOR To REG_BUSCA_LOOKUP                 
          If RetVal
             Then WSREF=REG_BUSCA_LOOKUP["Referencia"]
          EndIf
  EndIf
EndFor       

For i from 1 to 12
  If Len(RTrim(SubStr(Array_TM[i],1,2)))=1
     Then If SubStr([Codigo do Item],10,1)=SubStr(Array_TM[i],1,1)
             Then Coluna=i
                  QuitLoop
          EndIf
     Else If SubStr([Codigo do Item],9,2)=SubStr(Array_TM[i],1,2)
             Then Coluna=i
                  QuitLoop
          EndIf
  EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina para Gerar Pedido de Grade - PedidoG                                 *
;*******************************************************************************
Proc Gera_PedidoG()   

CFOP = ""
GetRecord "\\Sistemas\\Vendas\\PedidoC" NPED To REG_PEDIDOC
If RetVal
   Then CFOP = REG_PEDIDOC["CFO"] 
EndIf   

SEQG = 0
Moveto "PedidoI"
Moveto [Numero do Pedido]
Locate NPED
If RetVal
   Then While [Numero do Pedido]=NPED
          Verifica_Array_Grade()
          Moveto "PedidoI"

          WSCOR =[Codigo da Cor_Tecido]
          WSPRU =[Preco Unitario      ]
          
          FAZ_PROCESSO = True
          Moveto [Codigo do Item]
          Ativa_Lookup() 
          Moveto [Referencia]
          Locate IndexOrder by "refcor_01" WSREF, "P", WSCOR
          If Not Retval
             Then Locate IndexOrder by "refcor_01" WSREF, "T", WSCOR
                  If Not Retval
                     Then FAZ_PROCESSO = False
                          KeyPress "ESC"    
                  EndIf    
          EnDIf
          
          If FAZ_PROCESSO 
             Then CopyToArray REG_BUSCA_LOOKUP
                  KeyPress "ESC"
                  
                  ItemNovo=True
                  Moveto "PedidoG"
                  Moveto [Numero do Pedido]
                  Locate NPED
                  If Retval
                     Then While [Numero do Pedido]=NPED
                            If [Referencia]=WSREF And [Codigo da Cor_Tecido]=WSCOR
                               Then ItemNovo=False
                                    QuitLoop
                            EndIf        
                            Skip
                            If Eot() Then QuitLoop EndIf
                          EndWhile
                  EndIf          
                  If ItemNovo
                     Then SEQG = SEQG + 1
                          End Down
                          [Numero do Pedido         ]=[PedidoI->Numero do Pedido         ]
                          [Item do Pedido           ]=SEQG
                          [Referencia               ]=WSREF
                          [Codigo do Item           ]=REG_BUSCA_LOOKUP["Codigo do Item"]
                          [Codigo da Cor_Tecido     ]=WSCOR
                          [Preco Unitario           ]=[PedidoI->Preco Unitario           ]
                          [Descricao do Item        ]=REG_BUSCA_LOOKUP["Descricao do Item"]
                          [Descricao da Cor_Tecido  ]=REG_BUSCA_LOOKUP["Descricao da Cor_Tecido"]
                          [Unidade Fiscal           ]=[PedidoI->Unidade Fiscal           ]
                          [NCM                      ]=[PedidoI->NCM                      ]
                          [CFO                      ]=CFOP   
                          
                                                    
                          [Tributacao de ICMS       ]=[PedidoI->Tributacao de ICMS       ]                                  
                          [Tipo Tributacao          ]=[PedidoI->Tipo Tributacao          ]                                  
                          [Aliquota Reduzida BCICMS ]=[PedidoI->Aliquota Reduzida BCICMS ]                                  
                          [Aliquota de ICMS         ]=[PedidoI->Aliquota de ICMS         ]                                  
                                                                                
                          [ICMS_BC                  ]=[PedidoI->ICMS_BC                  ]                                  
                          [Valor do ICMS            ]=[PedidoI->Valor do ICMS            ]                                  
                                                                                                                
                          [CSOSN                    ]=[PedidoI->CSOSN                    ]                                  
                          [MVA                      ]=[PedidoI->MVA                      ]                                  
                                                                                
                          [ICMS_ST_Aliquota Reduzida]=[PedidoI->ICMS_ST_Aliquota Reduzida]                                 
                          [ICMS_ST_BC               ]=[PedidoI->ICMS_ST_BC               ]
                          [ICMS_ST_Aliquota         ]=[PedidoI->ICMS_ST_Aliquota         ]                                  
                          [ICMS_ST_Valor            ]=[PedidoI->ICMS_ST_Valor            ]                                  
                                                                                                                
                          [IPI_CST                  ]=[PedidoI->IPI_CST                  ]
                          [Tributacao de IPI        ]=[PedidoI->Tributacao de IPI        ]                                  
                          [IPI_BC                   ]=[PedidoI->IPI_BC                   ]
                          [Aliquota de IPI          ]=[PedidoI->Aliquota de IPI          ]
                          [Valor do IPI             ]=[PedidoI->Valor do IPI             ]
                                                                                                                
                          [Tributacao de ISSQN      ]=[PedidoI->Tributacao de ISSQN      ]                                   
                          [Aliquota de ISSQN        ]=[PedidoI->Aliquota de ISSQN        ]                                  
                                                                                                                 
                          [PIS_CST                  ]=[PedidoI->PIS_CST                  ]                                  
                          [PIS_Aliquota             ]=[PedidoI->PIS_Aliquota             ]                                  
                                                                                                                
                          [COFINS_CST               ]=[PedidoI->COFINS_CST               ]                                  
                          [COFINS_Aliquota          ]=[PedidoI->COFINS_Aliquota          ]
                  EndIf
                  Switch
                    Case Coluna=0 : [Qtd1  ]=[Qtd1  ]+[PedidoI->Quantidade]
                    Case Coluna=1 : [Qtd1  ]=[Qtd1  ]+[PedidoI->Quantidade]
                    Case Coluna=2 : [Qtd2  ]=[Qtd2  ]+[PedidoI->Quantidade]
                    Case Coluna=3 : [Qtd3  ]=[Qtd3  ]+[PedidoI->Quantidade]
                    Case Coluna=4 : [Qtd4  ]=[Qtd4  ]+[PedidoI->Quantidade]
                    Case Coluna=5 : [Qtd5  ]=[Qtd5  ]+[PedidoI->Quantidade]
                    Case Coluna=6 : [Qtd6  ]=[Qtd6  ]+[PedidoI->Quantidade]
                    Case Coluna=7 : [Qtd7  ]=[Qtd7  ]+[PedidoI->Quantidade]
                    Case Coluna=8 : [Qtd8  ]=[Qtd8  ]+[PedidoI->Quantidade]
                    Case Coluna=9 : [Qtd9  ]=[Qtd9  ]+[PedidoI->Quantidade]
                    Case Coluna=10: [Qtd10 ]=[Qtd10 ]+[PedidoI->Quantidade]
                    Case Coluna=11: [Qtd11 ]=[Qtd11 ]+[PedidoI->Quantidade]
                    Otherwise     : [Qtd12 ]=[Qtd12 ]+[PedidoI->Quantidade]
                  EndSwitch
                  [Quantidade ]=([Qtd1]+[Qtd2]+[Qtd3]+[Qtd4]+[Qtd5]+[Qtd6]+[Qtd7]+[Qtd8]+[Qtd9]+[Qtd10]+[Qtd11]+[Qtd12])
                  [Preco Total]=[Preco Unitario]*([Qtd1]+[Qtd2]+[Qtd3]+[Qtd4]+[Qtd5]+[Qtd6]+
                                                  [Qtd7]+[Qtd8]+[Qtd9]+[Qtd10]+[Qtd11]+[Qtd12])
                  UnLockRecord
          EndIf
          Moveto "PedidoI"
          Skip
          If Eot() Then QuitLoop EndIf
   EndWhile      
EndIf
 
EndProc ;Gera_PedidoG()                

;*******************************************************************************
;* Rotina para Importar Corre‡äes                                              *
;*******************************************************************************
Proc Importa_Pedido()

Empty "\\Sistemas\\Vendas\\Imp_Temp"

Aguarde("Aguarde, importando pedido")

Contador=0
FileRead ARQUIVO to Varinner
Edit "\\Sistemas\\Vendas\\Imp_Temp"
Pos=1
While True
  Contador = Contador + 1
  Posf=SearchFrom("\n",Varinner,Pos)
  If Posf=0 Then QuitLoop EndIf
  If Contador>1
     Then [Field-1]=Substr(Varinner,Pos,(Posf-Pos))
          Down
  EndIf
  Pos=Posf+1
EndWhile
Do_It!
ClearAll

CONTA_ARRAY = 0
DynArray ARRAY_PEDIDO[]

SetDir "\\Sistemas\\Vendas"             

PED_SITE = "" 
LidoCli  = 0
Contador = 0

NR=NRecords("\\Sistemas\\Vendas\\Imp_Temp")

View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\DestObs"
View "PedidoC"                                                                  ;NoWindow
View "PedidoI"
View "PedidoG"
View "PedidoV"                   
Coedit "\\Sistemas\\Vendas\\Imp_Temp"    SetHighLight Current Record 23 Field 31
While True
  Contador = Contador + 1

  Linha = [Field-1]
  For ii From 1 To 34
    PosF     = Search(Chr(59),Linha)    
    REGISTRO = Substr(Linha,1,PosF-1)
    Switch
      Case ii=1  : PEDIDO_DATA         = Ajusta_Data(REGISTRO)   ;Data Pedido            19/08/2020	
      Case ii=2  : PEDIDO_NUMERO       = REGISTRO ;N£mero Pedido          164
      Case ii=3  : VR_TOTAL            = Ajusta_Preco(REGISTRO) ;Valor Total            R$134,88
      Case ii=4  : VR_SUBTOTAL         = Ajusta_Preco(REGISTRO) ;Subtotal               R$
      Case ii=5  : VR_CONTACORRENTE    = Ajusta_Preco(REGISTRO) ;Conta Corrente         R$
      Case ii=6  : VR_FRETE            = Ajusta_Preco(REGISTRO) ;Valor Frete            R$
      Case ii=7  : VR_DESCONTO         = Ajusta_Preco(REGISTRO) ;Valor Desconto         R$
      Case ii=8  : CANAL_PARCEIRO      = Upper(REGISTRO) ;Canal/Parceiro         Minha Loja
      Case ii=9  : DATA_PAGAMENTO      = Ajusta_Data(REGISTRO)  ;Data Pagamento         
      Case ii=10 : DATA_CANCELAMENTO   = Ajusta_Data(REGISTRO)  ;Data Cancelamento      EM BRANCO
      Case ii=11 : PEDIDO_SITUACAO     = Tira_charEspecial(REGISTRO)  ;Situa‡Æo do Pedido:   
                                                                      ;- Pedido Enviado (Enviado)   
                                                                      ;- Aguardando Pagamento (Aguardando Libera‡Æo)  
                                                                      ;- Retirar na Loja (Dispon¡vel para Retirar na Loja) 
      Case ii=12 : FORMA_PAGAMENTO     = REGISTRO ;Forma de Pagamento     EM BRANCO
      Case ii=13 : NUMERO_PARCELA      = Ajusta_Preco(REGISTRO) ;Nø Parcelas            0
      Case ii=14 : VR_PARCELA          = Ajusta_Preco(REGISTRO) ;Valor Parcela          0
      Case ii=15 : SKU                 = REGISTRO ;SKU Produto            235742016 -> Alinhar a 10
      Case ii=16 : NOME_PRODUTO        = Tira_charEspecial(REGISTRO)   ;Nome Produto
      Case ii=17 : PRECO_VENDA         = Ajusta_Preco(REGISTRO)        ;Pre‡o Venda            NÆo tem o R$
      Case ii=18 : QUANTIDADE          = Ajusta_Preco(REGISTRO)        ;Quantidade
      Case ii=19 : CLIENTE_NOME        = Upper(Ltrim(Rtrim(Tira_charEspecial(REGISTRO)))) ;Nome Cliente
      Case ii=20 : CLIENTE_CPF         = Ltrim(Rtrim(Tira_CharNum(REGISTRO))) ;CPF
      Case ii=21 : CLIENTE_CNPJ        = Ltrim(Rtrim(Tira_CharNum(REGISTRO))) ;CNPJ
      Case ii=22 : CLIENTE_EMAIL       = Upper(Tira_charEspecial(REGISTRO)) ;E-Mail
      Case ii=23 : CLIENTE_TELEFONE    = REGISTRO ;Telefone Residencial
      Case ii=24 : CLIENTE_CELULAR     = REGISTRO ;Telefone Celular
      Case ii=25 : CLIENTE_ENDERECO    = Upper(Tira_charEspecial(REGISTRO)) ;Endere‡o
      Case ii=26 : CLIENTE_NUMERO      = Upper(Tira_charEspecial(REGISTRO)) ;N£mero
      Case ii=27 : CLIENTE_COMPLEMENTO = Upper(Tira_charEspecial(REGISTRO)) ;Complemento            Ignorar quando "casa"
      Case ii=28 : CLIENTE_CEP         = Tira_CharNum(REGISTRO) ;CEP
      Case ii=29 : CLIENTE_BAIRRO      = Upper(Tira_charEspecial(REGISTRO)) ;Bairro
      Case ii=30 : CLIENTE_CIDADE      = Upper(Tira_charEspecial(REGISTRO)) ;Cidade     
      Case ii=31 : CLIENTE_ESTADO      = Upper(REGISTRO) ;Estado
      Case ii=32 : REFERENCIA          = Upper(Tira_charEspecial(REGISTRO)) ;Referˆncia
      Case ii=33 : TIPO_TRANSPORTE     = Upper(Tira_charEspecial(REGISTRO)) ;Transportadora         Frete   /   PAX   /   SEDEX
      Case ii=34 : TRANSACAO           = REGISTRO ;Transa‡Æo              0
    EndSwitch
    Linha = SubStr(Linha,PosF+1,Len(Linha))
  EndFor
  
  While True 
    If PED_SITE<>PEDIDO_NUMERO
       Then REPRESENTANTE = ""
            If SYS_CODIGO_CLIENTE="0227"
               Then REPRESENTANTE = "0007"
            EndIf
            PEDORIG = REPRESENTANTE+"."+PEDIDO_NUMERO
             
            Moveto "PedidoC"
            Moveto [Numero Pedido Origem]
            Locate PEDORIG
            If RetVal
               Then PED_ADD = False  
                    QuitLoop
               Else PED_ADD = True         
            EndIf
       
            N_Pedido = N_Pedido + 1
            SEQ      = 0
            PED_SITE = PEDIDO_NUMERO
            
            REP_NOME=""
            GetRecord "\\Sistemas\\Cadastro\\Represen" REPRESENTANTE To REG_REPRESEN 
            If RetVal
               Then REP_NOME = REG_REPRESEN["Nome Fantasia Represent"] 
            EndIf
              
            ;---- Cidade --------------------------------------------------------- 
            NAO_ACHOU_CIDADE = "" 
            GetRecord "\\Sistemas\\Cadastro\\Cidades" CLIENTE_CIDADE,CLIENTE_ESTADO To REG_CIDADE
            If Not RetVal
               Then Moveto "\\Sistemas\\Cadastro\\Cidades"
                    End Down
                    [Cidade     ] = CLIENTE_CIDADE
                    [UF         ] = CLIENTE_ESTADO      
                    [PAIS       ] = "BRASIL"
                    [Codigo_Pais] = 1058
                    UnLockRecord
                    
                    NAO_ACHOU_CIDADE = CLIENTE_CIDADE+"/"+CLIENTE_ESTADO
               Else If IsBlank(REG_CIDADE["Codigo_Cidade"])
                       Then NAO_ACHOU_CIDADE = CLIENTE_CIDADE+"/"+CLIENTE_ESTADO 
                    EndIf                         
            EndIf          
              
            ;---- Peculariedades por Empresa -----------------------------------
            TABELA        = ""
            TRANSPORTADOR = ""
            If SYS_CODIGO_CLIENTE="0227"
               Then If VSDGEMPRESA="0001"
                       Then TABELA  = "00055"   ;Fabrica
                       Else TABELA  = "00010"   ;Loja
                    EndIf   
                    Switch
                      Case TIPO_TRANSPORTE="Frete"     : TRANSPORTADOR = "0001"
                      Case TIPO_TRANSPORTE="BRASPRESS" : TRANSPORTADOR = "0009"
                      Case TIPO_TRANSPORTE="PAC" Or
                           TIPO_TRANSPORTE="SEDEX"     : TRANSPORTADOR = "0029"
                    EndSwitch
            EndIf
            
            Adiciona_Transportador=False
            GetRecord "\\Sistemas\\Vendas\\Transpor" TRANSPORTADOR To REG_TRANSP
            If RetVal
               Then Adiciona_Transportador=True
            EndIf     
            
            ;---- CGC ----------------------------------------------------------
            GENERICO=False
            CLIENTE_GENERICO = ""
            If SYS_CODIGO_CLIENTE="0227" Then CLIENTE_GENERICO ="2015" EndIf
            
            CGC         = ""
            TIPO_PESSOA = ""
            TM          = 0
            Switch
              Case CLIENTE_CPF<>""  : CGC = CLIENTE_CPF
                                      TM = 11
              Case CLIENTE_CNPJ<>"" : CGC = CLIENTE_CNPJ 
                                      TM = 14
            EndSwitch
            If TM > 0  
               Then For tu From Len(CGC)+1 To TM
                      CGC = "0"+StrVal(CGC)
                    EndFor
            EndIf
            
            Switch            
              Case Len(CGC)>14 :
              Case Len(CGC)=14 :
                   CGC=SubStr(CGC,01,2)+"."+
                       SubStr(CGC,03,3)+"."+
                       SubStr(CGC,06,3)+"/"+
                       SubStr(CGC,09,4)+"-"+
                       SubStr(CGC,13,2)    
                   TIPO_PESSOA="J"            
              Case Len(CGC)=11 :
                   CGC=SubStr(CGC,01,3)+"."+
                       SubStr(CGC,04,3)+"."+
                       SubStr(CGC,07,3)+"-"+
                       SubStr(CGC,10,2)
                   TIPO_PESSOA="F"       
              OtherWise  : CGC="000.000.000-00"
                           TIPO_PESSOA="F"   
            EndSwitch  
        
            ;---- ENDERECO -----------------------------------------------------
            If CLIENTE_NUMERO <> "" And CLIENTE_ENDERECO <> ""
               Then CLIENTE_ENDERECO = CLIENTE_ENDERECO+", "+ CLIENTE_NUMERO
            EndIf
            
            PosI=Search("APTO",Upper(CLIENTE_COMPLEMENTO))
            If PosI>0
               Then CLIENTE_COMPLEMENTO = Rtrim(Ltrim(SubStr(CLIENTE_COMPLEMENTO,1,PosI-1)+SubStr(CLIENTE_COMPLEMENTO,PosI+4,Len(CLIENTE_COMPLEMENTO))))
            EndIf
            
            If Upper(CLIENTE_COMPLEMENTO)="CASA" Then CLIENTE_COMPLEMENTO=""   EndIf
            If Upper(CLIENTE_COMPLEMENTO)="LOJA" Then CLIENTE_COMPLEMENTO="LJ" EndIf
                        
            If CLIENTE_COMPLEMENTO <> "" And CLIENTE_ENDERECO <> ""
               Then CLIENTE_ENDERECO = CLIENTE_ENDERECO + ", " + CLIENTE_COMPLEMENTO
            EndIf
            
            OBS_ENDERECO=""
            If Len(CLIENTE_ENDERECO)>40
               Then OBS_ENDERECO = CLIENTE_ENDERECO  
            EndIf     
            
            If Not IsBlank(CLIENTE_CEP)
               Then CLIENTE_CEP = SubStr(CLIENTE_CEP,1,2)+"."+
                                  SubStr(CLIENTE_CEP,3,3)+"-"+
                                  SubStr(CLIENTE_CEP,6,3)
            EndIf  
                                                           
            ;---- Destina‡Æo ---------------------------------------------------
            DESTIN=""
            If SYS_CODIGO_CLIENTE="0227"
               Then If VSDGEMPRESA="0003"
                       Then If Upper(CLIENTE_ESTADO)<>"MG"
                               Then If TIPO_PESSOA="F"
                                       Then DESTIN = "176"
                                       Else DESTIN = "002"
                                    EndIf 
                               Else DESTIN = "001" 
                            EndIf
                       Else If Upper(CLIENTE_ESTADO)<>"MG"
                               Then If TIPO_PESSOA="F"
                                       Then DESTIN = "176"
                                       Else DESTIN = "004"
                                    EndIf 
                               Else DESTIN = "003" 
                            EndIf
                    EndIF        
            EndIf                                
        
            ;---- CLIENTE ------------------------------------------------------  
            ClienteOk=False
            Moveto "\\Sistemas\\Cadastro\\Destinat"
            Moveto [CGC]
            Locate CGC
            If RetVal
               Then If CLIENTE_GENERICO<>"" And CGC="000.000.000-00"
                      Then GENERICO = True
                           CODCLI=CLIENTE_GENERICO
                      Else CODCLI=[Codigo]
                    EndIf   
                    ClienteOk=True
            EndIf
            If Not ClienteOK
               Then OBS     = ""
                    LidoCli = LidoCli+1
                    If Not CriaCliente()
                       Then CODCLI = ""
                            OBS    = "** CLIENTE NAO CADASTRADO ** "
                       Else OBS    = "** CLIENTE NOVO ** "
                            [Tipo                   ]="C"
                            [Nome Fantasia EmitDest ]=CLIENTE_NOME 
                            [Razao Social           ]=CLIENTE_NOME                     
                            [Endereco               ]=CLIENTE_ENDERECO
                            [Endereco_Eletronico    ]=CLIENTE_EMAIL
                            [Cidade                 ]=CLIENTE_CIDADE 
                            [UF                     ]=CLIENTE_ESTADO
                            [Bairro                 ]=CLIENTE_BAIRRO
                            [CEP                    ]=CLIENTE_CEP
                            [Telefone               ]=CLIENTE_TELEFONE
                            [Celular                ]=CLIENTE_CELULAR
                            [Contato                ]=""
                            [Fax                    ]=""
                            [CGC                    ]=CGC
                            [RG                     ]=""
                            [IE                     ]="NAOCONTRIBUINTE"
                            [Data_Cadastro          ]=PEDIDO_DATA
                            [Inativo                ]="N"
                            [Situacao do Cliente    ]="OTIMO"
                            Switch 
                              Case TIPO_PESSOA="J" : [Tipo Pessoa]="JURIDICA"
                              Case TIPO_PESSOA="F" : [Tipo Pessoa]="FISICA"
                            EndSwitch   
                            [Regime_Tributario      ]="DEBITO E CREDITO"  
                            [Pais                   ]="BRASIL"
                            [Codigo do Representante]=REPRESENTANTE
                            [Nome Fantasia Represent]=REP_NOME
                            UnLockRecord
                            
                            Moveto "\\Sistemas\\Cadastro\\DestObs"
                            End Down
                            [Codigo                 ] = CODCLI
                            [Observacoes            ] = OBS
                            UnLockRecord
                    EndIf   
            EndIf
            
            Adiciona_Cliente=False
            GetRecord "\\Sistemas\\Cadastro\\Destinat" CODCLI To REG_DESTINAT
            If RetVal
               Then Adiciona_Cliente=True
            EndIf   
                                                       
            ;---- Pedidos ------------------------------------------------------
            Moveto "PedidoC"
            Moveto [Numero Pedido Origem]
            Locate PEDORIG
            If Not RetVal
               Then While True
                      End
                      Moveto [Numero do Pedido]
                      If Numero_Lancamento("Interno","Locked_Down")
                         Then NPED = PROXLANCTO_NLANC
                              Release Vars PROXLANCTO_NLANC
                              Quitloop
                      EndIf    
                    EndWhile 
                    [Numero do Pedido     ]=NPED
                    [Codigo da Empresa    ]=VSDGEMPRESA
                    [Situacao do Pedido   ]="SUSPENSO"
                    [Data de Emissao      ]=PEDIDO_DATA
                    [Data de Entrega      ]=PEDIDO_DATA
                    [Numero Pedido Origem ]=PEDORIG
                    If Adiciona_Cliente
                       Then [Tipo                      ]="C"
                            If GENERICO
                               Then [Codigo                    ]=CLIENTE_GENERICO
                                    [Nome Fantasia EmitDest    ]=CLIENTE_NOME 
                                    [Tipo Pessoa               ]="FISICA"
                                    [Consumidor Final          ]="S"
                                    [Razao Social              ]=CLIENTE_NOME
                                    [Endereco                  ]=CLIENTE_ENDERECO
                                    [Bairro                    ]=CLIENTE_BAIRRO
                                    [CEP                       ]=CLIENTE_CEP
                                    [Cidade                    ]=CLIENTE_CIDADE
                                    [UF                        ]=CLIENTE_ESTADO
                                    [CGC                       ]=CGC
                                    [IE                        ]="NAOCONTRIBUINTE"
                                    [Telefone                  ]=CLIENTE_TELEFONE  
                               Else [Codigo                    ]=REG_DESTINAT["Codigo"]
                                    [Nome Fantasia EmitDest    ]=REG_DESTINAT["Nome Fantasia EmitDest"] 
                                    [Tipo Pessoa               ]=REG_DESTINAT["Tipo Pessoa"]
                                    [Consumidor Final          ]="S"
                                    [Razao Social              ]=REG_DESTINAT["Razao Social"]
                                    [Endereco                  ]=REG_DESTINAT["Endereco"]
                                    [Bairro                    ]=REG_DESTINAT["Bairro"]
                                    [CEP                       ]=REG_DESTINAT["CEP"] 
                                    [Cidade                    ]=REG_DESTINAT["Cidade"]
                                    [UF                        ]=REG_DESTINAT["UF"]
                                    [CGC                       ]=REG_DESTINAT["CGC"]
                                    [IE                        ]=REG_DESTINAT["IE"]
                                    [Telefone                  ]=REG_DESTINAT["Telefone"] 
                            EndIf
                            [Endereco de Entrega       ]="O MESMO"
                            [Endereco de Cobranca      ]="O MESMO"
                    EndIf
                    [Codigo do Representante   ]=REPRESENTANTE
                    [Nome Fantasia Represent   ]=REP_NOME
                    [Condicao de Pagamento     ]=""
                    [Descricao CondPagto       ]=""
                    [Numero de Parcelas        ]=NUMERO_PARCELA                   ;VR_PARCELA
                    [Tipo de Pagamento         ]=""
                    [Composicao de Dias        ]=""
                    [Forma de Pagamento        ]=""
                    [Codigo da Destinacao      ]=DESTIN
                    
                    Checa_UF_Destinacao()
                    
                    If Adiciona_Transportador
                       Then [Codigo da Transportadora  ]=REG_TRANSP["Codigo da Transportadora"]
                            [Nome Fantasia Transport   ]=REG_TRANSP["Nome Fantasia Transport"]
                            [Razao Social Transport    ]=REG_TRANSP["Razao Social Transport"]
                            [Endereco Transport        ]=REG_TRANSP["Endereco Transport"]
                            [Bairro Transport          ]=REG_TRANSP["Bairro Transport"]
                            [CEP Transport             ]=REG_TRANSP["CEP Transport"]
                            [Cidade Transport          ]=REG_TRANSP["Cidade Transport"]
                            [UF Transport              ]=REG_TRANSP["UF Transport"]
                            [CGC Transport             ]=REG_TRANSP["CGC Transport"]
                            [IE Transport              ]=REG_TRANSP["IE Transport"]
                            [Codigo do Veiculo         ]=REG_TRANSP["Codigo do Veiculo"]
                            [Placa do Veiculo          ]=REG_TRANSP["Placa do Veiculo"]
                            [UF Veiculo                ]=REG_TRANSP["UF Veiculo"]
                            [Frete por Conta           ]=REG_TRANSP["Frete por Conta"]
                    EndIf
                    
                    If VR_DESCONTO=0 Then VR_DESCONTO = BlankNum() EndIf
                    
                   ;[Taxa de Desconto          ]
                   ;[Valor do Desconto         ]
                    [Valor Mercadoria          ]=VR_SUBTOTAL
                    [Valor do Desconto         ]=VR_DESCONTO
                    [Valor Mercadoria Liquido  ]=VR_SUBTOTAL
                   ;[Valor BCICMS              ]
                   ;[Valor ICMS                ]
                   ;[Valor IPI                 ]
                    [Valor Nota Fiscal         ]=VR_TOTAL
                   ;[Valor Despesas Acessorias ]
                   ;[Valor BCSubstituicao ICMS ]
                   ;[Valor Substituicao ICMS   ]
                    [Frete Incluso na Nota     ]="+"
                   ;[Aliquota BCFrete Nota     ]
                    [Valor do Frete            ]=VR_FRETE
                   ;[Aliquota BCICMS Frete     ]
                   ;[Aliquota de ICMS Frete    ]
                   ;[CFO Frete                 ]
                   ;[Valor do Seguro           ]
                   ;[Marca dos Volumes         ]
                   ;[Numero de Volumes         ]
                   ;[Especie de Volumes        ]
                   ;[Peso Bruto                ]
                   ;[Peso Liquido              ]
                    [Codigo da Tabela          ]=TABELA
                    [Sistema Gerador           ]="IE"
                    [Data_Inclusao             ]=Today()
                    [Hora_Inclusao             ]=SubStr(StrVal(Time()),1,5)
                    
                    If OBS_ENDERECO<>""
                       Then [Observacao do Pedido] = OBS_ENDERECO  
                    EndIf  
                    
                    UnLockRecord
            EndIf   
            CONTA_ARRAY = CONTA_ARRAY + 1
            ARRAY_PEDIDO[CONTA_ARRAY] = NPED
            
            ;---- Rela‡Æo de Erros ---------------------------------------------
            If Len(CLIENTE_ENDERECO)>40
               Then Conta_Array_Erro = Conta_Array_Erro + 1
                    Array_Erro[Conta_Array_Erro] = Spaces(2) + Format("W6",NPED) + " " + Format("W8","ENDERECO") + " " + CLIENTE_ENDERECO
            EndIf      
            
            If NAO_ACHOU_CIDADE<>""
               Then Conta_Array_Erro = Conta_Array_Erro + 1
                    Array_Erro[Conta_Array_Erro] = Spaces(2) + Format("W6",NPED) + " " + Format("W8","CIDADE") + " " + NAO_ACHOU_CIDADE
            EndIf   
    EndIf        
    
    ;---- Codigo do Item -------------------------------------------------------
    If PED_ADD
       Then TM = Len(SKU)
            If TM<10
               Then For ii From TM+1 To 10
                      SKU = "0"+SKU
                    EndFor
            EndIf
            
            If VSDGEMPRESA="0001"
               Then GetRecord "\\Sistemas\\Vendas\\TbPrIte" TABELA,SKU To REG_TABPRECO
                    If RetVal
                       Then PRECO_VENDA = REG_TABPRECO["Preco Unitario"]
                       Else GetRecord "\\Sistemas\\Vendas\\TbPrIte" TABELA,PegaCodigoRaiz(SKU) To REG_TABPRECO
                            If Retval
                               Then PRECO_VENDA = REG_TABPRECO["Preco Unitario"]
                            EndIf   
                    Endif
            EndIf        
          
            GetRecord "\\Sistemas\\Estoque\\Itens" SKU To REG_ITEM
            If Not RetVal
               Then Mensagem("Codigo do Item "+SKU+" referente ao pedido "+NPED+" nÆo foi localizado no cadastro de itens!")
               Else SEQ = SEQ + 1 
            
                    Moveto "PedidoI"
                    End Down
                    [Numero do Pedido       ]=NPED           
                    [Item do Pedido         ]=SEQ             
                    [Tipo do Item           ]=REG_ITEM["Tipo do Item"]        
                    [Codigo do Item         ]=REG_ITEM["Codigo do Item"]    
                    [Descricao do Item      ]=REG_ITEM["Descricao do Item"]    
                    [Referencia             ]=REG_ITEM["Referencia"]    
                    [Codigo da Cor_Tecido   ]=REG_ITEM["Codigo da Cor_Tecido"]    
                    [Descricao da Cor_Tecido]=REG_ITEM["Descricao da Cor_Tecido"]    
                    [Tamanho                ]=REG_ITEM["DTamanho"]
                    [Quantidade             ]=QUANTIDADE                 
                    [Unidade Fiscal         ]=REG_ITEM["Unidade Fiscal"]             
                    [Preco Unitario         ]=PRECO_VENDA             
                    [Preco Total            ]=[Quantidade]*[Preco Unitario]      
                    [NCM                    ]=REG_ITEM["NCM"]  
                    [Peso Liquido           ]=REG_ITEM["Peso Liquido"]               
                    [Peso Embalagem         ]=REG_ITEM["Peso Embalagem"]             
                    [Volumes                ]=REG_ITEM["Volumes"]
                    
                    Ajusta_Dados_Item()
                    UnLockRecord
            EndIf
    EndIf
    QuitLoop
  EndWhile          
  Moveto "\\Sistemas\\Vendas\\Imp_Temp"
  Skip 
  If Eot() Then QuitLoop EndIf
EndWhile
Do_It!
ClearAll

If DynArraySize(ARRAY_PEDIDO)>0
   Then For po From 1 To DynArraySize(ARRAY_PEDIDO)
          NPED = ARRAY_PEDIDO[po]
          
          ;---- Calcula Imposto no PedidoI -------------------------------------
          View "PedidoI"
          CoEdit "PedidoC"   
          Moveto [Numero do Pedido]
          Locate NPED
          Carrega_array_Itens("PedidoI")
          CALC_PEDIDO()
          CALC_VOLUMES()
          UnLockRecord
          Do_It!
          ClearAll
          
          ;---- Gera PedidoG ---------------------------------------------------
          View "PedidoG" 
          CoEdit "PedidoI"
          Gera_PedidoG()
          UnLockRecord
          Do_It!
          ClearAll
          
          ;---- Calcula Imposto no PedidoG -------------------------------------
          View "PedidoG"
          View "PedidoI"
          CoEdit "PedidoC"
          Moveto [Numero do Pedido]
          Locate NPED   
          Rateio_BC_Itens("PedidoC")
          Do_It!
          ClearAll
        EndFor
EndIf         

SetDir "\\Sistemas\\Vendas"  

EndProc ;Importa_Pedido()

;*******************************************************************************
;*** Calcula Impostos
;*******************************************************************************
Proc Carrega_array_Itens(TABELA)
Private CAMPOANT, nitens,TABELA

TabelaRefC="Pedidoc" 

Switch 
  Case TABELA="PedidoI" : TabelaRefI="PedidoI"
  Case TABELA="PedidoG" : TabelaRefI="PedidoG"
EndSwitch                   

Aguarde("Somando itens")

;-------- Variaveis para calculo de impostos por item --------------------------
Release Vars It_tpitem, It_prtotal, It_cfop,
             It_txdescto, It_descto, It_frete, It_seguro, It_outdesp,
             It_cst_icms, It_csosn_icms, It_trib_icms, It_red_icms, It_aliq_icms, It_bc_icms, It_vr_icms,
             It_aliq_icmscred, It_vr_icmscred,
             It_mva, It_red_st, It_aliq_st, It_bc_st, It_vr_st,
             It_cst_ipi, It_trib_ipi, It_aliq_ipi, It_bc_ipi, It_vr_ipi,
             It_trib_issqn, It_aliq_issqn, It_bc_issqn, It_vr_issqn,
             It_cst_pis, It_aliq_pis, It_bc_pis, It_vr_pis,
             It_cst_cofins, It_aliq_cofins, It_bc_cofins, It_vr_cofins,
             It_aliq_fcpst,It_bc_fcpst,It_vr_fcpst,It_vrdeson_icms,It_mtdeson_icms 

DynArray It_tpitem[]
DynArray It_prtotal[]
DynArray It_cfop[]
DynArray It_ncm[]

DynArray It_aliq_fcpst[]
DynArray It_bc_fcpst[]  
DynArray It_vr_fcpst[]    

DynArray It_vrdeson_icms[]
DynArray It_mtdeson_icms[]

DynArray It_txdescto[]
DynArray It_descto[]
DynArray It_frete[]
DynArray It_seguro[]
DynArray It_outdesp[]

DynArray It_cst_icms[]
DynArray It_trib_icms[]
DynArray It_red_icms[]
DynArray It_aliq_icms[]
DynArray It_bc_icms[]
DynArray It_vr_icms[]

DynArray It_csosn_icms[]
DynArray It_aliq_icmscred[]
DynArray It_vr_icmscred[]

DynArray It_mva[]
DynArray It_red_st[]
DynArray It_aliq_st[]
DynArray It_bc_st[]
DynArray It_vr_st[]

DynArray It_cst_ipi[]
DynArray It_trib_ipi[]
DynArray It_aliq_ipi[]
DynArray It_bc_ipi[]
DynArray It_vr_ipi[]

DynArray It_trib_issqn[]
DynArray It_aliq_issqn[]
DynArray It_bc_issqn[]
DynArray It_vr_issqn[]

DynArray It_cst_pis[]
DynArray It_aliq_pis[]
DynArray It_bc_pis[]
DynArray It_vr_pis[]

DynArray It_cst_cofins[]
DynArray It_aliq_cofins[]
DynArray It_bc_cofins[]
DynArray It_vr_cofins[]

;-------- Variaveis para calculo da nota ---------------------------------------

VRMERC          =0
VRSERV          =0
VRII            =0
VRBC_COMIS      =0
VRDESCTONT      =0
TOT_FCP_ST_Valor=0

Moveto TabelaRefI
nitens=0
Moveto [Numero do Pedido]
locate NPED
if retval
   then while [Numero do Pedido]=NPED
          If [Tipo do Item]<>"C"
             Then VRMERC=VRMERC+[Preco Total]
             Else VRSERV=VRSERV+[Preco Total]
          EndIf
        
          ;-------- Variaveis para calculo imposto do item -------------------------------
          nitens=nitens+1
          It_tpitem[nitens]        =[Tipo do Item            ] 
          It_prtotal[nitens]       =[Preco Total             ] 
          It_cfop[nitens]          =[CFO                     ]
          It_ncm[nitens]           =[NCM                     ] 
        
          It_txdescto[nitens]      =BlankNum()  
          It_descto[nitens]        =BlankNum()  
          It_frete[nitens]         =BlankNum()
          It_seguro[nitens]        =BlankNum()  
          It_outdesp[nitens]       =BlankNum()  
        
          It_trib_icms[nitens]     =[Tributacao de ICMS      ]
          It_cst_icms[nitens]      =[Tipo Tributacao         ]
          It_red_icms[nitens]      =[Aliquota Reduzida BCICMS]
          It_aliq_icms[nitens]     =[Aliquota de ICMS        ]
          It_bc_icms[nitens]       =[ICMS_BC                 ]
          It_vr_icms[nitens]       =[Valor do ICMS           ]
    
          If TabelaRefI="PedidoI"
             Then It_vrdeson_icms[nitens]  =[ICMS_Valor_Desonerado   ]
                  It_mtdeson_icms[nitens]  =[ICMS_Motivo_Desoneracao ]
          
                  It_aliq_fcpst[nitens]    =[FCP_ST_Aliquota         ]
                  It_vr_fcpst[nitens]      =[FCP_ST_Valor            ]
          EndIf
        
          It_csosn_icms[nitens]    =[CSOSN                   ]
         ;It_aliq_icmscred[nitens] =[ICMS_CredSN_Aliquota    ]
         ;It_vr_icmscred[nitens]   =[ICMS_CredSN_Valor       ]
        
          It_mva[nitens]           =[MVA                     ]
          It_red_st[nitens]        =[ICMS_ST_Aliquota Reduzida]
          It_aliq_st[nitens]       =[ICMS_ST_Aliquota        ]
          It_bc_st[nitens]         =[ICMS_ST_BC              ]
          It_vr_st[nitens]         =[ICMS_ST_Valor           ]
          
          It_trib_ipi[nitens]      =[Tributacao de IPI       ]
          It_cst_ipi[nitens]       =[IPI_CST                 ]
          It_aliq_ipi[nitens]      =[Aliquota de IPI         ]
          It_bc_ipi[nitens]        =[IPI_BC                  ]
          It_vr_ipi[nitens]        =[Valor do IPI            ]
        
          It_trib_ISSQN[nitens]    =[Tributacao de ISSQN     ]
          It_aliq_ISSQN[nitens]    =[Aliquota de ISSQN       ]
          ;It_bc_ISSQN[nitens]      =[ISSQN_BC                ]
          ;It_vr_ISSQN[nitens]      =[Valor do ISSQN          ]
        
          It_cst_pis[nitens]       =[PIS_CST                 ]
          It_aliq_pis[nitens]      =[PIS_Aliquota            ]
          ;It_bc_pis[nitens]        =[PIS_BC                  ]
          ;It_vr_pis[nitens]        =[PIS_Valor               ]
        
          It_cst_cofins[nitens]    =[COFINS_CST              ]
          It_aliq_cofins[nitens]   =[COFINS_Aliquota         ]
          ;It_bc_cofins[nitens]     =[COFINS_BC               ]
          ;It_vr_cofins[nitens]     =[COFINS_Valor            ]
        
          It_bc_icms[nitens]       =BlankNum()
          It_vr_icms[nitens]       =BlankNum()

          It_bc_st[nitens]         =BlankNum()
          It_vr_st[nitens]         =BlankNum()

          ;It_vr_icmscred[nitens]   =BlankNum()

          It_bc_ipi[nitens]        =BlankNum()
          It_vr_ipi[nitens]        =BlankNum()

          ;It_bc_ISSQN[nitens]      =BlankNum()
          ;It_vr_ISSQN[nitens]      =BlankNum()

          ;It_bc_pis[nitens]        =BlankNum()
          ;It_vr_pis[nitens]        =BlankNum()

          ;It_bc_cofins[nitens]     =BlankNum()
          ;It_vr_cofins[nitens]     =BlankNum()
          
          ;---- Adicionado em 13/06/2019 -----------------------------------------------
          If TP_MOV_ESTOQUE="S"               And
             (Search("VEND" ,[PedidoC->Descricao da Destinacao])>0 or
              Search("BONIF",[PedidoC->Descricao da Destinacao])>0) and
             [ICMS_ST_Aliquota]>0          
             Then
                  getrecord "\\sistemas\\estoque\\ncmuf" It_ncm[nitens],[PedidoC->UF] to regncmuf
                  if retval
                     then if regncmuf["FCP_ST_Aliquota"]>0
                             then It_aliq_fcpst[nitens]=regncmuf["FCP_ST_Aliquota"]
                          endif   
                  endif
          endif   
          
          If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
             Then
                  It_bc_icms[nitens]       =BlankNum()
                  It_vr_icms[nitens]       =BlankNum()
        
                  It_bc_st[nitens]         =BlankNum()
                  It_vr_st[nitens]         =BlankNum()
        
                  It_vr_icmscred[nitens]   =BlankNum()
                  
                  It_vrdeson_icms[nitens]  =BlankNum()
                  It_mtdeson_icms[nitens]  =""
                  
                  If TabelaRefI="PedidoG"
                     Then It_vr_fcpst[nitens]  =BlankNum()
                          It_aliq_fcpst[nitens]=BlankNum()
                  EndIf
                  It_bc_ipi[nitens]        =BlankNum()
                  It_vr_ipi[nitens]        =BlankNum()
        
                  It_bc_ISSQN[nitens]      =BlankNum()
                  It_vr_ISSQN[nitens]      =BlankNum()
        
                  It_bc_pis[nitens]        =BlankNum()
                  It_vr_pis[nitens]        =BlankNum()
          EndIf   
          
          skip
          if eot() then quitloop endif
             
      endwhile
endif
LimpAguarde()

Moveto "PedidoC"

EndProc ;(Carrega_array_Itens)

;*******************************************************************************
;*** Checagem UF/Destinacao
;*******************************************************************************
Proc Checa_UF_Destinacao()

;*** Aliquota do Estado ***
getrecord "Estados" [PedidoC->UF] to regestados
if retval
   Then UF_ALIQUOTA_ICMS         =regestados["Aliquota de ICMS"]
        UF_ALIQUOTA_ICMS_INTERNA =regestados["Aliquota de ICMS_INTERNA"]
   Else UF_ALIQUOTA_ICMS         =BlankNum()
        UF_ALIQUOTA_ICMS_INTERNA =BlankNum()
EndIf

ALIQUOTA_CREDITO_ICMS_NOSN=BlankNum()
TRIB_ICMS                 =""
TRIB_IPI                  =""
DESTIN_ATUALIZA_PEDIDOS   =""
OPCAO_RED_BCICMS          ="1"
DP_GERA_DUPLICATA         ="N"
CALCULO_NF_AUTOMATICO     ="A"
FINALIDADE_DESTINACAO     ="1"

Aliquota_ICMS_Desonerado  =0
Motivo_Desoneracao_ICMS   =""
TP_MOV_ESTOQUE            ="S"
OBS                       =""

getrecord "Destin" [PedidoC->Codigo da Destinacao] to regdestin
if retval
   Then ALIQUOTA_CREDITO_ICMS_NOSN=regdestin["Aliquota CredICMS NOSN"]
        If regdestin["ICMS Aliquota do Estado"]<>"S"
           Then UF_ALIQUOTA_ICMS  =regdestin["Aliquota de ICMS"]
        EndIf
        CALCULO_NF_AUTOMATICO     =regdestin["Calcula_Nota"]
        TRIB_ICMS                 =regdestin["Tributacao de ICMS"]
        TRIB_IPI                  =regdestin["Tributacao de IPI"]
        DESTIN_ATUALIZA_PEDIDOS   =regdestin["Atualiza Pedidos"]

        OBS = OBS+regdestin["Observacao_Destinacao"]

        If Not IsBlank(regdestin["Conta Caixa Padrao"])
           Then PARAM_CONTA_CAIXA=regdestin["Conta Caixa Padrao"]
        EndIf
        OPCAO_RED_BCICMS         =regdestin["Sem Reducao BCICMS"]
        DP_GERA_DUPLICATA        =regdestin["Gera Duplicata"]
        FINALIDADE_DESTINACAO    =regdestin["FinNfe"]
        
        Aliquota_ICMS_Desonerado =regdestin["Aliquota ICMS Desonerado"]
        Motivo_Desoneracao_ICMS  =regdestin["Motivo Desoneracao ICMS" ]
        
        TP_MOV_ESTOQUE           =regdestin["Tipo Movimento Estoque"]
EndIf
[Observacao na Nota Fiscal]=OBS

EndProc

;*******************************************************************************
;* Rotina Ajustar Dados do Item                                                *
;*******************************************************************************
Proc Ajusta_Dados_Item()
private sFCI, sSIMBOLOGIA, regdestinat, pessoa_regimetributario, pessoacontribuinte, regdestin, tpmovestoque

GetRecord "\\Sistemas\\Vendas\\Destin" [PedidoC->Codigo da Destinacao] To regdestin
If RetVal
  Then tpmovestoque=regdestin["Tipo Movimento Estoque"]  
  else tpmovestoque=""
endif

;--- tratando ICMS -------------------------------------------------------------
switch
 case [Tipo do Item]="C": ; Servi‡o

   [Aliquota de ICMS      ]=BlankNum()
   [Aliquota de IPI       ]=BlankNum()

   If IsRegimeSimplesNacional(TPEMPR) Or IsRegimeSimplesNacionalESRB(TPEMPR)
      Then 
          [PIS_CST        ]="99"
          [PIS_Aliquota   ]=BlankNum()

          [COFINS_CST     ]="99"
          [COFINS_Aliquota]=BlankNum()
   EndIf        

 otherwise:
   [Tributacao de ISSQN     ]="N"
   [Aliquota de ISSQN       ]=BlankNum()

   ;-- pega dados primeiro como "DEBITO/CREDITO" -----------------
   TribCST=SubStr([Tipo Tributacao],2,2)
   Switch
     Case (TribCST="00" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
          (TribCST="10" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
          (TribCST="20" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
          (TribCST="70" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0):
          [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
           If OPCAO_RED_BCICMS="1"
              Then [Aliquota Reduzida BCICMS]=BlankNum()
           EndIf

     Case (TribCST="10" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0) Or
          (TribCST="70" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0):
          [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
           If OPCAO_RED_BCICMS="1"
              Then [Aliquota Reduzida BCICMS]=BlankNum()
           EndIf

     Case (TribCST="00" Or TribCST="10" Or TribCST="20" Or TribCST="70") And
          TRIB_ICMS<>"D" And TRIB_ICMS<>"S":
          [Tributacao de Icms]=TRIB_ICMS
          [Aliquota de ICMS  ]=BlankNum()
          Switch
           Case [Tributacao de Icms]="O": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"90"                
           Case [Tributacao de Icms]="I": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"40"                                
           Case [Tributacao de Icms]="N": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"41"                                
				 EndSwitch

   EndSwitch
   ;--------------------------------------------------------------

   Switch
     Case IsRegimeSimplesNacional(TPEMPR):
       getrecord "\\sistemas\\cadastro\\destinat" [PedidoC->Codigo] to regdestinat
       if retval
          then pessoa_regimetributario=regdestinat["Regime_Tributario"]
          else pessoa_regimetributario=""
       endif
       pessoacontribuinte=true 
       switch
         case [PedidoC->Tipo Pessoa]="FISICA"                  : pessoacontribuinte=false
         case [PedidoC->IE         ]="ISENTO"                  : pessoacontribuinte=false
         case [PedidoC->IE         ]="NAOCONTRIBUINTE"         : pessoacontribuinte=false
         case IsRegimeSimplesNacional(pessoa_regimetributario) : pessoacontribuinte=false
       endswitch

       Switch
         Case TP_MOV_ESTOQUE="S": ; Saida    
       
           if Search("DEVOL",[PedidoC->Descricao da Destinacao])>0  
              then [CSOSN]="900"
           endif

           if Search("MOSTR",[PedidoC->Descricao da Destinacao])>0  Or
              Search("BRIND",[PedidoC->Descricao da Destinacao])>0
              then [CSOSN]="400"
           endif   

           if Search("VEND",[PedidoC->Descricao da Destinacao])>0 and
              not pessoacontribuinte
              then
                   Switch
                     Case [CSOSN]="101": [CSOSN]="102" 
                     Case [CSOSN]="201": [CSOSN]="202" 
                   EndSwitch
           endif        

         Case TP_MOV_ESTOQUE="E": ; Entrada    
       
           [CSOSN]="400"

       EndSwitch

       Switch
         Case [CSOSN]="101" Or [CSOSN]="900":
              ;[ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
               If OPCAO_RED_BCICMS="1"
                  Then [Aliquota Reduzida BCICMS]=BlankNum()
               EndIf
              [MVA                 ]=BlankNum()
              [ICMS_ST_Aliquota    ]=BlankNum()

         Case [CSOSN]="201":
              ;[ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
               If OPCAO_RED_BCICMS="1"
                  Then [Aliquota Reduzida BCICMS]=BlankNum()
               EndIf
               [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
               Checa_MVA("PEDIDO",[Tributacao de ICMS],[Codigo MVA])

         Case [CSOSN]="202" Or [CSOSN]="203":
              ;[ICMS_CREDSN_Aliquota]=BlankNum()
               If OPCAO_RED_BCICMS="1"
                  Then [Aliquota Reduzida BCICMS]=BlankNum()
               EndIf
               [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
               Checa_MVA("PEDIDO",[Tributacao de ICMS],[Codigo MVA])
               
         Case [CSOSN]="500":
              ;[ICMS_CREDSN_Aliquota]=BlankNum()
               If OPCAO_RED_BCICMS="1"
                  Then [Aliquota Reduzida BCICMS]=BlankNum()
               EndIf
               if Search("DEVOL",[PedidoC->Descricao da Destinacao])>0 And 
                  TP_MOV_ESTOQUE="E"
                  then
                       [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                       Checa_MVA("PEDIDO",[Tributacao de ICMS],[Codigo MVA])
               endif

         OtherWise:                          
              ;[ICMS_CREDSN_Aliquota]=BlankNum()
              [MVA                 ]=BlankNum()
              [ICMS_ST_Aliquota    ]=BlankNum()                  

       EndSwitch

     OtherWise: ;-- DEBITRO/CREDITO -----
       pessoacontribuinte=true 
       switch
         case [PedidoC->Tipo Pessoa]="FISICA"             : pessoacontribuinte=false
         case [PedidoC->IE         ]="ISENTO"             : pessoacontribuinte=false
         case [PedidoC->IE         ]="NAOCONTRIBUINTE"    : pessoacontribuinte=false
       endswitch

       Switch
         Case (TribCST="10" Or TribCST="30" Or TribCST="70"):
           switch
             case sys_Codigo_Cliente="0112" and not pessoacontribuinte and tpmovestoque="S":
               getrecord "\\sistemas\\estoque\\ncmuf" [NCM],[PedidoC->UF] to regncmuf
               if retval
                  then if regncmuf["FCP_Aliquota"]>0 and [Aliquota de ICMS]>0
                          then [Aliquota de ICMS]=[Aliquota de ICMS]+regncmuf["FCP_Aliquota"]
                       endif   
               endif
               [Tipo Tributacao   ]=SubStr([Tipo Tributacao],1,1)+"00"                
               [Tributacao de Icms]="D"
               [MVA               ]=BlankNum()
               [ICMS_ST_Aliquota  ]=BlankNum()

             case sys_Codigo_Cliente="0112" and pessoacontribuinte and tpmovestoque="S" and 
                  ( (Search("VEND", [PedidoC->Descricao da Destinacao])>0 and Search("TROCA",[PedidoC->Descricao da Destinacao])>0 ) or
                     Search("BONIF",[PedidoC->Descricao da Destinacao])>0 ) :
               [ICMS_ST_Aliquota]=[Aliquota de ICMS]
               Checa_MVA("PEDIDO",[Tributacao de ICMS],[Codigo MVA])

             case sys_Codigo_Cliente="0112" and pessoacontribuinte and tpmovestoque="S" and
                  Search("VEND",[PedidoC->Descricao da Destinacao])>0: 
               [ICMS_ST_Aliquota]=[Aliquota de ICMS]
               [Aliquota de ICMS]=UF_ALIQUOTA_ICMS_INTERNA
               Checa_MVA("PEDIDO",[Tributacao de ICMS],[Codigo MVA])

             case [FaturaC->Tipo Pessoa]="FISICA":
               [Tipo Tributacao   ]=SubStr([Tipo Tributacao],1,1)+"00"                
               [Tributacao de Icms]="D"
               [MVA               ]=BlankNum()
               [ICMS_ST_Aliquota  ]=BlankNum()

             otherwise                     :
               [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
               Checa_MVA("PEDIDO",[Tributacao de ICMS],[Codigo MVA])
             
           endswitch

         Case TribCST="60" And Search("DEVOL",[PedidoC->Descricao da Destinacao])>0 And TP_MOV_ESTOQUE="E":
           [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
           Checa_MVA("PEDIDO",[Tributacao de ICMS],[Codigo MVA])

         OtherWise:     
           switch
             case sys_Codigo_Cliente="0112" and not pessoacontribuinte and tpmovestoque="S":
               getrecord "\\sistemas\\estoque\\ncmuf" [NCM],[PedidoC->UF] to regncmuf
               if retval
                  then if regncmuf["FCP_Aliquota"]>0 and [Aliquota de ICMS]>0 
                          then [Aliquota de ICMS]=[Aliquota de ICMS]+regncmuf["FCP_Aliquota"]
                       endif   
               endif
               [MVA               ]=BlankNum()
               [ICMS_ST_Aliquota  ]=BlankNum()

             case sys_Codigo_Cliente="0112" and pessoacontribuinte and tpmovestoque="S" and
                  ( (Search("VEND" ,[PedidoC->Descricao da Destinacao])>0 and Search("TROCA",[PedidoC->Descricao da Destinacao])>0 ) or
                     Search("BONIF",[PedidoC->Descricao da Destinacao])>0 ) :
               [MVA             ]=BlankNum()
               [ICMS_ST_Aliquota]=BlankNum()
                 
             case sys_Codigo_Cliente="0112" and pessoacontribuinte and tpmovestoque="S" and 
                  Search("VEND",[PedidoC->Descricao da Destinacao])>0: 
               [Aliquota de ICMS]=UF_ALIQUOTA_ICMS_INTERNA
               [MVA             ]=BlankNum()
               [ICMS_ST_Aliquota]=BlankNum()
               
             otherwise:
              [MVA             ]=BlankNum()
              [ICMS_ST_Aliquota]=BlankNum()
             
           endswitch
       EndSwitch

       [CSOSN               ]="900"
       ;[ICMS_CREDSN_Aliquota]=BlankNum()
       ;[ICMS_CredSN_Valor   ]=BlankNum()

   EndSwitch
 
endswitch

;-- Seta Vairaveis PegaCFOP ----------------------------------------------------
Checa_CFOP      =TP_MOV_ESTOQUE
CFO_C           =[PedidoC->CFO      ]
CFOP_TPITEM     =[Tipo do Item      ]
CFOP_TRIBICMS   =[Tributacao de ICMS]
CFOP_TPTRIB     =[Tipo Tributacao   ]
CFOP_EMPRESA    =[PedidoC->Codigo da Empresa ]
CFOP_ATIVEMPRESA=ATIVEMPR
Play "\\Sistemas\\Exporta\\PegaCFOP"        

[CFO            ]=CFO_C
[Tipo Tributacao]=CFOP_TPTRIB
;-------------------------------------------------------------------------------

;--- tratando PIS/COFINS -------------------------------------------------------
If IsRegimeSimplesNacional(TPEMPR) Or IsRegimeSimplesNacionalESRB(TPEMPR)
    Then 
         [PIS_CST        ]  ="99"  [PIS_ALIQUOTA   ]=BlankNum() 
         [COFINS_CST     ]  ="99"  [COFINS_ALIQUOTA]=BlankNum() 
Endif
   
;-------------------------------------------------------------------------------

endproc

;****************************************+**************************************
;* Rotina para Calculo de Valores do Pedido                                    *
;*******************************************************************************
Proc CALC_PEDIDO()             
Aguarde("Calculando valores do pedido")

Switch
  Case Table()="Pedidoc": TabelaRefC="PedidoC"  TabelaRefI="PedidoI"
EndSwitch
 
Moveto TabelaRefC
CampoTab=Field()

[Valor Mercadoria]=VRMERC
[Valor Servico   ]=VRSERV
If [Taxa de Desconto]>0
   Then VRDESCTO=Round((VRMERC*[Taxa de Desconto])/100,2)
        TXDESCTO_TOTAL=[Taxa de Desconto]
   Else VRDESCTO=[Valor do Desconto]
        TXDESCTO_TOTAL=(VRDESCTO/VRMERC)*100
EndIf
[Valor Desconto          ]=VRDESCTO
[Valor Mercadoria Liquido]=[Valor Mercadoria]-[Valor Desconto]
 
CALCULA_IMPOSTO()

Moveto TabelaRefC
Moveto Field CampoTab

[Valor BCICMS ]=VRBCICMS
[Valor ICMS   ]=VRICMS
[Valor IPI    ]=VRIPI
[Valor BCISSQN]=VRBCISSQN
[Valor ISSQN  ]=VRISSQN
[Valor PIS    ]=VRPIS
[Valor COFINS ]=VRCOFINS

[Valor BCSubstituicao ICMS]=VRBCST
[Valor Substituicao ICMS  ]=VRST

[Valor Desconto NTributado]=VRDESCTONT
[Valor FCP_Ret_ST         ]=TOT_FCP_ST_Valor                                             

[Valor Nota Fiscal]=([Valor Mercadoria Liquido]+[Valor IPI]+[Valor Servico]+[Valor Despesas Acessorias]+
                     [Valor Substituicao ICMS]+[Valor do Seguro]+[Valor FCP_Ret_ST])-[Valor Desconto NTributado]

VRNF=[Valor Nota Fiscal]

If [Frete Incluso na Nota]="+"
   Then [Valor Nota Fiscal]=[Valor Nota Fiscal]+[Valor do Frete]
EndIf

If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO ICMS CBC"
   Then [Valor Nota Fiscal       ]=BlankNum()
        [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC"
   Then [Valor BCICMS            ]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ST" 
   Then [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf

;*** 0=BlankNum() **************************************************************
If [Valor BCICMS             ]=0 Then [Valor BCICMS             ]=BlankNum() EndIf
If [Valor ICMS               ]=0 Then [Valor ICMS               ]=BlankNum() EndIf
If [Valor BCSubstituicao ICMS]=0 Then [Valor BCSubstituicao ICMS]=BlankNum() EndIf
If [Valor Substituicao ICMS  ]=0 Then [Valor Substituicao ICMS  ]=BlankNum() EndIf
If [Valor IPI                ]=0 Then [Valor IPI                ]=BlankNum() EndIf
If [Valor BCISSQN            ]=0 Then [Valor BCISSQN            ]=BlankNum() EndIf
If [Valor ISSQN              ]=0 Then [Valor ISSQN              ]=BlankNum() EndIf
If [Valor do Frete           ]=0 Then [Valor do Frete           ]=BlankNum() EndIf
If [Valor do Seguro          ]=0 Then [Valor do Seguro          ]=BlankNum() EndIf
If [Valor Despesas Acessorias]=0 Then [Valor Despesas Acessorias]=BlankNum() EndIf
If [Valor PIS                ]=0 Then [Valor PIS                ]=BlankNum() EndIf
If [Valor COFINS             ]=0 Then [Valor COFINS             ]=BlankNum() EndIf
If [Valor Desconto NTributado]=0 Then [Valor Desconto NTributado]=BlankNum() EndIf
If [Valor FCP_Ret_ST         ]=0 Then [Valor FCP_Ret_ST         ]=BlankNum() EndIf

Moveto TabelaRefC
Moveto Field CampoTab

LimpAguarde()
EndProc     ;  (Calc_Pedidos)


;*******************************************************************************
;* Rotina para Calculos de Caracteristicas de Volumes                          *
;*******************************************************************************
Proc CALC_VOLUMES()
private regunidades 

NVOL   =0
PESOL  =0
PESOB  =0
DMARCA =""
NMARCA =0
DUNID  =""
NUNID  =0

Moveto "PedidoI"
Moveto [Numero do Pedido]
Locate NPED
While [Numero do Pedido]=NPED

  GetRecord "\\Sistemas\\Estoque\\Unidades" [Unidade Fiscal] To regunidades
  If RetVal
     Then AUX_UND = regunidades["Descricao da Unidade"]
     Else AUX_UND = ""
  EndIf

  GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM
  If RetVal
     Then AUX_MAR = REG_ITEM["Descricao da Marca"]
     Else AUX_MAR = ""
  EndIf

  If DMARCA<>AUX_MAR
     Then DMARCA=AUX_MAR
          NMARCA=NMARCA+1
  EndIf
  If DUNID<>AUX_UND
     Then DUNID=AUX_UND
          NUNID=NUNID+1
  EndIf
  NVOL =NVOL +NDecimal(([Quantidade]*[Volumes]),2)
  PESOL=PESOL+NDecimal(([Quantidade]*[Peso Liquido]),2)
  PESOB=PESOB+NDecimal(([Quantidade]*[Peso Embalagem]),2)

  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

Moveto "PedidoC"
If (PESOB+PESOL)>0
   Then [Peso Bruto  ]=PESOB+PESOL
   Else [Peso Bruto  ]=BlankNum()
EndIf
If PESOL>0
   Then [Peso Liquido]=PESOL
   Else [Peso Liquido]=BlankNum()
EndIf
If NVOL>0
   Then [Numero de Volumes]=NVOL
   Else [Numero de Volumes]=BlankNum()
EndIf
If NMARCA>1
   Then [Marca dos Volumes]="DIVERSAS"
   Else [Marca dos Volumes]=DMARCA
EndIf
If NUNID>1
   Then [Especie de Volumes]="VOLUME(S)"
   Else [Especie de Volumes]=DUNID
EndIf
Endproc

;****************************************+**************************************
;* Rotina para Setar Vari veis de Impostos                                     *
;*******************************************************************************
Proc CALCULA_IMPOSTO()

VRBCIPI        =0
VRIPI          =0
VRBCICMS       =0
VRICMS         =0
VRBCST         =0
VRST           =0
VRICMS_CREDSN  =BlankNum()
VRBCISSQN      =BlankNum()
VRISSQN        =BlankNum()
VRBCPIS        =BlankNum()
VRPIS          =BlankNum()
VRBCCOFINS     =BlankNum()
VRCOFINS       =BlankNum()
VRIR           =0
VRNF           =0

MSG_AUTOMATICA="" 

Moveto TabelaRefC               
CopyToArray REG_TABELAREFC ; guarda dados registro mestre

;--- Soma dos Items para rateio ------------------------------------------------
MercadoriaRateio_Valor=0
For wi From 1 to DynArraySize(It_prtotal)
  If It_tpitem[wi]="C" ;servi‡o
     Then 
          OutrosRateioOk=False    ;nÆo rateia frete e outros
     Else 
          OutrosRateioOk=True
          If TP_MOV_ESTOQUE="S" And 
             (It_cfop[wi]="5902" or It_cfop[wi]="5903") ;saida industrializa‡Æo/Devolucao Industrializacao
             Then OutrosRateioOk=False
          EndIf
  EndIf
  
  If OutrosRateioOk
     Then MercadoriaRateio_Valor=MercadoriaRateio_Valor+It_prtotal[wi]
  EndIf   
EndFor

;--- Rateio Frete, Seguro, Desconto, Despesas ----------------------------------
Frete_Valor      =0
Seguro_Valor     =0
OutDesp_Valor    =0
Descto_Valor     =0

For wi From 1 to DynArraySize(It_prtotal)

  If It_tpitem[wi]="C" ;servi‡o
     Then OutrosRateioOk=False    ;nÆo rateia frete e outros
          PORC_IT_MERC=0
     Else OutrosRateioOk=True
          PORC_IT_MERC=(It_prtotal[wi]/MercadoriaRateio_Valor)*100 
          If TP_MOV_ESTOQUE="S" And It_cfop[wi]="5902" ;saida industrializa‡Æo
             Then OutrosRateioOk=False
          EndIf
  EndIf    

  If OutrosRateioOk
     Then It_txdescto[wi]=TXDESCTO_TOTAL
          It_descto[wi]  =NDecimal((REG_TABELAREFC["Valor Desconto"          ]*PORC_IT_MERC)/100,2)
          If REG_TABELAREFC["Frete Incluso na Nota"]="+"
             Then It_frete[wi]=NDecimal((REG_TABELAREFC["Valor do Frete"     ]*PORC_IT_MERC)/100,2)
             Else It_frete[wi]=0           
          EndIf
          It_seguro[wi] =NDecimal((REG_TABELAREFC["Valor do Seguro"          ]*PORC_IT_MERC)/100,2)
          It_outdesp[wi]=NDecimal((REG_TABELAREFC["Valor Despesas Acessorias"]*PORC_IT_MERC)/100,2)

          Descto_Valor  =Descto_Valor +It_descto[wi]
          Frete_Valor   =Frete_Valor  +It_frete[wi]
          Seguro_Valor  =Seguro_Valor +It_seguro[wi]
          OutDesp_Valor =OutDesp_Valor+It_outdesp[wi]

          If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
          If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
          If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
          If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
          If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf

     Else It_txdescto[wi]=BlankNum()
          It_descto[wi]  =BlankNum()
          It_frete[wi]   =BlankNum()
          It_seguro[wi]  =BlankNum()
          It_outdesp[wi] =BlankNum()
  EndIf

EndFor           
    
;--- Calcular diferen‡a totalizadores ------------------------------------------
DIF_Descto_Valor       =NDecimal(REG_TABELAREFC["Valor Desconto"           ]-Descto_Valor ,2)
If REG_TABELAREFC["Frete Incluso na Nota"]="+"
   Then DIF_Frete_Valor=NDecimal(REG_TABELAREFC["Valor do Frete"           ]-Frete_Valor  ,2)
   Else DIF_Frete_Valor=0
EndIf                                           
DIF_Seguro_Valor       =NDecimal(REG_TABELAREFC["Valor do Seguro"          ]-Seguro_Valor ,2)
DIF_OutDesp_Valor      =NDecimal(REG_TABELAREFC["Valor Despesas Acessorias"]-OutDesp_Valor,2)

If DIF_Descto_Valor <>0 Or
   DIF_Frete_Valor  <>0 Or
   DIF_Seguro_Valor <>0 Or
   DIF_OutDesp_Valor<>0 
   Then 
        For wi From 1 to DynArraySize(It_prtotal) 
              
          Switch
            Case It_tpitem[wi]="C" :  ;Igual a Seri‡o
              OutrosRateioOk=False    ;nÆo rateia frete e outros
            OtherWise              :  ;Diferente de servi‡o
              OutrosRateioOk=True     ;rateia frete e outros 
              If TP_MOV_ESTOQUE="S" And It_cfop[wi]="5902" ;saida industrializa‡Æo
                 Then OutrosRateioOk=False
              EndIf
          EndSwitch

          If OutrosRateioOk 
             Then 
                  If DIF_Descto_Valor >=0 Or (DIF_Descto_Valor*-1) >=It_descto[wi]
                     Then It_descto[wi] =It_descto[wi] +DIF_Descto_Valor
                          DIF_Descto_Valor=0 
                  EndIf
                  If DIF_Frete_Valor  >=0 Or (DIF_Frete_Valor*-1)  >=It_frete[wi]
                     Then It_frete[wi]  =It_frete[wi]  +DIF_Frete_Valor
                          DIF_Frete_Valor =0
                  EndIf
                  If DIF_Seguro_Valor >=0 Or (DIF_Seguro_Valor*-1) >=It_seguro[wi]
                     Then It_seguro[wi] =It_seguro[wi] +DIF_Seguro_Valor
                          DIF_Seguro_Valor=0
                  EndIf   
                  If DIF_OutDesp_Valor>=0 Or (DIF_OutDesp_Valor*-1)>=It_outdesp[wi]
                     Then It_outdesp[wi]=It_outdesp[wi]+DIF_OutDesp_Valor
                          DIF_OutDesp_Valor=0
                  EndIf   

                  If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
                  If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
                  If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
                  If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
                  If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf
        
          EndIf
          If DIF_Descto_Valor =0 And
             DIF_Frete_Valor  =0 And
             DIF_Seguro_Valor =0 And
             DIF_OutDesp_Valor=0
             Then QuitLoop
          EndIf
                                              
        EndFor
EndIf                     
          
;--- Calculando Impostos -------------------------------------------------------
For wi From 1 to DynArraySize(It_prtotal)

  Switch
    Case CALCULO_NF_AUTOMATICO="A":
      
      ;--- Calculando IPI ----------------------------------------------------------
      If It_aliq_ipi[wi]>0
         Then It_bc_ipi[wi]=It_prtotal[wi]
              If REG_TABELAREFC["Frete Incluso na Nota"]="+" And
                 SubStr(It_cfop[wi],1,1)    ="3" And ; entrada import‡Æo  
                 SubStr(It_cst_icms[wi],1,1)="1"     ; item importa‡Æo direta
                 Then It_bc_ipi[wi]=It_bc_ipi[wi]+It_frete[wi]
              EndIf
              It_vr_ipi[wi]=Round((It_bc_ipi[wi]*It_aliq_ipi[wi])/100,2) 
         Else It_bc_ipi[wi]=BlankNum()    
              It_vr_ipi[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando Base de Calculo ICMS para todas as situa‡äes -----------------
      Switch
        Case IsRegimeSimplesNacional(TPEMPR):
          Switch
            Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)<>"60": 
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)="60" And
                 Search("DEVOL",REG_TABELAREFC["Descricao da Destinacao"])>0:
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            OtherWise:
                 VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

          EndSwitch
        OtherWise:
          Switch
            Case OPCAO_RED_BCICMS=3 And It_red_icms[wi]>0 And It_txdescto[wi]>0:
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            OtherWise:
                 VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

          EndSwitch
      EndSwitch
      VL_BC_ICMS   =VL_BC_ICMS   +It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
      VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_frete[wi]+It_seguro[wi]+It_outdesp[wi] 

      If REG_TABELAREFC["Consumidor Final"]="S" 
         Then VL_BC_ICMS   =VL_BC_ICMS   +it_vr_ipi[wi]
         Else VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_vr_ipi[wi] 
      EndIf   
      VL_RED_BC    =NDecimal((VL_BC_ICMS*It_red_icms[wi])/100,2)
      VL_BC_ICMS   =VL_BC_ICMS-VL_RED_BC                   
    
    
      ;--- Calculando Credito ICMS Simples Nacional ------------------------
      If IsRegimeSimplesNacional(TPEMPR) And
         SubStr(Directory(),1,1)<>"X"    And
         (It_csosn_icms[wi]="101" Or It_csosn_icms[wi]="201")
         Then ;It_vr_icmscred[wi]  =Round((VL_BC_ICMS*It_aliq_icmscred[wi])/100,2)
         Else ;It_aliq_icmscred[wi]  =BlankNum()
              ;It_vr_icmscred[wi]    =BlankNum()
      EndIf   

      ;--- Calculando ICMS ---------------------------------------------------------
      If It_aliq_icms[wi]>0 
         Then It_bc_icms[wi]    =VL_BC_ICMS
              It_vr_icms[wi]    =Round((It_bc_icms[wi]*It_aliq_icms[wi])/100,2)
         Else It_aliq_icms[wi]  =BlankNum()
              It_bc_icms[wi]    =BlankNum()
              It_vr_icms[wi]    =BlankNum()
      EndIf
    
      ;--- Calculando Substituicao Tributaria --------------------------------------
      If It_aliq_st[wi]>0
         Then
              If SYS_CODIGO_CLIENTE="0167"
                 Then VL_BC_ICMS_ST=VL_BC_ICMS_ST-It_frete[wi]     
              EndIf
        
              VL_BC_ICMS_ST=VL_BC_ICMS_ST+Round((VL_BC_ICMS_ST*It_mva[wi])/100,2)
              VL_RED_BCST  =NDecimal((VL_BC_ICMS_ST*It_red_st[wi])/100,2)
              VL_BC_ICMS_ST=VL_BC_ICMS_ST-VL_RED_BCST                   
       
              VL_ICMS_ST=Round((VL_BC_ICMS_ST*It_aliq_st[wi])/100,2)

              ;Comentado para nÆo pegar aliquota do estado caso ICMS esteja em branco
              VL_ICMS_ST=VL_ICMS_ST-It_vr_icms[wi]
              ;Switch
              ;  Case It_vr_icms[wi]>0 :
              ;       VL_ICMS_ST=VL_ICMS_ST-It_vr_icms[wi]
              ;  OtherWise             :
              ;       VL_ICMS_ST=VL_ICMS_ST-Round((VL_BC_ICMS*UF_ALIQUOTA_ICMS)/100,2)
              ;EndSwitch
        
              It_bc_st[wi]=VL_BC_ICMS_ST
              It_vr_st[wi]=VL_ICMS_ST
      
         Else It_red_st[wi]    =BlankNum() 
              It_aliq_st[wi]   =BlankNum()
              It_bc_st[wi]     =BlankNum()
              It_vr_st[wi]     =BlankNum()
      EndIf
              
      ;--- Calculando ISSQN --------------------------------------------------------
      If It_aliq_issqn[wi]>0
         Then ;It_bc_issqn[wi]=It_prtotal[wi]
              ;It_vr_issqn[wi]=Round((It_bc_issqn[wi]*It_aliq_issqn[wi])/100,2) 
         Else ;It_bc_issqn[wi]=BlankNum()    
              ;It_vr_issqn[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando PIS ----------------------------------------------------------
      If It_aliq_pis[wi]>0
         Then ;It_bc_pis[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
              ;It_vr_pis[wi]=Round((It_bc_pis[wi]*It_aliq_pis[wi])/100,2) 
         Else ;It_bc_pis[wi]=BlankNum()    
              ;It_vr_pis[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando COFINS -------------------------------------------------------
      If It_aliq_cofins[wi]>0
         Then ;It_bc_cofins[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
              ;It_vr_cofins[wi]=Round((It_bc_cofins[wi]*It_aliq_cofins[wi])/100,2) 
         Else ;It_bc_cofins[wi]=BlankNum()    
              ;It_vr_cofins[wi]=BlankNum()    
      EndIf
      
      ;--- Calculando ICMS Desonerado ------------------------------------------
      if not IsRegimeSimplesNacional(TPEMPR) and  
         Motivo_Desoneracao_ICMS<>"" And Aliquota_ICMS_Desonerado>0 and not IsBlank([PedidoC->ISUFRAMA])
         Then if ( search(It_cfop[wi],"6109,6110,6120,6122,6123,6151,6152")>0 or 
                   search(It_cfop[wi],"6651,6652,6654,6655,6658,6659,6910")>0 ) and
                   search(SubStr(It_cst_icms[wi],2,2),"20,30,40,70,90")>0 
                 then
                      Bc_ICMS_Desonerado   = It_prtotal[wi] - It_descto[wi]
                      Bc_ICMS_Desonerado   = Bc_ICMS_Desonerado - round((It_prtotal[wi]*It_red_icms[wi])/100,2)
                      
                      It_vrdeson_icms[wi] = round((Bc_ICMS_Desonerado * Aliquota_ICMS_Desonerado)/100,2)
                      It_mtdeson_icms[wi]  = Motivo_Desoneracao_ICMS
              endif
      EndIf      

    OtherWise:

  EndSwitch
  
    ;---- Adicionado em 13/06/2019 -----------------------------------------------
  switch 
    case It_tpitem[wi]="C":
    
    otherwise             :
      ;** calculo FCP ICMS ST ********************
      If it_bc_st[wi]>0 and it_aliq_fcpst[wi]>0
         then
              it_bc_fcpst[wi]=it_bc_st[wi]
              it_vr_fcpst[wi]=round((it_bc_fcpst[wi]*it_aliq_fcpst[wi])/100,2)
      endif
  endswitch   

  ;--- Somando Impostos --------------------------------------------------------
  VRBCIPI          = VRBCIPI      +It_bc_ipi[wi]
  VRIPI            = VRIPI        +It_vr_ipi[wi]
  VRDESCTONT       = VRDESCTONT       + It_vrdeson_icms[wi]
  TOT_FCP_ST_Valor = TOT_FCP_ST_Valor + It_vr_fcpst[wi]
  
  If ( IsRegimeSimplesNacional(TPEMPR) And It_csosn_icms[wi]="900" )
     Or not IsRegimeSimplesNacional(TPEMPR)
     Then 
          VRBCICMS       =VRBCICMS     +It_bc_icms[wi]
          VRICMS         =VRICMS       +It_vr_icms[wi]
  EndIf
  
  ;VRICMS_CREDSN  =VRICMS_CREDSN+It_vr_icmscred[wi]
  VRBCST         =VRBCST       +It_bc_st[wi]
  VRST           =VRST         +It_vr_st[wi]
  ;VRBCISSQN      =VRBCISSQN    +It_bc_issqn[wi]
  ;VRISSQN        =VRISSQN      +It_vr_issqn[wi]
  ;VRBCPIS        =VRBCPIS      +It_bc_pis[wi]
  ;VRPIS          =VRPIS        +It_vr_pis[wi]  
  ;VRBCCOFINS     =VRBCCOFINS   +It_bc_cofins[wi]
  ;VRCOFINS       =VRCOFINS     +It_vr_cofins[wi]
                                                                          
EndFor

EndProc ;(IMPOSTO)

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc Rateio_BC_Itens(TabelaRefC)
Private nitens,TabelaRefC, TabelaRefI, REG_TABELAREFC

For CONTADOR_BC_RATEIO From 1 To 2 
  Switch
    Case CONTADOR_BC_RATEIO=1 : TabelaRefI="Pedidoi"    
    Case CONTADOR_BC_RATEIO=2 : TabelaRefI="Pedidog"
  EndSwitch
  
  Moveto TabelaRefC
  CopyToArray REG_TABELAREFC ; guarda dados registro mestre
  Aguarde("Atualizando rateios nos itens")
  
  nitens=0
  
  Moveto TabelaRefI
  Moveto [Numero do Pedido]
  locate NPED
  if retval
     then while [Numero do Pedido]=NPED
            nitens=nitens+1
          
            [Taxa Desconto Total      ]=It_txdescto[nitens]        
            [Valor Desconto Total     ]=It_descto[nitens]          
          
            [ICMS_BC                  ]=It_bc_icms[nitens]       
            [Valor do ICMS            ]=It_vr_icms[nitens]
            
            If TabelaRefI="Pedidoi" 
               Then [ICMS_Motivo_Desoneracao  ]=It_mtdeson_icms[NItens]       
                    [ICMS_Valor_Desonerado    ]=It_vrdeson_icms[NItens]
                    
                    [FCP_ST_Aliquota          ]=It_aliq_fcpst[nitens] 
                    [FCP_ST_Valor             ]=It_vr_fcpst[nitens]        
            EndIf
            ;[ICMS_CREDSN_Aliquota     ]=It_aliq_icmscred[nitens]  
            ;[ICMS_CREDSN_Valor        ]=It_vr_icmscred[nitens]   
          
            [ICMS_ST_Aliquota Reduzida]=It_red_st[nitens]        
            [ICMS_ST_Aliquota         ]=It_aliq_st[nitens]        
            [ICMS_ST_BC               ]=It_bc_st[nitens]         
            [ICMS_ST_Valor            ]=It_vr_st[nitens]         
          
            
          
            [IPI_BC                   ]=It_bc_ipi[nitens]        
            [Valor do IPI             ]=It_vr_ipi[nitens]        
          
            ;[ISSQN_BC                 ]=It_bc_issqn[nitens]      
            ;[Valor do ISSQN           ]=It_vr_issqn[nitens]      
          
            ;[PIS_BC                   ]=It_bc_pis[nitens]        
            ;[PIS_Valor                ]=It_vr_pis[nitens]         
          
            ;[COFINS_BC                ]=It_bc_cofins[nitens]     
            ;[COFINS_Valor             ]=It_vr_cofins[nitens]     
  
            skip
            if eot() then quitloop endif
        endwhile
  endif
  If RecordStatus("Locked") Then UnLockRecord EndIf         
  
  If CONTADOR_BC_RATEIO=1 
    Then Carrega_array_Itens("PedidoG")
         CALCULA_IMPOSTO()
  EndIf
EndFor
      
Moveto TabelaRefC

LimpAguarde()
EndProc   ; (Rateio_BC_Itens)

;*******************************************************************************
;* ROTINA PARA Ler/Gravacao Opcao                                              *
;*******************************************************************************
Proc ConfOpcoes(Opcao)
Private Opcao
  
Switch
  Case Opcao="Ler":
       If IsFile("IR_SITE.SC")
           Then Play "IR_SITE"
       EndIf
       If Not IsAssigned(VSDGPASTA) Then VSDGPASTA = VSDGDRIVE + "\\Note\\Importa" EndIf
  Case Opcao="Gravar":
       FileWrite        "IR_SITE.sc" From ";****** Variaveis de Configura‡„o Caminho Vise Informatica"+"\n"
       FileWrite Append "IR_SITE.sc" From "VSDGPASTA="+Chr(34)+AjustaPasta(VSDGPASTA)+Chr(34)+"\n"
EndSwitch
  
EndProc ;

;*******************************************************************************
;* Carregar Lista                                                              *
;*******************************************************************************
Proc AjustaPasta(s)
Private s,ns,i
  
ns=""
For i From 1 to Len(s)
 If SubStr(s,i,1)=Chr(92)
    Then ns=ns+Chr(92)
 EndIf
 ns=ns+SubStr(s,i,1)
EndFor
Return ns
EndProc

;*******************************************************************************
;* Excluir arquivo da Lista                                                    *
;*******************************************************************************
Proc ExcluirArquivoLista()
private i, c, Array_RegistroI

FileWrite        PrivDir()+"funcao1.txt"  From  "DELT|"+VSDGPASTA+ARQUIVO+"\n"
ExecVise(PrivDir()+"funcao1.txt")

Array_Registro[nlinha]=""

DynArray Array_RegistroI[]
c=0
For i From 1 To DynArraySize(Array_Registro)
  If IsBlank(Array_Registro[i]) Then Loop EndIf
  c=c+1
  Array_RegistroI[c]=Array_Registro[i]
EndFor

Release Vars Array_Registro
DynArray Array_Registro[]

For i From 1 To DynArraySize(Array_RegistroI)
  Array_Registro[i]=Array_RegistroI[i]
EndFor
Release Vars Array_RegistroI

if nlinha>DynArraySize(Array_Registro)
   then ArrayElement=DynArraySize(Array_Registro)
   else ArrayElement=nlinha
endif   

EndProc

;*******************************************************************************
;* Carregar Lista                                                              *
;*******************************************************************************
Proc CarregarLista(arqtemp)
private arqtemp

ARQUIVO  =""
DynArray Array_Registro[]

Wcs=0
Lista_DiretorioD(VSDGPASTA,arqtemp,"C") 

For i from 1 to 7
  If Not IsFile(PrivDir()+"Dir.Txt")
     Then Sleep(1000)
          Loop
     Else Editor Open PrivDir()+"Dir.Txt"
          If ErrorCode()=27
             Then Sleep 1000
                  Loop
          EndIf
          
          While True
            Extrair_Linha()
            If IsBlank(ELinha) Then QuitLoop EndIf
            wcs=wcs+1
            Array_Registro[wcs]=Completa(SubStr(ELINHA,1,Len(ELINHA)-1),60," ")+" "
          EndWhile
          CancelEdit
                                        
          QuitLoop
  EndIf
EndFor
ArrayElement=1
EndProc

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros_Pedido()

GetRecord "P_Pedido" VSDGEMPRESA To REG_PPEDIDO 
If Not RetVal
   Then Mensagem("Parametros P_Pedido n„o Cadastrado para a Empresa ["+[PedidoC->Codigo da Empresa]+"] !")
        Return False
EndIf              

PARAM_ALTERA_FP                ="S"
PARAM_DESTINACAO               =REG_PPEDIDO["Codigo_Destinacao"    ]
PARAM_RELATORIO                =REG_PPEDIDO["Script_ImpressaoG"    ]
PARAM_RELATORIO_S              =REG_PPEDIDO["Script_ImpressaoG_S"  ]
PARAM_DATAS_VENCTOS            =REG_PPEDIDO["Datas_Vencimentos"    ]
PARAM_COR_TECIDO               =REG_PPEDIDO["Cor_Tecido"           ]
PARAM_TAMANHO                  =REG_PPEDIDO["Tamanho"              ]
PARAM_DESCUNIT                 =REG_PPEDIDO["Desconto Unitario"    ]
PARAM_VOLUMES                  =REG_PPEDIDO["Volumes"              ]
PARAM_SUBSTICMS                =REG_PPEDIDO["Substituicao ICMS"    ]
PARAM_IMPOSTOS                 =REG_PPEDIDO["Impostos"             ]
PARAM_TABELA_PRECO             =REG_PPEDIDO["Tabela_Preco"         ]
PARAM_TRANSPORTADORA           =REG_PPEDIDO["Codigo_Transportadora"]
PARAM_COMIS_ITEM               =REG_PPEDIDO["Comissao_Item"        ]
PARAM_COMIS_MARCA              =REG_PPEDIDO["Utiliza_Comissao_Marca"   ]

PARAM_TABPR_ITEM               =REG_PPEDIDO["Utiliza_Tabela_Preco_Item"]
PARAM_COMIS_VENCTO             =REG_PPEDIDO["Calcula_Comissao_Vencto"  ]
PARAM_VISITA                   =REG_PPEDIDO["Utiliza_Visita"           ]
PARAM_UTILIZA_TABPR_CLIENTE    =REG_PPEDIDO["Utiliza_TabPreco_Cliente" ]
PARAM_UTILIZA_TABPR_REPRES     =REG_PPEDIDO["Utiliza_TabPreco_Repres"  ]
PARAM_PEGAPRECO_CPAGTO         =REG_PPEDIDO["Pega_Preco_Tabela_CPagto" ]
PARAM_ALTERA_PRECO             =REG_PPEDIDO["Utiliza_Alteracao_Preco"  ]
PARAM_CONDPAGTO                =REG_PPEDIDO["Utiliza CP e FP Cliente"  ]
PARAM_PEDIDOIMP                =REG_PPEDIDO["Altera Pedido PosImpresso"]

If SYS_CODIGO_CLIENTE="0102" Or SYS_CODIGO_CLIENTE="0114"
   Then PARAM_CALC_COMIS_ITEM="S"
   Else PARAM_CALC_COMIS_ITEM="N"
EndIf
  
Return True

EndProc ;Carrega_Parametros()

;*******************************************************************************
;* Rotina ShowDialog para Imprimir em arquivo                                  *
;*******************************************************************************
Proc SD_Arquivo(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento

Temp=True
TECLA    =""
MSG_CAMPO=""

If Disparo="OPEN"
   Then AoCriarShowDialog()
        Campo="TG_EMPRESA"
        ArrayElement=nlinha
EndIf

If Disparo="UPDATE"
   Then Switch
          Case Campo="TG_CONFIG" : Play "\\Sistemas\\Ctarec\\SETPASTA"
                                   CarregarLista(TIPO_ARQ)
                                   Campo="TG_ARQUIVOS"
          OtherWise              : Return Temp
        EndSwitch  
EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Temp=False
   Switch  
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"            : Campo="NO"
            Case Campo="TG_ARQUIVOS"           : Campo="TG_EMPRESA"
            Case Campo="TG_CONFIG"             : Campo="TG_ARQUIVOS"
            Case Campo="YES" Or Campo="ARQ_NO" : Campo="TG_ARQUIVOS"
          EndSwitch
     Case Evento["KeyCode"] = 32 And Campo="TG_ARQUIVOS": 
          Temp=False
          If SubStr(Array_Registro[ControlValue("TG_ARQUIVOS")],61,1)=" "
             Then Array_Registro[ControlValue("TG_ARQUIVOS")]=SubStr(Array_Registro[ControlValue("TG_ARQUIVOS")],1,60)+"X"
             Else Array_Registro[ControlValue("TG_ARQUIVOS")]=SubStr(Array_Registro[ControlValue("TG_ARQUIVOS")],1,60)+" "
          EndIf     
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"     : Campo="TG_ARQUIVOS"
                         If VSDGEMPRESA=""
                            Then Mensagem("Informe a empresa para prosseguir!")
                                 VSDGNOMEMP=""
                                 Campo="TG_EMPRESA"
                         EndIf        
                    Case Campo="TG_ARQUIVOS"    : Campo="YES"
                         ARQUIVO=ControlValue("TG_ARQUIVOS")
                    Case Campo="TG_CONFIG"      : 
                         Play "\\Sistemas\\Ctarec\\SETPASTA"
                         CarregarLista(TIPO_ARQ)
                         Campo="TG_ARQUIVOS"
                  EndSwitch
          EndIf
   EndSwitch
EndIf
Switch
  Case Campo="TG_ARQUIVOS":
       MSG_CAMPO="Selecione o arquivo"
       TECLA="Barra de Espa‡o=Marca/Desmarca"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc                    
                         
;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO=""   EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""    EndIf

If SYS_CODIGO_CLIENTE="0227" Or SYS_CHAPA_USUARIO ="9999" 
   Then ROTINA_LIBERADA = True
   Else ROTINA_LIBERADA = False       
EndIf

If Not ROTINA_LIBERADA
   Then Mensagem("Rotina indispon¡vel !//Verificar com o Suporte VISE !")
        Return
EndIf

If Not Carrega_ParametrosC()
   Then Mensagem("Parametros n„o Cadastrado para esta Empresa ! [P_Dest]")
        Return
EndIf    

VSDGDRIVE   = SubStr(Directory(),1,2)
ConfOpcoes("Ler")

If DirExists(VSDGPASTA)=0
   Then Cria_Pasta(VSDGPASTA)
        Sleep 2000
EndIf

If DirExists(VSDGPASTA)=0
   Then Cria_Pasta(VSDGPASTA)
        Sleep 2000
EndIf                         

TIPO_ARQ = "PEDIDO*.csv"
ARQUIVO  = ""
Tipo_Ext = ".CSV"
nlinha   = 1

While True
 N_Pedido=0
 limparodape(0)
 ExibeRodape(1,"Aguarde, carregando arquivo(s) para importa‡Æo .csv")
 CarregarLista(TIPO_ARQ)
 ShowDialog "Importa‡Æo Site->Vise" Proc "SD_Arquivo"
   Trigger "OPEN","ARRIVE","UPDATE","CLOSE","SELECT"
   Key "F1","ENTER","ESC",
     -75, -77, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140, -147, 32      
    @ 03,12   Height 20 Width 78

    Label  @ 00,00 "Selecione a Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP

    @ 02,01 ?? "Caminho padrÆo para arquivos do site: "
    @ 03,02 ?? VSDGPASTA
    PaintCanvas Attribute 121 03,01,03,73

    Label  @ 05,00 "~L~ista de arquivos"  For "TG_ARQUIVOS"
    PickDynArray @06,01 Height 9 width 73
     Columns 1
      Array_Registro
       Tag "TG_ARQUIVOS"
        To ArrayElement

    Pushbutton @ 16,25 width 11 "~O~k"         OK     Default Value "Ok" Tag "YES"        To BottonValue
    Pushbutton @ 16,38 width 11 "~C~ancela"    CANCEL                    Tag "NO"         To BottonValue
    Pushbutton @ 16,61 width 14 "Con~f~igurar"                           Tag "TG_CONFIG"  To BottonValue

 EndDialog
 If Not Retval Then QuitLoop EndIf
                
 If VSDGEMPRESA=""
    Then Mensagem("Informe a empresa para prosseguir!")
         VSDGNOMEMP=""
         Loop 
  EndIf      
  
  If DynArraySize(Array_Registro)=0
     Then Mensagem("NÆo existe arquivo selecionado !")
          Loop
  EndIf
  
  If Not Carrega_Parametros_Pedido()
     Then Loop
  EndIf 
  
  If IsBlank(ARQUIVO)
     Then Mensagem("Nome do arquivo a ler inv lido !")
          Loop
  EndIf      
 
  If Not IsAssigned(Array_Registro[ArrayElement]) 
     Then Mensagem("Impossivel localizar o arquivo!// //Verifique se adicionou o arquivo no local correto!")
          Loop
  EndIf
  
  If DirExists(VSDGPASTA)=0
     Then Mensagem("Pasta '"+VSDGDRIVE+VSDGPASTA+"' n„o existe !// //Impossivel importa‡„o !")
          Loop
  EndIf
  
  Npacotes=0
  cpacotes=0
  For i from 1 to DynArraySize(Array_Registro)
    If SubStr(Array_Registro[i],61,1)="X" 
       Then NPacotes=NPacotes+1
    EndIf
  Endfor   
  
  If NPacotes=0 
     Then Mensagem("Nenhum pacote selecionado !")
          Loop
     Else getrecord "\\sistemas\\cadastro\\empresas" VSDGEMPRESA to regempresas
          if retval
             then
                  UF_EMPRESA=regempresas["UF Empresa"]
                  TPEMPR    =regempresas["Tipo da Empresa"]
                  ATIVEMPR  =regempresas["Atividade"]
                  
                  getrecord "Estados" UF_EMPRESA to regestados
                  if retval
                     Then UFEMPRESA_ALIQUOTA_ICMS=regestados["Aliquota de ICMS"]
                     Else UFEMPRESA_ALIQUOTA_ICMS=BlankNum()
                  EndIf
          endif   
          param_impostos="S"
          
          Conta_Array_Erro = 0
          DynArray Array_Erro[]   
          
          Indice_lista=1
          While Indice_lista<=DynArraySize(Array_Registro)
            Release Vars Array_TM 
             
            Array Array_TM[12]
          
            If SubStr(Array_Registro[Indice_lista],61,1) <> "X" 
               Then Indice_lista=Indice_lista+1
                    Loop 
            EndIf
            ARQUIVO = Rtrim(SubStr(Array_Registro[Indice_lista],025,36))
            nlinha    = Indice_lista
            NOM_ARQ   = ARQUIVO
            ARQ_TEMP2 = "IMPORTADO_"+NOM_ARQ
            ARQUIVO   = VSDGDRIVE+"\\NOTE\\IMPORTA\\PED_TEMP.CSV"
          
            If IsFile(ARQUIVO) 
               Then Deleta_Arquivo(ARQUIVO)
            EndIf
          
            Copia_Arquivo(VSDGDRIVE+"\\NOTE\\IMPORTA\\"+NOM_ARQ+" "+ARQUIVO)
          
            Importa_Pedido()
            
            If ARQ_TEMP2<>""
               Then cmd="REN "+VSDGDRIVE+"\\NOTE\\IMPORTA\\"+NOM_ARQ+" "+VSDGDRIVE+"\\NOTE\\IMPORTA\\"+ARQ_TEMP2
                    ExecVise(cmd)
                    Sleep (1000)    
                    Deleta_Arquivo(VSDGDRIVE+"\\NOTE\\IMPORTA\\PED_TEMP.CSV")                  
            EndIf
            
            Indice_lista=Indice_lista+1  
          EndWhile   
  EndIf      
  If N_Pedido=0
     Then Mensagem("N„o foi localizado pedidos a ser importado!")
     Else If DynArraySize(Array_Erro)>0
             Then IMPRIMIR() 
          EndIf
          Mensagem("Processo Conclu¡do!")
  EndIf   
EndWhile