Desenvolver uma documentação complementar do Cadastro de Operando de Faturamento (WMS6401), detalhando principalmente os campos que compõem a aba 2- Customizações.
Neste campo é possível efetuar a customização do cálculo, sendo necessário informar o SQL com o comando SELECT.
O comando do tipo SQL deve retornar obrigatoriamente um único valor, pois o Sistema está preparado para trabalhar apenas com o resultado final a ser retornado por este comando, sendo que atualmente este campo comporta até 255 caracteres.

Exemplo:
SELECT SUM(minha_tabela.meu_campo)
SELECT COUNT(m.campo_nao_padrao)
SELECT MAX(d.campo_nao_padrao)
SELECT AVG(m.qtd_volumes) #Média de volumes expedição por dia. m -> wms_exp_mestre_?
O campo Cálculo Customizado somente tem utilidade quando na aba 1 - Dados Principais, o campo Tipo Cálculo estiver configurado como Customizado pelo usuário, conforme especificado a seguir:

Neste campo é possível cadastrar uma função que pode manipular os comandos SQL (SELECT, FROM e WHERE ) padrões antes da execução na função padrão de apuração, sendo que esta função será executada antes do PREPARE do SQL utilizado para efetuar a leitura do valor calculado do operando no período, atuando como um “before_prepare”.
Esta função vai receber por SET as variáveis cmd_select , cmd_from e cmd_where que estarão com os valores padrões como, por exemplo:
cmd_select = "SELECT SUM(m.qtd_palete_fisico)"
cmd_from = " FROM wms_armaz_end_08345690901 m" onde 08345690901 é código do depositante.
cmd_where = " WHERE m.empresa = ‘01’ AND m.sit_registro <> 'C' AND m.data_posicao_estoque >= ? AND m.data_posicao_estoque <= ?"
A função de apuração chamará a função cadastrada no campo Comando Customizado, podendo editar e retornar estes comandos que serão recebidos por funções de GET conforme abaixo:
LET l_select_stmt = LOG_getVar("cmd_select") Máximo 255 caracteres
LET l_from_stmt = LOG_getVar("cmd_from") Máximo 1000 caracteres
LET l_where_stmt = LOG_getVar("cmd_where") Máximo 5000 caracteres
Deve obrigatoriamente retornar TRUE ou FALSE. Nesta função é possível, por exemplo, alterar o comando FROM que a função padrão executará, informando uma tabela específica ou adicionar um filtro no comando WHERE.

Exemplo básico:
FUNCTION wmsyXXXX_customiza_operando()
DEFINE l_cmd_from CHAR(1000)
LET l_cmd_from = LOG_getVar("cmd_from")
# ‘m’ representa o alias da tabela mestre do processo
LET l_cmd_from = l_cmd_from CLIPPED,
" INNER JOIN minha_tabela",
" ON minha_tabela.empresa = m.empresa",
" AND minha_tabela.ctr_ent_sai_veic_docum = m.ctr_ent_sai_veic_docum"
CALL LOG_setVar("cmd_from", l_cmd_from)
RETURN TRUE
END FUNCTION
Neste campo é possível cadastrar uma função que pode utilizar o valor calculado para um determinado operando para, por exemplo, gravar uma tabela auxiliar específica.
Esta função não manipula o valor calculado, recebendo o valor calculado do operando para cada dia do período pela função setVar:
CALL LOG_setVar("valor_operando",l_valor_operando)

Exemplo:
# Comando para ser executado após o calculo do valor do operando
# e a gravação da tabela padrão wms_geracao_dados_operando
FUNCTION wmsyXXXX_comando_retorno_valor()
DEFINE l_depositante LIKE wms_geracao_dados_operando.depositante,
l_operando_faturamento LIKE wms_geracao_dados_operando.operando_faturamento,
l_data_geracao LIKE wms_geracao_dados_operando.dat_geracao,
l_val_parametro LIKE wms_geracao_dados_operando.val_parametro
LET l_depositante = wmsr48_get_depositante()
LET l_operando_faturamento = wmsr48_get_operando_faturamento()
LET l_data_geracao = wmsr48_get_data_atual_processamento()
LET l_val_parametro = LOG_getVar("valor_operando")
INSERT INTO minha_tabela (depositante, operando, data_geracao, valor_operando)
VALUES (l_depositante, l_operando_faturamento, l_data_geracao, l_val_parametro)
RETURN TRUE
END FUNCTION

Com esse campo é possível criar filtros adicionais nas tabelas padrão de dados base como, por exemplo:


Existem algumas funções padrões que retornam valores que podem ser usadas para configurar parâmetros customizados para aplicar filtros em um operando de faturamento:
| Função | Descrição | Tipo |
|---|---|---|
| wmsr48_get_empresa | Retorna a empresa corrente. | CHAR(02 |
wmsr48_get_seq_apuracao_faturamento | Retorna a sequência de apuração de faturamento atual, ou seja, um sequencial que corresponde ao período do faturamento de serviço. Tipo | INTEGER |
| wmsr48_get_seq_processo_faturamento | Retorna um sequencial que corresponde ao processo de faturamento cadastrado na proposta de faturamento do depositante, ao qual o operando processado está associado. | INTEGER |
| wmsr48_get_depositante | Retorna o depositante atual para o qual está sendo processada a apuração de faturamento. | CHAR(15) |
| wmsr48_get_operando_faturamento | Retorna o operando de faturamento atual que está sendo processado. | CHAR(20) |
| wmsr48_get_data_ini_processamento | Retorna a data inicial do período de apuração que está sendo processada. Exemplo: | DATE |
| wmsr48_get_data_fim_processamento | Retorna a data final do período de apuração que está sendo processado. Exemplo: | DATE |
| wmsr48_get_data_hora_ini_processamento | igual a data inicial, porém, retorna a data/hora. Exemplo: | DATETIME YEAR TO SECOND |
| wmsr48_get_data_hora_fim_processamento | Igual a data final, porém, retorna a data/hora. Exemplo: | DATETIME YEAR TO SECOND |
| wmsr48_get_data_atual_processamento | Retorna a data atual do processamento no período de apuração. Exemplo: | DATE |
| wmsr48_get_data_hora_atual_ini_processamento | Retorna a data/hora atual do processamento no período de apuração. A hora sempre considerará o dia completo começando às 00:00:00h e terminando às 23:59:59h. Exemplo: | DATETIME YEAR TO SECOND |
| wmsr48_get_data_hora_atual_fim_processamento | Retorna a data/hora atual do processamento no período de apuração, sendo que a hora sempre considerará o dia completo começando às 00:00:00h e terminando às 23:59:59h. Exemplo: | DATETIME YEAR TO SECOND |
Exemplo de filtro utilizando parametrização customizada:
AND minha_tabela.meu_depositante = ?
AND minha_tabela.meu_campo_data_hora >= ?
AND minha_tabela.meu_campo_data_hora <= ?
AND minha_tabela.meu_campo_customizado = ?
| Sequência | Função | Tipo Retorno | Tamanho | Precisão |
|---|---|---|---|---|
| 1 | wmsr48_get_depositante | CHAR | 15 | 0 |
| 2 | wmsr48_get_data_hora_atual_ini_processamento | DATETIME | 1 | 6 |
| 3 | wmsr48_get_data_hora_atual_fim_processamento | DATETIME | 1 | 6 |
| 4 | wmsyXXXX_minha_funcao_customizada | INTEGER | 10 | 0 |

É especificada uma função customizada, que será executa antes do EXECUTE do SQL usado para fazer a leitura do valor calculado do operando no período, atuando como um “before_execute” do operando.
a. Esta função não recebe nenhum retorno específico via LOG_setVar().
b. Pode ser utilizada para fazer a carga de variáveis customizadas para o operando que serão utilizadas de forma dinâmica, de acordo com o cadastro de parâmetros customizados.
A função especificada customizada, fará o processamento e tratamento de datas de período início e fim, de forma que possam ser recuperadas por variáveis modulares ou tabelas temporárias, através de outra função que deverá ser informada no grid Parâmetros.

| Identificação | Descrição |
|---|---|
| Função Retorno | Função 4GL que retornará o valor do parâmetro. |
| Tipo Retorno | Tipo de retorno da função retorno: Char, Smallint, Integer, Decimal, Date, Datatime, Varchar. |
| Tamanho Retorno | Tamanho a ser determinado para o retorno, para parâmetros com tipo de retorno Char, Decimal e Varchar. |
| Precisão Retorno | Número de casas decimais que determinará a precisão no retorno para parâmetros com tipo retorno Decimal. |
Criar funções customizadas que podem ser utilizadas para o Comando customizado, Comando retorno valor, ou Comando carga parâmetro requer alguns padrões a serem seguidos, para que a execução da função ocorra da forma desejada e apresente o resultado esperado.
Desta forma, segue um detalhamento sobre o modo trabalho e comportamento de cada tipo de função para cada comando.
Campo para informar o nome da função na qual deverá ser efetuada a manipulação do SQL que deverá determinar o valor do operando.
Esta função será executada antes do PREPARE do SQL utilizado para efetuar a leitura do valor calculado do operando no período, atuando como um “before_prepare”.
<!-- esconder o menu -->
<style>
div.theme-default .ia-splitter #main {
margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
display: none;
}
#main {
padding-left: 10px;
padding-right: 10px;
overflow-x: hidden;
}
.aui-header-primary .aui-nav, .aui-page-panel {
margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
margin-left: 0px !important;
}
</style>
|