;** acctuni ********************************************************************
;*  acerto do custo unitario                                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 01/01/1998 por Anivel Augusto Rodrigues
;Ultima Alteracao: 27/04/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 19/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 04/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes filtro data e empresa
;Ultima Alteracao: 01/04/2019 por Kamila Gomes
;Motivo Alteracao: Ajustes Para Tecidos total  #0359
;Ultima Alteracao: 03/02/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado corre‡Æo p/ #0370#

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
private regitens

INICIO_DIALOG=True
Moveto [Sequencia do Lancamento]
Locate [NotaEC->Numero do Lancamento],SEQIT
CopyToArray RegItem

QTDCONV =[Quantidade Convertida]
QUANT   =[Quantidade ]
CTTOTAL =NDecimal(([Quantidade ]*[Custo Medio Unitario]),2)
VSD_I_Flag=""

VSD_I_TX_ICMS_SAIDA=0
VSD_I_RD_ICMS_SAIDA=0
If Not IsBlank([Codigo do Item])
   Then VSD_I_Codigo_Item=[Codigo do Item]
        getrecord "Itens" VSD_I_Codigo_Item to regitens
        If RetVal
           Then VSD_I_TX_ICMS_SAIDA  =regitens["Aliquota de ICMS"        ]
                VSD_I_RD_ICMS_SAIDA  =regitens["Aliquota Reduzida BCICMS"]
        EndIf
EndIf

Registro_Item("Ler")

EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro

