Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Aviso
titleImportante

Os exemplos utilizados nesta documentação são meramente ilustrativos e a responsabilidade pela correta configuração do sistema é do cliente.

02. INCONSISTÊNCIA

02.01. ITENS EMPENHADOS / RESERVADOS NO ARQUIVO SB2/SB8/SBF

A inconsistência Itens empenhados / reservados no arquivo SB2/SB8/SBF será apresentada caso a quantidade empenhada ou reservada seja maior do que a quantidade inventariada.

Para a correta analise dessa inconsistência, deverá ser feito a verificação da configuração do produto, ou seja, se controla rastreabilidade por lote e/ou endereço.

Caso o produto não tenha rastreabilidade ativada por lote e endereço, a quantidade reservada será analisada na tabela SB2 - Saldos Físico e Financeiro.

Caso o produto tenha somente a rastreabilidade por lote ativada, a quantidade empenhada será analisada na tabela SB8 - Saldos por Lote.

Caso o produto tenha a rastreabilidade ativada por lote e endereço ou somente por endereço, a quantidade empenhada será analisada na tabela SBF - Saldos por Endereço.

03. EXEMPLO DE UTILIZAÇÃO NA ALTERAÇÃO

Informações
iconfalse
titleExemplo de Alteração
Bloco de código
languagec#
themeMidnight
linenumberstrue
collapsetrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

Static __oModelAut := NIL //variavel oModel para substituir msexecauto em MVC  User Function AltProjImob()

User Function AltProjImob()
Local nOpcAuto :=0
Local nX
Local oFNB
Local oFNC
Local oFND
Local oFNE
Local aLog
Local cLog :=""
Local lRet := .T.
Local cCodPrj:='0000000000'
Local cCodRev:='0001'
Local cCodEtapa:='001'
Local cItemEtp:='001'
Local cLinhaItem:='001'

If __oModelAut == Nil //somente uma unica vez carrega o modelo ATFA430
__oModelAut := FWLoadModel('ATFA430')
EndIf

nOpcAuto := 4 //3 - Inclusão | 4 - Alteração | 5 - Exclusão

__oModelAut:SetOperation(nOpcAuto) // 3 - Inclusão | 4 - Alteração | 5 - Exclusão
__oModelAut:Activate() //ativa modelo

DBSelectArea("FNB")
FNB->(DBSetOrder(1)) 
If DbSeek( xFilial("FNB") + cCodPrj + cCodRev) 
    //---------------------------------------------------------
    // Preencho os valores da FNB
    //---------------------------------------------------------
    oFNB := __oModelAut:GetModel('FNBMASTER') 
    oFNB:SETVALUE('FNB_DESC','PROJETO EXEAUTO ALTERADO')
EndIf

DBSelectArea("FNC")
FNC->(DBSetOrder(1)) 
If DbSeek( xFilial("FNC") + cCodPrj + cCodRev + cCodEtapa) 
    //---------------------------------------------------------
    // Preencho os valores da FNC
    //---------------------------------------------------------
    oFNC := __oModelAut:GetModel('FNCDETAIL') 
    oFNC:SETVALUE('FNC_DSCETP','ETAPA 001 ALTERADA')
EndIf

DBSelectArea("FND")
FND->(DBSetOrder(1)) 
If DbSeek( xFilial("FND") + cCodPrj + cCodRev + cCodEtapa + cItemEtp) 
    //---------------------------------------------------------
    // Preencho os valores da FND
    //---------------------------------------------------------
    oFND := __oModelAut:GetModel('FNDDETAIL') 
    oFND:SETVALUE('FND_DSCITE','ITEM 001 ETAPA 001 ALTERADO')
EndIf

DBSelectArea("FNE")
FNE->(DBSetOrder(1)) 
If DbSeek( xFilial("FNE") + cCodPrj + cCodRev + cCodEtapa + cLinhaItem) 
    //---------------------------------------------------------
    // Preencho os valores da FNE
    //---------------------------------------------------------
    oFNE := __oModelAut:GetModel('FNEDETAIL') 
    oFNE:SETVALUE('FNE_ENT01B','00004               ')
EndIf

If __oModelAut:VldData() //validacao dos dados pelo modelo
    __oModelAut:CommitData() //gravacao dos dados
Else
    aLog := __oModelAut:GetErrorMessage() //Recupera o erro do model quando nao passou no VldData

    //laco para gravar em string cLog conteudo do array aLog
    For nX := 1 to Len(aLog)
        If !Empty(aLog[nX])
            cLog += Alltrim(aLog[nX]) + CRLF
        EndIf
    Next nX

    lMsErroAuto := .T. //seta variavel private como erro
    AutoGRLog(cLog) //grava log para exibir com funcao mostraerro
    mostraerro()
    lRet := .F. //retorna false
EndIf

__oModelAut:DeActivate() //desativa modelo

Return( lRet )

04. EXEMPLO DE UTILIZAÇÃO NA EXCLUSÃO

Informações
iconfalse
titleExemplo de Exclusão
Bloco de código
languagec#
themeMidnight
linenumberstrue
collapsetrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

Static __oModelAut := NIL //variavel oModel para substituir msexecauto em MVC  User Function AltProjImob()  User Function ExcProjImob() User Function ExcProjImob()

User Function ExcProjImob()
Local nX
Local aLog
Local cLog :=""
Local lRet := .T.
Local cCodPrj:='0000000000'
Local cCodRev:='0001'

If __oModelAut == Nil //somente uma unica vez carrega o modelo ATFA430
__oModelAut := FWLoadModel('ATFA430')
EndIf

nOpcAuto := 5 //3 - Inclusão | 4 - Alteração | 5 - Exclusão

__oModelAut:SetOperation(nOpcAuto) // 3 - Inclusão | 4 - Alteração | 5 - Exclusão
__oModelAut:Activate() //ativa modelo

DBSelectArea("FNB")
FNB->(DBSetOrder(1)) 
DbSeek( xFilial("FNB") + cCodPrj + cCodRev)

If __oModelAut:VldData() //validacao dos dados pelo modelo
    __oModelAut:CommitData() //gravacao dos dados
Else
    aLog := __oModelAut:GetErrorMessage() //Recupera o erro do model quando nao passou no VldData

    //laco para gravar em string cLog conteudo do array aLog
    For nX := 1 to Len(aLog)
        If !Empty(aLog[nX])
            cLog += Alltrim(aLog[nX]) + CRLF
        EndIf
    Next nX

    lMsErroAuto := .T. //seta variavel private como erro
    AutoGRLog(cLog) //grava log para exibir com funcao mostraerro
    mostraerro()
    lRet := .F. //retorna false                                 
EndIf

__oModelAut:DeActivate() //desativa modelo
    
Return( lRet )

05. ASSUNTOS RELACIONADOS


Exemplo:

Iremos ilustrar como a ordem de produção poderá afetar a geração do relatório Itens Não Inventariados.


Produto acabado

Image Added


Produto matéria prima

Image Added


Estrutura

Image Added


Saldo em estoque

Image Added


Ordem de produção com empenho sem sugestão de endereço

Image Added


Image Added


Image Added


Image Added


Image Added


Cadastro do inventário

Image Added


Processamento do inventário

Image Added


Image Added


Neste cenário, o relatório Itens Não Inventariados não é apresentado, pois o sistema não entende como uma inconsistência um empenho gerado pela ordem de produção que não tinha um endereço informado.


Agora iremos mostrar um cenário onde a ordem de produção terá endereço informado em seu empenho, usando os mesmos cadastros do cenário anterior.


Ordem de produção com empenho e sugestão de endereço

Image Added


Image Added


Image Added


Image Added


Image Added


Cadastro do inventário

Image Added


Processamento do inventário

Image Added


Image Added


Image Added


Neste cenário, o relatório Itens Não Inventariados é apresentado, pois o sistema consegue associar a quantidade empenhada no estoque ao endereço (tabelas SB2 X SBF).

No inventário é solicitado que o saldo do produto MP003 seja zerado no endereço END003, mas há saldo empenhado neste endereço, assim o relatório é apresentado e o inventário não é realizado.


Conclusão

Quando a rastreabilidade por endereço é ativada no produto, é importante que seja informado o endereço nos empenhos das ordens de produção, pois assim o saldo empenhado na tabela SB2 - Saldos Físico e Financeiro terá sua distribuição correta na tabela SBF - Saldos por Endereço. Quando o controle por endereço está ativado no produto, a rotina MATA340 - Inventário buscará o saldo empenhado para o produto e endereço na tabela SBF - Saldos por Endereço, pois o saldo empenhado na tabela SB2 - Saldos Físico e Financeiro é somente o totalizador dos empenhos de todos os endereços daquele produto. Caso os empenhos gerados através de ordens de produção não tenham seus respectivos endereços, não há como saber quais quantidades empenhadas na tabela SB2 - Saldos Físico e Financeiro correspondem ao endereço que está sendo inventariado no momento, dessa forma, o relatório Itens Não Inventariados não entende que há uma inconsistência para o produto e endereço inventariado.

Outro motivo que é importante ser destacado neste momento é que empenhos gerados por ordem de produção sem endereços informados não podem travar o processo de inventário, sendo que muitas empresas não param seus processos de produção durante um inventário físico em seus almoxarifados, da forma explicada anteriormente, garante-se que o inventário somente não ocorra para o produto e endereço específicos.

Vale destacar também que empenhos gerados através de ordem de produção do tipo Prevista não são considerados como inconsistência, pois ainda é incerta sua produção.


03. LISTA ATUAL DE INCONSISTENCIAS

Image Added

04. ASSUNTOS RELACIONADOS