Árvore de páginas

Versões comparadas

Chave

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

...

Portuguese

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édio

Descriçã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 ADVPL

Para 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
languagedelphi
themeMidnight
titleMA330CP
linenumberstrue
#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.

Os campos devem ser definidos utilizando a seguinte regra:

CC – Numero do Custo Em Partes

MM – Numero da Moeda (1 a 5)


TABELACAMPOS

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 Procedures

A 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 e, também, em Stored Procedure além de algumas stored procedures adicionais. Veja um exemplo de todo o procedimento a ser implementado para o correto funcionamento do custo em partes com stored procedures.

Ponto de entrada MA330CP ( desenvolvido em linguagem AdvPL):

Bloco de código
languagedelphi
themeMidnight
titleMA330CP
linenumberstrue
#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
languagesql
themeMidnight
titleMA330CP
linenumberstrue
-- Criacao de procedure 
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@IN_COD Char( = @IN_COD and D_E_L_E_T_  = ' ' 
 
15) , 
          SET @OUT_RESULTADO  = 3 
 
   IF @cB1_TIPO  = 'MP' 
   BEGIN 
                                                       SET @OUT_RESULTADO Integer  =output 1) AS
 
-- Declarações ENDde variáveis
DECLARE @cFil_SB1  IFChar( 2)
DECLARE @cB1_TIPO Char(  =2)

BEGIN

   EXEC XFILIAL_99 'MCSB1' , 
@IN_FILIALCOR , @cFil_SB1 BEGINoutput 
 
   SELECT  SET @OUT_RESULTADO@cB1_TIPO  = 2B1_TIPO 
   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:
 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)

TABELACAMPOS

SB9 – Saldos Iniciais

B9_CP   + CC + MM (Custo em partes) – B9_VINI1


B9_CPM

·         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)

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

SC2 – Ordens de Produção

TABELACAMPOS

SB6 – Saldos em poder de terceiros

B6_CP + CC + MM (Custo em partes) – B6_CUSTO1

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 Unitário) –

D1

B9_

CUSTO

CM1


SB2 – Saldos em Estoque

B2

SD2 – Itens das NFs de Saída

D2

_CP + CC + MM (Custo em partes Unitário) –

D2

B2_

CUSTO1

CM1


B2_CPF + CC + MM (Custo em partes Final) – B2_VFIM1

SB6 – Saldos em poder de terceiros

B6

SD3 – Movimentos Internos

D3

_CP + CC + MM (Custo em partes) –

D2

B6_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


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
languagedelphi
themeMidnight
titleM330INB2CP
linenumberstrue
-- 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
 
-- Declarações de variáveis
DECLARE @nB2_VFIM1  Float
DECLARE @nB2_VFIM2  Float
DECLARE @nB2_VFIM3  Float
DECLARE @nB2_VFIM4  Float
DECLARE @nB2_VFIM5  Float

-- Custo em Partes Total
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

