sexta-feira, 3 de janeiro de 2014

Custos em partes


Descrição dos procedimentos para utilização do custo em partes com e sem stored procedures.

Custo em Partes - Recálculo do Custo Médio
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 acrescientado de mais uma parte que contempla os materiais que não se encontram em nenhuma regra.

Utilização do Custo em Partes somente em ADVPL
Para definir a regra do custo em partes deve-se utilizar o ponto de entrada MA330CP, abaixo segue um exemplo do ponto de entrada.

Ponto de entrada MA330CP (Ponto de entrada desenvolvido em ADVPL):
#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 acima mencionado, teríamos 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 que seguem 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:



Arquivo SB9 – Saldos Iniciais
Campos:

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

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

Arquivo SB2 – Saldos em Estoque
Campos:

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

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

Arquivo SB6 – Saldos em poder de terceiros
Campo:

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



Arquivo SC2 – Ordens de Produção
Campos:

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

Arquivo SD1 – Itens das NFs de Entrada
Campo:

D1_CP + CC + MM (Custo em partes) – D1_CUSTO

Arquivo SD2 – Itens das NFs de Saída
Campo:

D2_CP + CC + MM (Custo em partes) – D2_CUSTO1

Arquivo SD3 – Movimentos Internos
Campo:

D3_CP + CC + MM (Custo em partes) – D2_CUSTO1

CC – Numero do Custo Em Partes

MM – Numero da Moeda (1 a 5)

Utilização do Custo em Partes com Stored Procedures
A utilização do custo em partes com stored procedures e mais complexa que a utilização em ADVPL, pois envolve a linguagem de programação SQL. Para definir a regra do custo em partes deve-se utilizar o ponto de entrada MA330CP em ADVPL e também em Stored Procedure além de algumas stored procedures adicionais, abaixo segue um exemplo de todo o procedimento a ser implementado para o correto funcionamento do custo em partes com stored procedures.

Ponto de entrada MA330CP (Ponto de entrada desenvolvido em ADVPL):
#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):
-- 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_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 acima foi escrito em linguagem SQL, caso esteja utilizando outro gerenciador de banco de dados devera compatibilizar a linguagem escrita

2.       O nome da stored procedure devera ser compatibilizada de acordo com o ambiente do cliente, veja abaixo o exemplo:

Caso o cliente esteja utilizando a Empresa 01 devera alterar a chamada da procedure MA330CP_99 para MA330CP_01 e também devera alterar a chamada da procedures XFILIAL_99 para XFILIAL_01

Caso o cliente esteja utilizando a Empresa 01 devera 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, por isso recomendamos que o procedimento acima seja efetuado por um profissional qualificado Totvs.


Utilizando o exemplo acima mencionado, teríamos 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 que seguem 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:





Arquivo SB9 – Saldos Iniciais
Campos:

B9_CP + CC + MM (Custo em partes)

B9_CPM + CC + MM (Custo em partes Unitário)



Arquivo SB2 – Saldos em Estoque
Campos:

B2_CP + CC + MM (Custo em partes Unitário)

B2_CPF + CC + MM (Custo em partes Final)



Arquivo SB6 – Saldos em poder de terceiros
Campo:

B6_CP + CC + MM (Custo em partes)



Arquivo SC2 – Ordens de Produção
Campos:

C2_CPF + CC + MM (Custo em partes Final)

C2_CPI + CC + MM (Custo em partes Inicial)

C2_API + CC + MM (Apropriação Inicial do Custo em partes)

C2_APF + CC + MM (Apropriação Final do Custo em partes)



Arquivo SD1 – Itens das NFs de Entrada
Campo:

D1_CP + CC + MM (Custo em partes)



Arquivo SD2 – Itens das NFs de Saída
Campo:

D2_CP + CC + MM (Custo em partes)

Arquivo SD3 – Movimentos Internos
Campo:

D3_CP + CC + MM (Custo em partes)

CC – Numero do Custo Em Partes

MM – Numero da Moeda (1 a 5)

Além dos campos acima também deve ser ajustadas as stored procedures M330INB2CP, M330INC2CP, MA280INB9CP e MA280INC2CP. Este ajuste se faz necessário devido à implementação dos novos campos. Veja abaixo os exemplos de como realizar o ajuste: