CONTEÚDO
- Visão Geral
- Parâmetro
- Pontos de Entrada - ADVPL
- Pontos de Entrada - Procedure
01. VISÃO GERAL
Durante a execução do recálculo do custo médio (MATA330), o saldo final do período é atualizado na tabela de saldos físico/financeiro (SB2) e, caso o ambiente onde a execução ocorre seja operado por vários usuários, pode ocorrer concorrência na gravação da tabela SB2, causando lentidão no recálculo do custo e em outros processos.
Ao habilitar o parâmetro MV_A330SB2, o recálculo do custo médio passa a considerar a tabela TR2XXSP (onde XX é o código do grupo de empresas) como a tabela de saldos físico/financeiro para a execução, minimizando a concorrência com a SB2. Ao término do recálculo, antes da geração dos lançamentos contábeis, os saldos finais* calculados na TR2 são gravados na SB2 conforme disponibilidade dos registros.
Antes de habilitar o parâmetro, o cliente deve avaliar em seu ambiente se possui customizações que possam ser impactadas pela alteração da tabela de saldos físico/financeiro. Os tópicos abaixo listam os pontos de entradas que podem ser impactados.
Atenção
O parâmetro MV_A330SB2 estará disponível para os releases 12.1.33 e 12.1.2210; a partir da 12.1.2310, o parâmetro passará a ser obsoleto, pois a funcionalidade estará sempre ativa.
Tabela TR2
A tabela TR2XXSP é uma tabela auxiliar para processamento do recálculo e, por isso, não faz parte do dicionário de dados
Atenção
A tabela TR2 é de uso EXCLUSIVO da rotina Recálculo do Custo Médio (MATA330) e de suas procedures.
*O saldo final é aquele gravado nos campos abaixo:
Campo | Título |
---|---|
B2_QFIM | Saldo em qtde no fim mes |
B2_VFIM1 | Valor final p/transferir |
B2_VFIM2 | Val.final 2a moeda p/tran |
B2_VFIM3 | Val.final 3a moeda p/tran |
B2_VFIM4 | Val.final 4a moeda p/tran |
B2_VFIM5 | Val.final 5a moeda p/tran |
B2_QFIM2 | Qtd. Fim mes 2a UM |
B2_CMFF1 | Custo Unit. do prod. FIFO |
B2_CMFF2 | Custo Unit. do prod. FIFO |
B2_CMFF3 | Custo Unit. do prod. FIFO |
B2_CMFF4 | Custo Unit. do prod. FIFO |
B2_CMFF5 | Custo Unit. do prod. FIFO |
B2_VFIMFF1 | Val.final p/transferir |
B2_VFIMFF2 | Val.final 2a moeda p/tran |
B2_VFIMFF3 | Val.final 3a moeda p/tran |
B2_VFIMFF4 | Val.final 4a moeda p/tran |
B2_VFIMFF5 | Val.final 5a moeda p/tran |
B2_QFIMFF | Saldo em qtde no fim mes |
B2_CMFIM1 | Custo unitario do produto |
B2_CMFIM2 | Custo unitario do produto |
B2_CMFIM3 | Custo unitario do produto |
B2_CMFIM4 | Custo unitario do produto |
B2_CMFIM5 | Custo unitario do produto |
B2_CM11 | Custo Unitario do produto |
B2_CM21 | Custo unit. na 2a moeda |
B2_CM31 | Custo unit. na 3a moeda |
B2_CM41 | Custo unit. na 4a moeda |
B2_CM51 | Custo unit. na 5a moeda |
B2_CMRP1 | Custo Unitario Reposicao |
B2_CMRP2 | Rep. Unit. na 2a. Moeda |
B2_CMRP3 | Rep. Unit. na 3a. Moeda |
B2_CMRP4 | Rep. Unit. na 4a. Moeda |
B2_CMRP5 | Rep. Unit. na 5a. Moeda |
B2_VFRP1 | Valor Final de Reposicao |
B2_VFRP2 | Vlr. Final Reposicao 2a M |
B2_VFRP3 | Vlr. Final Reposicao 3a M |
B2_VFRP4 | Vlr. Final Reposicao 4a M |
B2_VFRP5 | Vlr. Final Reposicao 5a M |
1 O Custo médio unitário é atualizado somente para produtos do tipo Mão de Obra (MOD), por compatibilidade com o parâmetro desabilitado.
02. Parâmetro
Campo | Conteúdo |
---|---|
Nome | MV_A330SB2 |
Tipo | 3-Lógico |
Conteúdo | .F./.T. |
Descrição | .F. - o MATA330 utiliza a tabela SB2 para o processamento ou .T. o Recálculo utiliza a tabela TR2 para o processamento e, ao término, grava na SB2. |
Uso de Procedures
Para correta execução do recálculo, sempre que o conteúdo do parâmetro MV_A330SB2 for alterado, é necessário reinstalar o pacote de procedures 19 - Custo médio através do configurador, para assegurar que as procedures instaladas acessem a tabela TR2XXSP e não a SB2XX0.
03. Pontos de Entrada - ADVPL
Abaixo estão listados os pontos de entrada que podem ser impactados ao habilitar o parâmetro MV_A330SB2.
A ativação do parâmetro MV_A330SB2 altera o Alias SB2, passando a apontar para a tabela TR2XXSP e deixa de ler a tabela SB2XX0 durante a execução dos pontos de entrada abaixo, entretanto, como somente os campos de quantidade, valor e custo médio finais são gravados na SB2, é necessário avaliar se outros campos da SB2 estão sendo lidos ou gravados, e realizar ajustes de acordo com a necessidade. Da mesma forma, caso sejam feitas consultas utilizando queries na SB2, com a função RetSqlName, será necessário compatibilizar para ler da tabela TR2XXSP.
Ponto de entrada | Descrição |
---|---|
MA330CTB | Customização após o recálculo contábil |
MA330TRB | Manipulação do arquivo TRB antes do processamento do recálculo |
MA330SEQ | Permite alterar a ordem de recálculo do custo médio, alterando o campo TRB->TRB_ORDEM |
MA330D1 | Chamado após a atualização dos valores de saldo final com dados da nota de entrada (SD1) |
MA330D2 | Chamado após a atualização dos valores de saldo final com dados de nota de saída (SD2) |
MA330D3 | Chamado após a atualização dos valores de saldo final com dados de movimentações internas (SD3) |
M330CD2 | Altera o custo médio unitário da Nota Fiscal de Saída |
M330CD1 | Manipula custo em parte nas notas de entrada |
MA330C3 | Manipula array de custo médio |
MA330P3 | Alterar o valor do custo médio em partes de movimentos internos |
A330CDEV | Contabilização dos movimentos de devolução de compras |
MA330AL | Valida filtro do armazém |
M330CMU | Altera o custo médio unificado para os produtos |
MA330PRC | Desliga o processo de transferência de materiais no recálculo do custo médio |
MA330TRF | Permite manipular o custo da nota de origem na transferência entre filiais durante o recálculo |
MA330UNI | Filtragem de Armazem na Aglutinação de Custos |
CRIASB2 | Caso durante a execução do recálculo seja identificado que não existe SB2 para um movimento a ser processado, o ponto de entrada será chamado duas vezes, uma para gravar a TR2 e outra para gravar a SB2. |
MTCNFDV | Devolução de Venda |
MTCNFDVP | Altera Custo da Nota Fiscal |
A330E6CP | Verifica se mantém o custo em partes para movimentos internos. |
A330D1CP | Mantém custos em partes já informados no recálculo do custo médio. |
MA330MOD | Customiza calculo do custo de mão-de-obra |
A330GRUP | Considera Grupo Contábil. |
A330DECC | Cria cálculo customizado de despesa de centro de custo |
A330QTMO | Realiza ajustes na quantidade apurada da mão-de-obra. |
M330FCC | Filtro utilizado na seleção das contas processadas pelas MOD (Em Query) |
CONVUM | Tratar o cálculo da quantidade nas unidades de medida |
Atenção!
Caso o ambiente do cliente possua algum dos pontos de entrada acima e, nestes programas, realize algum acesso à tabela SB2 para leitura ou gravação, deverá ser avaliado a necessidade de compatibilização do ponto de entrada.
Abaixo, é apresentado um exemplo hipotético de regra de negócio em ponto de entrada que pode ser impactado e os ajustes necessários para corrigir.
#INCLUDE 'totvs.ch' User Function MA330AL() Local aArea := GetArea() Local cArmazem := "20" // Armazém que NÃO deseja recalcular custo médio Local lRet := .T. If SB2->B2_LOCAL == cArmazem lRet := .F. Endif RestArea(aArea) Return lRet // Retorno Lógico, sendo .T. para recalcular armazém e .F. para não recalcular
No exemplo acima, embora seja feito acesso à SB2, não é necessário alterar o tratamento, pois com o parâmetro MV_A330SB2 habilitado, o Alias SB2 já aponta para a tabela TR2XXSP corretamente.
Caso a regra acima esteja escrita desta forma:
#INCLUDE 'totvs.ch' User Function MA330AL() Local aArea := GetArea() Local cArmazem := "20" // Armazém que NÃO deseja recalcular custo médio Local cQuery := "" Local cAlTmp := "" Local lRet := .T. cQuery := " Select B2_LOCAL From "+RetSqlName("SB2")+" " cQuery += " Where R_E_C_N_O_ = "+cValToChar(SB2->(Recno())) cAlTmp := MPSysOpenQuery(cQuery) If !(cAlTmp)->(EoF()) .And. (cAlTmp)->B2_LOCAL == cArmazem lRet := .F. Endif (cAlTmp)->(DbCloseArea()) RestArea(aArea) Return lRet // Retorno Lógico, sendo .T. para recalcular armazém e .F. para não recalcular
Será necessário corrigir a query, pois o RetSqlName retorna SB2XX0, mas a rotina deve ler os campos da TR2XXSP:
#INCLUDE 'totvs.ch' User Function MA330AL() Local aArea := GetArea() Local cArmazem := "20" // Armazém que NÃO deseja recalcular custo médio Local cQuery := "" Local cAlTmp := "" Local cAlSB2 := RetSqlName("SB2") Local lRet := .T. Local lA330SB2 := SuperGetMV("MV_A330SB2") If lA330SB2 cAlSB2 := "TR2"+cEmpAnt+"SP" EndIf cQuery := " Select B2_LOCAL From "+ cAlSB2 +" " cQuery += " Where R_E_C_N_O_ = "+cValToChar(SB2->(Recno())) cAlTmp := MPSysOpenQuery(cQuery) If !(cAlTmp)->(EoF()) .And. (cAlTmp)->B2_LOCAL == cArmazem lRet := .F. Endif (cAlTmp)->(DbCloseArea()) RestArea(aArea) Return lRet // Retorno Lógico, sendo .T. para recalcular armazém e .F. para não recalcular
Abaixo é apresentado outro exemplo, onde ocorre a gravação de campos na SB2
#INCLUDE 'totvs.ch' User Function MA330D1() Local cFornece := '000001' //Dados do fornecedor - pode ser lido de parâmetro Local cLoja := '01' //ou outra tabela para a customização //Fornecedor da nota se enquadra na regra X If SD1->D1_FORNECE == cFornece .And. SD1->D1_LOJA == cLoja If RecLock('SB2', .F.) //Faz com que o valor de custo considerado seja o total da nota e não o custo SB2->B2_VFIM1 := B2_VFIM1 - SD1->D1_CUSTO + SD1->D1_TOTAL //Acumula o custo total deste fornecedor SB2->B2_XCTTOT += SD1->D1_CUSTO SB2->B2_CMFIM1 := B2_VFIM1 / B2_QFIM SB2->(MsUnlock()) EndIf EndIf Return
No exemplo acima, a gravação dos campos B2_VFIM1 e B2_CMFIM1 está correta e, ao término do recálculo, será gravada na SB2 conforme esperado, entretanto, o campo B2_XCTTOT, por não fazer parte dos campos de saldo final padrão, não será gravado na SB2, sendo necessário reavaliar o cenário customizado para adequar o ponto de entrada.
04. Pontos de Entrada - Procedure
Durante a execução do recálculo, as procedures são utilizadas para preparar o arquivo TRB e iniciar os dados na SB2, e, por conta disso, é preciso avaliar se as procedures abaixo estão instaladas no banco de dados fazendo algum acesso à tabela SB2XX0. Caso estejam, deve ser alterado para que acesse a tabela TR2XXSP
Procedure | Descrição |
---|---|
MA330AL | Valida filtro do armazém |
MA330SEQ | Permite alterar a ordem de recálculo do custo médio |
M330CMU | Altera o custo médio unificado para os produtos |
MA330CP | Define regras para classificação de matéria-prima |
M330INB2CP | Gravar os Valores finais no SB2 com o CUSTO EM PARTES |
M330INC2CP | Atualiza partes do custo em partes no SC2 |
Uso de Procedures
Caso o ambiente do cliente possua algum dos pontos de entrada acima e, nestas procedures, realize algum acesso à tabela SB2 para leitura ou gravação, deverá ser avaliado a necessidade de compatibilização do ponto de entrada.
Abaixo é apresentado um exemplo hipotético de regra de negócio em um ponto de entrada escrito em procedure para MSSQL que precisaria ser ajustado:
USE [P12127MNTDBEXP] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- Procedure creation ALTER PROCEDURE [dbo].[MA330AL_T1] ( @IN_FILIALCOR Char( 8) , @IN_COD Char( 30) , @IN_LOCAL Char( 2) , @IN_RECNOSB2 Integer , @OUT_RESULTADO Char( 01 ) output ) AS -- Declaration of variables DECLARE @cB2_LOCAL Char(02) BEGIN SET @OUT_RESULTADO = '0' Select @cB2_LOCAL = ISNULL(B2_LOCAL, ' ') From SB2990 Where R_E_C_N_O_ = @IN_RECNOSB2 IF @cB2_LOCAL = '20' -- Armazém que NÃO deseja recalcular custo médio BEGIN SET @OUT_RESULTADO = '1' -- Retorno em caractere, sendo '0' para recalcular armazém e '1' para não recalcular END END
Onde é feito o select na SB2990, é necessário trocar para TR299SP:
USE [P12127MNTDBEXP] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- Procedure creation ALTER PROCEDURE [dbo].[MA330AL_T1] ( @IN_FILIALCOR Char( 8) , @IN_COD Char( 30) , @IN_LOCAL Char( 2) , @IN_RECNOSB2 Integer , @OUT_RESULTADO Char( 01 ) output ) AS -- Declaration of variables DECLARE @cB2_LOCAL Char(02) BEGIN SET @OUT_RESULTADO = '0' Select @cB2_LOCAL = ISNULL(B2_LOCAL, ' ') From TR299SP Where R_E_C_N_O_ = @IN_RECNOSB2 IF @cB2_LOCAL = '20' -- Armazém que NÃO deseja recalcular custo médio BEGIN SET @OUT_RESULTADO = '1' -- Retorno em caractere, sendo '0' para recalcular armazém e '1' para não recalcular END END