-- Custo em Partes Unitário
DECLARE @nB9_CPM0101 Float
DECLARE @nB9_CPM0102 Float
DECLARE @nB9_CPM0103 Float
DECLARE @nB9_CPM0104 Float
DECLARE @nB9_CPM0105 Float
DECLARE @nB9_CPM0201 Float
DECLARE @nB9_CPM0202 Float
DECLARE @nB9_CPM0203 Float
DECLARE @nB9_CPM0204 Float
DECLARE @nB9_CPM0205 Float
DECLARE @nB9_CPM0301 Float
DECLARE @nB9_CPM0302 Float
DECLARE @nB9_CPM0303 Float
DECLARE @nB9_CPM0304 Float
DECLARE @nB9_CPM0305 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 ,
Bloco de código
languagedelphi
themeMidnight
titleM330INB2CP
linenumberstrue
-- Criacao de procedure 
ALTER PROCEDURE M330INB2CP_99 (
                @IN_FILIALCOR Char( 02 ) , 
                @IN_DINICIO   Char( 08 ) , 
              B2_CPF0201= 0, @INB2_CUSUNIFCPF0202= 0,  Char( 01 ) , 
  B2_CPF0203= 0, B2_CPF0204= 0, B2_CPF0205= 0 ,
              @INB2_CODCPF0301= 0, B2_CPF0302= 0, B2_CPF0303= 0,  Char( 15 )B2_CPF0304= 0, B2_CPF0305= 0 , 
                @INB2_LOCALCP0101 = 0, B2_CP0102  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

-- Custo em Partes Total
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

-- Custo em Partes Unitário
DECLARE @nB9_CPM0101 Float
DECLARE @nB9_CPM0102 Float
DECLARE @nB9_CPM0103 Float
DECLARE @nB9_CPM0104 Float
DECLARE @nB9_CPM0105 Float
DECLARE @nB9_CPM0201 Float
DECLARE @nB9_CPM0202 Float
DECLARE @nB9_CPM0203 Float
DECLARE @nB9_CPM0204 Float
DECLARE @nB9_CPM0205 Float
DECLARE @nB9_CPM0301 Float
DECLARE @nB9_CPM0302 Float
DECLARE @nB9_CPM0303 Float
DECLARE @nB9_CPM0304 Float
DECLARE @nB9_CPM0305 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 ,
= 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 , 3 ) <> 'MOD' 
   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),              B2_CPF0201= 0, B2_CPF0202= 0, B2_CPF0203= 0, B2_CPF0204= 0, B2_CPF0205= 0 ,
 
                    B2_CPF0301= 0, B2@nB9_CPF0302CP0202 = 0,ISNULL B2_CPF0303= 0(B9_CP0202,0), B2@nB9_CPF0304CP0203 = 0,ISNULL B2_CPF0305= 0 (B9_CP0203,0), 
                B2_CP0101 = 0, B2_CP0102 = 0, B2@nB9_CP0103CP0204 = ISNULL (B9_CP0204,0), B2@nB9_CP0104CP0205 = ISNULL (B9_CP0205,0), B2_CP0105
  = 0 , 
              B2_CP0201 = 0, B2@nB9_CP0202CP0301 = 0,ISNULL B2_CP0203 = 0(B9_CP0301,0), B2@nB9_CP0204CP0302 = ISNULL (B9_CP0302,0), B2_CP0205 = 0
 , 
              B2_CP0301 = 0, B2_CP0302 = 0, B2@nB9_CP0303 = ISNULL (B9_CP0303,0), B2@nB9_CP0304 = ISNULL (B9_CP0304,0), B2_CP0305 = 0

        WHERE R_E_C_N_O_   = @IN_RECNOSB2 
 
   IF SUBSTRING ( @IN_COD , 1 , 3 ) <> 'MOD' 
   BEGIN 
@nB9_CP0305 = ISNULL (B9_CP0305,0),
                   SELECT  @nB9_CP0101CPM0101 = ISNULL (B9_CP0101CPM0101,0), @nB9_CP0102CPM0102 = ISNULL (B9_CP0102CPM0102,0),
                      @nB9_CP0103CPM0103 = ISNULL (B9_CP0103CPM0103,0), @nB9_CP0104CPM0104 = ISNULL (B9_CP0104CPM0104,0),
                      @nB9_CP0105CPM0105 = ISNULL (B9_CP0105CPM0105,0), @nB9_CP0201CPM0201 = ISNULL (B9_CP0201CPM0201,0),                  
                      @nB9_CP0202CPM0202 = ISNULL (B9_CP0202CPM0202,0), @nB9_CP0203CPM0203 = ISNULL (B9_CP0203CPM0203,0), 
                      @nB9_CP0204CPM0204 = ISNULL (B9_CP0204CPM0204,0), @nB9_CP0205CPM0205 = ISNULL (B9_CP0205CPM0205,0), 
                      @nB9_CP0301CPM0301 = ISNULL (B9_CP0301CPM0301,0), @nB9_CP0302CPM0302 = ISNULL (B9_CP0302CPM0302,0),   
                      @nB9_CP0303CPM0303 = ISNULL (B9_CP0303CPM0303,0), @nB9_CP0304CPM0304 = ISNULL (B9_CP0304CPM0304,0), 
                     @nB9_CP0305CPM0305 = ISNULL (B9_CP0305CPM0305,0),

        FROM SB9990
        WHERE B9_FILIAL = @cFil_SB9 
      @nB9_CPM0101 = ISNULL (B9_CPM0101,0), @nB9_CPM0102 = ISNULL (B9_CPM0102,0),
   and B9_COD = @IN_COD 
              @nB9_CPM0103 = ISNULLand (B9_CPM0103,0), @nB9_CPM0104LOCAL = ISNULL (B9_CPM0104,0),
