;** ImpPda02 *******************************************************************
;* Importacao de Dados PDA Sistemas Inner                                      *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 04/09/2006 por Anivel Augusto Rodrigues
;Ultima Alteracao: 12/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CPF/CNPJ
;Ultima Alteracao: 04/04/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tipo Pessoa
;Ultima Alteracao: 12/07/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CGC, Cidades, Lookups Destinat
;Ultima Alteracao: 15/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Run
;Ultima Alteracao: 24/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CNPJ/CPF/IE
;Ultima Alteracao: 24/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Criar Cliente Novo
;Ultima Alteracao: 16/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Criar Cliente Novo
;Ultima Alteracao: 05/02/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Layout Cliente/Pedidoc/Pedidoi/Enderecos
;Ultima Alteracao: 09/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 
;Ultima Alteracao: 30/11/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo de "ExecVise -> Vexe"
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS" 
;Ultima Alteracao: 21/08/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Situacao do Cliente" p/ permitir situa‡Æo como OTIMO
;Ultima Alteracao: 07/03/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes ROUND em LerDados() 
;Ultima Alteracao: 18/03/2014 por Kamila Gomes 
;Motivo Alteracao: Ajustes ROUND em CALC_PEDIDO()
;Ultima Alteracao: 04/04/2014 por Kamila/Bruno/Anivel 
;Motivo Alteracao: Ajsutes LerDados() / e onde CNPJ nÆo encontrado   
;Ultima Alteracao: 07/07/2015 por Bruno Carvalho 
;Motivo Alteracao: Cleber realizou altera‡äes na proc Importa() p/ [Codigo da Destinacao] receber valor  
;Ultima Alteracao: 07/05/2015 por Bruno Carvalho 
;Motivo Alteracao: Alterado na importa‡Æo dos pedidos a situa‡Æo, de ABERTO p/ SUSPENSO
;Ultima Alteracao: 15/05/2015 por Bruno Carvalho 
;Motivo Alteracao: Cleber enviou por email uma linha que foi adicionado [Codigo da Destinacao] na proc LerDados()  
;Ultima Alteracao: 10/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Biblioteca Bib_Ven     
;Ultima Alteracao: 27/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"             
;Ultima Alteracao: 06/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ICMS ST FEM
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Checa_MVA() e remo‡Æo do INNERI08 p/ Bib_Vend -> Checa_MVA()
;Ultima Alteracao: 19/10/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes CALC_VOLUMES() -> DMARCA e DUNID p/ pegar valores no cadastro de itens 
;Ultima Alteracao: 13/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CALC_VOLUMES() unidades        
;Ultima Alteracao: 03/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao PARAM_VERSAODANFE
;Ultima Alteracao: 11/09/2018 por Bruno Carvalho
;Motivo Alteracao: Comentados campos que foram removidos da tabela PEDIDOI/PEDIDOG
;Ultima Alteracao: 26/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NCMUF             
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 14/06/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes tamb‚m CALC_PEDIDO() e CALCULA_IMPOSTO() conforme ajustes no PEDIDO.SC em 13/06/2019
;Ultima Alteracao: 28/08/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0112 regra tributa‡Æo

;*******************************************************************************
;* Rotina Converte DB                                                          *
;*******************************************************************************
Proc Syncroniza(Tp)
ClearAll

Switch
  Case Tp="Importa":
       Aguarde("Aguarde, Convertendo "+ARQ)

       Empty("InnerOut")
       Empty("IS_clie")
       Empty("IS_pedc")
       Empty("IS_pedi")
       If IsAssigned(varinner) Then release vars varinner  EndIf

       FileRead ARQ to varinner
       Edit "InnerOut"
       pos=1
       While True
         posf=searchFrom("\n",varinner,pos)
         if posf=0 then quitLoop endif
         [Texto]=substr(varinner,pos,(posf-pos))
         Down
         pos=posf+1
       EndWhile
       Do_It!
       ClearAll

       If IsAssigned(varinner) Then release vars varinner  EndIf

  Case Tp="Renomeia":
       Aguarde("Aguarde, Renomeando "+ARQ)

       ARQLido="C:\\Inner\\Out\\"+
               "Importado "+Completa(USERPALM,9," ")+"em "+

                AlinhM(StrVal(Year(Today())),4) +
                AlinhM(StrVal(Month(Today())),2)+
                AlinhM(StrVal(Day(Today())),2)  +"-"+

                SubStr(StrVal(Time()),1,2)+
                SubStr(StrVal(Time()),4,2)+
                SubStr(StrVal(Time()),7,2)+

                ".OUT"

       ExecVise("REN "+ARQ+" \""+ARQLido+"\"")

