;** RestauOE  ******************************************************************
;*  Restaura‡Æo da(s) Ordem(ns) de Expedi‡„o(es)                               *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 06/10/2010 por Bruno Carvalho
;Ultima Alteracao: 21/10/2010 por Bruno Carvalho 
;Motivo Alteracao: AgrupaB()
;Ultima Alteracao: 04/111/2010 por Bruno Carvalho 
;Motivo Alteracao: Ajustes para Codigo_Cliente 0274
;Ultima Alteracao: 16/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Layout
;Ultima Alteracao: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova Codifica‡Æo
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes  
;Ultima Alteracao: 30/05/2011 por Karina Andrade
;Motivo Alteracao: Add Importa‡Æo de Pedidos  
;Ultima Alteracao: 27/06/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Arj para c:\Arj
;Ultima Alteracao: 13/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes verificar se item cadastrado quando agrupar !
;Ultima Alteracao: 01/12/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo de "Arj -> Varj"
;Ultima Alteracao: 08/12/2011 por Karina Andrade
;Motivo Alteracao: Nova nomeclatura pacote importado
;Ultima Alteracao: 11/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes checa importa‡Æo
;Ultima Alteracao: 13/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes checa importa‡Æo
;Ultima Alteracao: 03/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes nome pacote importado
;Ultima Alteracao: 07/05/2012 por Bruno Carvalho
;Motivo Alteracao: Add Sleep na rotina onde ‚ processado o ARJ
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS" 
;Ultima Alteracao: 03/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Layout                   
;Ultima Alteracao: 03/03/2013 por Anivel Augusto Rodrigues
;Ultima Alteracao: 02/07/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes AGRUPAB_Exped() -> Alterado variavel "i" para "wi"  
;Ultima Alteracao: 10/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Biblioteca Bib_Ven                  
;Ultima Alteracao: 10/03/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes AGRUPAB_Pedidos() -> Alterado variavel "i" para "out"  
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() getrecord                    
;Ultima Alteracao: 23/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao novas tabelas regras para produtos
;Ultima Alteracao: 29/09/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0388# -> PegaCodigoRaiz()
;Ultima Alteracao: 19/10/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Iten_Tec"
;Ultima Alteracao: 03/12/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0390# -> PegaCodigoRaiz()
;Ultima Alteracao: 06/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog     
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()              
;Ultima Alteracao: 07/04/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0396#
;Ultima Alteracao: 23/05/2017 por Rafael Matos
;Motivo Alteracao: Adicionado "Iten_Bar" 
;Ultima Alteracao: 22/06/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes nas mensagens de AGUARDE -> Itens()
;Ultima Alteracao: 27/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar condi‡Æo pagamento por item
;Ultima Alteracao: 08/08/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado Gera_Log()
;Ultima Alteracao: 19/10/2017 por Bruno Carvalho
;Motivo Alteracao: Removido de AGRUPAB_Pedidos() -> Aliquota Reduzida BCIPI
;Ultima Alteracao: 02/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes SIRI nÆo agrupar Itens                     
;Ultima Alteracao: 14/03/2018 por Bruno Carvalho 
;Motivo Alteracao: Adicionado "Iten_eco"
;Ultima Alteracao: 19/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Pega_Preco() pesquisa item e depois codigoraiz

;*******************************************************************************
;* Rotina Excluir Expedi‡„o Existentes                                         *
;*******************************************************************************
Proc Excluir_Expeds()

If Not IsTable(VSDGDRIVE+"\\ExpedC") Or
   Not IsTable(VSDGDRIVE+"\\ExpedI")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Ordem de Expedi‡„o !")
        Return
EndIf

ClearAll

AGUARDE("Aguarde, excluindo Ordem de Expedi‡„o existente")