Switch
  Case Funcao_Registro="Gravar":
       [Numero da OC              ]=VSD_I_OC
       If Not IsBlank(VSD_I_OC_Item)
          Then [Item da OC                ]=NumVal(VSD_I_OC_Item)
       EndIf
       [Codigo da Empresa         ]=[NotaEC->Codigo da Empresa]
       [Codigo do Item            ]=VSD_I_Codigo_Item
       [Descricao do Item         ]=VSD_I_Descricao_Item
       [Tipo do Item              ]=VSD_I_Tipo_Item
       [Codigo_Fornecedor         ]=VSD_I_Codigo_Fornecedor
       [Codigo da Cor_Tecido      ]=VSD_I_Codigo_Cor_Tecido
       [Descricao da Cor_Tecido   ]=VSD_I_Descricao_Cor_Tecido

       [Lookup_Tabela_Preco       ]=VSD_I_Tabela_Preco
       [Indice Preco de Venda     ]=VSD_I_Indice_PrVenda

       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Fiscal            ]=VSD_I_UN_Item
       [Unidade Entrada           ]=VSD_I_UN_Item
       [Preco Unitario            ]=VSD_I_Preco_Unitario
       [Taxa Desconto Unitario    ]=VSD_I_Taxa_Desconto_Unitario
       [Valor Desconto Unitario   ]=VSD_I_Valor_Desconto_Unitario
       [Preco Total               ]=Round(VSD_I_Preco_Total,2)

       [Preco Unitario Tabela     ]=VSD_I_Preco_Tabela
       [Custo Medio Unitario      ]=VSD_I_Custo_Unitario

       [Tipo Tributacao           ]=VSD_I_CST_Item
       [Tributacao de ICMS        ]=VSD_I_TICMS                                                       
       [Aliquota Reduzida BCICMS  ]=VSD_I_RBC_ICMS
       [ICMS_BC                   ]=VSD_I_BC_ICMS
       [Aliquota de ICMS          ]=VSD_I_AICMS
       [Valor do ICMS             ]=VSD_I_Valor_ICMS

       [ICMS_ST_BC                ]=VSD_I_BC_ST   
       [ICMS_ST_Valor             ]=VSD_I_Valor_ST   

       [IPI_CST                   ]=VSD_I_CST_IPI  
       [Tributacao de IPI         ]=VSD_I_TIPI
       [IPI_BC                    ]=VSD_I_BC_IPI 
       [Aliquota de IPI           ]=VSD_I_AIPI
       [Valor do IPI              ]=VSD_I_Valor_IPI

       [Tributacao de ISSQN       ]=VSD_I_TISSQN
       [ISSQN_BC                  ]=VSD_I_BC_ISSQN 
       [Aliquota de ISSQN         ]=VSD_I_AISSQN
       [Valor do ISSQN            ]=VSD_I_Valor_ISSQN
       [Codigo_Servico            ]=VSD_I_CDSERV   
       [ISSQN_UF                  ]=VSD_I_UFSERV   
       [ISSQN_Municipio           ]=VSD_I_MUNSERV   

       [PIS_CST                   ]=VSD_I_CST_PIS                
       [PIS_BC                    ]=VSD_I_BC_PIS 
       [PIS_Aliquota              ]=VSD_I_APIS                  
       [PIS_Valor                 ]=VSD_I_Valor_PIS              

       [COFINS_CST                ]=VSD_I_CST_COFINS              
       [COFINS_BC                 ]=VSD_I_BC_COFINS 
       [COFINS_Aliquota           ]=VSD_I_ACOFINS                
       [COFINS_Valor              ]=VSD_I_Valor_COFINS           

       [Codigo CCusto             ]=VSD_I_CCusto
       [Descricao CCusto          ]=VSD_I_Descricao_CCusto

       [Fator de Conversao        ]=VSD_I_Fator_Conversao
       [Quantidade Convertida     ]=VSD_I_Quantidade_Convertida

       [Valor Acrescimos_Desctos  ]=VSD_I_Acrescimos_Desctos
       [Preco_Venda               ]=VSD_I_Preco_VendaOk

       [NCM                       ]=VSD_I_NCM                
       [CFO                       ]=VSD_I_CFOP                
       [MVA                       ]=VSD_I_MVA    
       [CSOSN                     ]=SubStr(VSD_I_CSOSN,2,3) 
       
       [Valor Frete Total         ]=VSD_I_RAT_FRETE               
       [Valor Seguro Total        ]=VSD_I_RAT_SEGURO              
       [Valor Desconto Total      ]=VSD_I_RAT_DESCONTO            
       [Valor OutDesp Total       ]=VSD_I_RAT_OUTDESP                     

       Play "FT_CUSTO"
       UnLockRecord
       
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Sequencia do Lancamento   ]
       VSD_I_OC                     =[Numero da OC              ]
       VSD_I_OC_Item                =[Item da OC                ]
       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]
       VSD_I_Descricao_Item         =[Descricao do Item         ]
       VSD_I_Tabela_Preco           =[Lookup_Tabela_Preco       ]
       VSD_I_Indice_PrVenda         =[Indice Preco de Venda     ]
       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade Entrada           ]
       VSD_I_Preco_Unitario         =[Preco Unitario            ]
       VSD_I_Taxa_Desconto_Unitario =[Taxa Desconto Unitario    ]
       VSD_I_Valor_Desconto_Unitario=[Valor Desconto Unitario   ]
       VSD_I_Preco_Total            =Round([Preco Total         ],2)
       VSD_I_Preco_Tabela           =[Preco Unitario Tabela     ]
       VSD_I_Custo_Unitario         =[Custo Medio Unitario      ]
       VSD_I_Codigo_Cor_Tecido      =[Codigo da Cor_Tecido      ]
       VSD_I_Descricao_Cor_Tecido   =[Descricao da Cor_Tecido   ]

       VSD_I_CST_Item               =[Tipo Tributacao           ]
       VSD_I_TICMS                  =[Tributacao de ICMS        ]
       VSD_I_RBC_ICMS               =[Aliquota Reduzida BCICMS  ]
       VSD_I_BC_ICMS                =[ICMS_BC                   ]
       VSD_I_AICMS                  =[Aliquota de ICMS          ]
       VSD_I_Valor_ICMS             =[Valor do ICMS             ]

       VSD_I_BC_ST                  =[ICMS_ST_BC                ]   
       VSD_I_AST                    =BlankNum()                       
       VSD_I_Valor_ST               =[ICMS_ST_Valor             ]   

       VSD_I_TIPI                   =[Tributacao de IPI         ]
       VSD_I_CST_IPI                =[IPI_CST                   ]  
       VSD_I_BC_IPI                 =[IPI_BC                    ]
       VSD_I_AIPI                   =[Aliquota de IPI           ]
       VSD_I_Valor_IPI              =[Valor do IPI              ]

       VSD_I_TISSQN                 =[Tributacao de ISSQN       ]
       VSD_I_BC_ISSQN               =[ISSQN_BC                  ]
       VSD_I_AISSQN                 =[Aliquota de ISSQN         ]
       VSD_I_Valor_ISSQN            =[Valor do ISSQN            ]
       VSD_I_CDSERV                 =[Codigo_Servico            ]   
       VSD_I_UFSERV                 =[ISSQN_UF                  ]   
       VSD_I_MUNSERV                =[ISSQN_Municipio           ]   

       VSD_I_CST_PIS                =[PIS_CST                   ]
       VSD_I_BC_PIS                 =[PIS_BC                    ]
       VSD_I_APIS                   =[PIS_Aliquota              ]
       VSD_I_Valor_PIS              =[PIS_Valor                 ]

       VSD_I_CST_COFINS             =[COFINS_CST                ]
       VSD_I_BC_COFINS              =[COFINS_BC                 ]
       VSD_I_ACOFINS                =[COFINS_Aliquota           ]
       VSD_I_Valor_COFINS           =[COFINS_Valor              ]

       VSD_I_CCusto                 =[Codigo CCusto             ]
       VSD_I_Descricao_CCusto       =[Descricao CCusto          ]
       VSD_I_Fator_Conversao        =[Fator de Conversao        ]
       VSD_I_Acrescimos_Desctos     =[Valor Acrescimos_Desctos  ]
       VSD_I_Preco_Venda            =[Preco_Venda               ]
       VSD_I_Preco_VendaOk          =[Preco_Venda               ]
       VSD_I_Unidade_Interna        =[Unidade Interna           ]
       VSD_I_Quantidade_Convertida  =[Quantidade Convertida     ]
       VSD_I_Codigo_Fornecedor      =[Codigo_Fornecedor         ]

       VSD_I_Flag                   =""
       VSD_I_Ct_Unitario            =BlankNum()
       VSD_I_Preco_VendaI           =BlankNum()

       VSD_I_NCM                    =[NCM                       ]
       VSD_I_CFOP                   =[CFO                       ]
       VSD_I_MVA                    =[MVA                       ]    
       VSD_I_CSOSN                  =SubStr([Tipo Tributacao],1,1)+[CSOSN]
       
       VSD_I_RAT_FRETE              = [Valor Frete Total        ]
       VSD_I_RAT_SEGURO             = [Valor Seguro Total       ]
       VSD_I_RAT_DESCONTO           = [Valor Desconto Total     ]
       VSD_I_RAT_OUTDESP            = [Valor OutDesp Total      ]
                      
       Play "FT_CUSTO"