EndSwitch
Return True
EndProc



Proc PegaValor(numcampo)

posi=1
For i From 1 To numcampo
  Pos=SearchFrom("|",[InnerOut->Texto],posi)
  If pos=0 then pos=500 EndIf
  Valor=UPPER(RTrim(SubStr([InnerOut->Texto],posi,(pos-posi))))
  posi=pos+1
EndFor

Return Valor
EndProc



;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc LerDados()
ClearAll
Aguarde("Aguarde, lendo dados "+ARQ)

View "IS_PEDC"
View "IS_PEDI"
View "IS_CLIE"
CoEdit "InnerOut"
SetHighLight Current Record 23 Field 31
NR = NRecords("InnerOut")
NregPed=NR
Scan

  Barra(NR, RecNo())
  Aguarde("Aguarde, lendo dados "+BARRA_STRING)

  If SubStr([Texto],1,1)="" Then Loop EndIf

  Switch
    Case PegaValor(1)="IS_CLIENTE_EX"    : TipoReg="CLIENTE"

      CODCLI=AlinhM(StrVal(NumVal(PegaValor(5))),4)

      Moveto "IS_CLIE"
      Moveto [CLIENTE_ID]
      Locate CODCLI
      If Not RetVal
         Then End
              Down

              [CLIENTE_ID   ]=CODCLI
              [NOME         ]=Tira_CharEspecial(PegaValor(7))
              [RSOCIAL      ]=Tira_CharEspecial(PegaValor(8))
              [PJ           ]=PegaValor(9)
              [CNPJ         ]=Tira_CharNum(PegaValor(10))
              [ENDERECO     ]=Tira_CharEspecial(PegaValor(11))
              [CIDADE       ]=Tira_CharEspecial(PegaValor(12))
              [UF           ]=Tira_CharEspecial(PegaValor(13))
              [BAIRRO       ]=Tira_CharEspecial(PegaValor(14))
              [INSCEST      ]=Tira_CharNum(PegaValor(15))
              [TELEFONE     ]=PegaValor(16)
              [EMAIL        ]=PegaValor(17)
              [FAX          ]=PegaValor(18)
              [CEP          ]=Tira_CharNum(PegaValor(20))
              [ID_CATCLI    ]=AlinhM(StrVal(NumVal(PegaValor(26))),4)
              [ID_TRANSP    ]=AlinhM(StrVal(NumVal(PegaValor(27))),4)
              [OBS          ]=PegaValor(33)
              UnlockRecord
      EndIf    
            
    Case PegaValor(1)="IS_ENDEALT_EX"    : TipoReg="ENDERECOS"

      CODCLI=AlinhM(StrVal(NumVal(PegaValor(6))),4)
      TIPEND=StrVal(NumVal(PegaValor(7)))

      Switch
        Case TIPEND="1":
          Moveto "IS_CLIE"
          Moveto [CLIENTE_ID]
          Locate CODCLI
          If RetVal
             Then [ENDERECO_COB ]=Tira_CharEspecial(PegaValor(9))
                  [CIDADE_COB   ]=Tira_CharEspecial(PegaValor(10))
                  [UF_COB       ]=Tira_CharEspecial(PegaValor(11))
                  [BAIRRO_COB   ]=Tira_CharEspecial(PegaValor(12))
                  [CEP_COB      ]=Tira_CharNum(PegaValor(13))
          Endif
          
        Case TIPEND="2":
          Moveto "IS_CLIE"
          Moveto [CLIENTE_ID]
          Locate CODCLI
          If Not RetVal
             Then [ENDERECO_ENT ]=Tira_CharEspecial(PegaValor(9))
                  [CIDADE_ENT   ]=Tira_CharEspecial(PegaValor(10))
                  [UF_ENT       ]=Tira_CharEspecial(PegaValor(11))
                  [BAIRRO_ENT   ]=Tira_CharEspecial(PegaValor(12))
                  [CEP_ENT      ]=Tira_CharNum(PegaValor(13))
          Endif
      EndSwitch

    Case PegaValor(1)="IS_PEDIDO"        : TipoReg="CABECA"

      Moveto "IS_PEDC"
      End
      Down

      [Numero do Pedido         ]=StrVal(NumVal(PegaValor(2)))
      [Codigo                   ]=StrVal(NumVal(PegaValor(3)))

      DT=PegaValor(4)
      [Data de Emissao          ]=DateVal(SubStr(DT,5,2)+"/"+
                                          SubStr(DT,7,2)+"/"+
                                          SubStr(DT,1,4))

      DT=PegaValor(11)
      [Data de Entrega          ]=DateVal(SubStr(DT,5,2)+"/"+
                                          SubStr(DT,7,2)+"/"+
                                          SubStr(DT,1,4))

      [Condicao de Pagamento    ]=AlinhM(StrVal(NumVal(PegaValor(8))),2)
      [Forma de Pagamento       ]=StrVal(NumVal(PegaValor(9)))
      [Codigo da Transportadora ]=AlinhM(StrVal(NumVal(PegaValor(13))),4)
      [Frete por Conta          ]=StrVal(NumVal(PegaValor(14)))
      [Codigo da Tabela         ]=AlinhM(StrVal(NumVal(PegaValor(7))),5)

      VR=XTrim(PegaValor(10),",")
      [Valor do Desconto        ]=Round(NumVal(VR)/100,2)

      [Codigo da Destinacao     ]=AlinhM(StrVal(NumVal(PegaValor(32))),3)
      VR=XTrim(PegaValor(15),",")
      [Valor Nota Fiscal        ]=Round(NumVal(VR)/100,2)

      [Observacao do Pedido     ]=PegaValor(33)
      [Hora da Saida            ]=PegaValor(34)

    Case PegaValor(1)="IS_PEDIDO_PRODUTO": TipoReg="ITEM"
      Moveto "IS_PEDI"
      End
      Down

      [Numero do Pedido     ]=StrVal(NumVal(PegaValor(3)))
      [Item do Pedido       ]=NumVal(PegaValor(2))
      [Codigo do Item       ]=AlinhM(StrVal(NumVal(PegaValor(4))),10)

      VR=XTrim(PegaValor(6),",")
      [Quantidade           ]=NumVal(VR)/100

      VR=XTrim(PegaValor(7),",")
      [Preco Unitario Tabela]=NumVal(VR)/100

      VR=XTrim(PegaValor(8),",")
      PRECOTOT =NumVal(VR)/100

      [Preco Unitario       ]=PRECOTOT/[Quantidade]
      [Preco Total          ]=Round([Quantidade]*[Preco Unitario],2)
      [Codigo da Tabela     ]=AlinhM(StrVal(NumVal(PegaValor(5))),5)

  EndSwitch

  Moveto "InnerOut"