{Ask} TypeIn VSDGDRIVE+"\\ExpedC" Enter
Moveto [Numero da OE       ] Check
Moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
Moveto [Data_Inclusao      ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Do_It!
ClearAll

Array Arquivo[3]
Arquivo[1]="ExpedC"
Arquivo[2]="ExpedI"
Arquivo[3]="ExpedIE"

Cont = 1
For Cont From 1 To 3
    AGUARDE("Aguarde, Excluindo "+Arquivo[Cont])
    If IsTable(Arquivo[Cont])
       Then {Ask} {Answer}
            Moveto [Numero da OE       ] Example "ndoc"
            {Ask} TypeIn Arquivo[Cont] Enter TypeIn "Fast Delete"
            Moveto [Numero da OE       ] Example "ndoc"
            Do_It!
            ClearAll
    EndIf
EndFor

EndProc


;*******************************************************************************
;* Rotina Excluir Carregamentos Existentes                                     *
;*******************************************************************************
Proc Excluir_Carregamentos()

If Not IsTable(VSDGDRIVE+"\\AccarrgC") Or
   Not IsTable(VSDGDRIVE+"\\AccarrgI") Or
   Not IsTable(VSDGDRIVE+"\\AccarrgV")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Carregamentos !")
        Return
EndIf

ClearAll

AGUARDE("Aguarde, Excluindo Carregamentos")

{Ask} TypeIn VSDGDRIVE+"\\AccarrgC" Enter
Moveto [Numero_Carregamento] Check
Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Do_It!
ClearAll

Arquivo[1]="AccarrgC"
Arquivo[2]="AccarrgI"
Arquivo[3]="AccarrgV"

Cont     = 1
For Cont From 1 To 3
    AGUARDE("Aguarde, Excluindo "+Arquivo[Cont])
    If IsTable(Arquivo[Cont])
       Then {Ask} {Answer}
            Moveto [Numero_Carregamento] Example "ndoc"
            {Ask} TypeIn Arquivo[Cont] Enter TypeIn "Fast Delete"
            Moveto [Numero_Carregamento] Example "ndoc"
            Do_It!
            ClearAll
    EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina Excluir Pedidos Existentes                                           *
;*******************************************************************************
Proc Excluir_Pedidos()

If Not IsTable(VSDGDRIVE+"\\PedidoC") Or
   Not IsTable(VSDGDRIVE+"\\PedidoI") Or
   Not IsTable(VSDGDRIVE+"\\PedidoV")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Pedidos !")
        Return
EndIf

ClearAll

AGUARDE("Aguarde, excluindo Pedidos existentes")

{Ask} TypeIn VSDGDRIVE+"\\PedidoC" Enter
Moveto [Numero do Pedido   ] Check
Moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Do_It!
ClearAll

Array Arquivo[3]
Arquivo[3]="PedidoC"
Arquivo[2]="PedidoI"
Arquivo[1]="PedidoV"

Cont     = 1
For Cont From 1 To 3
    AGUARDE("Aguarde, Excluindo "+Arquivo[Cont])
    If IsTable(Arquivo[Cont])
       Then {Ask} {Answer}
            Moveto [Numero do Pedido   ] Example "ndoc"
            {Ask} TypeIn Arquivo[Cont] Enter TypeIn "Fast Delete"
            Moveto [Numero do Pedido   ] Example "ndoc"
            Do_It!
            ClearAll
    EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina Importa Carregamentos                                                *
;*******************************************************************************
Proc Carregamentos()

If Not IsTable(VSDGDRIVE+"\\AccarrgC") Or
   Not IsTable(VSDGDRIVE+"\\AccarrgI") Or
   Not IsTable(VSDGDRIVE+"\\AccarrgV")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Carregamentos !")
        Return
EndIf

ClearAll

AGUARDE("Aguarde, Restaurando Carregamentos")

Array Arquivo[3]
Arquivo[1]="AccarrgC"
Arquivo[2]="AccarrgI"
Arquivo[3]="AccarrgV"

Cont     = 1

SetDir "\\Sistemas\\Vendas"
For Cont From 1 To 3
    AGUARDE("Aguarde, Restaurando "+Arquivo[Cont])
    If IsTable(Arquivo[Cont])
       Then If Arquivo[Cont]<>"AccarrgC"
               Then {Ask} TypeIn VSDGDRIVE+"\\AccarrgC" Enter
                    Moveto [Numero_Carregamento] Example "ndoc"
                    Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                    {Ask} TypeIn VSDGDRIVE +"\\"+Arquivo[Cont] Enter Check
                    Moveto [Numero_Carregamento] Example "ndoc"
               Else {Ask} TypeIn VSDGDRIVE+"\\AccarrgC" Enter Check
                    Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
            Endif
            Do_It!
            ClearAll
            If Not IsEmpty("Answer")
               Then Add "Answer" Arquivo[Cont]
                    ClearAll
            EndIf
            If IsTable("keyViol")
               Then Delete("KeyViol")
            EndIf
            IMPCAR=True
    EndIf
EndFor

EndProc

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

AGUARDE("Aguarde, Restaurando Destinat")
If IsTable(VSDGDRIVE+"\\Destinat")
   Then {Ask} TypeIn VSDGDRIVE+"\\Destinat" Enter Check
        Moveto [Codigo] Example "cod"
        {Ask} TypeIn VSDGDRIVE+"\\Expedc" Enter
        Moveto [Codigo] Example "cod"
        Do_It!
        ClearAll
        If Not ISEmpty("Answer")
           Then Add "Answer" "\\Sistemas\\Cadastro\\Destinat"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf
        IMPCLI=True
EndIf
ClearAll
EndProc

;*******************************************************************************
;* Rotina Importa Itens                                                        *
;*******************************************************************************
Proc Itens()
ClearAll

switch
  case sys_Codigo_Cliente="0227" : IMPITE=False

  case SYS_CLIENTE_CONFEC<>""    : IMPITE=True
                                   Return
endswitch

If IsTable(VSDGDRIVE+"\\Itens")
   Then AGUARDE("Aguarde, restaurando itens")
        {Ask} TypeIn VSDGDRIVE+"\\Itens" Enter Check
        Moveto [Codigo do Item] Example "ite"
        {Ask} TypeIn VSDGDRIVE+"\\ExpedI" Enter
        Moveto [Codigo do Item] Example "ite"
        Do_It!
        ClearAll
        If Not ISEmpty("Answer")
           Then Add "Answer" "\\Sistemas\\Estoque\\Itens"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf
        
        ;---- Complementos dos Itens -------------------------------------------
        AGUARDE("Aguarde, restaurando complemento dos itens")
        {Ask} TypeIn VSDGDRIVE+"\\Iten_com" Enter Check
        Moveto [Codigo do Item] Example "ite" 
        {Ask} TypeIn VSDGDRIVE+"\\ExpedI" Enter
        Moveto [Codigo do Item] Example "ite"
        Do_It!
        ClearAll
        
        If Not ISEmpty("Answer")
           Then Add "Answer" "\\Sistemas\\Estoque\\Iten_com"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf              
        
        ;---- Informa‡äes de Tecidos -------------------------------------------
        AGUARDE("Aguarde, restaurando inf. de tecidos dos itens")
        {Ask} TypeIn VSDGDRIVE+"\\Iten_tec" Enter Check
        Moveto [Codigo do Item] Example "ite"
        {Ask} TypeIn VSDGDRIVE+"\\ExpedI" Enter
        Moveto [Codigo do Item] Example "ite"
        Do_It!
        ClearAll
        
        If Not ISEmpty("Answer")
           Then Add "Answer" "\\Sistemas\\Estoque\\Iten_tec"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf
        
        ;---- Informa‡äes de e-Commerce ----------------------------------------
        AGUARDE("Aguarde, restaurando inf. de tecidos dos itens")
        {Ask} TypeIn VSDGDRIVE+"\\Iten_eco" Enter Check
        Moveto [Codigo do Item] Example "ite"
        {Ask} TypeIn VSDGDRIVE+"\\ExpedI" Enter
        Moveto [Codigo do Item] Example "ite"
        Do_It!
        ClearAll
        
        If Not ISEmpty("Answer")
           Then Add "Answer" "\\Sistemas\\Estoque\\Iten_eco"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf        
        
        ;---- Informa‡äes de C¢digos de Barras ---------------------------------
        AGUARDE("Aguarde, restaurando codigo de barra dos itens")
        {Ask} TypeIn VSDGDRIVE+"\\Iten_bar" Enter Check
        Moveto [Codigo do Item] Example "ite"
        {Ask} TypeIn VSDGDRIVE+"\\ExpedI" Enter
        Moveto [Codigo do Item] Example "ite"
        Do_It!
        ClearAll
        
        If Not IsEmpty("Answer") And IsTable("\\Sistemas\\Estoque\\Iten_bar")
           Then Add "Answer" "\\Sistemas\\Estoque\\Iten_bar"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf
        
        AGUARDE("Aguarde, finalizando a restaura‡„o dos itens")
        IMPITE=True
EndIf
ClearAll
EndProc

;*******************************************************************************
;* Rotina Importa Expeds                                                      *
;*******************************************************************************
Proc Expeds()

If Not IsTable(VSDGDRIVE+"\\ExpedC") Or
   Not IsTable(VSDGDRIVE+"\\ExpedI") 
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Ordem de Expedi‡„o !")
        Return False
EndIf

ClearAll

AGUARDE("Aguarde, Restaurando Expeds")
Array Arquivo[3]
Arquivo[1]="ExpedC"
Arquivo[2]="ExpedI"
Arquivo[3]="ExpedIE"

Cont = 1

SetDir "\\Sistemas\\Vendas"
For Cont From 1 To 2
    AGUARDE("Aguarde, Restaurando "+Arquivo[Cont])
    If IsTable(Arquivo[Cont])
       Then If Arquivo[Cont]<>"ExpedC"
               Then {Ask} TypeIn Tabela Enter
                    Moveto [Numero da OE       ] Example "ndoc"
                    {Ask} TypeIn VSDGDRIVE +"\\"+Arquivo[Cont] Enter Check
                    Moveto [Numero da OE        ] Example "ndoc"
				            Do_It!
				            ClearAll
               Else {Ask} TypeIn VSDGDRIVE+"\\ExpedC" Enter Check
                    Moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
                    Moveto [Data_Inclusao      ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
				            Do_It!
				            ClearAll
                    If IsEmpty("Answer")
                       Then Mensagem("N„o existem Ordem de Expedi‡„o conforme sele‡„o !")
											      Return False 
										EndIf	     

				            Tabela=Cria_Temp(PrivDir())
										Rename "Answer" Tabela
				            
                    {Ask} {ExpedC} Enter
                    Moveto [Numero da OE       ] Example "ndoc"
                    {Ask} TypeIn Tabela Enter TypeIn "Fast Delete"
                    Moveto [Numero da OE       ] Example "ndoc"
				            Do_It!
				            ClearAll
                    If IsEmpty(Tabela)
                       Then Mensagem("J  existem Ordem de Expedi‡„o no sistema conforme sele‡„o !//S¢ incluindo Ordem de Expedi‡„o novas conforme sele‡„o !")
											      Return False 
										EndIf	     

                    {Ask} TypeIn Tabela Enter Check
				            Do_It!
				            ClearAll

            Endif
            Add "Answer" Arquivo[Cont]
            ClearAll
            If IsTable("keyViol")
               Then Delete("KeyViol")
            EndIf

    EndIf
EndFor
IMPEXP=True
Return True
EndProc

;*******************************************************************************
;* Rotina ajusta dados pedidos                                                 *
;*******************************************************************************
Proc Ajusta_OE()
Private cc

switch
  case sys_Codigo_Cliente="0227" : Return
  case SYS_CLIENTE_CONFEC=""     : Return
endswitch

IMPEXP=False
If Not IsTable(VSDGDRIVE+"\\ExpedC") Or
   Not IsTable(VSDGDRIVE+"\\ExpedI") 
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Ordem de Expedi‡„o !")
        Return
EndIf

AGUARDE("Aguarde, Ajustando Dados ")
{Ask} TypeIn Tabela Enter 
Moveto [Numero da OE   ] Check 
Do_It!
ClearAll
If IsEmpty("Answer")
   Then Return
EndIf   

NR = NRecords("Answer")
View "ExpedC"
View "ExpedI"
View "ExpedIE"
CoEdit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Ajustando Ordem de Expedi‡„o "+BARRA_STRING)

  NUM_OE=[Numero da OE]

  Moveto "ExpedC"
  Moveto [Numero da OE]
  Locate NUM_OE
  If Not RetVal
     Then Moveto "Answer"
          Loop
  EndIf        
  For cc From 1 to 10
    if Not IsLockRecord()
       Then QuitLoop
    EndIf
  EndFor

  Moveto "ExpedC"

  AgrupaB_Exped()

	Do_It!

  Moveto "Answer"
  CoEditKey
EndScan
Do_It!
ClearAll

IMPEXP=True
EndProc

;*******************************************************************************
;* Rotina para Agrupar os Itens                                                *
;*******************************************************************************
Proc AGRUPAB_Exped()
Private CODNOVO, i,ii, wi

For I From 1 to 900
    CODIGO[I]=""
    QUANT_PED[I]=""
    QUANT_EXP[I]=""
    QUANT_SUB[I]=""
    QUANT_DIF[I]=""
    QUANT_FORA_PED[I]=""
EndFor

Moveto "ExpedI"
Moveto [Numero da OE]
Locate NUM_OE
If RetVal Then
  While [Numero da OE]=NUM_OE
    CODNOVO=[Codigo do Item]
    CODNOVO=PegaCodigoRaiz(CODNOVO)
    Moveto [Codigo do Item]
    For I From 1 to 900
        If CODIGO[I]=CODNOVO
           Then QUANT_PED[I]=QUANT_PED[I]+[Quantidade_Pedido               ]
                QUANT_EXP[I]=QUANT_EXP[I]+[Quantidade_Expedida             ]
                QUANT_SUB[I]=QUANT_SUB[I]+[Quantidade_Substituida          ]
                QUANT_DIF[I]=QUANT_DIF[I]+[Quantidade_Diferenca            ]
                QUANT_FORA_PED[I]=QUANT_FORA_PED[I]+[Quantidade_Fora_Pedido]
                QuitLoop
           Else If CODIGO[I]=""
                   Then CODIGO[I]=CODNOVO
                        QUANT_PED[I]=[Quantidade_Pedido          ]
                        QUANT_EXP[I]=[Quantidade_Expedida        ]
                        QUANT_SUB[I]=[Quantidade_Substituida     ]
                        QUANT_DIF[I]=[Quantidade_Diferenca       ]
                        QUANT_FORA_PED[I]=[Quantidade_Fora_Pedido]
                        QuitLoop
                Endif
        Endif
    Endfor
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile
EndIf

Moveto "ExpedI"
Home
Moveto [Numero da OE]
Locate NUM_OE
If RetVal 
   Then While [Numero da OE]=NUM_OE
          Del
        EndWhile
EndIf

Release Vars i

For wi From 1 to 900
    If IsBlank(CODIGO[wi])
       Then QuitLoop
    Endif

    Moveto [Numero da OE]
    End     
    Down
    [Numero da OE  ]=NUM_OE
    UnLockRecord

    Locate NUM_OE

    [Codigo do Item]=CODIGO[wi]
    If ErrorCode()=23
       Then Mensagem("Item nÆo cadastrado: "+CODIGO[wi]+", OE: "+NUM_OE+"//Item nÆo importado, Verificar !")
            Del 
            Loop
    EndIf
    
    [Quantidade_Pedido     ]=QUANT_PED[wi]
    [Quantidade_Expedida   ]=QUANT_EXP[wi]
    [Quantidade_Substituida]=QUANT_SUB[wi]
    [Quantidade_Diferenca  ]=QUANT_DIF[wi]
    [Quantidade_Fora_Pedido]=QUANT_FORA_PED[wi]
    For CONFERE From 1 To 5    
        Switch
           Case [Quantidade_Pedido     ]=0 : [Quantidade_Pedido     ]=BlankNum()
           Case [Quantidade_Expedida   ]=0 : [Quantidade_Expedida   ]=BlankNum()
           Case [Quantidade_Substituida]=0 : [Quantidade_Substituida]=BlankNum()
           Case [Quantidade_Diferenca  ]=0 : [Quantidade_Diferenca  ]=BlankNum()    
           Case [Quantidade_Fora_Pedido]=0 : [Quantidade_Fora_Pedido]=BlankNum()
        EndSwitch
    EndFor
    Unlockrecord

Endfor

EndProc

;*******************************************************************************
;* Rotina Importa Pedidos                                                      *
;*******************************************************************************
Proc Pedidos()

If Not IsTable(VSDGDRIVE+"\\PedidoC") Or
   Not IsTable(VSDGDRIVE+"\\PedidoI") Or
   Not IsTable(VSDGDRIVE+"\\PedidoV")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Pedidos !")
        Return False
EndIf

ClearAll

AGUARDE("Aguarde, Restaurando Pedidos")
Array Arquivo[3]
Arquivo[1]="PedidoC"
Arquivo[2]="PedidoI"
Arquivo[3]="PedidoV"

Cont     = 1

SetDir "\\Sistemas\\Vendas"
For Cont From 1 To 3
    AGUARDE("Aguarde, Restaurando "+Arquivo[Cont])
    If IsTable(Arquivo[Cont])
       Then If Arquivo[Cont]<>"PedidoC"
               Then {Ask} TypeIn Tabela Enter
                    Moveto [Numero do Pedido   ] Example "ndoc"
                    {Ask} TypeIn VSDGDRIVE +"\\"+Arquivo[Cont] Enter Check
                    Moveto [Numero do Pedido   ] Example "ndoc"
				            Do_It!
				            ClearAll
               Else {Ask} TypeIn VSDGDRIVE+"\\ExpedC" Enter
                    Moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
                    Moveto [Data_Inclusao      ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
                    Moveto [Numero do Pedido   ] Example "nped"
                    {Ask} TypeIn VSDGDRIVE+"\\PedidoC" Enter Check
                    Moveto [Numero do Pedido   ] Example "nped"
				            Do_It!
				            ClearAll
                    If IsEmpty("Answer")
                       Then Mensagem("N„o existem pedidos conforme sele‡„o !")
											      Return False 
										EndIf	     

				            Tabela=Cria_Temp(PrivDir())
										Rename "Answer" Tabela
				            
                    {Ask} {PedidoC} Enter
                    Moveto [Numero do Pedido   ] Example "ndoc"
                    {Ask} TypeIn Tabela Enter TypeIn "Fast Delete"
                    Moveto [Numero do Pedido   ] Example "ndoc"
				            Do_It!
				            ClearAll
                    If IsEmpty(Tabela)
                       Then Mensagem("J  existem pedidos no sistema conforme sele‡„o !//S¢ incluindo pedidos novos conforme sele‡„o !")
											      Return False 
										EndIf	     

                    {Ask} TypeIn Tabela Enter Check
				            Do_It!
				            ClearAll
				            
            Endif
            If Not IsEmpty("Answer")
               Then                 
                    Switch
                      Case Arquivo[Cont]="PedidoC":
                           {Ask} {Answer} TypeIn "Fast"
                           If Not VSDGPED[3]=True
                                  Then Moveto [Situacao do Pedido] TypeIn "Changeto ABERTO" 
                           EndIf
                           Moveto [Numero_Controle_Dia      ] TypeIn "Changeto Blank"
                           Moveto [Numero Nota Gerada_Ultima] TypeIn "Changeto Blank"
                           Do_It!
                           ClearAll

                           If SYS_CODIGO_CLIENTE="0126"
                              Then {Ask} {Answer} TypeIn "Fast"
                                   Moveto [Codigo do Representante] TypeIn "Changeto 0001"
                                   Moveto [Nome Fantasia Represent] TypeIn "Changeto UNIBRAS"
                                   Do_It!
                                   ClearAll
                           EndIf

                      Case Arquivo[Cont]="PedidoI":
                           {Ask} {Answer} TypeIn "Fast"
                           If Not VSDGPED[3]=True
                                  Then Moveto [Quantidade Faturada] TypeIn "Changeto Blank"
                           EndIf
                           Do_It!
                           ClearAll

                           If SYS_CODIGO_CLIENTE="0117"
                              Then {Ask} {Answer} TypeIn "Fast Delete"
                                   Moveto [Codigo da Cor_Tecido] TypeIn "0000"
                                   Do_It!
                                   ClearAll
                           EndIf
                    EndSwitch

                    Add "Answer" Arquivo[Cont]
                    ClearAll
            EndIf
            If IsTable("keyViol")
               Then Delete("KeyViol")
            EndIf

    EndIf
EndFor

If SYS_CODIGO_CLIENTE="0126"
  Then {Ask} {\\Sistemas\\Vendas\\PedidoC} TypeIn "Fast"
       Moveto [Codigo do Representante] TypeIn "Changeto 0001"
       Moveto [Nome Fantasia Represent] TypeIn "Changeto UNIBRAS"
       Do_It!
       ClearAll
EndIf
IMPPED=True
Return True
EndProc

;*******************************************************************************
;* Rotina ajusta dados pedidos                                                 *
;*******************************************************************************
Proc Ajusta_Pedidos()
Private cc

switch
  case sys_Codigo_Cliente="0227" : Return
  case SYS_CLIENTE_CONFEC=""     : Return
endswitch

IMPPED=False
If Not IsTable(VSDGDRIVE+"\\PedidoC") Or
   Not IsTable(VSDGDRIVE+"\\PedidoI") Or
   Not IsTable(VSDGDRIVE+"\\PedidoV")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Pedidos !")
        Return
EndIf

AGUARDE("Aguarde, Ajustando Dados ")
{Ask} TypeIn Tabela Enter 
Moveto [Numero do Pedido   ] Check 
Do_It!
ClearAll
If IsEmpty("Answer")
   Then Return
EndIf   

NR = NRecords("Answer")
View "P_Pedido"
View "PedidoI"
View "PedidoV"
View "PedidoC"
CoEdit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Ajustando Pedidos "+BARRA_STRING)

  NPED=[Numero do Pedido]

  Moveto "PedidoC"
  Moveto [Numero do Pedido]
  Locate NPED
  If Not RetVal
     Then Moveto "Answer"
          Loop
  EndIf        
  For cc From 1 to 10
    if Not IsLockRecord()
       Then QuitLoop
    EndIf
  EndFor

  If Not Carrega_Parametros()
     Then Moveto "Answer"
          Loop
  EndIf   

  Moveto "PedidoC"
  ;*** Aliquota do Estado ***
  Moveto [UF]
  Ativa_Lookup()
  Moveto [UF]
  Locate [PedidoC->UF]
  If RetVal
     Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
     Else UF_ALIQUOTA_ICMS=BlankNum()
  EndIf
  KeyPress "ESC"
  
  ;*** DESTINACAO ***
  TRIB_ICMS=""
  OPCAO_RED_BCICMS="1"

  Moveto [Codigo da Destinacao]
  Ativa_Lookup()
  Moveto [Codigo da Destinacao]
  Locate [PedidoC->Codigo da Destinacao]
  If RetVal
     Then If [ICMS Aliquota do Estado]<>"S"
             Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
          EndIf
          TRIB_ICMS=[Tributacao de ICMS]
          OPCAO_RED_BCICMS=[Sem Reducao BCICMS]
  EndIf
  KeyPress "ESC"

  AgrupaB_Pedidos()
  Calc_Pedido()

	Do_It!

  Moveto "Answer"
  CoEditKey
EndScan
Do_It!
ClearAll
IMPPED=True
EndProc

;*******************************************************************************
;* Rotina para Agrupar os Itens                                                *
;*******************************************************************************
Proc AGRUPAB_Pedidos()
Private CODNOVO, i,ii

For I From 1 to 900
    CODIGO[I]=""
    QUANTI[I]=BlankNum()
    PRECOU[I]=BlankNum()
EndFor

Moveto "Pedidoi"
Moveto [Numero do Pedido]
Locate NPED
If RetVal Then
  While [Numero do Pedido]=NPED
    CODNOVO=[Codigo do Item]
    CODNOVO=PegaCodigoRaiz(CODNOVO)
    Moveto [Codigo do Item]
    For I From 1 to 900
        If CODIGO[I]=CODNOVO
           Then QUANTI[I]=QUANTI[I]+[Quantidade]
                QuitLoop
           Else If CODIGO[I]=""
                   Then CODIGO[I]=CODNOVO
                        QUANTI[I]=[Quantidade]
                        PRECOU[I]=[Preco Unitario]
                        QuitLoop
                Endif
        Endif
    Endfor
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile
EndIf

Moveto "Pedidoi"
Home
Moveto [Numero do Pedido]
Locate NPED
If RetVal 
   Then While [Numero do Pedido]=NPED
          Del
        EndWhile
EndIf

For I From 1 To 10
    AICMS[I] =BlankNum()
    AIPI[I]  =BlankNum()

    BCICMS[I] =BlankNum()
    BCIPI[I]  =BlankNum()

    VIICMS[I] =BlankNum()
    VIIPI[I]  =BlankNum()

    RICMS[I] =BlankNum()
    RIPI[I]  =BlankNum()
EndFor

VRBCSUBST=0
VRMERC=0
For out From 1 to 900
    If IsBlank(CODIGO[out])
       Then QuitLoop
    Endif

    Moveto [Numero do Pedido]
    End
    Down
    [Numero do Pedido]=NPED
    [Item do Pedido  ]=out
    UnLockRecord

    Locate NPED,out

    Moveto [Codigo do Item]   
    [Codigo do Item]=CODIGO[out]
    If ErrorCode()=23
       Then Mensagem("Item nÆo cadastrado: "+CODIGO[out]+", PED: "+NPED+"//Item nÆo importado, Verificar !")
            Del 
            Loop
    EndIf
    
    [Quantidade    ]=QUANTI[out]
    [Preco Unitario]=PRECOU[out]
    If SYS_CODIGO_CLIENTE<>"0079"
       Then Pega_Preco("Novo")
    EndIf
    [Preco Total]   =Round([Preco Unitario]*[Quantidade],2)

    If [Tributacao de ICMS]="D"
      Then If TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0
              Then [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
              Else [Tributacao de Icms]=TRIB_ICMS
                   If Not IsBlank([Tipo Tributacao])
                      Then [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
    							 EndIf
           EndIf
           If OPCAO_RED_BCICMS="1"
              Then [Aliquota Reduzida BCICMS]=BlankNum()
           EndIf
    EndIf

   ;* Seta Variaveis PegaCFOP
    Checa_CFOP   ="S"
    CFO_C        =[PedidoC->CFO      ]
    CFOP_TPITEM  =[Tipo do Item      ]
    CFOP_TRIBICMS=[Tributacao de ICMS]
    CFOP_TPTRIB  =[Tipo Tributacao   ]
    Play "\\Sistemas\\Exporta\\PegaCFOP"
    [CFO            ]=CFO_C
    [Tipo Tributacao]=CFOP_TPTRIB
     

    If [Aliquota Reduzida BCICMS  ]>0 And [Aliquota de ICMS  ]>0
       Then [Valor do ICMS]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS  ])/100,2)
       Else [Valor do ICMS]=Round(([Preco Total]*[Aliquota de ICMS  ])/100,2)
    EndIf



  If [Tributacao de ICMS]="D" And [Aliquota de ICMS]>0
     Then For II From 1 To 10
              If Not IsBlank(AICMS[II])
                 Then If AICMS[II]=[Aliquota de ICMS] And RICMS[II]=[Aliquota Reduzida BCICMS]
                         Then BCICMS[II]=BCICMS[II]+[Preco Total]
                              VIICMS[II]=VIICMS[II]+[Valor do ICMS]
                              QuitLoop
                      EndIf
                 Else AICMS[II] =[Aliquota de ICMS]
                      RICMS[II] =[Aliquota Reduzida BCICMS]
                      BCICMS[II]=[Preco Total]
                      VIICMS[II]=VIICMS[II]+[Valor do ICMS]
                      QuitLoop
              EndIf
          EndFor
  EndIf

  GetRecord "\\Sistemas\\Estoque\\Itens" [PedidoI->Codigo do Item] To REG_BUSCA_LOOKUP
  If RetVal
     Then If REG_BUSCA_LOOKUP["Tributacao de ICMS"]="S"
             Then VRBCSUBST=VRBCSUBST+[Preco Total]
          EndIf
  EndIf

  If [Tributacao de IPI]="D" And [Aliquota de IPI]>0
     Then For II From 1 To 10
             If Not IsBlank(AIPI[II])
                Then If AIPI[II]=[Aliquota de IPI] And RIPI[II]=BlankNum()
                         Then BCIPI[II]=BCIPI[II]+[Preco Total]
                              VIIPI[II]=VIIPI[II]+[Valor do IPI]
                              QuitLoop
                      EndIf
                 Else AIPI[II] =[Aliquota de IPI]
                      RIPI[II] =BlankNum()
                      BCIPI[II]=[Preco Total]
                      VIIPI[II]=VIIPI[II]+[Valor do IPI]
                      QuitLoop
             EndIf
         EndFor
  EndIf

  If [Tipo do Item]<>"C"
     Then VRMERC=VRMERC+[Preco Total]
  EndIf

  unlockrecord

Endfor
EndProc

;*******************************************************************************
;* Rotina para Tabela de Preco                                                 *
;*******************************************************************************
Proc Pega_Preco(OpcaoP)
Private OpcaoP, TABPR, CPGTO, CodClie, CodRepr, CodItem,
        PesqOk, Registro_Tab_Preco, Registro_TabPreco_CondPagto,  regItens,
        wii,coditemtemp

If PARAM_TABPR_ITEM="S"
   Then TABPR=[PedidoI->Codigo da Tabela]
   Else TABPR=[PedidoC->Codigo da Tabela]
EndIf
CPGTO=[PedidoC->Condicao de Pagamento]

CodClie         =[PedidoC->Codigo                 ]
CodRepr         =[PedidoC->Codigo do Representante]
CodItem         =[PedidoI->Codigo do Item]

ITEM_PROMOCIONAL="N"
PesqOk          =False

GetRecord "\\Sistemas\\Estoque\\Itens" CodItem To regItens
If RetVal
   Then 
        If PARAM_UTILIZA_TABPR_CLIENTE="S"
           Then 
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprcit" TABPR, CodClie, coditemtemp To Registro_TabPreco_Item
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" ;;Or
                           ;;SYS_CODIGO_CLIENTE="0345"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
        If PARAM_UTILIZA_TABPR_REPRES="S" and Not PesqOk
           Then
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprrit" TABPR, CodRepr, coditemtemp To Registro_TabPreco_Item   
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" ;;Or
                           ;;SYS_CODIGO_CLIENTE="0345"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
        If Not PesqOk
           Then
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprite" TABPR, coditemtemp          To Registro_TabPreco_Item
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" ;;Or
                             ;;SYS_CODIGO_CLIENTE="0345"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
EndIf

If PesqOK
   Then ITEM_PROMOCIONAL=Registro_TabPreco_Item["Em Promocao"]

        If PARAM_PEGAPRECO_CPAGTO = "S"
           Then 
                PesqOk=False
                Moveto [Lookup_TabPreco_CondPagto]
                Ativa_Lookup()
                Moveto [Codigo da Tabela]
                Locate TABPR
                If RetVal
                   Then While [Codigo da Tabela] = TABPR
                          If [Condicao de Pagamento] = CPGTO
                             Then CopyToArray Registro_TabPreco_CondPagto
                                  PesqOK=True
                                  QuitLoop
                          EndIf
                          Skip
                          If Eot()
                             Then QuitLoop
                          Endif
                        EndWhile
                Endif
                KeyPress "ESC"
                If PesqOk
                   Then [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]+
                                                NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                                Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)
                        [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]+
                                                NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                                Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)

                        ;;If TX_DESCTO_CLIE>0
                        ;;   Then [Preco Unitario       ]=Round([Preco Unitario]-(([Preco Unitario]*TX_DESCTO_CLIE)/100),2)
                        ;;        [Preco Unitario Tabela]=[Preco Unitario]
                        ;;EndIf

                   Else [Preco Unitario       ]=BlankNum()
                        [Preco Unitario Tabela]=BlankNum()

                        MSG="Pedido "+NPED+", Item "+[PedidoI->Codigo do Item]+" "+[PedidoI->Descricao do Item]+"// //"
                        MSG=MSG+"sem pre‡o na Tabela "+TABPR+", verificar !// // "
                        MSG=MSG+"Item do Pedido com pre‡o errado, verificar !"
                        Mensagem(MSG)
                EndIf
           Else [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
                [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]
        EndIf
   Else 
        [Preco Unitario       ]=BlankNum()
        [Preco Unitario Tabela]=BlankNum()

        MSG="Pedido "+NPED+", Item "+[PedidoI->Codigo do Item]+" "+[PedidoI->Descricao do Item]+"// //"
        MSG=MSG+"sem pre‡o na Tabela "+TABPR+", verificar !// // "
        MSG=MSG+"Item do Pedido com pre‡o errado, verificar !"
        Mensagem(MSG)
EndIf
Moveto "PedidoI"

Return True
EndProc ;(Pega_Preco)

;****************************************+**************************************
;* Rotina para Calculo de Valores do Pedido                                    *
;*******************************************************************************
Proc CALC_PEDIDO()
Private i

Moveto "PedidoC"

[Valor Mercadoria]=VRMERC
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]-VRDESCTO