EndSwitch   
EndProc  ; (Registro_Item)


;*******************************************************************************
;* Atualiza Cotacao de Preco                                                   *
;*******************************************************************************
Proc COTACAO()
Private Atualiza_Cotacao, itant

If [NotaEC->Tipo de Operacao]<>"C" And
   [NotaEC->Tipo de Operacao]<>"A"
   Then Return
EndIf

Switch
  Case SYS_CODIGO_CLIENTE="0052":
    If [NotaEC->Codigo da Empresa]="1000"
       Then Return
    EndIf
EndSwitch

itant="???"
Moveto "NotaEI"
Moveto [Numero do Lancamento]
Locate LANCTO
While [Numero do Lancamento]=[NotaEC->Numero do Lancamento]
  If Not IsBlank([Codigo do Item]) And [Tipo do Item]<>"C"
     Then
          Atualiza_Cotacao=False

          Moveto "Cotacao"
          Moveto [Codigo do Item]
          Locate [NotaEI->Codigo do Item],[NotaEC->Codigo]
          If Not RetVal
             Then End Down
                  [Codigo do Item]=[NotaEI->Codigo do Item]
                  [Codigo        ]=[NotaEC->Codigo        ]
                  Atualiza_Cotacao=True
             Else Switch
                    Case [Numero do Lancamento]=[NotaEI->Numero do Lancamento]:
                         Atualiza_Cotacao=True
                    Case [NotaEC->Data de Entrada]>[Data de Compra]:
                         Atualiza_Cotacao=True
                    Case [NotaEC->Data de Entrada    ] =[Data de Compra] And
                         [NotaEC->Numero do Documento]>=[Numero do Documento]:
                         Atualiza_Cotacao=True
                  EndSwitch
          Endif

          If Atualiza_Cotacao
             Then [Razao Social            ]=[NotaEC->Razao Social            ]
                  [Data de Compra          ]=[NotaEC->Data de Entrada         ]
                  [Numero do Documento     ]=[NotaEC->Numero do Documento     ] 
                  [Tipo do Documento       ]=[NotaEC->Tipo do Documento       ]
                  [Data de Emissao         ]=[NotaEC->Data de Emissao         ]
                  [Quantidade              ]=[NotaEI->Quantidade              ] 
                  [Unidade Entrada         ]=[NotaEI->Unidade Entrada         ]
                  If [NotaEI->Valor Desconto Total]>0
                     Then [Valor Unitario  ]=([NotaEI->Preco Total]/[NotaEI->Quantidade])-([NotaEI->Valor Desconto Total]/[NotaEI->Quantidade])
                     Else [Valor Unitario  ]=[NotaEI->Preco Total]/[NotaEI->Quantidade]
                  EndIf
                  [Custo Medio Unitario    ]=[NotaEI->Custo Medio Unitario    ]
                  [Unidade Interna         ]=[NotaEI->Unidade Interna         ]
                  [Numero do Lancamento    ]=[NotaEI->Numero do Lancamento    ]
                  [MVA                     ]=[NotaEI->MVA                     ]
                  [ICMS UF_ORIGEM          ]=[NotaEI->ICMS UF_ORIGEM          ]
                  [Tributacao de IPI       ]=[NotaEI->Tributacao de IPI       ]
                  [Aliquota Reduzida BCIPI ]=[NotaEI->Aliquota Reduzida BCIPI ]
                  [Aliquota de IPI         ]=[NotaEI->Aliquota de IPI         ]
                  [Tributacao de ICMS      ]=[NotaEI->Tributacao de ICMS      ]
                  [Aliquota Reduzida BCICMS]=[NotaEI->Aliquota Reduzida BCICMS]
                  [Aliquota de ICMS        ]=[NotaEI->Aliquota de ICMS        ]
                  [Fator de Conversao      ]=[NotaEI->Fator de Conversao      ]
                  [Tipo Tributacao         ]=[NotaEI->Tipo Tributacao         ]
                  [IPI_CST                 ]=[NotaEI->IPI_CST                 ]
                  [CFO                     ]=[NotaEI->CFO                     ]
                  
                  UnLockRecord


                  If Not IsBlank([Codigo_Fornecedor])
                     Then Moveto "FornProd"
                          Moveto [Codigo]
                          Locate [NotaEC->Codigo],[NotaEI->Codigo_Fornecedor]
                          If Not RetVal
                             Then End Down
                                  [Codigo           ]=[NotaEC->Codigo           ]
                                  [Codigo_Fornecedor]=[NotaEI->Codigo_Fornecedor]
                          Endif
                          [Codigo do Item            ]=[NotaEI->Codigo do Item            ]
                          [Descricao do Item         ]=[NotaEI->Descricao do Item         ]
                          [Tributacao de IPI         ]=[NotaEI->Tributacao de IPI         ]
                          [Aliquota Reduzida BCIPI   ]=[NotaEI->Aliquota Reduzida BCIPI   ]
                          [Aliquota de IPI           ]=[NotaEI->Aliquota de IPI           ]
                          [Tributacao de ICMS        ]=[NotaEI->Tributacao de ICMS        ]
                          [Aliquota Reduzida BCICMS  ]=[NotaEI->Aliquota Reduzida BCICMS  ]
                          [Aliquota de ICMS          ]=[NotaEI->Aliquota de ICMS          ]
                          [CSOSN                     ]=[NotaEi->CSOSN                     ]
                          [Fator de Conversao        ]=[NotaEI->Fator de Conversao        ]
                          [Unidade Entrada           ]=[NotaEI->Unidade Entrada           ]
                          [Numero do Lancamento      ]=[NotaEI->Numero do Lancamento      ]
                          [MVA                       ]=[NotaEI->MVA                       ]
                          [ICMS UF_ORIGEM            ]=[NotaEI->ICMS UF_ORIGEM            ]
                          [Tipo Tributacao           ]=[NotaEI->Tipo Tributacao           ]
                          [IPI_CST                   ]=[NotaEI->IPI_CST                   ]
                          [CFO                       ]=[NotaEI->CFO                       ]
                          [PIS_CST                   ]=[NotaEI->PIS_CST                   ]
                          [PIS_Aliquota              ]=[NotaEI->PIS_Aliquota              ]
                          [COFINS_CST                ]=[NotaEI->COFINS_CST                ]
                          [COFINS_Aliquota           ]=[NotaEI->COFINS_Aliquota           ]
                          UnLockRecord
                  EndIf

          EndIf
  EndIf
  
  Moveto "NotaEI"
 
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