EndScan
Do_It!
ClearAll

Endproc

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc Importa()
private regtbprite

ClearAll

Aguarde("Aguarde, Importando Pedidos")

CHAVEC=1

LidoCli=0
NregPed=0
LidoPed=0
ImpoPed=0
SyncPed=0

View "\\Sistemas\\Estoque\\Ncmuf"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\DestObs"
View "\\Sistemas\\Cadastro\\End_Cob"
View "\\Sistemas\\Cadastro\\Fpgpda"
View "\\Sistemas\\Cadastro\\Cidades"
View "Estados"
View "Destin"
View "Tbprite"
View "PedidoI"
View "PedidoV"
View "PedidoC"
View "IS_CLIE"
View "IS_PEDI"
CoEdit "IS_PEDC"
NR = NRecords("IS_PEDC")
NregPed=NR
Scan For [Numero do Pedido]<>""

  Barra(NR, RecNo())
  Aguarde("Aguarde, Importando Pedidos "+BARRA_STRING)

  LidoPed=LidoPed+1

  PEDORIG=VSDGREPRESEN+"/"+AlinhM([IS_PEDC->Numero do Pedido],6)
  PED_OK=True
  Moveto "PedidoC"
  Moveto [Numero Pedido Origem]
  Locate PEDORIG
  If RetVal
     Then While True
            If [Situacao do Pedido]<>"CANCELADO"
               Then If [Codigo do Representante]=VSDGREPRESEN And
                       [Data de Emissao]=[IS_PEDC->Data de Emissao]
                       Then ;;MSG="Pedido do PDA N§ "+AlinhM(StrVal([INNEROUT->NUM_PED]),6)+" j  existe no sistema !// //"
                            ;;MSG=MSG+"Pedido Origem: "+PEDORIG+", Pedido Sistema: "+[Numero do Pedido]
                            ;;Mensagem(MSG)

                            SyncPed=SyncPed+1
                            PED_OK=False
                            QuitLoop
                    EndIf
            EndIf
            Skip
            If EOT() Then Quitloop EndIf
            Locate Next PEDORIG
            If Not RetVal
               Then QuitLoop
            EndIf
          EndWhile
  EndIf
  If Not PED_OK
     Then Moveto "IS_PEDC"
          ;;CONFGERAL("Deseja continuar com a importa‡„o ?")
          ;;If OK<>"S"
          ;;   Then QuitLoop
          ;;   Else Loop
          ;;EndIf

          Loop
  EndIf

  CLIENTE   =[IS_PEDC->Codigo]
  CodClieNew=""
  ClieNew   =False
  OBSIMP    =""

  Moveto "IS_CLIE"
  Moveto [CLIENTE_ID]
  Locate CLIENTE
  If RetVal
     Then
          OBSIMP="** CLIENTE NOVO **"

          Pesq_CNPJ_CPF="????"
          Tipo_Pessoa="FISICA"
          If Not IsBlank([IS_CLIE->CNPJ])
             Then
                ;;If [IS_CLIE->PJ]="1"

                  If Len([IS_CLIE->CNPJ])>11
                     Then  ;;Pesq_CNPJ_CPF=[IS_CLIE->CNPJ]
                           Tipo_Pessoa="JURIDICA"
                           Pesq_CNPJ_CPF=SubStr([IS_CLIE->CNPJ],01,2)+"."+
                                         SubStr([IS_CLIE->CNPJ],03,3)+"."+
                                         SubStr([IS_CLIE->CNPJ],06,3)+"/"+
                                         SubStr([IS_CLIE->CNPJ],09,4)+"-"+
                                         SubStr([IS_CLIE->CNPJ],13,2)

                      Else ;;Pesq_CNPJ_CPF=[IS_CLIE->CNPJ]
                           Tipo_Pessoa="FISICA"
                           Pesq_CNPJ_CPF=SubStr([IS_CLIE->CNPJ],01,3)+"."+
                                         SubStr([IS_CLIE->CNPJ],04,3)+"."+
                                         SubStr([IS_CLIE->CNPJ],07,3)+"-"+
                                         SubStr([IS_CLIE->CNPJ],10,2)
                  EndIf
          EndIf

          If Pesq_CNPJ_CPF="????" 
             Then Moveto "IS_PEDC" 
                  Loop 
          EndIf

          Moveto "\\Sistemas\\Cadastro\\Destinat"
          Moveto [CGC]
          Locate Pesq_CNPJ_CPF
          If RetVal
             Then CLIENTE=[Codigo]
             Else Cria_Cliente()
                  ClieNew=True
          EndIf
  EndIf

  Moveto "PedidoC"
  While True
    End
    Moveto [Numero do Pedido]
    If Numero_Lancamento("Interno","Locked_Down")
       Then NPED = PROXLANCTO_NLANC
            Release Vars PROXLANCTO_NLANC
            quitloop
    EndIf    
  EndWhile
  
  ImpoPed=ImpoPed+1
  [Codigo da Empresa        ]=VSDGEMPRESA
  [Data de Emissao          ]=[IS_PEDC->Data de Emissao          ]
  [Data de Entrega          ]=[IS_PEDC->Data de Entrega          ]
  If Not ClieNew
     Then [Codigo                   ]=AlinhM(CLIENTE,4)
     Else [Codigo                   ]=CodClieNew
  EndIf

  Enderecos()

  [Codigo do Representante  ]=VSDGREPRESEN
  [Nome Fantasia Represent  ]=VSDGNOMREPR
  [Condicao de Pagamento    ]=[IS_PEDC->Condicao de Pagamento    ]

  Moveto "\\Sistemas\\Cadastro\\fpgpda"
  Moveto [Codigo]
  Locate NumVal([IS_PEDC->Forma de Pagamento])
  If RetVal
     Then cfpg=[Tipo do Pagamento]
     Else cfpg=""
  EndIf

  Moveto "PedidoC"
  [Forma de Pagamento       ]=cfpg

  Switch
    Case [IS_PEDC->Codigo da Destinacao]="000" : [Codigo da Destinacao]="001"
    Case [IS_PEDC->Codigo da Destinacao]="001" : [Codigo da Destinacao]="027"
    Case [IS_PEDC->Codigo da Destinacao]="014" : [Codigo da Destinacao]="028"
    Case [IS_PEDC->Codigo da Destinacao]="013" : [Codigo da Destinacao]="029"
    OtherWise                                  : [Codigo da Destinacao]=[IS_PEDC->Codigo da Destinacao]
  EndSwitch  

  if [Codigo da Destinacao]="027" and [Tipo Pessoa]="FISICA"
     then [Codigo da Destinacao]="010"
  endif   
  
  Checa_UF_Destinacao()

  [Codigo da Transportadora ]=[IS_PEDC->Codigo da Transportadora ]
  [Frete por Conta          ]=[IS_PEDC->Frete por Conta          ]
  [Valor do Desconto        ]=[IS_PEDC->Valor do Desconto        ]

  [Observacao do Pedido     ]=[IS_PEDC->Observacao do Pedido]+obsimp
  [Hora de Saida            ]=[IS_PEDC->Hora da Saida  ]
  [Situacao do Pedido       ]="SUSPENSO"
  [Codigo da Tabela         ]=[IS_PEDC->Codigo da Tabela         ]
  if not isblank(VSDGTABELA)
     then [Codigo da Tabela         ]=VSDGTABELA
  endif
  [Sistema Gerador          ]="PM"
  [Numero_Carregamento      ]=VSDGNCARREG

  [Numero Pedido Origem     ]=PEDORIG
  [Codigo do Veiculo        ]=CODVEICULO
  Controle_Dia()
  UnLockRecord
  
  
  Seq=0

  Moveto "IS_PEDI"
  Moveto [Numero do Pedido]
  Locate [IS_PEDC->Numero do Pedido]
  While [Numero do Pedido]=[IS_PEDC->Numero do Pedido]

    Moveto "PedidoI"
    End
    Down

    Seq=Seq+1
    [Numero do Pedido     ]=[PedidoC->Numero do Pedido     ]
    [Item do Pedido       ]=Seq
    [Codigo do Item       ]=[IS_PEDI->Codigo do Item       ]
    [Quantidade           ]=[IS_PEDI->Quantidade           ]
    [Preco Unitario       ]=[IS_PEDI->Preco Unitario       ]
    [Preco Unitario Tabela]=[IS_PEDI->Preco Unitario Tabela]
    [Codigo da Tabela     ]=[IS_PEDI->Codigo da Tabela     ]
    [Preco Total          ]=[IS_PEDI->Preco Total          ]

    if not isblank(VSDGTABELA)
       then
            getrecord "Tbprite" VSDGTABELA,[Codigo do Item] to regtbprite
            if retval
               then
                    [Preco Unitario       ]=regtbprite["Preco Unitario"       ]
                    [Preco Unitario Tabela]=regtbprite["Preco Unitario"       ]
                    [Codigo da Tabela     ]=regtbprite["Codigo da Tabela"     ]
                    [Preco Total          ]=round([Quantidade]*[Preco unitario],2)
            endif   
    endif

    Ajusta_Dados_Item()
    UnLockRecord

    Moveto "IS_PEDI"
    Skip
    If EOT() Then QuitLoop EndIf

  EndWhile

  Moveto "PedidoC"
  Carrega_array_Itens()
  CALC_PEDIDO()
  CALC_VOLUMES()
  UnLockRecord

  Moveto "IS_PEDC"