VRBCICMS=0
VRICMS  =0
VRIPI   =0
VRNF    =0

For I From 1 To 10
    If Not IsBlank(AICMS[I])
       Then If BCICMS[I]>0
               Then 
                    Switch
                      Case OPCAO_RED_BCICMS="3" And RICMS[I]>0:
                           VBC=BCICMS[I]
                           VBC=Round(VBC-((VBC*RICMS[I])/100),2)
                      Case OPCAO_RED_BCICMS="4" And RICMS[I]>0:
                           VBC=BCICMS[I]-Round(((BCICMS[I]*TXDESCTO_TOTAL)/100),2)
                           If TXDESCTO_TOTAL>0
                              Then VBC=Round(VBC-((VBC*RICMS[I])/100),2)
                           EndIf   
                      OtherWise:
                           VBC=BCICMS[I]-Round(((BCICMS[I]*TXDESCTO_TOTAL)/100),2)
                           VBC=Round(VBC-((VBC*RICMS[I])/100),2)
                    EndSwitch
                    
                    VRBCICMS=VRBCICMS+VBC
                    VRICMS=Round(VRICMS+((VBC*AICMS[I])/100),2)
               Else VRICMS=VRICMS+VIICMS[I]
            EndIf
    EndIf
    If Not IsBlank(AIPI[I])
       Then If BCIPI[I]>0
               Then VBC=BCIPI[I]-Round((BCIPI[I]*TXDESCTO_TOTAL)/100,2)
                    VBC=VBC-Round((VBC*RIPI[I])/100,2)
                    VRIPI=VRIPI+Round((VBC*AIPI[I])/100,2)
               Else VRIPI=VRIPI+VIIPI[I]
            EndIf
    EndIf
EndFor

If SYS_CODIGO_CLIENTE="0167"
   Then [Valor BCSubstituicao ICMS]=0
        [Valor Substituicao ICMS  ]=0
        If ([CFO]="5101" Or [CFO]="5401") And [Consumidor Final]="N"
           Then If VRBCSUBST>0
                   Then ;;;;;;[Valor BCSubstituicao ICMS]=VRBCSUBST-((VRBCSUBST*[Valor Desconto])/[Valor Mercadoria])
                        [Valor BCSubstituicao ICMS]=VRBCSUBST
                        [Valor BCSubstituicao ICMS]=[Valor BCSubstituicao ICMS]+Round(([Valor BCSubstituicao ICMS]*35)/100,2)
                        [Valor Substituicao ICMS  ]=Round(([Valor BCSubstituicao ICMS]*UF_ALIQUOTA_ICMS)/100,2)
                        [Valor Substituicao ICMS  ]=[Valor Substituicao ICMS  ]-Round((VRBCSUBST*UF_ALIQUOTA_ICMS)/100,2)
                EndIf
        EndIf
EndIf

[Valor BCICMS]=VRBCICMS
[Valor ICMS  ]=VRICMS
[Valor IPI   ]=VRIPI
[Valor Nota Fiscal]=[Valor Mercadoria Liquido]+[Valor IPI]+[Valor Despesas Acessorias]+
                    [Valor Substituicao ICMS]+[Valor do Seguro]