Moveto "NotaEC"

EndProc ;COTACAO()

;*******************************************************************************
;* Rotina Atualizacao do Estoque (Inclusao, Alteracao e Exclusao)             **
;*******************************************************************************
Proc Estoque()
private ANO, MES

If [NotaEC->Tipo de Operacao]="A" Or
   [NotaEC->Tipo de Operacao]="I" Or
   IsBlank([NotaEI->Codigo do Item]) Or
   [NotaEI->Tipo do Item]="C" Or
   [NotaEI->Tipo do Item]="D" Or
   [NotaEI->Tipo do Item]="G" Or
   [NotaEI->Tipo do Item]="H" Or
   [NotaEI->Tipo do Item]="I"
   Then Return
EndIf

If Not IsBlank([NotaEC->Data de Entrada])
  Then MES=ALINHM(StrVal(Month([NotaEC->Data de Entrada])),2)
       ANO=ALINHM(StrVal( Year([NotaEC->Data de Entrada])),4)
  Else MES="00"
       ANO="0000"
EndIf

While True
 Moveto "\\Sistemas\\Estoque\\SdEstq"
 Moveto [Codigo da Empresa]
 Locate [NotaEC->Codigo da Empresa], [NotaEI->Codigo do Item], ANO, MES
 If Not RetVal
    Then Cria_Ficha([NotaEC->Codigo da Empresa],[NotaEI->Codigo do Item],ANO,MES,False)
    Else If IsLockRecord()
            Then Loop
         EndIf
         Switch
           Case CHAVEI=8:
                [Saldo Atual      ]=NDecimal([Saldo Atual]-[NotaeI->Quantidade Convertida],3)
                [Custo Total Atual]=NDecimal([Custo Total Atual]-NDecimal(([NotaeI->Custo Medio Unitario]*[NotaeI->Quantidade]),2),2)
           Case CHAVEI=1 Or CHAVEI=0:
                [Saldo Atual      ]=NDecimal(([Saldo Atual]-(QTDCONV))+[NotaeI->Quantidade Convertida],3)
                [Custo Total Atual]=NDecimal(([Custo Total Atual]-CTTOTAL)+NDecimal(([NotaeI->Custo Medio Unitario]*[NotaeI->Quantidade]),2),2)

                If [NotaEC->Data de Entrada]>=[Data do Preco de Custo] And [NotaEC->Tipo de Operacao]="C"
                   Then [Data do Preco de Custo]=[NotaEC->Data de Entrada]
                        [Preco de Custo        ]=NDecimal(([NotaEI->Custo Medio Unitario]*[NotaeI->Quantidade])/[NotaeI->Quantidade Convertida],5)
                EndIf
         EndSwitch
         If ([Custo Total Atual]/[Saldo Atual])>0
            Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
         EndIf
         UnLockRecord
         QuitLoop
 EndIf