EndScan
Do_It!
ClearAll

EndProc

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

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

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

   If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
      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 (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):

       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 Search("SIMPLES",pessoa_regimetributario)>0 : 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
                  Search("VEND",[PedidoC->Descricao da Destinacao])>0: 
               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
                  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 [PedidoC->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
                  Search("VEND",[PedidoC->Descricao da Destinacao])>0:: 
               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
             case sys_Codigo_Cliente="0112" and pessoacontribuinte 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 TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
    Then 
         [PIS_CST        ]  ="99"  [PIS_ALIQUOTA   ]=BlankNum() 
         [COFINS_CST     ]  ="99"  [COFINS_ALIQUOTA]=BlankNum() 
Endif
   
;-------------------------------------------------------------------------------

endproc

;*******************************************************************************
;* Checa Cliente Novo                                                          *
;*******************************************************************************
Proc Clientes()
ClearAll

View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\DestObs"
View "\\Sistemas\\Cadastro\\End_Cob"
View "\\Sistemas\\Cadastro\\Cidades"
CoEdit "IS_CLIE"
NR = NRecords("IS_CLIE")
Scan

  Barra(NR, RecNo())
  Aguarde("Aguarde, Importando Clientes Novos "+BARRA_STRING)

  CodClieNew=""
  ClieNew   =False

  OBSIMP="** CLIENTE NOVO **"

  Pesq_CNPJ_CPF="????"
  Tipo_Pessoa="FISICA"
  If Not IsBlank([IS_CLIE->CNPJ])
     Then
        ;;If [IS_CLIE->PJ]="1"

          If Len([IS_CLIE->CNPJ])>11
             Then  ;;Pesq_CNPJ_CPF=[IS_CLIE->CNPJ]
                   Tipo_Pessoa="JURIDICA"
                   Pesq_CNPJ_CPF=SubStr([IS_CLIE->CNPJ],01,2)+"."+
                                 SubStr([IS_CLIE->CNPJ],03,3)+"."+
                                 SubStr([IS_CLIE->CNPJ],06,3)+"/"+
                                 SubStr([IS_CLIE->CNPJ],09,4)+"-"+
                                 SubStr([IS_CLIE->CNPJ],13,2)

              Else ;;Pesq_CNPJ_CPF=[IS_CLIE->CNPJ]
                   Tipo_Pessoa="FISICA"
                   Pesq_CNPJ_CPF=SubStr([IS_CLIE->CNPJ],01,3)+"."+
                                 SubStr([IS_CLIE->CNPJ],04,3)+"."+
                                 SubStr([IS_CLIE->CNPJ],07,3)+"-"+
                                 SubStr([IS_CLIE->CNPJ],10,2)
          EndIf
  
          Moveto "\\Sistemas\\Cadastro\\Destinat"
          Moveto [CGC]
          Locate Pesq_CNPJ_CPF
          If Not RetVal
             Then Cria_Cliente()
                  ClieNew=True
          EndIf          
          
  EndIf
  Moveto "IS_CLIE"
EndScan
Do_It!
ClearAll
EndProc

;*******************************************************************************
;* Criar Cliente Novo                                                          *
;*******************************************************************************
Proc Cria_Cliente()
Moveto "\\Sistemas\\Cadastro\\Cidades"
Moveto [Cidade]
Locate [IS_CLIE->CIDADE    ]
If Not RetVal
   Then End Down
        [Cidade ]=[IS_CLIE->CIDADE    ]
        UnLockRecord
EndIf

Moveto "\\Sistemas\\Cadastro\\Destinat"
Moveto [Codigo]
While True
  End
  CodClieNew=AlinhM(StrVal(NumVal([Codigo])+1),4)
  Down
  [Codigo]=CodClieNew
  If Not IsLockRecord()
     Then QuitLoop
     Else Del
  EndIf
EndWhile

[Tipo                   ]="C"
[Nome Fantasia EmitDest ]=[IS_CLIE->NOME      ]
[Razao Social           ]=[IS_CLIE->RSOCIAL   ]
[Endereco               ]=[IS_CLIE->ENDERECO  ]
[Bairro                 ]=[IS_CLIE->BAIRRO    ]
[CEP                    ]=SubStr([IS_CLIE->CEP],1,2)+"."+
                          SubStr([IS_CLIE->CEP],3,3)+"-"+
                          SubStr([IS_CLIE->CEP],6,3)
[Cidade                 ]=[IS_CLIE->CIDADE    ]
[UF                     ]=[IS_CLIE->UF        ]
[Telefone               ]=[IS_CLIE->TELEFONE  ]
If IsBlank([IS_CLIE->INSCEST   ])
   Then [IE]="ISENTO"
   Else [IE]=SubStr([IS_CLIE->INSCEST],01,2)+"."+
             SubStr([IS_CLIE->INSCEST],03,6)+"."+
             RTrim(SubStr([IS_CLIE->INSCEST],09,5))
EndIf
[Endereco_Eletronico    ]=[IS_CLIE->EMAIL     ]
[Data_Cadastro          ]=Today()

;12 345 678 9012 34
;##.###.###/####-##  CGC
;123 456 789 01
;###.###.###-##      CPF

[Tipo Pessoa]=Tipo_Pessoa
[Cgc        ]=Pesq_CNPJ_CPF

[Codigo do Representante ]=VSDGREPRESEN
[Nome Fantasia Represent ]=VSDGNOMREPR

If [IS_CLIE->ID_CATCLI]<>"0000"
   Then [Codigo Atividade        ]=[IS_CLIE->ID_CATCLI]
EndIf
If [IS_CLIE->ID_TRANSP]<>"0000"
   Then [Codigo da Transportadora]=[IS_CLIE->ID_TRANSP]
EndIf

[Consumidor Final       ]="N"
[Inativo                ]="N"
[Situacao do Cliente    ]="OTIMO"
[Pais                   ]="BRASIL"
[Tipo Assistencia       ]="EVENTUAL"

[Data da Manutencao     ]=Today()
[Hora da Manutencao     ]=Time()
[Chapa                  ]= SYS_CHAPA_USUARIO
UnLockRecord

If Not IsBlank([IS_CLIE->ENDERECO_ENT]) Or
   Not IsBlank([IS_CLIE->ENDERECO_COB])
   Then
        Moveto "\\Sistemas\\Cadastro\\End_Cob"
        Moveto [Codigo]
        Locate CodClieNew
        If Not RetVal
           Then End
                Down
                [Codigo              ]=CodClieNew
                [Endereco de Cobranca]=[IS_CLIE->ENDERECO_COB ]
                [Bairro de Cobranca  ]=[IS_CLIE->BAIRRO_COB   ]
                [CEP de Cobranca     ]=SubStr([IS_CLIE->CEP_COB],1,2)+"."+
                                       SubStr([IS_CLIE->CEP_COB],3,3)+"-"+
                                       SubStr([IS_CLIE->CEP_COB],6,3)
                [Cidade de Cobranca  ]=[IS_CLIE->CIDADE_COB   ]
                [UF de Cobranca      ]=[IS_CLIE->UF_COB       ]

                [Endereco de Entrega ]=[IS_CLIE->ENDERECO_ENT ]
                [Bairro de Entrega   ]=[IS_CLIE->BAIRRO_ENT   ]
                [CEP de Entrega      ]=SubStr([IS_CLIE->CEP_ENT],1,2)+"."+
                                       SubStr([IS_CLIE->CEP_ENT],3,3)+"-"+
                                       SubStr([IS_CLIE->CEP_ENT],6,3)
                [Cidade de Entrega   ]=[IS_CLIE->CIDADE_ENT   ]
                [UF de Entrega       ]=[IS_CLIE->UF_ENT       ]
                UnLockRecord
        EndIf
EndIf

If Not IsBlank([IS_CLIE->OBS])
   Then
        Moveto "\\Sistemas\\Cadastro\\DestObs"
        Moveto [Codigo]
        Locate CodClieNew
        If Not RetVal
           Then End
                Down
                [Codigo     ]=CodClieNew
                [Observacoes]=[IS_CLIE->OBS]
                UnLockRecord
        EndIf
EndIf

LidoCli=LidoCli+1
EndProc

;*******************************************************************************
;*** 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 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 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 (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
          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 (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") 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 TPEMPR="DEBITO/CREDITO" 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 ( (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And It_csosn_icms[wi]="900" )
     Or TPEMPR="DEBITO/CREDITO"
     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

Rateio_BC_Itens("PedidoC")

EndProc ;(IMPOSTO)

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

TabelaRefC="Pedidoc"  TabelaRefI="Pedidoi"

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           ]
          
          It_vrdeson_icms[nitens]  =[ICMS_Valor_Desonerado   ]
          It_mtdeson_icms[nitens]  =[ICMS_Motivo_Desoneracao ]
        
          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_aliq_fcpst[nitens]    =[FCP_ST_Aliquota         ]
          It_vr_fcpst[nitens]      =[FCP_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]  =""
        
                  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)

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

;--- Seta Tabelas de Trabalho --------------------------------------------------
Moveto TabelaRefC
Switch
  Case TabelaRefC="PedidoC" : TabelaRefI="PedidoI"
EndSwitch

CopyToArray REG_TABELAREFC ; guarda dados registro mestre
Aguarde("Atualizando rateios nos itens")

Moveto TabelaRefI
nitens=0

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]
          
          [ICMS_Motivo_Desoneracao  ]=It_mtdeson_icms[NItens]       
          [ICMS_Valor_Desonerado    ]=It_vrdeson_icms[NItens]       
        
          ;[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]         
        
          [FCP_ST_Aliquota          ]=It_aliq_fcpst[nitens] 
          [FCP_ST_Valor             ]=It_vr_fcpst[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         

Moveto TabelaRefC

LimpAguarde()
EndProc   ; (Rateio_BC_Itens)

;*******************************************************************************
;* Rotina para Localizar Enderecos                                             *
;*******************************************************************************
Proc Enderecos()

CODIGO_OK=False
Moveto [Codigo_Entrega_Cobranca]
Ativa_Lookup()
Moveto [Codigo]
Locate [PedidoC->Codigo]
If RetVal
   Then CODIGO_OK=True
EndIf
KeyPress "ESC"

If CODIGO_OK
   Then [Codigo_Entrega_Cobranca]=[Codigo]
EndIf
If IsBlank([Endereco de Entrega])
   Then [Endereco de Entrega]="O MESMO"
EndIf
If IsBlank([Endereco de Cobranca])
   Then [Endereco de Cobranca]="O MESMO"
EndIf
EndProc   ;  (EnderecoS)

;*******************************************************************************
;* 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                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_REPRESEN"      : Campo="TG_EMPRESA"
            Case Campo="TG_NCARREG"       : Campo="TG_REPRESEN"
            Case Campo="TG_TABELA"        : Campo="TG_NCARREG"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"  : Campo="TG_REPRESEN"
                    Case Campo="TG_REPRESEN" : Campo="TG_NCARREG"
                    Case Campo="TG_NCARREG"  : Campo="TG_TABELA"
                    Case Campo="TG_TABELA"   : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="":
     MSG_CAMPO=""
  Case Campo="TG_EMPRESA":
     MSG_CAMPO="Informe uma empresa"
  Case Campo="TG_REPRESEN":
     MSG_CAMPO="Informe um representante"
  Case Campo="TG_TABELA":
     MSG_CAMPO="Em Branco=nÆo substituir, [F1]Consultar tabela"
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Vendas\\Bib_Vend"

sys_valor()

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""    EndIf
LimpAguarde()

VSDGEMPRESA =""
VSDGREPRESEN=""
VSDGNCARREG =""
VSDGTABELA  =""

While True

  ShowDialog "Importa‡Æo PDA - Layout Inner" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 13 Width 72

    Label  @ 00,00 "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_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Representante"  For "TG_REPRESEN"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_REPRESEN"   To VSDGREPRESEN
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMREPR"    To VSDGNOMREPR

    Label  @ 04,00 "Carregamento" For "TG_NCARREG"
    Accept @ 05,01 Width 9  "A6"  Picture "[&,#][#*#]" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG

    Label  @ 06,00 "Tabela a substituir"  For "TG_TABELA"
    Accept @ 07,01 Width 08 "A5"  Picture "#*#" Tag "TG_TABELA" To VSDGTABELA
    Accept @ 07,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMTAB" To VSDGNOMTAB

    Pushbutton @ 09,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 09,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Informe uma Empresa !")
          Loop
  EndIf
  If IsBlank(VSDGREPRESEN)
     Then Mensagem("Informe um Representante !")
          Loop
  EndIf

  TabOk=False
  View "\\Sistemas\\Cadastro\\Represen"
  Moveto [Codigo do Representante]
  Locate VSDGREPRESEN
  If RetVal
     Then If Not IsBlank([\Sistemas\Cadastro\Represen->Conta Contabil Represent])
             Then TabOk=True
                  USERPALM=RTRIM([\Sistemas\Cadastro\Represen->Conta Contabil Represent])
          EndIf
  EndIf
  ClearAll
  If Not TabOk
     Then Mensagem("Representante sem Conta informada no cadastro !// //Usu rio Palm Desktop !")
          Loop
  EndIf

  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"

  ARQ="C:\\Inner\\Out\\"+USERPALM+".OUT"
  If Not IsFile(ARQ)
     Then Mensagem("Arquivo "+ARQ+" nÆo encontrado !")
          Loop
  EndIf
  
  NCarregOk =True
  CODVEICULO=""
  If Not IsBlank(VSDGNCARREG)
     Then View "AcCarrgC"
          Moveto [Numero_Carregamento]
          Locate VSDGNCARREG
          If Not RetVal
             Then NCarregOk=False
                  Mensagem("Carregamento inv lido !")
             Else CODVEICULO=[Codigo do Veiculo]
                  If IsBlank(CODVEICULO)
                     Then NCarregOk=False
                          Mensagem("Veiculo n„o informado no Carregamento ")
                  EndIf
          EndIf
          ClearAll
  EndIf
  If Not NCarregOk Then Loop EndIf

  If Not Syncroniza("Importa")
     Then MENSAGEM("N„o existem pedidos a processar")
          Loop
  EndIf
  LerDados()
  Importa()
  Clientes()

  If NregPed=0
     Then MSG="N„o existem Pedidos no arquivo !// //"
     Else MSG="Resumo do Arquivo:// //"
          MSG=MSG+Format("W5,EIC",LidoPed)+" pedidos lidos           //"
          MSG=MSG+Format("W5,EIC",SyncPed)+" pedidos j  Sincronizados//"
          MSG=MSG+Format("W5,EIC",ImpoPed)+" pedidos importados      // //"
          MSG=MSG+Format("W5,EIC",LidoCli)+" clientes atualizados    // //"
  EndIf
  MSG=MSG+"Se por algum motivo precisar repetir este processo//"
  MSG=MSG+"para este Vendedor, verificar arquivo: "+ARQ
  Mensagem(MSG)
  Syncroniza("Renomeia")

EndWhile
ClearAll
Release Vars All
Release Procs All
