Modulo : Programa : SIGAAUT
| Quark 1.00B | Descrição: ROTINAS AUTOMATICAS
| --- | +---+---+---+---+ | MICROSIGA SOFTWARE | | Microsiga Software S/A | 13/03/2002 | 14:54:18 | pAgina 0001 | +=====================+============================================================+============+==========+=============+ 1) Objetivo :
Fazer manutenção,ao automática (inclusão, alteração e exclusão) automatizando o processo de entrada de dados sem a necessidade de desenvolver rotinas especificas.
2) Aplicação:
Esta técnica esta aplicada em todas as versões Protheus, porem esta documentação se baseou na versão 6.09.
3) Vantagens:
1) Interface : A entrada de dados e enviada a rotina em forma de campos e conteúdos (array) e desta forma não sendo necessário a apresentação de nenhuma interface ao usuário.
2) Segurança : Em relação a este aspecto e fundamental sua utilização desta forma, pois esta se usando a rotina padrão no sistema, onde se a rotina sofrer manutenção a atualização será automática para o usuário final.
3) Agilidade no processo : Aumenta consideravelmente a agilidade, pois neste processo se bem construído elimina-se a entrada de dados via teclado (digitação).
4) Procedimento:
Existe duas maneiras de esta utilizando a rotina automática. 1§ Por um job
2§ Direto do sistema
A principal diferença entre elas e que quando usamos por um Job , devemos utilizar diretamente os nomes da funções 1§)Procedimento utilizando em JOB
Para a utilização da rotina automática em JOB nao utilizar a função MSExecAuto mas sim direto o nome da função. Exemplo:
Mata010(aProduto,nOpc) // utilizando em JOB
Ja para rotinas que não são em Job , devemos usar a MSExecAuto, pois a mesma tem a função de guardar o ambiente , executar a função automática e retornar de onde parou.
2§)Procedimentos utilizando MSExecAuto ---Exemplo:
MSExecAuto({|x,y| mata010(x,y)},aProduto,3) // utilizando em aplicação normal. Modelos de Rotinas Automáticas:
Existem 2 modelos de rotinas automáticas: 1§Modelo
Rotinas que utilizam somente a Enchoice (Baseada no dicionário de dados para uma tabela). CONA060(aRotAuto)-- Cadastro de Centro de Custo Custo
FINA040(aRotAuto,nOpc)--Cadastro Titulo a Receber
FINA050(aRotAuto,nOpcion,nOpc)*--Cadastro Titulo A pagar MATA010(aRotAuto,nOpc)--Cadastro de produtos
MATA020(aRotAuto,nOpc)--Cadastro de Fornecedor MATA030(aRotAuto,nOpc)--Cadastro de Clientes MATA040(aRotAuto,nOpc)--Cadastro de Vendedor
MATA050(aRotAuto,nOpc)--Cadastro de Transportadora
MATA060(aRotAuto,nOpc)--Atualização da Amarração Produto Fornecedor MATA080(aRotAuto,nOpc)--Cadastro de Tipo entrada e saída
MATA180(aRotAuto,nOpc)--Atualização dos dados complementares do produto MATA240(aRotAuto,nOpc)--Movimentações Internas (Requisições/Devoluções) MATA250(aRotAuto)--Programa para digitação das produções.
MATA270(aRotAuto)--Programa de digitação do inventario MATA650(aRotAuto,nOpc)--Cadastramento de Ordens de Produção
MATA680(aRotAuto)--Programa de atualização do movimento de produção
MATA681(aRotAuto)-Apontamento de Produção baseado no Roteiro de de Operações MATA682(aRotAuto)--Apontamento de Horas Improdutivas
QADA020(aRotAuto,nOpc)--Cadastro de Check List
QIEA030(aRotAuto)--Programa de atualização de Unidades de Medida
Obs.: As funções que não tem o parâmetro 'nOpc' estão disponíveis somente a rotina de inclusão. *nOpcion= utilizado para localização, para os processos automáticos passar NIL.
Parâmetros:
---NOpc - numérico com tipo da operação 3-inclusão, 4-alteração e 5 exclusão
ARotAuto - array contendo os campos e conteúdos, no mínimo passar os campos obrigatórios. NIL - parâmetro reservado
Exemplo:
User Function IncProd() Local aRotAuto := {}
Local nOpc := 3 // inclusão
Private lMsHelpAuto := .t. // se .t. direciona as mensagens de help para o arq. de log Private lMsErroAuto := .f. //necessário a criação, pois será //atualizado quando houver //alguma inconsistência nos parâmetros
Begin Transaction
aRotAuto:= {{"B1_COD","1010" ,Nil},; {"B1_DESC" ,"Produto teste",Nil},; {"B1_TIPO" ,"PA" ,Nil},;
{"B1_UM" ,"UN" ,Nil},; {"B1_LOCPAD" ,"01" ,Nil},; {"B1_PICM" ,0 ,Nil},; {"B1_IPI" ,0 ,Nil},; {"B1_PRV1" ,100 ,Nil},; {"B1_LOCALIZ" ,"N" ,Nil},; {"B1_CODBAR" ,'789888800001' ,Nil}} MSExecAuto({|x,y| mata010(x,y)},aProduto,nOpc) If lMsErroAuto DisarmTransaction() break EndIf End Transaction If lMsErroAuto /*
Se estiver em uma aplicação normal e ocorrer alguma inconsistência nos parâmetros passados,mostrar na tela o log informando qual coluna teve a inconsistência.
*/ Mostraerro() Return .f. EndIf Return .t. 2§MODELO
Rotinas que utilizam enchoice e getdados. Rotinas disponíveis:
CONA050(lLanc,xAutoCab,xAutoItens)*- Lançamentos Contábeis
MATA100(xAutoCab,xAutoItens,nOpc103)-Entrada de Notas Fiscais de Compra MATA102(xAutoCab,xAutoItens,nOpc)-Remito de Entrada de Materiais (Compras) MATA103(xAutoCab,xAutoItens,nOpc,lWhenGet)**- Notas Fiscais de Entrada MATA110(xAutoCab,xAutoItens, nOpc)-Solicitação de Compra
MATA120(nFuncao,xAutoCab,xAutoItens,nOpcAuto)***-Pedidos de Compra
MATA140(xAutoCab,xAutoItens,nOpc)-Digitação das Notas Fiscais de Entrada sem os dados Fiscais MATA150(xAutoCab,xAutoItens,nOpc)-Rotina de atualização manual das cotações de compra
MATA241(xAutoCab,xAutoItens)-Programa de Movimentações Internas (Requisições/Devoluções) MATA265(xAutoCab,xAutoItens,nOpc)-Distribuição de Produtos.
MATA410(xAutoCab,xAutoItens,nOpc)-Programa de atualização de Pedidos de Venda MATA415(xAutoCab,xAutoItens,nOpc)-Rotina de atualização dos Orçamentos de venda MATA920(xAutoCab,xAutoItens,nOpc)-SAIDA de Notas Fiscais de Venda Manual
TMKA061(xAutoCab,xAutoItens,nOpc)-Gerador de Listas
CFGX016(xAutoCab,xAutoItens)-Manutenção do arquivo de tabelas do sistema FINA070(xAutoCab,nOpc)-Programa de Baixa de Títulos a Receber
FINA080(xAutoCab,nOpc)-Programa de Baixa de Títulos a Pagar
Obs.: As funções que não tem o parâmetro 'nOpc' estão disponíveis somente a rotina de inclusão. * lLanc -Utilizado para ..., nos processos automáticos passar falso(.f.).
** lWhenGet - Nas rotinas automáticas passar NIL
***nOpcAuto-Passar o tipo que usa o modulo mata120 (1 pra pedido de compra, 2 Atualização de Entrega) Parâmetros:
nOpc - numérico com tipo da operação 3-inclusão, 4-alteração e 5 exclusão
xAutoCab - array contendo os campos e conteúdos do cabeçalho, no mínimo passar os campos obrigatórios. xAutoItens - array contendo outro array com os campos e conteúdo referente aos itens.
NIL - parâmetro reservado Exemplo:
User Function IncPed() Local aCabPV := {} Local aItemPV1:= {} Local aItemPV2:= {}
Local nOpc := 3 // inclusao Private lMsHelpAuto := .t. Private lMsErroAuto := .f. Begin Transaction
//Cabeçalho
aCabPV:={{"C5_NUM" ,"000108" ,Nil},; // Numero do pedido {"C5_CLIENTE","000001" ,Nil},; // Código do cliente {"C5_LOJAENT","00" ,Nil},; // Loja para entrada {"C5_LOJACLI","00" ,Nil},; // Loja do cliente {"C5_EMISSAO",dDatabase ,Nil},; // Data de emissão {"C5_TIPO" ,"N" ,Nil},; // Tipo de pedido
{"C5_CONDPAG","001" ,Nil},; // Código da condição de pagamento* {"C5_LIBEROK","S" ,Nil}} // Liberação Total
//Itens
aItemPV1:={ {"C6_NUM","000108",Nil},; // Numero do Pedido
{"C6_ITEM" ,"01" ,Nil},; // Numero do Item no Pedido {"C6_PRODUTO","1010" ,Nil},; // Código do Produto
{"C6_QTDVEN" ,1 ,Nil},; // Quantidade Vendida {"C6_PRCVEN" ,100 ,Nil},; // Preço Unitário Liquido {"C6_VALOR" ,100 ,Nil},; // Valor Total do Item {"C6_ENTREG",dDataBase,Nil},; // Data da Entrega
{"C6_UM" ,"UN" ,Nil},; // Unidade de Medida Primar. {"C6_TES" ,"510" ,Nil},; // Tipo de Entrada/Saída do Item {"C6_LOCAL" ,"01" ,Nil},; // Almoxarifado
{"C6_DESCONT",1 ,Nil},; // Percentual de Desconto {"C6_COMIS1" ,0 ,Nil},; // Comissão Vendedor {"C6_CLI" ,"000001",Nil},; // Cliente
{"C6_LOJA" ,"00" ,Nil},; // Loja do Cliente {"C6_QTDEMP" ,1 ,Nil},; // Quantidade Empenhada {"C6_QTDLIB" ,1 ,Nil}} // Quantidade Liberada Itens
aItemPV2:={ {"C6_NUM" ,"000108",Nil},; // Numero do Pedido
{"C6_ITEM" ,"01" ,Nil},; // Numero do Item no Pedido {"C6_PRODUTO","1010" ,Nil},; // Código do Produto
{"C6_QTDVEN" ,1 ,Nil},; // Quantidade Vendida {"C6_PRCVEN" ,100 ,Nil},; // Preço Unitário Liquido {"C6_VALOR" ,100 ,Nil},; // Valor Total do Item {"C6_ENTREG",dDataBase,Nil},; // Data da Entrega
{"C6_UM" ,"UN" ,Nil},; // Unidade de Medida Primar. {"C6_TES" ,"510" ,Nil},; // Tipo de Entrada/Saída do Item {"C6_LOCAL" ,"01" ,Nil},; // Almoxarifado
{"C6_DESCONT",1 ,Nil},; // Percentual de Desconto {"C6_COMIS1" ,0 ,Nil},; // Comissão Vendedor {"C6_CLI" ,"000001",Nil},; // Cliente
{"C6_LOJA" ,"00" ,Nil},; // Loja do Cliente
{"C6_QTDEMP" ,1 ,Nil},; // Quantidade Empenhada {"C6_QTDLIB" ,1 ,Nil}} // Quantidade Liberada
MSExecAuto({|x,y,z|Mata410(x,y,z)},aCabPv,{aItemPV1,aItemPV2},nOpc) If lMsErroAuto DisarmTransaction() break EndIf End Transaction If lMsErroAuto /*
Se estiver em uma aplicação normal e ocorrer alguma inconsistência nos parâmetros passados, mostrar na tela o log informando qual coluna teve a inconsistência.
*/ Mostraerro() Return .f. EndIf Return .t. ========================================================================================================================