EndWhile

Moveto "NotaEI"
EndProc  ; (Estoque)

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha(EMPRESA, ITEM, ANO, MES, CONFIRMA)
Private EMPRESA, ITEM, ANO, MES, CONFIRMA

ANO=ALINHM(StrVal(ANO),4)
MES=ALINHM(StrVal(MES),2)

If CONFIRMA
   Then MSG="N„o foi encontrada a ficha de estoque referente a "+MES+"/"+ANO+" !// //"
        MSG=MSG+Format("W08,AL","Empresa")+"| "+Format("W11,AL","Item")+"//"
        MSG=MSG+Format("W08,AL",EMPRESA  )+"| "+Format("W11,AL",ITEM  )+"//"
        MSG=MSG+"Observacoes:                                                            //"
        MSG=MSG+"1. Talvez n„o foi executado a transferˆncia de saldos do mˆs anterior;  //"
        MSG=MSG+"2. Talvez n„o houve entrada que criasse sua ficha de estoque;           //"
        MSG=MSG+"3. Se for criada agora, o saldo inicial deste item ser  igual a 0(zero).//"
        MSG=MSG+"// "
        MSG=MSG+"Deseja cri -la agora ?"
        ConfGeral(MSG)
        If OK="N"
           Then Return False
        EndIf
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
While True
  Moveto [Codigo da Empresa]
  Locate EMPRESA, ITEM, ANO, MES
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=EMPRESA
          [Codigo do Item      ]=ITEM
          [Ano Referencia      ]=ANO
          [Mes Referencia      ]=MES
          If IsLockRecord()
             Then Del
                  Sleep 1000
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)


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