VRNF=[Valor Nota Fiscal]

If [Aliquota BCFrete Nota]>0
   Then [Valor do Frete]=Round(([Valor Nota Fiscal]*[Aliquota BCFrete Nota])/100,2)
EndIf

If [Frete Incluso na Nota]="+"
   Then [Valor Nota Fiscal]=[Valor Nota Fiscal]+[Valor do Frete]
        If [Aliquota BCICMS Frete]>0
           Then [Valor BCICMS]=[Valor BCICMS]+Round(([Valor do Frete]*[Aliquota BCICMS Frete])/100,2)
                [Valor ICMS  ]=[Valor ICMS]+Round(((([Valor do Frete]*[Aliquota BCICMS Frete])/100)*[Aliquota de ICMS Frete])/100,2)
           Else [Valor BCICMS]=[Valor BCICMS]+[Valor do Frete]
                [Valor ICMS  ]=[Valor ICMS]+Round(([Valor do Frete]*[Aliquota de ICMS Frete])/100,2)
        EndIf
EndIf

If [Consumidor Final]="S"
   Then [Valor BCICMS]=[Valor Nota Fiscal]
        [Valor ICMS  ]=Round(([Valor BCICMS]*UF_ALIQUOTA_ICMS)/100,2)
EndIf
UnLockRecord