@IN_LOCAL  
                and  B9_DATA @nB9_CPM0105 = ISNULL (B9_CPM0105,0), @nB9_CPM0201 = ISNULL (B9_CPM0201,0), SELECT MAX ( B9_DATA )
                  
                     @nB9_CPM0202 = ISNULL (B9_CPM0202,0), @nB9_CPM0203 = ISNULL (B9_CPM0203,0), 
   FROM SB9990
                 @nB9_CPM0204 = ISNULL (B9_CPM0204,0), @nB9_CPM0205 = ISNULL (B9_CPM0205,0), 
                     @nB9_CPM0301 = ISNULLWHERE (B9_CPM0301,0), @nB9_CPM0302FILIAL = ISNULL (B9_CPM0302,0),
@cFil_SB9       and 
             @nB9_CPM0303 = ISNULL (B9_CPM0303,0), @nB9_CPM0304 = ISNULL (B9_CPM0304,0),
                     @nB9_CPM0305 = ISNULL (B9_CPM0305,0)

        FROM SB9990
        WHERE B9_FILIALCOD    = @cFil_SB9@IN_COD        and  
                and B9_COD = @IN_COD 
                       and B9_LOCAL = @IN_LOCAL  
                and  B9_DATALOCAL  = (@IN_LOCAL SELECT MAX (and B9_DATA )
                                                  FROM SB9990
           B9_DATA  <= @IN_DINICIO and                                 WHERE B9_FILIAL = @cFil_SB9       and 
                                                              B9_COD    = @IN_COD     D_E_L_E_T_  <> '*' ) 
   and  
           and D_E_L_E_T_  <> '*' 
   END 
   ELSE 
   BEGIN 
           EXEC MA330CP_99 @IN_FILIALCOR , @IN_COD , @nParte output 
           SELECT @nB2_VFIM1  = B9_LOCALISNULL ( = @INB2_LOCALVFIM1 , 0 and), 
                          @nB2_VFIM2  = ISNULL ( B2_VFIM2 , 0 ), 
                           B9@nB2_DATAVFIM3  <= @IN_DINICIOISNULL and( B2_VFIM3 , 0 ), 
                          @nB2_VFIM4  = ISNULL ( B2_VFIM4 ,       0 ),
                          @nB2_VFIM5  = ISNULL ( B2_VFIM5 , 0 )
              FROM SB2990
           WHERE  DR_E_LC_EN_TO_  <> '*' ) = @IN_RECNOSB2 
  
      SET @nB9_CP0101  = 0 
   and D_E_L_E_T_  <> '*' 
   END 
   ELSE  SET @nB9_CP0102  = 0 
   BEGIN 
  SET @nB9_CP0103  = 0 
    EXEC MA330CP_99 @IN_FILIALCOR , @IN_COD , @nParte output SET @nB9_CP0104  = 0 
      SET @nB9_CP0105  = 0 SELECT
  @nB2_VFIM1  = ISNULL (SET B2@nB9_VFIM1CP0201  ,= 0 ), 
      SET @nB9_CP0202  = 0 
      SET @nB9_CP0203  = 0 
    @nB2_VFIM2  =SET ISNULL@nB9_CP0204 ( B2_VFIM2= , 0 ), 
      SET @nB9_CP0205  = 0 
      SET @nB9_CP0301  = 0 
    @nB2_VFIM3  = ISNULLSET ( B2_VFIM3 ,@nB9_CP0302  = 0 
 ), 
    SET @nB9_CP0303  = 0 
      SET @nB9_CP0304  = 0 
      SET @nB2@nB9_VFIM4CP0305  = 0 
 ISNULL ( B2_VFIM4 , 0 ),
      IF @nParte  = 1 
      BEGIN 
         @nB2SET @nB9_VFIM5CP0101  = ISNULL ( B2_VFIM5 , 0 )@nB2_VFIM1 
         SET @nB9_CP0102  =  FROM@nB2_VFIM2 SB2990
         SET  WHERE R_E_C_N_O_@nB9_CP0103  = @IN@nB2_RECNOSB2VFIM3 
  
       SET @nB9_CP0101CP0104  = 0@nB2_VFIM4 
         SET @nB9_CP0102  = 0 