Result=GetP_Entra([NotaEC->Codigo da Empresa])

return Result
EndProc ; (Carrega_Parametros)




;*******************************************************************************
;* Carrega Parametros P_Entra                                                  *
;*******************************************************************************
Proc GetP_Entra(EMPRESA)
private EMPRESA, MSG

If IsEmpty("\\Sistemas\\Estoque\\P_Entra")
   Then Mensagem("N„o est„o configurados os parametros para esta empresa [Entrada/NE] !")
        Return False
EndIf

GetRecord "\\Sistemas\\Estoque\\P_Entra" EMPRESA to REGP_ENTRA
If Not RetVal                                                   
   Then MSG =       "// Empresa ["+EMPRESA+"] sem configura‡Æo de parƒmetros !// //"
        MSG = MSG + " - Utilit rios / Parƒmetros //"
        MSG = MSG + " - P_Entra // //"
        MSG = MSG + "Verificar com Suporte da Vise !"
        Mensagem(MSG)

        Release Vars EMPRESA, REGP_BALCAO, MSG
        Return False
endif



PARAM_CONTA_CAIXA           = REGP_ENTRA["Codigo_Conta_Caixa"       ]
GetRecord "\\Sistemas\\Ctacor\\Conta" PARAM_CONTA_CAIXA to REGCONTA   
If RetVal
   then PARAM_DESC_CONTA_CAIXA=REGCONTA["Descricao da Conta"]
   else PARAM_DESC_CONTA_CAIXA=""
endif                                                      

PARAM_TABELA_PRECO          = REGP_ENTRA["Tabela_Preco"             ]
PARAM_ATTAB_PRECO           = REGP_ENTRA["Atualiza_Tabela_Preco"    ]
PARAM_CCE_SUBICMS           = REGP_ENTRA["SubTrai_ICMS_CustoEntrada"]
PARAM_BCPV_SUBICMS          = REGP_ENTRA["SubTrai_ICMS_BC_PrVenda"  ]
PARAM_RELATORIO             = REGP_ENTRA["Script_Impressao"         ]
PARAM_ATUA_CXBC             = REGP_ENTRA["Atualiza_Caixa_Banco"     ]
PARAM_ATUA_CAPG             = REGP_ENTRA["Atualiza_Contas_Pagar"    ]
PARAM_CALC_COFLUCR          = REGP_ENTRA["Calcular_COFINS_Lucrativ" ]
PARAM_TAXA_COFINS           = REGP_ENTRA["Taxa_COFINS"              ]
PARAM_TAXA_LUCRATIV         = REGP_ENTRA["Taxa_Lucratividade"       ]
PARAM_USA_COFINS_DBCR       = REGP_ENTRA["Utiliza_COFINS_DBCR"      ]