EndProc

;*******************************************************************************
;* Rotina para Calculo de Vencimentos                                          *
;*******************************************************************************
Proc CALC_VENCTOS()
Private NPC, i, j, VRVENCTO, VRDIFERE, VREF

If IsBlank([PedidoC->Composicao de Dias])
   Then Return
EndIf
If Not Checa_CompDias([PedidoC->Composicao de Dias])
   Then Return
EndIf

Moveto "PedidoV"
Moveto [Numero do Pedido]
Locate NPED
If RetVal 
   Then
  While [Numero do Pedido]=NPED
    Del
  EndWhile
EndIf

NPC=1
i=1
If Not IsBlank([PedidoC->Composicao de Dias])
   Then While True
          pos_s=SearchFrom("/",[PedidoC->Composicao de Dias],i)
          If pos_s=0
             Then QuitLoop
             Else NPC=NPC+1
                  i=pos_s+1
          EndIf
        EndWhile
   Else NPC=0
EndIf
If NPC=0
   Then NP=[PedidoC->Numero de Parcelas]
   Else If NPC=1 And [PedidoC->Numero de Parcelas]>1
           Then NP=[PedidoC->Numero de Parcelas]
           Else NP=NPC
        EndIf
EndIf

VRVENCTO=NDecimal(([PedidoC->Valor Nota Fiscal]/NP),2)
VRDIFERE=[PedidoC->Valor Nota Fiscal]-(VRVENCTO*NP)

If PARAM_COMIS_VENCTO="S"
   Then VREF=NDecimal(([PedidoC->Valor Nota Fiscal]*[PedidoC->Comissao do Representante])/100,2)
        VCVENCTO=NDecimal((VREF/NPC),2)
        VCDIFERE=VREF-(VCVENCTO*NPC)
   Else VCVENCTO=BlankNum()
        VCDIFERE=BlankNum()
EndIf