CP0105  = @nB2_VFIM5 
  SET @nB9_CP0103  = 0END 
      SETIF @nB9_CP0104@nParte  = 02 
      SETBEGIN @nB9_CP0105
  = 0 
      SET @nB9_CP0201  = 0@nB2_VFIM1 
         SET @nB9_CP0202  = 0@nB2_VFIM2 
         SET @nB9_CP0203  = 0@nB2_VFIM3 
         SET @nB9_CP0204  = 0@nB2_VFIM4 
         SET @nB9_CP0205  = 0@nB2_VFIM5 
      SET @nB9_CP0301  = 0END 
      SETIF @nB9_CP0302@nParte  = 03 
      SETBEGIN @nB9_CP0303
  = 0 
      SET @nB9_CP0304CP0301  = 0@nB2_VFIM1 
         SET @nB9_CP0305CP0302  = 0 
      
   @nB2_VFIM2 
   IF @nParte  = 1 
 SET @nB9_CP0303  =  BEGIN@nB2_VFIM3 
         SET @nB9_CP0101CP0304  = @nB2_VFIM1VFIM4 
         SET @nB9_CP0102CP0305  = @nB2_VFIM2VFIM5 
      END 
  SET @nB9_CP0103END 
 = @nB2_VFIM3 
   -- Removendo valores Nulos
   SET @nB9_CP0104CP0101  = ISNULL ( @nB2_VFIM4 @nB9_CP0101 , 0 )
   SET @nB9_CP0102  = ISNULL  SET( @nB9_CP0105CP0102 , 0 )
   =SET @nB2@nB9_VFIM5CP0103 
 = ISNULL ( @nB9_CP0103 , END0 )
   SET @nB9_CP0104  IF= @nParteISNULL ( = 2 @nB9_CP0104 , 0 )
   SET @nB9_CP0105  BEGIN 
= ISNULL ( @nB9_CP0105 , 0 )
   SET @nB9_CP0201  = @nB2_VFIM1ISNULL 
( @nB9_CP0201 , 0 )
     SET @nB9_CP0202  = @nB2_VFIM2ISNULL 
( @nB9_CP0202 , 0 )
     SET @nB9_CP0203  = @nB2_VFIM3ISNULL 
( @nB9_CP0203 , 0 )
     SET @nB9_CP0204  = @nB2_VFIM4ISNULL 
( @nB9_CP0204 , 0 )
     SET @nB9_CP0205  = @nB2_VFIM5ISNULL 
( @nB9_CP0205 , 0 )
  END 
SET @nB9_CP0301  = ISNULL ( IF@nB9_CP0301 @nParte, 0 = 3 )
   SET @nB9_CP0302  BEGIN= 
ISNULL ( @nB9_CP0302 , 0  )
   SET @nB9_CP0301CP0303  = @nB2_VFIM1ISNULL 
( @nB9_CP0303 , 0   )
   SET @nB9_CP0302CP0304  = @nB2_VFIM2ISNULL 
( @nB9_CP0304 , 0   )
   SET @nB9_CP0303CP0305  = @nB2_VFIM3ISNULL 
( @nB9_CP0305 , 0   )
   SET @nB9_CP0304CPM0101  = ISNULL @nB2( @nB9_VFIM4CPM0101 
, 0 )
  SET @nB9_CPM0102  = ISNULL SET( @nB9_CP0305CPM0102 , = @nB2_VFIM5 0 )
  SET @nB9_CPM0103  = ENDISNULL 