PARAM_PECAS_ITEM            = "N"                                ;[Controla_Pecas_Item]

PARAM_CCE_SUBCOFINS         = REGP_ENTRA["SubTrai_COFINS_CustoEntra"]
PARAM_CCE_SUBPIS            = REGP_ENTRA["SubTrai_PIS_CustoEntrada" ]
PARAM_TAXA_PIS              = REGP_ENTRA["Taxa_PIS"                 ]
PARAM_ACRES_DIF_ALIQ_CUST   = REGP_ENTRA["Acresce_DifAliq_Custo"    ]
PARAM_UTILIZA_TRANSFERENCIA = REGP_ENTRA["Utiliza_Transferencia"    ]
PARAM_DATA_TRANSFERENCIA    = REGP_ENTRA["Data_Transferencia"       ]
PARAM_DIGITA_COR_TECIDO     = REGP_ENTRA["Digita Cor_Tecido"        ]

If PARAM_DIGITA_COR_TECIDO="S"
   Then LOCALIZA_CODIGO="LOC_CODREF"
EndIf   




If ([Notaec->Codigo do Documento]="NE") And (SYS_CODIGO_CLIENTE="0117") And
   (SubStr(Directory(),1,1)="X")
   Then PARAM_CCE_SUBICMS    = "N"
        PARAM_BCPV_SUBICMS   = "N"
        PARAM_CALC_COFLUCR   = "N"
        PARAM_USA_COFINS_DBCR= "N"




EndIf

Release Vars EMPRESA, MSG
Return True

EndProc ; (GetP_Entra)

;*******************************************************************************
;* Rotina para zerar variaveis usadas no Form                                  *
;*******************************************************************************
Proc Limpa_VarsForm()

VCITENS    =BlankNum()
VSQTDE     =BlankNum()
VSVRMERC   =BlankNum()

DIF_VRMERC =BlankNum()
DIF_VRSERV =BlankNum()
DIF_BCICMS =BlankNum()
DIF_ICMS   =BlankNum()
DIF_BCST   =BlankNum()
DIF_ST     =BlankNum()
DIF_IPI    =BlankNum()
DIF_NOTA   =BlankNum()

EndProc



;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Monta_Tabelas()
MSGCAMPO     = ""

View NOWINDOW "NotaEI"

View NOWINDOW "Cotacao"
View NOWINDOW "FornProd"
View NOWINDOW "P_Entra" 

View NOWINDOW "Itens" ImageRights ReadOnlY
View NOWINDOW "SdEstq"
View NOWINDOW "EstqPrm"

View NOWINDOW "NotaEC"

Moveto "NotaEC"
CoEditKey 

;************** Rotina para tratar o erro de tabela locada *********************
If ErrorCode()=4
   Then Return False
EndIf

Moveto "NotaEC"
PickForm "1"

Return True
EndProc


;*******************************************************************************
;* Rotina Principal Notas de Entrada                                           *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc"

sys_Valor()

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

COR_MENSAGEM="1"
MSG="- Antes de efetuar esta opera‡„o de altera‡„o de dados,     //"
MSG=MSG+"  recomendamos que seja feito um backup do sistema.         //"
MSG=MSG+"- Caso a altera‡„o de dados fique errada ‚ poss¡vel retornar//"
MSG=MSG+"  aos valores anteriores com a restaura‡„o do backup.       //"
MSG=MSG+"- Recomendamos tamb‚m que durante este processo ningu‚m     //"
MSG=MSG+"  esteja usando o sistema.                                  //"
Mensagem(MSG)