j=1
i=1
While i<=NP
  pos_s=SearchFrom("/",[PedidoC->Composicao de Dias],j)
  If pos_s=0
     Then If i>1
             Then NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,(Len([PedidoC->Composicao de Dias])-(j-1))))
             Else If Not IsBlank([PedidoC->Composicao de Dias])
                     Then NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,Len([PedidoC->Composicao de Dias])))
                     Else NDIAS=0
                  EndIf
          EndIf
     Else NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,pos_s-j))
          j=pos_s+1
  EndIf

  End
  Down
  [Numero do Pedido ]=NPED
  [Sequencia        ]=AlinhM(StrVal(i),2)
  If pos_s=0 And NPC=1 And NP>1
     Then [Numero de Dias   ]=BlankNum()
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day([PedidoC->Data de Entrega])
                  MES_VECTO=Month([PedidoC->Data de Entrega])
                  ANO_VECTO=Year([PedidoC->Data de Entrega])
                  MES_VECTO=MES_VECTO+i
                  If MES_VECTO>12                
                     Then Switch
                            Case MES_VECTO>48 : ANO_AUXILIAR=4
                            Case MES_VECTO>36 : ANO_AUXILIAR=3
                            Case MES_VECTO>24 : ANO_AUXILIAR=2
                            Case MES_VECTO>12 : ANO_AUXILIAR=1
                          EndSwitch       
                          MES_VECTO=MES_VECTO-(12*ANO_AUXILIAR)
                          ANO_VECTO=ANO_VECTO+(1*ANO_AUXILIAR)
                  EndIf
                  ;*********** Verificando o Ultimo dia do Mˆs *****************     
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)         
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)    
                  EndSwitch
                  [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+SubStr(StrVal(ANO_VECTO),3,2))
             Else [Numero de Dias   ]=NDIAS*i
                  [Data             ]=[PedidoC->Data de Emissao]+(NDIAS*i)
          EndIf
     Else [Numero de Dias   ]=NDIAS
          [Data             ]=[PedidoC->Data de Entrega]+NDIAS
  EndIf
  If i<>NP
     Then [Valor            ]=VRVENCTO
          [Valor da Comissao]=VCVENCTO
     Else [Valor            ]=VRVENCTO+VRDIFERE
          [Valor da Comissao]=VCVENCTO+VCDIFERE
  EndIf
  [Forma de Pagamento]=[PedidoC->Forma de Pagamento]
  UnLockRecord

  i=i+1
EndWhile

Moveto "PedidoC"

EndProc

;*******************************************************************************
;* Rotina para Checagem de Composicao de Dias                                  *
;*******************************************************************************
Proc Checa_CompDias(Texto)
Private Texto,Contador_Repeticao, ncc

Contador_Repeticao=0
For ncc From 1 To Len(Texto)
    If Asc(SubStr(Texto,ncc,1))<47 Or
       Asc(SubStr(Texto,ncc,1))>57
       Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
            Return False
       Else If SubStr(Texto,ncc,1)="/"
               Then Contador_Repeticao=Contador_Repeticao+1
               Else Contador_Repeticao=0
            EndIf
            If Contador_Repeticao>1 Or
               SubStr(Texto,1,1)="/" Or
               SubStr(Texto,Len(Texto),1)="/"
               Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
                    Return False
            EndIf
    EndIf
EndFor
Return True
EndProc

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

If IsEmpty("P_Pedido")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Return False
EndIf

Moveto "P_Pedido"
Moveto [Codigo_Empresa]
Locate [PedidoC->Codigo da Empresa]
If Not RetVal
   Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
        Return False
EndIf
PARAM_DESTINACAO               =[Codigo_Destinacao    ]
PARAM_RELATORIO                =[Script_Impressao     ]
PARAM_RELATORIO_S              =[Script_Impressao_S   ]
PARAM_DATAS_VENCTOS            =[Datas_Vencimentos    ]
PARAM_COR_TECIDO               =[Cor_Tecido           ]
PARAM_TAMANHO                  =[Tamanho              ]
PARAM_DESCUNIT                 =[Desconto Unitario    ]
PARAM_VOLUMES                  =[Volumes              ]
PARAM_SUBSTICMS                =[Substituicao ICMS    ]
PARAM_IMPOSTOS                 =[Impostos             ]
PARAM_TABELA_PRECO             =[Tabela_Preco         ]
PARAM_TRANSPORTADORA           =[Codigo_Transportadora]
PARAM_FORMA_PAGTO              =[Codigo_Forma_Pagto   ]
PARAM_COMIS_ITEM               =[Comissao_Item        ]
PARAM_COMIS_MARCA              =[Utiliza_Comissao_Marca   ]

PARAM_TABPR_ITEM               =[Utiliza_Tabela_Preco_Item]
PARAM_COMIS_VENCTO             =[Calcula_Comissao_Vencto  ]
PARAM_VISITA                   =[Utiliza_Visita           ]
PARAM_UTILIZA_TABPR_CLIENTE    =[Utiliza_TabPreco_Cliente ]
PARAM_UTILIZA_TABPR_REPRES     =[Utiliza_TabPreco_Repres  ]
PARAM_PEGAPRECO_CPAGTO         =[Pega_Preco_Tabela_CPagto ]
PARAM_ALTERA_PRECO             =[Utiliza_Alteracao_Preco  ]
PARAM_CALCIMPOSTOS             =[Utiliza_Calculo_Impostos ]
Moveto "Answer"
Return True

EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If (Disparo="ARRIVE" Or Disparo="SELECT") And Campo="TG_PEDIDOS"
   Then Switch
          Case VSDGPED[2]=True  : VSDGPED[1]=True
          Case VSDGPED[2]=False : VSDGPED[1]=False
          Case VSDGPED[3]=True  : VSDGPED[1]=True
          Case VSDGPED[3]=False : VSDGPED[1]=False
        EndSwitch
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"] <= -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"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_DTREF"         : Campo="TG_DTFIM"
            Case Campo="TG_DRIVES"        : Campo="TG_DTREF"
            Case Campo="TG_OPCAO"         : Campo="TG_DRIVES"
            Case Campo="TG_PEDIDOS"       : Campo="TG_OPCAO"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA" : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"   : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"   : Campo="TG_DTREF"
                    Case Campo="TG_DTREF"   : Campo="TG_DRIVES"
                    Case Campo="TG_DRIVES"  : Campo="TG_OPCAO"
                      VSDGDRIVE=ControlValue("TG_DRIVES")
                    Case Campo="TG_OPCAO"   : Campo="TG_PEDIDOS"
                    Case Campo="TG_PEDIDOS" : Campo="YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf
Switch
  Case Campo="TG_OPCAO" or Campo="TG_PEDIDOS":
     MensagemCheckBoxes()
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc


Proc Deleta_Arquivos()

  Deleta_Arquivo(VSDGDRIVE+"\\Exped*.DB")
  Deleta_Arquivo(VSDGDRIVE+"\\Exped*.MB")
  Deleta_Arquivo(VSDGDRIVE+"\\Exped*.PX")

  Deleta_Arquivo(VSDGDRIVE+"\\Accarrg*.DB")
  Deleta_Arquivo(VSDGDRIVE+"\\Accarrg*.MB")
  Deleta_Arquivo(VSDGDRIVE+"\\Accarrg*.PX")

  Deleta_Arquivo(VSDGDRIVE+"\\Destinat*.DB")
  Deleta_Arquivo(VSDGDRIVE+"\\Destinat*.MB")
  Deleta_Arquivo(VSDGDRIVE+"\\Destinat*.PX")

  Deleta_Arquivo(VSDGDRIVE+"\\Itens*.DB")
  Deleta_Arquivo(VSDGDRIVE+"\\Itens*.MB")
  Deleta_Arquivo(VSDGDRIVE+"\\Itens*.PX")
  
  Deleta_Arquivo(VSDGDRIVE+"\\Iten_*.DB")
  Deleta_Arquivo(VSDGDRIVE+"\\Iten_*.MB")
  Deleta_Arquivo(VSDGDRIVE+"\\Iten_*.PX")
  
  If VSDGPED[1]=True
    Then Deleta_Arquivo(VSDGDRIVE+"\\Pedido*.DB")
         Deleta_Arquivo(VSDGDRIVE+"\\Pedido*.MB")
         Deleta_Arquivo(VSDGDRIVE+"\\Pedido*.PX")
  EndIf

	Sleep 2000
