Pagetitle |
---|
| Custo em Partes - Recálculo do Custo Médio |
---|
| Custo em Partes - Recálculo do Custo Médio |
---|
|
Custo em Partes - Recálculo do Custo MédioDescrição dos procedimentos para utilização do custo em partes com e sem stored procedures. O recálculo do custo médio possibilita dividir o custo de produtos fabricados em mais de uma parte, facilitando a visualização da composição de custos dos produtos acabados. O sistema permite dividir o custo de produtos fabricados em até 99 partes diferentes, cada parte nas 5 moedas padrão do sistema. O usuário deve através do ponto de entrada "MA330CP" definir as regras que irão classificar cada matéria-prima em uma parte do custo. O número de partes é sempre acrescido de mais uma parte, a qual contempla os materiais que não se encontram em nenhuma regra. Utilização do Custo em Partes somente em ADVPLPara definir a regra de utilização do custo em partes, deve-se utilizar o ponto de entrada MA330CP. Abaixo segue um exemplo do ponto de entrada. Ponto de entrada MA330CP ( desenvolvido em linguagem AdvPL):
Bloco de código |
---|
language | delphi |
---|
theme | Midnight |
---|
title | MA330CP |
---|
linenumbers | true |
---|
| #include "RWMAKE.CH"
User Function MA330CP ()
LOCAL aRegraCP:={}
AADD(aRegraCP,"SB1->B1_TIPO == 'MP'")
AADD(aRegraCP,"SB1->B1_TIPO == 'MC'")
Return aRegraCP |
Utilizando o exemplo descrito, é possível verificar o custo divido em três partes: · A parte 1 composta dos valores de produtos que tenham o campo B1_TIPO = "MP" · A parte 2 composta dos valores de produtos que tenham o campo B1_TIPO = "MC" · A parte 3 composta dos valores de produtos que não se enquadram nas partes citadas anteriormente Para utilizar o custo em partes devem ser criados alguns campos no sistema seguindo as regras e nomes do quadro abaixo. Se o ponto de entrada que define as regras do custo existir e os campos não forem criados, a rotina de recálculo do custo processará o recálculo do custo desconsiderando o custo em partes.
Informações |
---|
| O Custo em partes é basicamente o desmenbramento da composição do custo médio de um produto produzido, facilitando a visualização dos custos de cada parte utilizada na produção e não esta relacionado com o custo de reposição de um produto, que envolve o custo de compra ou aquisição para reposição do estoque. |
Os campos devem ser definidos utilizando a seguinte regra:CC – Numero do Custo Em Partes MM – Numero da Moeda (1 a 5)
TABELA | CAMPOS |
---|
SB9 – Saldos Iniciais | B9_CP + CC + MM (Custo em partes) – B9_VINI1
B9_CPM + CC + MM (Custo em partes Unitário) – B9_CM1 |
SB2 – Saldos em Estoque | B2_CP + CC + MM (Custo em partes Unitário) – B2_CM1
B2_CPF + CC + MM (Custo em partes Final) – B2_VFIM1 | SB6 – Saldos em poder de terceiros | B6_CP + CC + MM (Custo em partes) – B6_CUSTO1 |
SC2 – Ordens de Produção | C2_CPF + CC + MM (Custo em partes Final) – C2_VFIM1 C2_CPI + CC + MM (Custo em partes Inicial) – C2_VINI1 C2_API + CC + MM (Apropriação Inicial do Custo em partes) – C2_APRINI1 C2_APF + CC + MM (Apropriação Final do Custo em partes) – C2_APRFIM1 | SD1 – Itens das NFs de Entrada | D1_CP + CC + MM (Custo em partes) – D1_CUSTO | SD2 – Itens das NFs de Saída | D2_CP + CC + MM (Custo em partes) – D2_CUSTO1 | SD3 – Movimentos Internos | D3_CP+ CC + MM (Custo em partes) – D2_CUSTO1 |
Para processar o custo em partes em ADVPL, as procedures padrões não devem estar instaladas. Exemplo: se o processo 17 (Virada de Saldos) estiver instalado e as procedures do Custo em Partes não existirem no banco de dados, o sistema não atualizará as informações do custo em partes nas tabelas envolvidas. Utilização do Custo em Partes com Stored ProceduresA utilização do custo em partes com stored procedures é mais complexa que a utilização em ADVPL, pois, envolve a linguagem de programação SQL. Para definir a regra do custo em partes, é necessário utilizar o ponto de entrada MA330CP em ADVPL. Existindo o ponto de entrada MA330CP em ADVPL, a instalação de procedures irá instalar algumas procedures adicionais basicas essenciais ao processo, porem sem tratamentos lógicos devido ao numero de partes não ser fixo, podendo variar para cada cliente. Estas procedures adicionais são M330INB2CP, M330INC2CPpara o recalculo do custo medio e MA280INB9CP, MA280INC2CP para o fechamento e seus nomes devem ser mantidos. Por exemplo M330INB2CP_xx, onde xx é o codigo da empresa. Veja um exemplo de todo o procedimento a ser implementado para o correto funcionamento do custo em partes com stored procedures.
Informações |
---|
| Caso o ambiente possua o parâmetro MV_A330SB2 configurado como .T., ou release igual ou superior à 12.1.2310, é necessário que as queries onde é feita leitura/atualização da SB2, nas procedures M330INB2CP, M330INC2CP e MA330CP, sejam alteradas para acessar a tabela TR2XXSP, onde XX é o código do grupo de empresas. Para mais informações, veja: Recálculo do Custo Médio sem concorrência com movimentações de Estoque |
Ponto de entrada MA330CP ( desenvolvido em linguagem AdvPL): Bloco de código |
---|
language | delphi |
---|
theme | Midnight |
---|
title | MA330CP |
---|
linenumbers | true |
---|
| #include "RWMAKE.CH"
User Function MA330CP ()
LOCAL aRegraCP:={}
AADD(aRegraCP,"SB1->B1_TIPO == 'MP'")
AADD(aRegraCP,"SB1->B1_TIPO == 'MC'")
Return aRegraCP |
Ponto de entrada MA330CP (Ponto de entrada desenvolvido em Linguagem SQL): Bloco de código |
---|
language | sql |
---|
theme | Midnight |
---|
title | MA330CP |
---|
linenumbers | true |
---|
| -- Criacao de procedure
-- ** Esta procedure não é instalada pela instalação de procedures e seu nome não necessariamente deve ser MA330CP
-- ** aqui foi usado o mesmo nome do ponto de entrada em ADVPL para melhor entendimento, mas deve ter o nome chamado
-- ** logo abaixo no exemplo M330INB2CP_99, Caso a procedure necessite de pesquisar a regra das partes.
CREATE PROCEDURE MA330CP_99 (
@IN_FILIALCOR Char( 02 ) ,
@IN_COD Char( 15) ,
@OUT_RESULTADO Integer output ) AS
-- Declaracoes de variaveis
DECLARE @cFil_SB1 Char( 2)
DECLARE @cB1_TIPO Char( 2)
BEGIN
EXEC XFILIAL_99 'SB1' , @IN_FILIALCOR , @cFil_SB1 output
SELECT @cB1_TIPO = B1_TIPO
FROM SB1990
WHERE B1_FILIAL = @cFil_SB1 and B1_COD = @IN_COD and D_E_L_E_T_ = ' '
SET @OUT_RESULTADO = 3
IF @cB1_TIPO = 'MP'
BEGIN
SET @OUT_RESULTADO = 1
END
IF @cB1_TIPO = 'MC'
BEGIN
SET @OUT_RESULTADO = 2
END
END |
Atenção aos tópicos abaixo:1. O ponto de entrada MA330CP foi escrito em linguagem SQL. Caso esteja utilizando outro gerenciador de banco de dados, é necessário fazer a compatibilização da linguagem escrita. 2. O nome da stored procedure deverá ser compatibilizada de acordo com o ambiente do cliente. Exemplo: Caso o cliente esteja utilizando a Empresa 01, deve alterar a chamada da procedure MA330CP_99 para MA330CP_01 e, também, alterar a chamada da procedure XFILIAL_99 para XFILIAL_01. Caso não seja feita essa alteração, e seja mantida a chamada XFILIAL_99, ao salvar a procedure no banco de dados será apresentada a seguinte mensagem: "O módulo 'MA330CP_01' depende do objeto ausente 'XFILIAL_99'. O módulo ainda será criado; entretanto, não poderá ser executado com êxito até o objeto existir." Caso o cliente esteja utilizando a Empresa 01, é necessário alterar o nome físico da tabela SB1990 para SB1010. 3. A implementação do custo em partes exige um grau elevado de conhecimentos em stored procedures. Desta forma, é recomendado que o procedimento descrito seja efetuado por um profissional qualificado TOTVS. Utilizando o exemplo, é possível verificar o custo divido em três partes:
· A parte 1 composta dos valores de produtos que tenham o campo B1_TIPO = "MP" · A parte 2 composta dos valores de produtos que tenham o campo B1_TIPO = "MC" · A parte 3 composta dos valores de produtos que não se enquadram nas partes citadas
Para utilizar o custo em partes devem ser criados alguns campos no sistema seguindo as regras e nomes, conforme quadro abaixo. Se o ponto de entrada que define as regras do custo existir e os campos não forem criados, a rotina de recálculo do custo processará o recálculo do custo desconsiderando o custo em partes. Os campos devem ser definidos utilizando a seguinte regra: CC – Numero do Custo Em Partes MM – Numero da Moeda (1 a 5) TABELA | CAMPOS |
---|
SB9 – Saldos Iniciais | B9_CP + CC + MM (Custo em partes) – B9_VINI1
B9_CPM + CC + MM (Custo em partes Unitário) – B9_CM1 |
SB2 – Saldos em Estoque | B2_CP + CC + MM (Custo em partes Unitário) – B2_CM1
B2_CPF + CC + MM (Custo em partes Final) – B2_VFIM1 | SB6 – Saldos em poder de terceiros | B6_CP + CC + MM (Custo em partes) – B6_CUSTO1 |
SC2 – Ordens de Produção | C2_CPF + CC + MM (Custo em partes Final) – C2_VFIM1 C2_CPI + CC + MM (Custo em partes Inicial) – C2_VINI1 C2_API + CC + MM (Apropriação Inicial do Custo em partes) – C2_APRINI1 C2_APF + CC + MM (Apropriação Final do Custo em partes) – C2_APRFIM1 | SD1 – Itens das NFs de Entrada | D1_CP + CC + MM (Custo em partes) – D1_CUSTO | SD2 – Itens das NFs de Saída | D2_CP + CC + MM (Custo em partes) – D2_CUSTO1 | SD3 – Movimentos Internos | D3_CP+ CC + MM (Custo em partes) – D2_CUSTO1 |
Além dos campos descritos, também devem ser ajustadas as stored procedures M330INB2CP, M330INC2CP, MA280INB9CP e MA280INC2CP. Este ajuste é necessário devido à implementação dos novos campos. Exemplos de como realizar o ajuste: Stored Procedure M330INB2CP Bloco de código |
---|
language | delphi |
---|
theme | Midnight |
---|
title | M330INB2CP |
---|
linenumbers | true |
---|
| -- Criacao de procedure
ALTER PROCEDURE M330INB2CP_99 (
@IN_FILIALCOR Char( 02 ) ,
@IN_DINICIO Char( 08 ) ,
@IN_CUSUNIF Char( 01 ) ,
@IN_COD Char( 15 ) ,
@IN_LOCAL Char( 2 ) ,
@IN_RECNOSB2 Integer ) AS
-- Declaracoes de variaveis
DECLARE @nB2_VFIM1 Float
DECLARE @nB2_VFIM2 Float
DECLARE @nB2_VFIM3 Float
DECLARE @nB2_VFIM4 Float
DECLARE @nB2_VFIM5 Float
DECLARE @nB9_CP0101 Float
DECLARE @nB9_CP0102 Float
DECLARE @nB9_CP0103 Float
DECLARE @nB9_CP0104 Float
DECLARE @nB9_CP0105 Float
DECLARE @nB9_CP0201 Float
DECLARE @nB9_CP0202 Float
DECLARE @nB9_CP0203 Float
DECLARE @nB9_CP0204 Float
DECLARE @nB9_CP0205 Float
DECLARE @nB9_CP0301 Float
DECLARE @nB9_CP0302 Float
DECLARE @nB9_CP0303 Float
DECLARE @nB9_CP0304 Float
DECLARE @nB9_CP0305 Float
DECLARE @nParte Integer
DECLARE @nQtd Float
DECLARE @cFil_SB9 Char( 02 )
DECLARE @iRecnoTRT Integer
BEGIN
EXEC XFILIAL_99 'SB9' , @IN_FILIALCOR , @cFil_SB9 output
UPDATE SB2990
WITH (ROWLOCK)
SET B2_CPF0101= 0, B2_CPF0102= 0, B2_CPF0103= 0, B2_CPF0104= 0, B2_CPF0105= 0 ,
B2_CPF0201= 0, B2_CPF0202= 0, B2_CPF0203= 0, B2_CPF0204= 0, B2_CPF0205= 0 ,
B2_CPF0301= 0, B2_CPF0302= 0, B2_CPF0303= 0, B2_CPF0304= 0, B2_CPF0305= 0 ,
B2_CP0101 = 0, B2_CP0102 = 0, B2_CP0103 = 0, B2_CP0104 = 0, B2_CP0105 = 0 ,
B2_CP0201 = 0, B2_CP0202 = 0, B2_CP0203 = 0, B2_CP0204 = 0, B2_CP0205 = 0 ,
B2_CP0301 = 0, B2_CP0302 = 0, B2_CP0303 = 0, B2_CP0304 = 0, B2_CP0305 = 0
WHERE R_E_C_N_O_ = @IN_RECNOSB2
IF SUBSTRING ( @IN_COD , 1 , 1 ) <> 'Z'
BEGIN
SELECT @nB9_CP0101 = ISNULL (B9_CP0101,0), @nB9_CP0102 = ISNULL (B9_CP0102,0),
@nB9_CP0103 = ISNULL (B9_CP0103,0), @nB9_CP0104 = ISNULL (B9_CP0104,0),
@nB9_CP0105 = ISNULL (B9_CP0105,0), @nB9_CP0201 = ISNULL (B9_CP0201,0),
@nB9_CP0202 = ISNULL (B9_CP0202,0), @nB9_CP0203 = ISNULL (B9_CP0203,0),
@nB9_CP0204 = ISNULL (B9_CP0204,0), @nB9_CP0205 = ISNULL (B9_CP0205,0),
@nB9_CP0301 = ISNULL (B9_CP0301,0), @nB9_CP0302 = ISNULL (B9_CP0302,0),
@nB9_CP0303 = ISNULL (B9_CP0303,0), @nB9_CP0304 = ISNULL (B9_CP0304,0),
@nB9_CP0305 = ISNULL (B9_CP0305,0)
FROM SB9990
WHERE B9_FILIAL = @cFil_SB9 and B9_COD = @IN_COD and B9_LOCAL = @IN_LOCAL and
B9_DATA = ( SELECT MAX ( B9_DATA )
FROM SB9990
WHERE B9_FILIAL = @cFil_SB9 and
B9_COD = @IN_COD and
B9_LOCAL = @IN_LOCAL and
B9_DATA <= @IN_DINICIO and
D_E_L_E_T_ <> '*'
) and D_E_L_E_T_ <> '*'
END
ELSE
BEGIN
EXEC MA330CP_99 @IN_FILIALCOR , @IN_COD , @nParte output
SELECT @nB2_VFIM1 = ISNULL ( B2_VFIM1 , 0 ),
@nB2_VFIM2 = ISNULL ( B2_VFIM2 , 0 ),
@nB2_VFIM3 = ISNULL ( B2_VFIM3 , 0 ),
@nB2_VFIM4 = ISNULL ( B2_VFIM4 , 0 ),
@nB2_VFIM5 = ISNULL ( B2_VFIM5 , 0 )
FROM SB2990
WHERE R_E_C_N_O_ = @IN_RECNOSB2
SET @nB9_CP0101 = 0
SET @nB9_CP0102 = 0
SET @nB9_CP0103 = 0
SET @nB9_CP0104 = 0
SET @nB9_CP0105 = 0
SET @nB9_CP0201 = 0
SET @nB9_CP0202 = 0
SET @nB9_CP0203 = 0
SET @nB9_CP0204 = 0
SET @nB9_CP0205 = 0
SET @nB9_CP0301 = 0
SET @nB9_CP0302 = 0
SET @nB9_CP0303 = 0
SET @nB9_CP0304 = 0
SET @nB9_CP0305 = 0
IF @nParte = 1
BEGIN
SET @nB9_CP0101 = @nB2_VFIM1
SET @nB9_CP0102 = @nB2_VFIM2
SET @nB9_CP0103 = @nB2_VFIM3
SET @nB9_CP0104 = @nB2_VFIM4
SET @nB9_CP0105 = @nB2_VFIM5
END
IF @nParte = 2
BEGIN
SET @nB9_CP0201 = @nB2_VFIM1
SET @nB9_CP0202 = @nB2_VFIM2
SET @nB9_CP0203 = @nB2_VFIM3
SET @nB9_CP0204 = @nB2_VFIM4
SET @nB9_CP0205 = @nB2_VFIM5
END
IF @nParte = 3
BEGIN
SET @nB9_CP0301 = @nB2_VFIM1
SET @nB9_CP0302 = @nB2_VFIM2
SET @nB9_CP0303 = @nB2_VFIM3
SET @nB9_CP0304 = @nB2_VFIM4
SET @nB9_CP0305 = @nB2_VFIM5
END
END
SET @nB9_CP0101 = ISNULL ( @nB9_CP0101 , 0 )
SET @nB9_CP0102 = ISNULL ( @nB9_CP0102 , 0 )
SET @nB9_CP0103 = ISNULL ( @nB9_CP0103 , 0 )
SET @nB9_CP0104 = ISNULL ( @nB9_CP0104 , 0 )
SET @nB9_CP0105 = ISNULL ( @nB9_CP0105 , 0 )
SET @nB9_CP0201 = ISNULL ( @nB9_CP0201 , 0 )
SET @nB9_CP0202 = ISNULL ( @nB9_CP0202 , 0 )
SET @nB9_CP0203 = ISNULL ( @nB9_CP0203 , 0 )
SET @nB9_CP0204 = ISNULL ( @nB9_CP0204 , 0 )
SET @nB9_CP0205 = ISNULL ( @nB9_CP0205 , 0 )
SET @nB9_CP0301 = ISNULL ( @nB9_CP0301 , 0 )
SET @nB9_CP0302 = ISNULL ( @nB9_CP0302 , 0 )
SET @nB9_CP0303 = ISNULL ( @nB9_CP0303 , 0 )
SET @nB9_CP0304 = ISNULL ( @nB9_CP0304 , 0 )
SET @nB9_CP0305 = ISNULL ( @nB9_CP0305 , 0 )
IF @IN_CUSUNIF = '1'
BEGIN
SELECT @iRecnoTRT = ISNULL ( MAX ( R_E_C_N_O_ ), 0 )
FROM TRT99SP
WHERE TRB_FILIAL = @IN_FILIALCOR
AND TRB_COD = @IN_COD
IF @iRecnoTRT = 0
BEGIN
SELECT @iRecnoTRT = ISNULL ( MAX ( R_E_C_N_O_ ), 0 )
FROM TRT99SP
SET @iRecnoTRT = @iRecnoTRT + 1
INSERT INTO TRT010 (TRB_COD , R_E_C_N_O_ )
VALUES (@IN_COD , @iRecnoTRT )
END
SELECT @nQtd = ISNULL ( TRB_QFIM , 0 )
FROM TRT99SP
WHERE R_E_C_N_O_ = @iRecnoTRT
IF @nQtd = 0 BEGIN
SELECT @nQtd = 1
END
UPDATE TRT99SP
WITH (ROWLOCK)
SET TRB_VF0101 = TRB_VF0101 + @nB9_CP0101,
TRB_VF0102 = TRB_VF0102 + @nB9_CP0102,
TRB_VF0103 = TRB_VF0103 + @nB9_CP0103,
TRB_VF0104 = TRB_VF0104 + @nB9_CP0104,
TRB_VF0105 = TRB_VF0105 + @nB9_CP0105,
TRB_VF0201 = TRB_VF0201 + @nB9_CP0201,
TRB_VF0202 = TRB_VF0202 + @nB9_CP0202,
TRB_VF0203 = TRB_VF0203 + @nB9_CP0203,
TRB_VF0204 = TRB_VF0204 + @nB9_CP0204,
TRB_VF0205 = TRB_VF0205 + @nB9_CP0205,
TRB_VF0301 = TRB_VF0301 + @nB9_CP0301,
TRB_VF0302 = TRB_VF0302 + @nB9_CP0302,
TRB_VF0303 = TRB_VF0303 + @nB9_CP0303,
TRB_VF0304 = TRB_VF0304 + @nB9_CP0304,
TRB_VF0305 = TRB_VF0305 + @nB9_CP0305,
TRB_CP0101 = TRB_VF0101 + @nB9_CP0101 / @nQtd ,
TRB_CP0102 = TRB_VF0102 + @nB9_CP0102 / @nQtd ,
TRB_CP0103 = TRB_VF0103 + @nB9_CP0103 / @nQtd ,
TRB_CP0104 = TRB_VF0104 + @nB9_CP0104 / @nQtd ,
TRB_CP0105 = TRB_VF0105 + @nB9_CP0105 / @nQtd ,
TRB_CP0201 = TRB_VF0201 + @nB9_CP0201 / @nQtd ,
TRB_CP0202 = TRB_VF0202 + @nB9_CP0202 / @nQtd ,
TRB_CP0203 = TRB_VF0203 + @nB9_CP0203 / @nQtd ,
TRB_CP0204 = TRB_VF0204 + @nB9_CP0204 / @nQtd ,
TRB_CP0205 = TRB_VF0205 + @nB9_CP0205 / @nQtd ,
TRB_CP0301 = TRB_VF0301 + @nB9_CP0301 / @nQtd ,
TRB_CP0302 = TRB_VF0302 + @nB9_CP0302 / @nQtd ,
TRB_CP0303 = TRB_VF0303 + @nB9_CP0303 / @nQtd ,
TRB_CP0304 = TRB_VF0304 + @nB9_CP0304 / @nQtd ,
TRB_CP0305 = TRB_VF0305 + @nB9_CP0305 / @nQtd
WHERE R_E_C_N_O_ = @iRecnoTRT
END
UPDATE SB2990
WITH (ROWLOCK)
SET B2_CPF0101 = @nB9_CP0101 , B2_CPF0102 = @nB9_CP0102 ,
B2_CPF0103 = @nB9_CP0103 , B2_CPF0104 = @nB9_CP0104 ,
B2_CPF0105 = @nB9_CP0105 ,
B2_CPF0201 = @nB9_CP0201 , B2_CPF0202 = @nB9_CP0202 ,
B2_CPF0203 = @nB9_CP0203 , B2_CPF0204 = @nB9_CP0204 ,
B2_CPF0205 = @nB9_CP0205 ,
B2_CPF0301 = @nB9_CP0301 , B2_CPF0302 = @nB9_CP0302 ,
B2_CPF0303 = @nB9_CP0303 , B2_CPF0304 = @nB9_CP0304 ,
B2_CPF0305 = @nB9_CP0305
WHERE R_E_C_N_O_ = @IN_RECNOSB2
SELECT @nQtd = ISNULL ( B2_QFIM , 0 )
FROM SB2990
WHERE R_E_C_N_O_ = @IN_RECNOSB2
IF @nQtd = 0 BEGIN
SELECT @nQtd = 1
END
UPDATE SB2990
WITH (ROWLOCK)
SET B2_CP0101 = @nB9_CP0101 / @nQtd ,
B2_CP0102 = @nB9_CP0102 / @nQtd ,
B2_CP0103 = @nB9_CP0103 / @nQtd ,
B2_CP0104 = @nB9_CP0104 / @nQtd ,
B2_CP0105 = @nB9_CP0105 / @nQtd ,
B2_CP0201 = @nB9_CP0201 / @nQtd ,
B2_CP0202 = @nB9_CP0202 / @nQtd ,
B2_CP0203 = @nB9_CP0203 / @nQtd ,
B2_CP0204 = @nB9_CP0204 / @nQtd ,
B2_CP0205 = @nB9_CP0205 / @nQtd ,
B2_CP0301 = @nB9_CP0301 / @nQtd ,
B2_CP0302 = @nB9_CP0302 / @nQtd ,
B2_CP0303 = @nB9_CP0303 / @nQtd ,
B2_CP0304 = @nB9_CP0304 / @nQtd ,
B2_CP0305 = @nB9_CP0305 / @nQtd
WHERE R_E_C_N_O_ = @IN_RECNOSB2
END |
Atenção aos tópicos abaixo: 1. O ponto de entrada M330INB2CP foi escrito em linguagem SQL. Caso esteja utilizando outro gerenciador de banco de dados, é necessário fazer a compatibilização da linguagem escrita. 2. O nome da stored procedure deve ser compatibilizada de acordo com o ambiente do cliente. Exemplo: Se for utilizada a Empresa 01, é necessário alterar a chamada das procedures: - M330INB2CP_99 para M330INB2CP_01 - XFILIAL_99 para XFILIAL_01 - MA330CP_99 para MA330CP_01
Se não for feita essa alteração e for mantida a chamada XFILIAL_99, ao salvar a procedure no banco de dados será apresentada a seguinte mensagem: "O módulo 'MA330CP_01' depende do objeto ausente 'XFILIAL_99'. O módulo ainda será criado; entretanto, não poderá ser executado com êxito até o objeto existir." Se for utilizada a Empresa 01, é necessário alterar o nome físico das seguintes tabelas: - SB2990 para SB2010 ou TR201SP, dependendo do parâmetro MV_A330SB2 ou release (ver: Recálculo do Custo Médio sem concorrência com movimentações de Estoque) - SB9990 para SB9010 - TRT99SP para TRT01SP 3. A implementação do custo em partes exige um grau elevado de conhecimentos em stored procedures e Protheus. Desta forma, é recomendado que o procedimento seja efetuado por um profissional qualificado TOTVS. Stored Procedure M330INC2CP Bloco de código |
---|
language | delphi |
---|
theme | Midnight |
---|
title | M330INC2CP |
---|
linenumbers | true |
---|
| -- Criacao de procedure
CREATE PROCEDURE M330INC2CP_99 (
@IN_FILIALCOR Char( 02 ) ) AS
-- Declaracoes de variaveis
DECLARE @cFil_SC2 Char( 02 )
DECLARE @nMaxRecnoSC2 Integer
DECLARE @nRec Integer
BEGIN
EXEC XFILIAL_99 'SC2' , @IN_FILIALCOR , @cFil_SC2 output
SELECT @nMaxRecnoSC2 = ISNULL ( MAX ( R_E_C_N_O_ ), 0 )
FROM SC2990
WHERE C2_FILIAL = @cFil_SC2 and D_E_L_E_T_ <> '*'
SELECT @nRec = ISNULL ( MIN ( R_E_C_N_O_ ), 0 )
FROM SC2990
WHERE C2_FILIAL = @cFil_SC2 and D_E_L_E_T_ <> '*'
WHILE (@nRec <= @nMaxRecnoSC2 )
BEGIN
UPDATE SC2010
WITH (ROWLOCK)
SET C2_CPF0101 = C2_CPI0101 ,
C2_CPF0102 = C2_CPI0102 ,
C2_CPF0103 = C2_CPI0103 ,
C2_CPF0104 = C2_CPI0104 ,
C2_CPF0105 = C2_CPI0105 ,
C2_CPF0201 = C2_CPI0201 ,
C2_CPF0202 = C2_CPI0202 ,
C2_CPF0203 = C2_CPI0203 ,
C2_CPF0204 = C2_CPI0204 ,
C2_CPF0205 = C2_CPI0205 ,
C2_CPF0301 = C2_CPI0301 ,
C2_CPF0302 = C2_CPI0302 ,
C2_CPF0303 = C2_CPI0303 ,
C2_CPF0304 = C2_CPI0304 ,
C2_CPF0305 = C2_CPI0305 ,
C2_APF0101 = C2_API0101 ,
C2_APF0102 = C2_API0102 ,
C2_APF0103 = C2_API0103 ,
C2_APF0104 = C2_API0104 ,
C2_APF0105 = C2_API0105 ,
C2_APF0201 = C2_API0201 ,
C2_APF0202 = C2_API0202 ,
C2_APF0203 = C2_API0203 ,
C2_APF0204 = C2_API0204 ,
C2_APF0205 = C2_API0205 ,
C2_APF0301 = C2_API0301 ,
C2_APF0302 = C2_API0302 ,
C2_APF0303 = C2_API0303 ,
C2_APF0304 = C2_API0304 ,
C2_APF0305 = C2_API0305 ,
WHERE R_E_C_N_O_ >= @nRec and R_E_C_N_O_ < @nRec + 1024 and
C2_FILIAL = @cFil_SC2 and D_E_L_E_T_ <> '*'
SET @nRec = @nRec + 1024
END
END |
Atenção aos tópicos abaixo: 1. O ponto de entrada M330INC2CP foi escrito em linguagem SQL. Se for utilizado outro gerenciador de banco de dados, é necessário compatibilizar a linguagem escrita 2. O nome da stored procedure deve ser compatibilizada de acordo com o ambiente do cliente. Exemplo: Se for utilizada a Empresa 01, é necessário alterar a chamada das procedures: - M330INC2CP_99 para M330INC2CP_01 - XFILIAL_99 para XFILIAL_01 Se não for feita essa alteração e for mantida a chamada XFILIAL_99, ao salvar a procedure no banco de dados será apresentada a seguinte mensagem: "O módulo 'MA330CP_01' depende do objeto ausente 'XFILIAL_99'. O módulo ainda será criado; entretanto, não poderá ser executado com êxito até o objeto existir." Se for utilizada a Empresa 01, é necessário alterar o nome físico da tabela: - SC2990 para SC2010 3. A implementação do custo em partes exige um grau elevado de conhecimentos em stored procedures e Protheus. Desta forma, é recomendado que o procedimento seja efetuado por um profissional qualificado TOTVS. Stored Procedure MA280INB9CP Bloco de código |
---|
language | delphi |
---|
theme | Midnight |
---|
title | MA280INB9CP |
---|
linenumbers | true |
---|
| -- Criacao de procedure
CREATE PROCEDURE MA280INB9CP_99 (
@IN_FILIALCOR Char( 02 ) ,
@IN_COD Char( 15 ) ,
@IN_MV_CUSZERO Char( 01 ) ,
@IN_RECNOSB9 Integer ,
@IN_RECNOSB2 Integer ,
@IN_NDIVISOR Float ,
@IN_B9_VINI1 Float ,
@IN_B9_VINI2 Float ,
@IN_B9_VINI3 Float ,
@IN_B9_VINI4 Float ,
@IN_B9_VINI5 Float ) AS
-- Declaracoes de variaveis
DECLARE @nB2_CPF0101 Float
DECLARE @nB2_CPF0102 Float
DECLARE @nB2_CPF0103 Float
DECLARE @nB2_CPF0104 Float
DECLARE @nB2_CPF0105 Float
DECLARE @nB2_CPF0201 Float
DECLARE @nB2_CPF0202 Float
DECLARE @nB2_CPF0203 Float
DECLARE @nB2_CPF0204 Float
DECLARE @nB2_CPF0205 Float
DECLARE @nB2_CPF0301 Float
DECLARE @nB2_CPF0302 Float
DECLARE @nB2_CPF0303 Float
DECLARE @nB2_CPF0304 Float
DECLARE @nB2_CPF0305 Float
BEGIN
IF @IN_MV_CUSZERO = 'S'
BEGIN
SET @nB2_CPF0101 = 0
SET @nB2_CPF0102 = 0
SET @nB2_CPF0103 = 0
SET @nB2_CPF0104 = 0
SET @nB2_CPF0105 = 0
SET @nB2_CPF0201 = 0
SET @nB2_CPF0202 = 0
SET @nB2_CPF0203 = 0
SET @nB2_CPF0204 = 0
SET @nB2_CPF0205 = 0
SET @nB2_CPF0301 = 0
SET @nB2_CPF0302 = 0
SET @nB2_CPF0303 = 0
SET @nB2_CPF0304 = 0
SET @nB2_CPF0305 = 0
END
ELSE
BEGIN
SELECT @nB2_CPF0101 = ISNULL(B2_CPF0101,0), @nB2_CPF0102 = ISNULL(B2_CPF0102,0),
@nB2_CPF0103 = ISNULL(B2_CPF0103,0), @nB2_CPF0104 = ISNULL(B2_CPF0104,0),
@nB2_CPF0105 = ISNULL(B2_CPF0105,0), @nB2_CPF0201 = ISNULL(B2_CPF0201,0),
@nB2_CPF0202 = ISNULL(B2_CPF0202,0), @nB2_CPF0203 = ISNULL(B2_CPF0203,0),
@nB2_CPF0204 = ISNULL(B2_CPF0204,0), @nB2_CPF0205 = ISNULL(B2_CPF0205,0),
@nB2_CPF0301 = ISNULL(B2_CPF0301,0), @nB2_CPF0302 = ISNULL(B2_CPF0302,0),
@nB2_CPF0303 = ISNULL(B2_CPF0303,0), @nB2_CPF0304 = ISNULL(B2_CPF0304,0),
@nB2_CPF0305 = ISNULL(B2_CPF0305,0)
FROM SB2990
WHERE R_E_C_N_O_ = @IN_RECNOSB2
END
UPDATE SB9010
WITH (ROWLOCK)
SET B9_CP0101 = @nB2_CPF0101, B9_CP0102 = @nB2_CPF0102, B9_CP0103 = @nB2_CPF0103,
B9_CP0104 = @nB2_CPF0104, B9_CP0105 = @nB2_CPF0105, B9_CP0201 = @nB2_CPF0201,
B9_CP0202 = @nB2_CPF0202, B9_CP0203 = @nB2_CPF0203, B9_CP0204 = @nB2_CPF0204,
B9_CP0205 = @nB2_CPF0205, B9_CP0301 = @nB2_CPF0301, B9_CP0302 = @nB2_CPF0302,
B9_CP0303 = @nB2_CPF0303, B9_CP0304 = @nB2_CPF0304, B9_CP0305 = @nB2_CPF0305
WHERE R_E_C_N_O_ = @IN_RECNOSB9
END |
Atenção aos tópicos abaixo: 1. O ponto de entrada MA280INB9CP escrito em linguagem SQL. Se for utilizado outro gerenciador de banco de dados, é necessário compatibilizar a linguagem escrita. 2. O nome da stored procedure deve ser compatibilizada de acordo com o ambiente do cliente. Exemplo: Se for utilizada a Empresa 01, é necessário alterar a chamada das procedures: - MA280INB9CP_99 para MA280INB9CP_01 - XFILIAL_99 para XFILIAL_01 Se for utilizada a Empresa 01, é necessário alterar o nome físico das tabelas: - SB2990 para SB2010 - SB9990 para SB9010 3. A implementação do custo em partes exige um grau elevado de conhecimentos em stored procedures e Protheus. Desta forma, é recomendado que o procedimento seja realizado por um profissional qualificado TOTVS. Stored Procedure MA280INC2CP Bloco de código |
---|
language | delphi |
---|
theme | Midnight |
---|
title | MA280INC2CP |
---|
linenumbers | true |
---|
| -- Criacao de procedure
CREATE PROCEDURE MA280INC2CP_99 (
@IN_RECNOSC2 Integer ) AS
BEGIN
UPDATE SC2990
WITH (ROWLOCK)
SET C2_CPI0101 = C2_CPF0101 ,
C2_CPI0102 = C2_CPF0102 ,
C2_CPI0103 = C2_CPF0103 ,
C2_CPI0104 = C2_CPF0104 ,
C2_CPI0105 = C2_CPF0105 ,
C2_CPI0201 = C2_CPF0201 ,
C2_CPI0202 = C2_CPF0202 ,
C2_CPI0203 = C2_CPF0203 ,
C2_CPI0204 = C2_CPF0204 ,
C2_CPI0205 = C2_CPF0205 ,
C2_CPI0301 = C2_CPF0301 ,
C2_CPI0302 = C2_CPF0302 ,
C2_CPI0303 = C2_CPF0303 ,
C2_CPI0304 = C2_CPF0304 ,
C2_CPI0305 = C2_CPF0305 ,
C2_API0101 = C2_APF0101 ,
C2_API0102 = C2_APF0102 ,
C2_API0103 = C2_APF0103 ,
C2_API0104 = C2_APF0104 ,
C2_API0105 = C2_APF0105 ,
C2_API0201 = C2_APF0201 ,
C2_API0202 = C2_APF0202 ,
C2_API0203 = C2_APF0203 ,
C2_API0204 = C2_APF0204 ,
C2_API0205 = C2_APF0205 ,
C2_API0301 = C2_APF0301 ,
C2_API0302 = C2_APF0302 ,
C2_API0303 = C2_APF0303 ,
C2_API0304 = C2_APF0304 ,
C2_API0305 = C2_APF0305
WHERE R_E_C_N_O_ = @IN_RECNOSC2
END |
Atenção aos tópicos abaixo: 1. O ponto de entrada MA280INC2CP acima foi escrito em linguagem SQL. Se for utilizado outro gerenciador de banco de dados, é necessário compatibilizar a linguagem escrita. 2. O nome da stored procedure deve ser compatibilizada de acordo com o ambiente do cliente. Exemplo: Se for utilizada a Empresa 01, é necessário alterar a chamada da procedure: - MA280INC2CP_99 para MA280INC2CP_01 Se for utilizada a Empresa 01, é necessário alterar o nome físico da tabela: - SC2990 para SC2010 3. A implementação do custo em partes exige um grau elevado de conhecimentos em stored procedures e Protheus. Desta forma, é recomendado que o procedimento seja efetuado por um profissional qualificado TOTVS. 4. A quantidade limite de campos em cada tabela deve ser observada, considerando os campos padrões e os campos criados para o custo em partes, que não deve ultrapassar o limite de 359 campos. Utilização do parâmetro MV_MUDATRTQuando o parâmetro MV_MUDATRT estiver configurado como .T. , a referência do grupo de tabelas TR* deve ser alterada para TR*_SP, conforme documentação disponível na URL abaixo: SIGAMNT com Stored Procedures de Materiais - MV_MUDATRT
|