( @nB9_CPM0103 , END0 )
   
   -- Removendo valores Nulos
 SET @nB9_CPM0104  = ISNULL ( @nB9_CPM0104 , 0 )
  SET @nB9_CP0101CPM0105  = ISNULL ( @nB9_CP0101CPM0105 , 0 )
   SET @nB9_CP0102CPM0201  = ISNULL ( @nB9_CP0102CPM0201 , 0 )
   SET @nB9_CP0103CPM0202  = ISNULL ( @nB9_CP0103CPM0202 , 0 )
   SET @nB9_CP0104CPM0203  = ISNULL ( @nB9_CP0104CPM0203 , 0 )
   SET @nB9_CP0105CPM0204  = ISNULL ( @nB9_CP0105CPM0204 , 0 )
   SET @nB9_CP0201CPM0205  = ISNULL ( @nB9_CP0201CPM0205 , 0 )
   SET @nB9_CP0202CPM0301  = ISNULL ( @nB9_CP0202CPM0301 , 0 )
   SET @nB9_CP0203CPM0302  = ISNULL ( @nB9_CP0203CPM0302 , 0 )
   SET @nB9_CP0204CPM0303  = ISNULL ( @nB9_CP0204CPM0303 , 0 )
   SET @nB9_CP0205CPM0304  = ISNULL ( @nB9_CP0205CPM0304 , 0 )
   SET @nB9_CP0301CPM0305  = ISNULL ( @nB9_CP0301CPM0305 , 0 )

   SET @nB9_CP0302-- Tratamento para Custo Unificado 
   IF @IN_CUSUNIF  = '1' 
   BEGIN 
 
      SELECT @iRecnoTRT  = ISNULL ( @nB9_CP0302  MAX ( R_E_C_N_O_ ), 0 )
    SET  @nB9_CP0303  =FROM ISNULLTRT990
 ( @nB9_CP0303 , 0 )
 WHERE TRB_FILIAL SET= @nB9@IN_CP0304FILIALCOR
   = ISNULL ( @nB9_CP0304 , 0 )
   SETAND @nB9TRB_CP0305COD  = ISNULL@IN_COD
 ( @nB9_CP0305 , 0 )
  SET @nB9_CPM0101  = ISNULLIF (@iRecnoTRT @nB9_CPM0101 ,= 0 )
    SET @nB9_CPM0102  = ISNULL ( @nB9_CPM0102 , 0 )
  SET @nB9_CPM0103   BEGIN 
         SELECT @iRecnoTRT  = ISNULL ( @nB9_CPM0103  MAX ( R_E_C_N_O_ ), 0 )
   SET @nB9_CPM0104  = ISNULL ( @nB9_CPM0104 , 0FROM )TRT990
         SET @nB9_CPM0105@iRecnoTRT  = ISNULL@iRecnoTRT ( @nB9_CPM0105+ ,1 0
 )
      SET @nB9_CPM0201 INSERT =INTO ISNULLTRT010 ( @nB9TRB_CPM0201COD , 0R_E_C_N_O_ ) 
    SET @nB9_CPM0202  = ISNULLVALUES ( @nB9@IN_CPM0202COD , 0@iRecnoTRT )
  SET @nB9_CPM0203  = ISNULLEND (

 @nB9_CPM0203 , 0 )
  SETSELECT @nB9_CPM0204@nQtd  = ISNULL ( @nB9TRB_CPM0204QFIM , 0 )
    SET @nB9_CPM0205  = ISNULLFROM (TRT990
 @nB9_CPM0205 , 0 )
  SET @nB9_CPM0301WHERE R_E_C_N_O_  = ISNULL@iRecnoTRT (
 @nB9_CPM0301
 , 0 )
  SET @nB9_CPM0302IF @nQtd = 0 BEGIN
 ISNULL  ( @nB9_CPM0302 , 0 )
  SET @nQtd @nB9_CPM0303= 1
 = ISNULL ( @nB9_CPM0303 , 0END
 )
  SET @nB9_CPM0304  = ISNULL ( @nB9_CPM0304 ,UPDATE 0TRT990 )
  SET  @nB9_CPM0305  = ISNULL ( @nB9_CPM0305 , 0WITH (ROWLOCK) 

    -- Tratamento para Custo Unificado 
   IFSET @INTRB_CUSUNIFVF0101  = '1' TRB_VF0101 + @nB9_CP0101,
   BEGIN 
 
      SELECT @iRecnoTRT  = ISNULL ( MAX ( R_E_C_N_O_ ), 0 )
TRB_VF0102  = TRB_VF0102 + @nB9_CP0102,
           FROM TRT990
      WHERE TRB_FILIALVF0103  = @IN_FILIALCOR
TRB_VF0103 + @nB9_CP0103,
                 AND  TRB_CODVF0104  = @IN_CODTRB_VF0104 + @nB9_CP0104,
     
      IF @iRecnoTRT  = 0 
   TRB_VF0105  = TRB_VF0105 BEGIN+ @nB9_CP0105,
         SELECT   @iRecnoTRT  = ISNULL ( MAX ( R_E_C_N_O_ ), 0 )
  TRB_VF0201  = TRB_VF0201 + @nB9_CP0201,
         FROM TRT990
         SET @iRecnoTRTTRB_VF0202  = @iRecnoTRT TRB_VF0202 + 1 @nB9_CP0202,
 
        INSERT INTO TRT010 (TRB_COD , R_E_C_N_O_ ) 
   TRB_VF0203  = TRB_VF0203 + VALUES (@IN_COD , @iRecnoTRT )
@nB9_CP0203,
         END 



      SELECT @nQtd  =TRB_VF0204 ISNULL (= TRB_QFIM , 0 )
VF0204 + @nB9_CP0204,
           FROM TRT990
      WHERE R_E_C_N_O_TRB_VF0205  = TRB_VF0205 @iRecnoTRT 
+ @nB9_CP0205, 
      IF @nQtd = 0 BEGIN
         SETTRB_VF0301 @nQtd = 1TRB_VF0301 + @nB9_CP0301,
      END
 
         UPDATE TRT990 
 TRB_VF0302  = TRB_VF0302 + @nB9_CP0302,
     WITH (ROWLOCK) 
            SET TRB_VF0101VF0303  = TRB_VF0101VF0303 + @nB9_CP0101CP0303,
                   TRB_VF0102VF0304  = TRB_VF0102VF0304 + @nB9_CP0102CP0304,
                   TRB_VF0103VF0305  = TRB_VF0103VF0305 + @nB9_CP0103CP0305, 
                   TRB_VF0104CP0101  = TRB_VF0104VF0101 + @nB9_CP0104CP0101 / @nQtd ,
                   TRB_VF0105CP0102  = TRB_VF0105VF0102 + @nB9_CP0105,CP0102 / @nQtd , 
                   TRB_VF0201CP0103  = TRB_VF0201VF0103 + @nB9_CP0201,CP0103 / @nQtd , 
                   TRB_VF0202CP0104  = TRB_VF0202VF0104 + @nB9_CP0202,CP0104 / @nQtd , 
                   TRB_VF0203CP0105  = TRB_VF0203VF0105 + @nB9_CP0203CP0105 / @nQtd ,
                   TRB_VF0204CP0201  = TRB_VF0204VF0201 + @nB9_CP0204,CP0201 / @nQtd , 
                   TRB_VF0205CP0202  = TRB_VF0205VF0202 + @nB9_CP0205CP0202 / @nQtd , 
                   TRB_VF0301CP0203  = TRB_VF0301VF0203 + @nB9_CP0301,CP0203 / @nQtd , 
                   TRB_VF0302CP0204  = TRB_VF0302VF0204 + @nB9_CP0302,CP0204 / @nQtd , 
                   TRB_VF0303CP0205  = TRB_VF0303VF0205 + @nB9_CP0303CP0205 / @nQtd ,
                   TRB_VF0304CP0301  = TRB_VF0304VF0301 + @nB9_CP0304CP0301 / @nQtd ,
                   TRB_VF0305CP0302  = TRB_VF0305VF0302 + @nB9_CP0305CP0302 / @nQtd , 
                   TRB_CP0101CP0303  = TRB_VF0101VF0303 + @nB9_CP0101CP0303 / @nQtd , 
                   TRB_CP0102CP0304  = TRB_VF0102VF0304 + @nB9_CP0102CP0304 / @nQtd , 
                   TRB_CP0103CP0305  = TRB_VF0103VF0305 + @nB9_CP0103CP0305 / @nQtd , 
        
          WHERE R_E_C_N_O_  = @iRecnoTRT 
 
   END 
   
UPDATE SB2990
     WITH (ROWLOCK) 
      TRBSET B2_CP0104CPF0101  = TRB@nB9_VF0104CP0101 +, @nB9B2_CP0104CPF0102  /= @nQtd@nB9_CP0102 , 
              B2_CPF0103  = @nB9_CP0103 , TRBB2_CP0105CPF0104  = TRB_VF0105 + @nB9_CP0105CP0104 / @nQtd ,
                   TRB_CP0201B2_CPF0105  = TRB_VF0201 + @nB9_CP0201 / @nQtdCP0105 , 
              B2_CPF0201  = @nB9_CP0201 , TRBB2_CP0202CPF0202  = TRB_VF0202 + @nB9_CP0202 / @nQtd , 
              B2_CPF0203  = @nB9_CP0203 , TRBB2_CP0203CPF0204  = TRB_VF0203 + @nB9_CP0203 /CP0204 @nQtd , 
                   TRB_CP0204B2_CPF0205  = TRB_VF0204 + @nB9_CP0204 / @nQtdCP0205 , 
              B2_CPF0301  = @nB9_CP0301 , TRBB2_CP0205CPF0302  = TRB_VF0205 + @nB9_CP0205CP0302 / @nQtd, ,
              B2_CPF0303  = @nB9_CP0303 , TRBB2_CP0301  = TRB_VF0301 +CPF0304  = @nB9_CP0301 / @nQtd ,
CP0304 , 
              B2_CPF0305  = @nB9_CP0305 
     TRB_CP0302WHERE R_E_C_N_O_  = TRB_VF0302 + @nB9_CP0302 /@IN_RECNOSB2 
 
   SELECT @nQtd , 
= ISNULL ( B2_QFIM , 0 )
      FROM SB2990
      TRB_CP0303WHERE R_E_C_N_O_  = TRB@IN_VF0303RECNOSB2 +
 @nB9_CP0303
 /IF @nQtd ,= 0
  BEGIN

     SET @nQtd = 1

     UPDATE SB2010   TRB_CP0304WITH (ROWLOCK) 
  = TRB_VF0304 + @nB9_CP0304 / @nQtd ,SET 
B2_CP0101  = @nB9_CPM0101,
                TRBB2_CP0305CP0102  = TRB@nB9_VF0305CPM0102,
 + @nB9_CP0305 / @nQtd 
          WHERE R_E_C_N_O_B2_CP0103  = @nB9_CPM0103,
 @iRecnoTRT 
 
   END 
   
UPDATE SB2990
     WITH (ROWLOCK) B2_CP0104  = @nB9_CPM0104,
    	  SET B2_CPF0101  = @nB9_CP0101 , B2_CPF0102CP0105  = @nB9_CP0102 CPM0105,
	             B2_CPF0103CP0201  = @nB9_CP0103 , B2_CPF0104  = @nB9_CP0104 ,
 CPM0201,
	            B2_CPF0105CP0202  = @nB9_CP0105 CPM0202,
    	         B2_CPF0201  = @nB9_CP0201 , B2_CPF0202CP0203  = @nB9_CP0202 CPM0203,
	             B2_CPF0203CP0204  = @nB9_CP0203 CPM0204,
 B2_CPF0204  = @nB9_CP0204 ,
             B2_CPF0205CP0205  = @nB9_CP0205 CPM0205, 
 	            B2_CPF0301CP0301  = @nB9_CP0301 , B2_CPF0302CPM0301,
  = @nB9_CP0302 , 
             B2_CPF0303CP0302  = @nB9_CP0303 CPM0302,
 B2_CPF0304  = @nB9_CP0304 , 
             B2_CPF0305CP0303  = @nB9_CP0305CPM0303,
  
    WHERE R_E_C_N_O_  = @IN_RECNOSB2 
 
   SELECT @nQtdB2_CP0304  = ISNULL ( B2_QFIM , 0 )
@nB9_CPM0304,
	            B2_CP0305  FROM= SB2990@nB9_CPM0305
       WHERE R_E_C_N_O_  = @IN_RECNOSB2 
  
   IF @nQtd = 0 BEGIN
      SET @nQtd = 1
   END
 END ELSE

  BEGIN


      UPDATE SB2990
     SB2010   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
 
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

- SB9990 para SB9010

- TRT990 para TRT010

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
languagedelphi
themeMidnight
titleM330INC2CP
linenumberstrue
-- 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
languagedelphi
themeMidnight
titleMA280INB9CP
linenumberstrue
-- 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
languagedelphi
themeMidnight
titleMA280INC2CP
linenumberstrue
-- 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.

Informações
titleImportante:

Para mais informações sobre o limite de campos, acesse Limite de campos por tabela.

 

Utilização do parâmetro MV_MUDATRT

Quando 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