MSG="** Rotina para recalcular custo de entrada do produto ! **    // //"
MSG=MSG+"- atualiza custo na nota de entrada;//"
MSG=MSG+"- atualiza custo e saldo no estoque;//"
MSG=MSG+"- atualiza custo na cota‡Æo.        // //"
MSG=MSG+"Ao termino da opera‡Æo reprocessar e transferir saldo de estoque,//"
MSG=MSG+"   desde da data em aberto no sistema das notas de entrada!      //"
While ConfGeral(MSG)

  Limpa_VarsForm()
  
  PARAM_FTCUSTO     = "NOTAEC"
  PARAM_EXIBECUSTO  = "S"
  MSGCAMPO          = ""
  
  If Not Monta_Tabelas()
     Then Do_It!
          ClearAll
          Release Vars All
          Release Procs All
          return
  EndIf
  INC_COMPRA=False
  
  NR = NRecords("NotaEc")

  empresaanterior="***"
 
  Scan
  
   Barra(NR, RecNo())
   Aguarde("Aguarde, Processando 1/2"+BARRA_STRING)

   if sys_codigo_cliente="0418"
      then
            If [Data de Entrada]<DateVal("21.06.2018")        
               Then Loop
            EndIf
   endif

   if sys_codigo_cliente="0399"
      then
            If [Data de Entrada]<DateVal("01.01.2017")        
               Then Loop
            EndIf
   endif
   
   if sys_codigo_cliente="0376"
      then
            If [Data de Entrada]<=DateVal("31.12.2017")        
               Then Loop
            EndIf
   endif  
                                                                          
   if sys_codigo_cliente="0410"
      then
            If [Data de Entrada]<DateVal("01.02.2018")        
               Then Loop
            EndIf
   endif  
   
   if sys_codigo_cliente="0389"
      then
            If [Data de Entrada]<DateVal("01.01.2019")        
               Then Loop
            EndIf
   endif 
   
   if sys_codigo_cliente="0359"
      then
            If [Data de Entrada]<DateVal("01.01.2019")        
               Then Loop
            EndIf
   endif     
      
    if [codigo da empresa]<>empresaanterior
       then 
            if not Carrega_parametros()
                then loop
            endif    
            empresaanterior=[codigo da empresa]
    endif        
    
    If SYS_CODIGO_CLIENTE="0370" 
       Then If [Data de Entrada]<DateVal("01.01.2020")        
               Then Loop
            EndIf
            
            VRPIS   =0
            VRCOFINS=0
   EndIf
  
   Moveto "NotaEI"
   Scan
      If SYS_CODIGO_CLIENTE="0370"
         Then BCPIS    = ([Preco Total]-[Valor Desconto Total])+[Valor Frete Total]+[Valor Seguro Total]+[Valor OutDesp Total]
              BCCOFINS = BCPIS
                   
              [PIS_CST        ]="50"
              [PIS_BC         ]=BCPIS
              [PIS_Aliquota   ]=1.65
              [PIS_Valor      ]=NDecimal(([PIS_BC         ]*[PIS_Aliquota   ])/100,2)
                  
              [COFINS_CST     ]="50"
              [COFINS_BC      ]=BCCOFINS
              [COFINS_Aliquota]=7.6
              [COFINS_Valor   ]=NDecimal(([COFINS_BC      ]*[COFINS_Aliquota])/100,2)
              UnLockRecord
      EndIf   
      
      CHAVEI=0
      SEQIT=[Sequencia do Lancamento]
      
      Inicia_Registro()
      
      Estoque()
      
    EndScan
  
    Moveto "NotaEC"
  EndScan
  Do_It!
  ClearAll
  
  NR = NRecords("NotaEc")
  
  View "SdEstq"
  View "FornProd"
  View "Cotacao"
  View "Notaei"
  CoEdit "NotaEC"
  Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, Processando 2/2"+BARRA_STRING)

   LANCTO=[Numero do Lancamento]
  
   COTACAO()
  
  EndScan
  Do_It!
  ClearAll


  MSG="Fim do processo !// //"
  MSG=MSG+"- verificar dados se corretos.// //"
  MSG=MSG+"Ao termino da opera‡Æo reprocessar e transferir saldo de estoque,//"
  MSG=MSG+"   desde da data em aberto no sistema das notas de entrada!      //"
  Mensagem(MSG)

  quitloop
endwhile

ClearAll
Release Vars All
Release Procs All