EndProc

;*******************************************************************************
;* Rotina para gerar o log de registro por usu rio                             *
;*******************************************************************************
Proc Gera_Log()          

If VSDGDTINI<>BlankDate()
   Then AUX_DATA = ", periodo de "+StrVal(VSDGDTINI)+" ate "+StrVal(VSDGDTFIM)
   Else AUX_DATA = ", periodo ate "+StrVal(VSDGDTFIM)
EndIf   
          
If VSDGDTREF<>BlankDate()
   Then AUX_DTREF = ", data de transa‡„o em "+StrVal(VSDGDTREF)
   Else AUX_DTREF = ""
EndIf

AUX_OPCAO = ""
If CheckTG_OPCAO[1] Then AUX_OPCAO = AUX_OPCAO + "opcao marca para substituir ordem de expedi‡„o, " EndIf
If VSDGPED[1] Or VSDGPED[2] Or VSDGPED[3]
   Then AUX_OPCAO = AUX_OPCAO + "opcoes de pedido para "
EndIf   
If VSDGPED[1] Then AUX_OPCAO = AUX_OPCAO + "importar, "              EndIF
If VSDGPED[2] Then AUX_OPCAO = AUX_OPCAO + "substituir existentes, " EndIF
If VSDGPED[3] Then AUX_OPCAO = AUX_OPCAO + "situa‡Æo original, "     EndIF
AUX_OPCAO = Rtrim(AUX_OPCAO)
If SubStr(AUX_OPCAO,Len(AUX_OPCAO),1)="," Then AUX_OPCAO = Substr(AUX_OPCAO,1,Len(AUX_OPCAO)-1) EndIf
If AUX_OPCAO <> "" Then AUX_OPCAO = ", "+AUX_OPCAO EndIf    

MSG =  "Empresa "+VSDGEMPRESA + AUX_DATA + AUX_DTREF + AUX_OPCAO + ", Drive "+VSDGDRIVE
Grava_Logt("#","RestauOE",MSG)  

EndProc ;Gera_Log()

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

LimpAguarde()
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999" EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"    EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""      EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""    EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""    EndIf
; APAGAR ISSO AQUI ACIMA

Array CODIGO[900]
Array QUANT_PED[900]
Array QUANT_EXP[900]
Array QUANT_SUB[900]
Array QUANT_DIF[900]
Array QUANT_FORA_PED[900]

VSDGEMPRESA=""
VSDGDTINI  =BlankDate()
VSDGDTFIM  =Today()-1
VSDGDTREF  =BlankDate()

DynArray Array_Drives[]
SysInfo Drives To Array_Drives
VSDGDRIVE="C:"

Array VSDGPED[3]
VSDGPED[1]=False
VSDGPED[2]=False
VSDGPED[3]=False

Array TG_OPCAO[1]
TG_OPCAO[1]="Substituir ordem de expedi‡„o existente"

Array CheckTG_OPCAO[ArraySize(TG_OPCAO)]
CheckTG_OPCAO[1]=False

While True
  ShowDialog "Importa‡„o de ordem de expedi‡„o" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE","SELECT"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 03,14   Height 18 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_NOMEMP" To VSDGNOMEMP

    Label  @ 02,00 "Per¡odo EmissÆo de" For "TG_DTINI"
    Accept @ 03,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,16 "at‚" For "TG_DTFIM"
    Accept @ 03,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 04,00 "Data Transa‡„o" For "TG_DTREF"
    Accept @ 05,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF

    Label  @ 00,35 "Drives:" For "TG_DRIVES"
    PickDynArrayIndex @ 01,36 Height 4 width 33
     Columns 7
      Array_Drives
       Tag "TG_DRIVES"
        To VSDGDRIVE


    CheckBoxes @ 07,00 Height 1 Width 45 Tag "TG_OPCAO"
    TG_OPCAO[1] to CheckTG_OPCAO[1]

    Label  @ 09,00 "Pedidos " For "TG_PEDIDOS"
    CheckBoxes @10,00 Height 3 Width 40 Tag "TG_PEDIDOS"
    "Importar              " to VSDGPED[1],
    "Substituir existentes " to VSDGPED[2],
    "Situa‡Æo original     " to VSDGPED[3]

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  
  IMPCLI=False
  IMPITE=False
  IMPCAR=False
  IMPEXP=False
  IMPPED=False
  
  If VSDGPED[2]=True or VSDGPED[3]=True
    Then VSDGPED[1]=True
  EndIf
  
  If VSDGPED[1]
    Then Array QUANTI[900]
         Array PRECOU[900]
         
         Array AICMS[10]
         Array AIPI[10]
         Array VIICMS[10]
         Array VIIPI[10]
         Array BCICMS[10]
         Array BCIPI[10]
          
         Array RICMS[10]
         Array RIPI[10]
          
         Array Dt_Vencto[12]
         Array Vr_Vencto[12]
         Array ND_Vencto[12]
         Array VC_Vencto[12]
  EndIf  
    
	Deleta_Arquivos()
	Gera_Log()
  
  If VSDGEMPRESA="" 
    Then CODEMP="0000" 
    Else CODEMP=VSDGEMPRESA
  EndIf

  ARQ_ARJ="PT_EXP_"+CODEMP+"_"+
          AlinhM(StrVal(Year(VSDGDTREF)),4) +
          AlinhM(StrVal(Month(VSDGDTREF)),2)+
          AlinhM(StrVal(Day(VSDGDTREF)),2)  +
          ".ARJ"

	Aguarde("Aguarde, Descompactando arquivos de "+VSDGDRIVE+"\\"+ARQ_ARJ)
  Executa_Programa("c:\\vise\\Varj.exe e -y "+VSDGDRIVE+"\\"+ARQ_ARJ+" "+VSDGDRIVE+"\\")
  Sleep 3000 
 
  If CheckTG_OPCAO[1]
     Then Excluir_Expeds()
          Excluir_Carregamentos()
  EndIf

  If VSDGPED[2]=True
    Then Excluir_Pedidos()
  EndIf
     
  Clientes()
  Itens()
  Carregamentos()

  If VSDGPED[1]=True
    Then If Pedidos()
          Then Ajusta_Pedidos()
               Delete Tabela
         EndIf
    Else IMPPED=True    
  EndIf   
  
  If Expeds()
    Then Ajusta_OE()
         Delete Tabela
  EndIf 
 
	Deleta_Arquivos()
  Limpaguarde()

  If IMPCLI And IMPITE And IMPCAR And IMPEXP And IMPPED
     Then ARQ_IMP=VSDGDRIVE+"\\IMPORTADO_"+
                  Substr(ARQ_ARJ,1,20)+"_"+
                  Substr(Time(),1,2)  +
                  Substr(Time(),4,2)  +
                  Substr(Time(),7,2)  +
                  ".ARJ"
  
          ExecVise("REN "+VSDGDRIVE+"\\"+ARQ_ARJ+" \""+ARQ_IMP+"\"")
          Sleep 1000
          
          MENSAGEM("Opera‡„o Finalizada !")
     Else MENSAGEM("Opera‡„o Cancelada !")
  EndIf   
  
EndWhile
ClearAll
Release Vars All
Release Procs All
