Objetivo
Determina os procedimentos para utilizar o módulo Coleta de Dados em transações particulares do cliente.
Visão geral
O módulo Coleta de Dados pode ser utilizado para gerar movimentação e etiquetas de transações particulares do cliente, que ainda não estão disponíveis nos produtos da Datasul S. A.
Este processo apresenta todos os procedimentos necessários para viabilizar a utilização deste módulo por transações desenvolvidas pelo próprio cliente. Veja mais informações na descrição do conceito Transação Específica.
Objetivos dos Templates
O objetivo das templates Data Collection é fornecer aos seus usuários uma opção de redução de custo para implantação da solução de coleta de dados, melhorando a relação de retorno de investimento da solução.
Esta redução de custos se dá basicamente pela adoção de um padrão de desenvolvimento, onde parte do Data Collection tem código fonte aberto, proporcionando que o próprio cliente faça as alterações necessárias a sua realidade, baseado nas transações nativas do Data Collection.
Com as templates criaram-se também uma série de métodos de desenvolvimento, que objetivam dar velocidade a este processo, proporcionando até que programadores sem muita experiência em 4GL Progress possam realizar a tarefa de adequar as transações do Data Collection a realidade do cliente com grande facilidade.
A Relação completa dos templates data Collection pode ser encontrada no Anexo1.
O Primeiro Passo
As informações mais particulares existentes na sua organização, onde o Data Collection poderia interagir captando informações que gerarão dados dentro do ERP. É necessário também que se observe se a informação que se deseja captar é tratada pelo ERP.
Conhecendo os Templates
Após ter reunido as informações necessárias para a fase inicial do projeto, você poderá iniciar o desenvolvimento da sua transação customizada. Para aprendermos a utilizar os templates, utilizaremos a transação de Transferência de Materiais.
Antes de continuarmos, precisamos saber onde será possível interagir com as templates para desenvolver sua solução.
Consideremos o esquema abaixo:
No diagrama acima verificamos todo o fluxo dos dados e processos do Data Collection, onde estes estão descritos da seguinte forma:
Obj | Nome Objeto | Função |
1 | Coletores de Dados on-line/batch | Hardware de leitura dos dados provenientes dos mais diversos meios como, por exemplo, códigos de barra, medidores de vazão e balanças. |
2 | Interfaces Data Collection | Programa de leitura dos dados que executa dentro do coletor de dados recebendo, consistindo e efetivando os mesmos no bando de dados do Data Collection. |
3 | Interface com Lay-out de importação Texto | Programa que interage com interfaces baseadas em texto para coletores de dados batch. |
4 | API de efetivação do Data Collection | Programa que tem a função de efetivar os dados recebidos na interface, dentro do banco de dados do Data Collection. |
5 | Manutenção de Transações | Programas responsáveis por dar manutenção as transações que estão dentro do Data Collection. |
6 | Bando de Dados do Coleta de Dados | Banco de Dados que tem a função de armazenar os dados coletados em forma de transações, que podem ser totalmente controladas a partir do Data Collection. |
7 | Pré-API Data Collection | Programa que tem por função receber uma transação, decodificá-la e entregá-la aos adapters de tradução. |
8 | Adapters Data Collection | Programas que tem por função traduzir ou adaptar os dados enviados pelas transações para a linguagem inteligível pelo ERP conectado. |
9 | API Magnus/EMS | Programas do ERP que tem por função receber as informações passadas pelos adapters e efetivar a transação de negócio dentro do ERP. |
10 | Banco de Dados ERP | Bancos de Dados do produto instalado Magnus ou EMS. |
Podemos ainda destacar do diagrama acima os pontos assinalados em vermelho, que são os pontos onde os templates podem ser utilizados conforme descrito abaixo:
Obj | Ponto de Alteração | O que pode ser feito |
2 | Interfaces Data Collection | Este ponto é um dos responsáveis pela entrada dos dados do meio externo para o sistema. Nele é possível incluir novas entradas ou campos por onde entrarão as informações. Nota: Não coloque validações de negócio neste ponto, a não ser que seja estritamente necessário, pois o local mais adequado é a Pré-API do Data Collection, descrito no ponto 6. |
3 | Interface com Lay-out de importação Texto | Este ponto como o anterior é um dos responsáveis pela entrada dos dados do meio externo para o sistema. Nele é possível incluir novas entradas ou campos por onde entrarão as informações. Nota: Não coloque validações de negócio neste ponto a não ser que seja estritamente necessário, pois o local mais adequado é a Pré-API do Data Collection, descrito no ponto 6. |
5 | Manutenção de Transações | Neste ponto é possível efetuar alterações do conteúdo das transações e ainda customizar a forma de visualização. |
7 | Pré-API Data Collection | Neste ponto é possível colocar validações e enviar os dados para as entradas dos produtos. |
Aprenderemos agora passo a passo como desenvolver soluções específicas, utilizando os templates Data Collection para coleta de dados.
Utilizando os campos de dados disponíveis
Todas as templates de transações do Data Collection possuem um repositório de dados temporário, onde são armazenadas as informações coletadas pelas interfaces.
Estes repositórios possuem atributos reservados, que são de uso exclusivo do Data Collection, e outros atributos que são os chamados livres, que por sua vez estão disponíveis para entradas de dados do usuário.
Abaixo segue a definição deste repositório para a transação de Transferência de Materiais, onde os atributos livres estão destacados.
Observação:
Na definição dos repositórios estão relacionados todos os atributos e sua finalidade, com isso, antes de utilizar um atributo livre, verificar no repositório correspondente se o atributo não está sendo utilizado.
Não é possível alterar a estrutura de dados do repositório de dados, pois existem programas no Data Collection compilados com esta estrutura que poderão vir a apresentar divergências de comunicação com estes repositórios alterados.
Anexo 2
Iniciando a codificação na Interface
Agora que já definimos onde armazenar a nova informação a ser coletada, já estamos aptos a codificar o programa.
A implementação destas novas informações deverá sempre iniciar pela alteração do programa de interface, representado pelo objeto de número dois do diagrama de dados do Data Collection. E, é neste programa que iniciaremos nosso projeto.
Antes de iniciarmos, é interessante conhecermos um pouco como está montada a interface de entrada do Data Collection.
O programa de interface de entrada de dados do Data Collection foi montado de forma que não seja exigido muito esforço de programação. Para este programa foi montado um conjunto de técnicas de uso de pré-processadores e includes que tornam esta tarefa mais fácil.
O programa é composto basicamente por três seções, as quais estudaremos a seguir:
Primeira Seção: Pré-processadores
Recebe todas as definições de como será o programa, desde o nome do repositório de dados, até os gatilhos que ocorrerão para cada atributo constante da tela da interface.
Descrevemos a seguir cada pré-processador e sua função:
Pré-Processador | Descrição |
ProgramName | Nome do programa de interface que é utilizado para definir qual transação está sendo utilizada. /* Definicao global do nome da transacao--- */ &global-define ProgramName bc9001/************************************************************/ |
TempTable | Contém o nome da Temp-Table da transação de negócio para comunicação com ERP, e também a definição da Temp-table de trabalho para interação com a tela. /* Definicao da temp-table de integracao--- */ &global-define TempTable tt-transfere-bc {bcp/bc9001.i" "} Define Temp-table ttWork No-Undo Like {&TempTable}. Create ttWork. /************************************************************/ |
FrameSize | Tamanho da tela da interface. Deve-se observar este parâmetro, quando da definição das telas, o espaço utilizado não pode ultrapassar o limite estabelecido por este pré-processador. /* Propriedades globais para frames--- */ &global-define FrameSize 20 By 8 /************************************************************/ |
Frame99Name | Nome da Tela. Sugestão "Frame" mais sequência com dois dígitos. /* Definicao da Frame01--- */ &global-define Frame01Name Frame01 /************************************************************/ |
Frame99Defs | Definições da tela, onde esta deve conter: Título da Tela, quando necessário em forma de literal. Campos com a opção no-label e sua localização Ex. At Row x Col y. Literais que substituem os rótulos dos campos e sua localização. Instruções de Navegação, quando houver espaço livre para o mesmo. &global-define Frame01Defs 'Transf Materiais 1/2' At Row 01 Col 01 ~ ' Estab:' At Row 02 Col 01 ~ ttWork.cod-estabel At Row 02 Col 09 No-Label ~ ' Docto:' At Row 03 Col 01 ~ ttWork.num-documento At Row 03 Col 09 No-Label ~ 'Ref Des:' At Row 04 Col 01 ~ ttWork.cod-refer-destino At Row 04 Col 09 No-label ~ 'Dep Des:' At Row 05 Col 01 ~ ttWork.cod-depos-destino At Row 05 Col 09 No-Label ~ 'Loc Des:' At Row 06 Col 01 ~ ttWork.cod-local-destino At Row 06 Col 09 No-Label ~ 'Lot Des:' At Row 07 Col 01 ~ ttWork.cod-lote-destino At Row 07 Col 09 No-label /************************************************************/ |
FrameXXRepeat | Indica se a Frame será repetitiva, caso seja, informar o valor YES. &global-define Frame01Repeat No /************************************************************/ |
UpdateXXFields | Definição dos campos que deverão ser recebidos nas telas, onde “XX” é o número da tela corrente. /* Definicao dos campos a serem recebidos--- */ &global-define Update01Fields ttWork.cod-estabel ~ ttWork.num-documento ~ ttWork.cod-refer-destino ~ ttWork.cod-depos-destino ~ ttWork.cod-local-destino ~ ttWork.cod-lote-destino /************************************************************/ |
TriggerBeforeFrameXX TriggerAfterFrameXX | Definição de gatilhos que podem ser executados antes ou depois do recebimento dos campos na tela, onde XX é o número da tela corrente. /* Definicao das trigger de interacao com a tela --- */ &global-define TriggerBeforeFrame01 Run InicializaCamposFrame01. &global-define TriggerBeforeFrame02 Run InicializaCamposFrame02. &global-define TriggerAfterFrame01 Run GravaCamposFrame01. &global-define TriggerAfterFrame02 Run GravaCamposFrame02. ~ Run GravaTransacao. /************************************************************/ |
UserTriggers | Definição de triggers de usuário, pode ser utilizado, por exemplo, para definir ações para determinados eventos nos campos da tela. |
ActiveObject | Este pré-processador é utilizado para, ao término da execução do programa de interface, eliminar os handles instanciados. |
TriggerOpenProgram | Programa que será instanciado de forma persistente no início. |
TriggerCloseProgram | Programa que terá o seu handle eliminado ao término do programa. |
Segunda Seção: Corpo Principal do Programa
Nesta seção encontram-se as includes de tratamentos de navegação e efetivação da transação. Com isso, não são necessárias alterações.
Terceira Seção: Código do Usuário
Nesta seção encontram-se os procedimentos do usuário para o tratamento do funcionamento do programa. Abaixo relacionaremos as procedures que encontramos nesta seção, cada uma com sua função especificada.
Procedimento | Função |
InicializaCamposFrameXX | Este procedimento tem por objetivo inicializar os campos da tela, onde “XX” é o número da janela a ser inicializada. Os campos a serem inicializado serão sempre os do repositório temporário de trabalho ttWork. Nota: Este procedimento pode ser disparado pelo pré-processador TriggerBeforeFrameXX. |
GravaCamposFrameXX | Este procedimento tem por objetivo gravar os campos da tela, onde “XX” é o número da janela que contém estes campos. Neste procedimento também podem ser realizadas pequenas validações como não nulo, por exemplo, mas lembre-se que validações de negócio devem ser feitas apenas dentro da Pré-API do Coleta de Dados. Os valores serão sempre gravados no repositório temporário de trabalho ttWork. Nota: Este procedimento pode ser disparado pelo pré-processador TriggerAfterFrameXX. |
GravaTransação | Este procedimento tem como função finalizar uma interação de transação do Data Collection, e sua chamada deve ocorrer sempre que a última tela de dados for solicitada. Nota: Sua chamada pode feita no pré-processador TriggerAfterFrameXX, logo após da chamada para o procedimento GravaCamposFrameXX. |
Variáveis Especiais de Programa
Variável | Função |
v_log_etiqueta | Essa variável indica se o processo refere-se a uma etiqueta. Observação: Para a geração de um movimento de coleta de dados, a variável v_log_etiqueta deve estar definida como “Não”. Caso ela esteja definida com “Sim”, é feita a geração de um movimento de etiqueta. |
Alterações no Programa de Manutenção de Transações
O programa de manutenção de transações, assim com a interface de entrada de dados do Data Collection, foi montado de forma que não seja exigido muito esforço de programação. Assim como na interface de entrada de dados, este programa foi montado um conjunto de técnicas de uso de pré-processadores e includes que tornam esta tarefa mais fácil.
O programa é composto basicamente por duas seções, as quais estudaremos a seguir:
Primeira Seção: Pré-processadores
Recebe todas as definições de como será o programa, desde o nome do repositório de dados até definições de detalhes da transação.
Descreveremos a seguir cada pré-processador e sua função:
Pré-Processador | Descrição |
FrameFields | Relação dos campos do repositório temporário de dados que aparecerão na tela do programa de manutenção. /********** Frame Fields Preprocessor Definitions Beg **********/ &GLOBAL-DEFINE FrameFields tt-transfere-bc.cod-estabel ~ tt-transfere-bc.num-documento ~ tt-transfere-bc.cod-serie-documento ~ tt-transfere-bc.num-especie-documento ~ tt-transfere-bc.data-transacao tt-transfere-bc.cod-item ~ tt-transfere-bc.cod-unico ~ tt-transfere-bc.cod-refer-origem ~ tt-transfere-bc.cod-refer-destino ~ tt-transfere-bc.cod-depos-origem ~ tt-transfere-bc.cod-depos-destino ~ tt-transfere-bc.cod-local-origem ~ tt-transfere-bc.cod-local-destino ~ tt-transfere-bc.cod-lote-origem ~ tt-transfere-bc.cod-lote-destino ~ tt-transfere-bc.dat-valid-lote-origem ~ tt-transfere-bc.dat-valid-lote-destino ~ tt-transfere-bc.cod-usuario ~ tt-transfere-bc.qtd-movimento ~ tt-transfere-bc.ct-codigo ~ tt-transfere-bc.sc-codigo ~ tt-transfere-bc.num-sequencia ~ tt-transfere-bc.un ~ tt-transfere-bc.cod-livre-1 ~ tt-transfere-bc.cod-livre-2 ~ tt-transfere-bc.cod-livre-3 ~ tt-transfere-bc.num-livre-1 ~ tt-transfere-bc.num-livre-2 ~ tt-transfere-bc.num-livre-3 ~ tt-transfere-bc.dec-livre-1 ~ tt-transfere-bc.dec-livre-2 ~ tt-transfere-bc.dec-livre-3 ~ tt-transfere-bc.log-livre-1 ~ tt-transfere-bc.log-livre-2 ~ tt-transfere-bc.log-livre-3 /********** Frame Fields Preprocessor Definitions End **********/ |
NameOfTTInclude | Armazena o nome e caminho da include que contém as definições do repositório temporário de Dados. /********* Name of TT Include Preprocessor Definitions Beg *******/ &GLOBAL-DEFINE NameOfTTInclude bcp/bc9001.i /********* Name of TT Include Preprocessor Definitions End *******/ |
ProgramTitle | Título da janela do programa de manutenção. /********* Program Title Preprocessor Definitions Beg **********/ &GLOBAL-DEFINE ProgramTitle Transferencia - bc9001a.p 2.00.00.000 /********* Program Title Preprocessor Definitions End **********/ |
FrameNumOfColumns | Específica em quantas colunas serão apresentados os dados. /**** Frame Number of Columns Preprocessor Definitions Beg ******/ &GLOBAL-DEFINE FrameNumOfColumns 2 /**** Frame Number of Columns Preprocessor Definitions End *******/ |
TransactionProgram | Especifica o nome do programa da transação para informação interna do Data Collection. /******* Geracao Etiquetas Preprocessor Definitions Beg ********/ &GLOBAL-DEFINE TransactionProgram bc9001 /******* Geracao Etiquetas Preprocessor Definitions End ********/ |
Table | Armazena o nome do repositório temporário de dados. /******* Table Preprocessor Definitions Beg *******************/ &GLOBAL-DEFINE Table tt-transfere-bc /******* Table Preprocessor Definitions End *******************/ |
TransDetail | Especifica a montagem do campo de detalhe da transação. Recomenda-se que a definição seja igual a definição feita no programa de Interface. /****** Table Preprocessor Definitions Beg ********************/ &GLOBAL-DEFINE TransDetail vCodTransaction + ~ " Doc: " + String({&Table}. num-documento) + ~ " Item: " + Trim( {&Table}.cod-item) + ~ " Ref: " + Trim( {&Table}.cod-refer-origem) + ~ " Depos: " + Trim( {&Table}.cod-depos-destino) + ~ " Local: " + Trim( {&Table}.cod-local-destino) + ~ " Lote: " + Trim( {&Table}.cod-lote-destino) + ~ " Qt: " + String({&Table}.qtd-movimento) /****** Table Preprocessor Definitions End ********************/ |
CustomDisplayFieldXX | Nome do atributo do repositório temporário que terá valor específico na Tela. Onde XX é um número sequencial para estes atributos. /***** Fields Custom Display Preprocessor Definitions Beg ******/ &GLOBAL-DEFINE CustomDisplayField01 tt-transfere-bc.data-transacao /***** Fields Custom Display Preprocessor Definitions End ******/ |
CustomValueFieldXX | Valor do atributo do repositório temporário que terá valor específico na Tela. Onde XX é um número sequencial para estes atributos. /***** Fields Custom Display Preprocessor Definitions Beg ******/ &GLOBAL-DEFINE CustomValueField01 String(today,'99/99/9999') /***** Fields Custom Display Preprocessor Definitions End ******/ |
CustomFormatFieldXX | Nome do atributo que terá seu formato alterado para apresentação em tela. Onde XX é um número seqüencial para estes atributos. |
FieldFormatXX | Formato para o campo que terá seu formato alterado como descrito acima. Onde XX é um número seqüencial para estes atributos. |
Segunda Seção: Corpo de Programa
Esta seção contém uma include padrão que monta o código principal de funcionamento do programa, sendo desnecessárias alterações no mesmo.
Alterações na Pré-API de Efetivação
Para efetuarmos alterações em uma Pré-API de transação, é necessário antes entender seu funcionamento, pois as Pré-APIs trabalham com conceitos de comunicação de dados, que isolam a camada de dados do Data Collection da camada de Dados do ERP, criando assim, uma independência que facilita a migração entre uma versão e outra do produto.
Para entendermos melhor estas camadas verifiquemos o esquema abaixo:
Observando o diagrama anterior, podemos identificar precisamente as camadas de software existentes no Data Collection.
A primeira camada está representada pelas “Interfaces Data Collection”, que são programas responsáveis por fazer a captação dos dados provenientes do meio externo e inserí-los dentro do Data Collection.
Em uma camada abaixo existe a “API de Efetivação de Transação no Data Collection”, que tem o papel de transformar a informação coletada nos programas de interface em uma transação que será armazenada dentro do banco de dados do Data Collection, permitindo que estas possam ser gerenciadas no mesmo.
Logo após, existe a camada de gerenciamento do Data Collection, onde atuam as consultas, tarefas e programas do módulo. Para o nosso caso, vale a pena salientar que nesta camada existe o programa de manutenção da transação, que poderá ser alterado conforme a necessidade.
A fronteira final do Data Collection então se encontra figurada na Pré-API de efetivação dos dados.
Dentro de uma Pré-API do coleta de dados, é possível colocar validações e enviar os dados para as entradas do produto conectado.
O meio de transporte dos dados coletados para os Adapters é feito via um repositório temporário de dados chamado “ttIntegracao”.
Neste repositório existem atributos destinados a armazenar os dados padrões do Data Collection, conforme o Tipo de Dados e Atributo.
Nota:
AddField('Par1',String(Par2),'Par3').
O comando "_AddField" é a função responsável para popular o repositório ttIntegracao, onde os parâmetros Par1, Par2 e Par3 são:
Par1 - Código do campo que identifica o valor a ser populado;
Par2 - Valor correspondente ao Código;
Par3 - Tipo de Dado correspondente ao Campo.
Nas Pré-APIs de efetivação já possuem o Par-1, padrão.
Tratamento de Erros
O tratamento de erros ocorridos nos pontos de validação do Data Collection, devem ser apresentados por via de um repositório de temporário padrão, chamado tt-erro (bc9102.i). Neste repositório existem 3 atributos.
i-sequem: Número sequencia dor erro.
cd-erro: Código do erro.
mensagem: Descrição da mensagem de erro.
Nota:
Sempre coloque no texto da mensagem o local onde ocorre o erro, esta atitude facilita a resolução de divergências.
Anexo 1 – Templates para Transações do Data Collection
Transação | Objeto | Programa Fonte |
Transferência de Materiais (Transf) | Include Repositório Interface Manutenção Importação Pré-API | bcp/bc9001.i bcp/bc9001.p bcp/bc9001a.p bcp/bc9001b.p bcp/bc9001c.p |
Contagem Cíclica (Contagem) | Include Repositório Interface Manutenção Importação Pré-API | bcp/bc9002.i bcp/bc9002.p bcp/bc9002a.p bcp/bc9002b.p bcp/bc9002c.p |
Reporte por Ordem/Operação e Ponto de Controle (Reporte) | Include Repositório Interface Manutenção Importação Pré-API | bcp/bc9003.i bcp/bc9003.p bcp/bc9003a.p bcp/bc9003b.p bcp/bc9003c.p |
Requisição de Materiais Req-MCP) | Include Repositório Interface Manutenção Importação Pré-API | bcp/bc9004.i bcp/bc9004.p bcp/bc9004a.p bcp/bc9004b.p bcp/bc9004c.p |
Reporte Repetitivo (Rep-Item) | Include Repositório Interface Manutenção Importação Pré-API | bcp/bc9006.i bcp/bc9006.p bcp/bc9006a.p bcp/bc9006b.p bcp/bc9006c.p |
Conferência do Aviso de Embarque (Embarque) | Include Repositório Interface Manutenção Importação Pré-API | bcp/bc9008.i bcp/bc9008.p bcp/bc9008a.p bcp/bc9008b.p bcp/bc9008c.p |
Observação:
Na utilização da transação de Embarque, será necessário executar os programas abaixo relacionados, pois estes irão importar as tabelas que estão liberadas somente na versão do produto Datasul EMS 2.04.
A execução destes programas deverá ser feita com o banco em mono-usuário, evitando com isso, divergências com relação ao travamento do banco.
Programas:
Bc0001df.p - Importa definição da tabela bc-integração.
Bc0002df.p - Importa definição da tabela bc-trans-param.
Anexo 2 – Definição do Repositório tt-transfere-bc
/********************************************************************************************
** Include...:bc9001.i **
** **
** Versao....: 2.00.00.000 - Set/2000 – Luciano Leonhardt **
** **
** Objetivo..: Armazenar os dados para transacao de Transferência de Materiais **
** **
********************************************************************************************/
Define {1} Temp-Table tt-transfere-bc
Field cod-estabel As Character Format 'x(03)':U Label "Estab"
Field num-documento As Character Format 'x(10)':U Label "Nro Docto"
Field cod-serie-documento As Character Format 'x(05)':U Label "Serie Docto"
Field num-especie-documento As Integer Format '>9':U Label "Espec Docto"
Field data-transacao As Date Format '99/99/9999':U Label "Data Trans"
Field cod-item As Character Format 'x(16)':U Label "Item"
Field cod-unico As Character Format 'x(16)':U Label "Codig Unico"
Field cod-refer-origem As Character Format 'x(10)':U Label "Refer Orig"
Field cod-refer-destino As Character Format 'x(10)':U Label "Refer Dest"
Field cod-depos-origem As Character Format 'x(03)':U Label "Depos Orig"
Field cod-depos-destino As Character Format 'x(03)':U Label "Depos Dest"
Field cod-local-origem As Character Format 'x(10)':U Label "Local Orig"
Field cod-local-destino As Character Format 'x(10)':U Label "Local Dest"
Field cod-lote-origem As Character Format 'x(10)':U Label "Lote Orig"
Field cod-lote-destino As Character Format 'x(10)':U Label "Lote Dest"
Field dat-valid-lote-origem As Date Format '99/99/9999':U Label "Vl Lote Orig"
Field dat-valid-lote-destino As Date Format '99/99/9999':U Label "Vl Lote Dest"
Field cod-usuario As Character Format 'x(12)':U Label "Usuario"
Field qtd-movimento As Decimal Format '>>>>>>9.999':U Decimals 4 Label "Quantidade"
/*****[ Inicio Campos Utilizados somente para Produto Magnus I00 ] *****/
Field ct-codigo As Character Format 'x(08)':U Label "Conta"
Field sc-codigo As Character Format 'x(05)':U Label "SubConta"
Field num-sequencia As Integer Format '>>9':U Label "Seq"
Field un As Character Format 'x(03)':U Label "Un"
/*****[ Fim Campos Utilizados somente para Produto Magnus I00 ] *****/
Field cod-livre-1 As Character Format 'x(40)':U Label "Cod Livre 1"
Field cod-livre-2 As Character Format 'x(40)':U Label "Cod Livre 2"
Field cod-livre-3 As Character Format 'x(40)':U Label "Cod Livre 3"
Field num-livre-1 As Integer Format '>>>>>>>9':U Label "Num Livre 1"
Field num-livre-2 As Integer Format '>>>>>>>9':U Label "Num Livre 2"
Field num-livre-3 As Integer Format '>>>>>>>9':U Label "Num Livre 3"
Field dec-livre-1 As Decimal Format '>>>>>>9.999':U Decimals 4 Label "Dec Livre 1"
Field dec-livre-2 As Decimal Format '>>>>>>9.999':U Decimals 4 Label "Dec Livre 2"
Field dec-livre-3 As Decimal Format '>>>>>>9.999':U Decimals 4 Label "Dec Livre 3"
Field log-livre-1 As Logical Format 'Sim/Nao' Label "Log Livre 1"
Field log-livre-2 As Logical Format 'Sim/Nao' Label "Log Livre 2"
Field log-livre-3 As Logical Format 'Sim/Nao' Label "Log Livre 3"
Field dat-livre-1 As Date Format '99/99/9999' Label 'DataLivre 1'
Field dat-livre-2 As Date Format '99/99/9999' Label 'DataLivre 2'
Field dat-livre-3 As Date Format '99/99/9999' Label 'DataLivre 3'
INDEX Item IS PRIMARY Cod-Item
Anexo 3 – Código Fonte Interface
/********************************************************************************
** Copyright DATASUL S.A. (1997)
** Todos os Direitos Reservados.
**
** Este fonte e de propriedade exclusiva da DATASUL, sua reprodução
** parcial ou total por qualquer meio, só poderá ser feita mediante
** autorização expressa.
*******************************************************************************/
/********************************************************************************************
** Programa..: bc9001.p **
** **
** Versão....: 2.00.00.000 - Set/2000 - Luciano Leonhardt **
** **
** Objetivo..: Template DB Interface para transação de Transferência de Materiais **
** nbsp; **
** Includes..: bc9105.i, bc9101.i, bc9100.i,bc9001.i **
** **
********************************************************************************************/
/***************************************************************************************************
** SEÇÂO DE PRE-PROCESSADORES DA TEMPLATE **
** Nesta seção são definidos os pre-processadores que serão usados na montagem da interface. **
** **
** DESCRIÇÃO DOS PRE-PROCESSADORES: **
** ProgramName - Nome do programa e, tambem, do Codigo da transacao do Data Collection **
** que sera acionada pela interface. **
**TempTable - Nome da Temp-Table da transacao de negocio para comunicacao com ERP. **
** Ex: tt-transfere-bc. **
**FrameSize - Tamanho da tela da interface. Deve-se observar este parâmetro quando da **
** definicao das telas, o espaco utilizado nao pode ultrapassar o limite **
** estabelecido por este pre-processador. **
**Frame99Name - Nome da Tela. Sugestao "Frame" mais sequencia. **
** Ex. Frame01, Frame02, Frame03, etc. **
**Frame99Defs - Definicoes da tela onde a mesma deve conter: **
** .Titulo da Tela quando necessario. **
** .Campos com a opcao no-label e sua localizacao Ex.At Row x Coly. **
** .Literais que substituem os labels dos campos e sua localizacao. **
** .Instrucoes de Navegacao quando houver espaco livre para o mesmo. **
** Ex. "F4=Sair","ESC=Voltar","F2=Gravar" etc. **
**Frame99Repeat - Indica se a telatem caracteristica de repeticao. O Valor YES indica **
** que ha repeticao e o valor NO indica que nao ha repeticao. **
**Update99Fields - Relaciona os campos que serao solicitados na tela. **
** OBS. Nao deve conter formatacao. Ex. ttWork.cod-item no-label. **
**TriggerBeforeFrame99 - Gatilho para ser executado antes da execucao da tela. Neste gatilho **
** devem ser colocadas chamadas as procedures de inicializacao dos campos **
** da tela. **
**TriggerAfterFrame99 - Gatilho para ser executado apos a execucao da tela. Neste gatilho **
** dever ser colocada a chamada a procedures que devera armazenar na **
** temp-table {&TempTable} os campos da ttWork, que sao os campos **
** solicitados em tela. Neste gatilho tambem, quando o mesmo se referir a **
** ultima tela de entrada de dados, devera existir uma chamada a procedure **
** que executa a procedure _GenerateDCTransaction que e´ responsavel por **
** gerar a transacao no Coleta de Dados. **
**UserTriggers - Este pro-processador destina-se as triggers customizadas do usuario. **
** Ex: Alimentar um campo da dela conforme o informado em outro campo. **
** On Leave of ttWork.cod-depos in Frame Frame02 **
** Do: **
** Case ttWork.cod-depos: **
** When 'Pro' Then Assign ttWork.cod-local = 'Pro01'. **
** When 'Alm' Then Assign ttWork.cod-local ='Alm01'. **
** When 'Exp' Then Assign ttWork.cod-local = 'Exp01'. **
** End. **
***************************************************************************************************/
Define New Global Shared Var lMenu As Logical No-undo.
/* Definicao global do nome da transacao --- */
&global-define ProgramName bc9001
/************************************************************/
/* Definicao da temp-table de integracao --- */
&global-define TempTable tt-transfere-bc
{bcp/bc9001.i ""}
Define Temp-table ttWork No-Undo Like {&TempTable}.
Create ttWork.
/************************************************************/
/* Propriedades globais para frames--- */
&global-define FrameSize 20 By 8
/************************************************************/
/***************************************** Frames Inicio******************************************/
/* Definicao da Frame01--- */
&global-defineFrame01Name Frame01
&global-define Frame01Defs 'Transf Materiais 1/2' At Row 01 Col 01 ~
' Estab:' At Row 02 Col 01 ~
ttWork.cod-estabel At Row 02 Col 09 No-Label ~
' Docto:' At Row 03 Col 01 ~
ttWork.num-documento At Row 03 Col 09 No-Label ~
'Ref Des:' At Row 04 Col 01 ~
ttWork.cod-refer-destino At Row 04 Col 09 No-label ~
'Dep Des:' At Row 05 Col 01 ~
ttWork.cod-depos-destino At Row 05 Col 09 No-Label ~
'Loc Des:' At Row 06 Col 01 ~
ttWork.cod-local-destino At Row 06 Col 09 No-Label ~
'Lot Des:' At Row 07 Col 01 ~
ttWork.cod-lote-destino At Row 07 Col 09 No-label
&global-define Frame01Repeat No
/************************************************************/
/* Definicao da Frame02 --- */
&global-define Frame02Name Frame02
&global-define Frame02Defs 'Transf Meteriais 2/2' At Row 01 Col 01 ~
'Codigo do Item:' At Row 02 Col 01 ~
ttWork.cod-item At Row 03 Col 01 No-label ~
'Ref Ori:' At Row 04 Col 01 ~
ttWork.cod-refer-origem At Row 04 Col 09 No-label ~
'Dep Ori:' At Row 05 Col 01 ~
ttWork.cod-depos-origem At Row 05 Col 09 No-label ~
'Loc Ori:' At Row 06 Col 01 ~
ttWork.cod-local-origem At Row 06 Col 09 No-label ~
'Lot Ori:' At Row 07 Col 01 ~
ttWork.cod-lote-origem At Row 07 Col 09 No-Label ~
'Quant:' At Row 08 Col 01 ~
ttWork.qtd-movimento At Row 08 Col 08 No-label
&global-defineFrame02Repeat Yes
/************************************************************/
/* Definicao dos campos a serem recebidos--- */
&global-defineUpdate01Fields ttWork.cod-estabel ~
ttWork.num-documento ~
ttWork.cod-refer-destino ~
ttWork.cod-depos-destino ~
ttWork.cod-local-destino ~
ttWork.cod-lote-destino
&global-defineUpdate02Fields ttWork.cod-item ~
ttWork.cod-refer-origem ~
ttWork.cod-depos-origem ~
ttWork.cod-local-origem~
ttWork.cod-lote-origem ~
ttWork.qtd-movimento
/************************************************************/
/* Definicao das trigger de interacao com a tela--- */
&global-defineTriggerBeforeFrame01 Run InicializaCamposFrame01.
&global-defineTriggerBeforeFrame02 Run InicializaCamposFrame02.
&global-defineTriggerAfterFrame01 Run GravaCamposFrame01.
&global-defineTriggerAfterFrame02 Run GravaCamposFrame02. ~
Run GravaTransacao.
/************************************************************/
/* Definicao das triggerde usuario--- */
&global-defineUserTriggers On Leave of ttWork.cod-item in Frame Frame02 ~
Do: ~
Define Variable vCodUnico As Integer Format'9999999999999999' No-undo. ~
Define Variable vCodUnicoChar As Character No-undo. ~
~
Assign vCodUnico = Int(ttWork.cod-item:Screen-value in Frame Frame02) No-error.~
~
Assign vCodUnicoChar = String(vCodUnico,'9999999999999999'). ~
~
Find first bc-ext-saldo-estoq no-lock ~
where bc-ext-saldo-estoq.cod-unico = vCodUnicoChar No-error. >~
If avail bc-ext-saldo-estoq Then Do: ~
Assign ttWork.cod-item :Screen-valuein Frame Frame02 = bc-ext-saldo-estoq.it-codigo ~
ttWork.cod-depos-origem:Screen-value in Frame Frame02 =bc-ext-saldo-estoq.cod-depos ~
ttWork.cod-local-origem:Screen-value in Frame Frame02 =bc-ext-saldo-estoq.cod-localiz ~
ttWork.cod-lote-origem :Screen-value in Frame Frame02 = bc-ext-saldo-estoq.lote.~
End. ~
End ~
.
/************************************************************/
/***************************************** Frames Fim ******************************************/
/**************************************************************************************************
** SECAO DO CODIGO PRINCIPAL DO PROGRAMA **
** Esta secao contem includes com codigos de execucao das interfaces. . **
** Nao e´ necessario efetuar alteracoes nesta sessao. **
***************************************************************************************************/
{bcp/bc9100.i} /* Gerador da interface caracter do coleta de dados */
{bcp/bc9101.i} /* Gerador de transação do coleta de dados */
/**************************************************************************************************/
/************************************* Codigo do Usuario Inicio************************************
** Este local é destinado ao codigo do usuario. **
** Para efeitos de escalabilidade entre versoes de produto recomenda-se que o acesso as tabelas **
** do ERP seja feita atraves de um proxy, caso contrario poderao haver retrabalhos na migracao **
****************************************************************************************************/
/***************************************************************************************************
** Esta procedure esta inicializando o campo estabelecimento da tela Frame01 com o valor 1 **
** Os outros campos nao estao sendo inicializados pois os mesmos devem apresentar valor **
** caso seja retornado a proxima tela para esta. **
** Esta procedure e´ executada pelo pre-processador {&TriggerBeforeFrame01}. **
****************************************************************************************************/
Procedure InicializaCamposFrame01:
Assign
ttWork.num-documento = ''
ttWork.cod-estabel = '1'
ttWork.cod-refer-destino = ''
ttWork.cod-depos-destino = ''
ttWork.cod-local-destino = ''
ttWork.cod-lote-destino = ''
.
End Procedure.
/***************************************************************************************************
** Esta procedure esta inicializando os campos da tela Frame02 comvalores em branco **
** Esta procedure e´ executada pelo pre-processador {&TriggerBeforeFrame02}. **
****************************************************************************************************/
Procedure InicializaCamposFrame02:
Assign
ttWork.cod-item = ''
ttWork.cod-refer-origem = ''
ttWork.cod-depos-origem = ''
ttWork.cod-local-origem = ''
ttWork.cod-lote-origem = ''
ttWork.qtd-movimento = 0
.
End Procedure.
/***************************************************************************************************
** Esta procedure esta armazenando na temp-table {&Temp-Table} osvalores recebidos por ttWork **
** na tela Frame01. **
** Esta procedure e´ executada pelo pre-processador{&TriggerAfterFrame01}. **
****************************************************************************************************/
Procedure GravaCamposFrame01:
/* Validacoes Frame 01 Inicio --- */
Assign vLogErro = No.
>If ttWork.cod-estabel = '' Then do:
Assign vLogErro = Yes.
{bcp/bc9105.i "0""Codigo do Estabelecimento deve ser informado"}
>End.
If ttWork.num-documento = '' Then do:
Assign vLogErro = Yes.
{bcp/bc9105.i "0""Numero do Documento deve ser informado"}
End.
If ttWork.cod-depos-destino = '' Then do:
Assign vLogErro = Yes.
{bcp/bc9105.i "0" "Codigo do deposito de destino deve ser informado"}
End.
If vLogErro = Yes Then Return Error.
/* Validacoes Frame 01 Fim ---*/
Assign {&TempTable}.cod-estabel = input Frame Frame01 ttWork.cod-estabel
{&TempTable}.num-documento = input Frame Frame01 ttWork.num-documento
{&TempTable}.cod-refer-destino= input Frame Frame01 ttWork.cod-refer-destino
{&TempTable}.cod-depos-destino = input Frame Frame01 ttWork.cod-depos-destino
{&TempTable}.cod-local-destino = input Frame Frame01 ttWork.cod-local-destino
{&TempTable}.cod-lote-destino = input Frame Frame01 ttWork.cod-lote-destino
.
End Procedure.
/***************************************************************************************************
** Esta procedure esta armazenando na temp-table {&Temp-Table} os valores recebidos por ttWork **
** na tela Frame02. **
** Esta procedure e´ executada pelo pre-processador{&TriggerAfterFrame02}. **
****************************************************************************************************/
Procedure GravaCamposFrame02:
/* Validacoes Frame 02 Inicio --- */
Assign vLogErro = No.
If ttWork.cod-item = '' Then do:
Assign vLogErro = Yes.
{bcp/bc9105.i "0""Codigo do Item deve ser informado"}
End.
If ttWork.cod-depos-origem = '' Then do:
Assign vLogErro = Yes.
{bcp/bc9105.i "0""Codigo do deposito deve ser informado"}
End.
If ttWork.qtd-movimento = 0 Then do:
Assign vLogErro = Yes.
{bcp/bc9105.i "0""Quantidade deve ser informada"}
End.
If vLogErro = Yes Then Return Error.
/* Validacoes Frame 02 Fim ---*/
Assign {&TempTable}.cod-item =input Frame Frame02 tt Work.cod-item
{&TempTable}.cod-refer-origem = input Frame Frame02 tt Work.cod-refer-origem
{&TempTable}.cod-depos-origem =input Frame Frame02 tt Work.cod-depos-origem
{&TempTable}.cod-local-origem = input Frame Frame02 tt Work.cod-local-origem
{&TempTable}.cod-lote-origem = input Frame Frame02tt Work.cod-lote-origem
{&TempTable}.qtd-movimento = input Frame Frame02 ttWork. qtd-movimento
.
End Procedure.
/***************************************************************************************************
** Esta procedure esta gerando a transacao no Data Collection atraves dachamada a procedure **
** _GenerateDCTransaction. **
** Esta procedure e´ executada pelo pre-processador{&TriggerAfterFrame02}. **
****************************************************************************************************/
Procedure GravaTransacao:
Def VarvNomeUsuario As Character No-undo.
Assign vTransDetail = vTransaction +
" Doc:" +String({&TempTable}.num-documento) +
" Item:" +Trim({&TempTable}.cod-item) +
" Ref: " +Trim({&TempTable}.cod-refer-destino) +
" Depos: " + Trim({&TempTable}.cod-depos-destino) +
" Local: " + Trim({&TempTable}.cod-local-destino) +
" Lote: " +Trim({&TempTable}.cod-lote-destino) +
" Qt: " +String({&TempTable}.qtd-movimento).
Run_RetornaUsuario (Output vNomeUsuario).
Assign {&TempTable}.data-transacao = Today
{&TempTable}.cod-usuario = vNomeUsuario.
Raw-transfer{&TempTable} To vConteudoRaw.
Run_GenerateDCTransaction (Input vTransaction, /* Codigo daTransacao */
Input vConteudoRaw, /* Conteudo da temp-table {&TempTable} */
Input vTransDetail, /* Cabecalho de detalhes da transacao */
Input vNomeUsuario). /* Usuario responsavel pela transacao */
End Procedure.
/************************************* Codigo do UsuarioFim **********************************/
Anexo 4 – Código Fonte Importação Texto com Lay-out
/********************************************************************************
** Copyright DATASUL S.A.(1997)
** Todos os Direitos Reservados.
**
** Este fonte e de propriedade exclusiva da DATASUL, sua reproducao
** parcial ou total por qualquer meio, so podera ser feita mediante
** autorizacao expressa.
*******************************************************************************/
/********************************************************************************************
** Programa..:bc9001b.p **
** **
** Versao....: 2.00.00.000 - Set/2000 - LucianoLeonhardt **
** **
** Objetivo..: Template DC Importacao para Transferencia de Materiais **
** **
** Includes..: bc9109.i, bc9110.i, bc9111.i, bc9102.i,bcapi001.i, bcapi010.i, bc9001.i **
** **
********************************************************************************************/
/***************************************************************************************************
** SECAO DE PRE-PROCESSADORES DA TEMPLATE **
** Nesta secao sao definidos os pre-processadores que serao usados na montagem da interface. **
** **
** DESCRICAO DOS PREPROCESSADORES: **
**ProgramName - Nome do programa e, tambem, do Codigo da transacao do Data Collection **
** que sera acionada pela interface. **
**TempTable - Nome da Temp-Table da transacao de negocio para comunicacao com ERP. **
** Ex: tt-transfere-bc. **
** TriggerBeforeTransfer - Gatilho para ser executado antes da transferencia dos dados do **
** parametro pTransacao para a temp-table{&TempTable}. **
** Apos a execucao deste gatilho automaticamente sera executada a **
** a procedure TranfereDados. **
** TriggerAfterTransfer - Gatilho para ser executado apos a transferencia dos dados do parametro **
** pTransacao para a temp-table {&TempTable}. Apos a execucao deste **
** gatilho automaticamente sera executada a procedure GravaTransacao. Na **
** procedure GravaTransacao deve existir uma chamada a procedure **
** _GenerateDCTransaction que e´ responsavel por gerar a transacao no **
** Coleta de Dados. **
***************************************************************************************************/
/* Definicao global do nome da transacao--- */
&global-define ProgramName bc9001
/************************************************************/
/* Definicao da temp-table de integracao--- */
&global-define TempTable tt-transfere-bc
{bcp/bc9001.i " "}
/************************************************************/
/* Definicao da temp-table tt-trans--- */
{bcp/bcapi001.i}
/************************************************************/
/* Definicao da temp-table tt-bc-tipo-trans--- */
{bcp/bcapi010.i}
/************************************************************/
/* Definicao da temp-table tt-erro--- */
{bcp/bc9102.i}
/************************************************************/
/* Definicao das trigger de interacao com a tela--- */
&global-defineTriggerBeforeTransfer
&global-define TriggerAfterTransferRun ValidaCamposTempTable. ~
Run GravaTransacao.
/* Definicao de parametros--- */
Define Input Parameter pColetor As Rowid No-undo.
Define Input Parameter pTransacao As Character No-Undo.
Define Output Parameter Table For tt-erro{&Ext}.
/************************************************************/
/**************************************************************************************************
** SECAO DO CODIGO PRINCIPAL DO PROGRAMA **
** Esta secao contem includes com codigos de execucao das interfaces. . **
** Nao e´ necessario efetuar alteracoes nesta sessao. **
***************************************************************************************************/
{bcp/bc9109.i} /* Transferencia dos dados do parametro pTransacao para a temp-table {&TempTable} */
{bcp/bc9110.i} /* Gerador de transação do coleta de dados */
/**************************************************************************************************/
/************************************* Codigo do Usuario Inicio ************************************
** Este local é destinado ao codigo do usuario. **
** Para efeitos de escalabilidade entre versoes de produto recomenda-se que o acesso as tabelas **
** do ERP seja feita atraves de um proxy, caso contrario poderao haver retrabalhos na migracao **
****************************************************************************************************/
/***************************************************************************************************
** Esta procedure transfere os dados do parametro pTransacao para os respectivos campos da **
** temp-table{&TempTable}. Vale ressaltar que o parametro pTransacao utiliza como delimitador **
** esta definido nos Parametrosa do Módulo. **
** Esta procedure e´ executada automaticamente apos o gatilho {&TriggerBeforeTransfer}. **
****************************************************************************************************/
Procedure TransfereDados:
Assign {&TempTable}.cod-estabel = String(Entry(2, pTransacao, cDelimitador))
{&TempTable}.num-documento = String(Entry(3, pTransacao, cDelimitador))
{&TempTable}.cod-serie-documento = String(Entry(4, pTransacao, cDelimitador))
{&TempTable}.num-especie-documento = Integer(Entry(5, pTransacao, cDelimitador))
{&TempTable}.data-transacao = Date(Entry(6, pTransacao, cDelimitador))
{&TempTable}.cod-item = String(Entry(7, pTransacao, cDelimitador))
{&TempTable}.cod-unico = String(Entry(8, pTransacao, cDelimitador))
{&TempTable}.cod-refer-origem = String(Entry(9, pTransacao, cDelimitador))
{&TempTable}.cod-refer-destino = String(Entry(10, pTransacao, cDelimitador))
{&TempTable}.cod-depos-origem = String(Entry(11, pTransacao, cDelimitador))
{&TempTable}.cod-depos-destino = String(Entry(12, pTransacao, cDelimitador))
{&TempTable}.cod-local-origem = String(Entry(13, pTransacao, cDelimitador))
{&TempTable}.cod-local-destino = String(Entry(14, pTransacao, cDelimitador))
{&TempTable}.cod-lote-origem = String(Entry(15, pTransacao, cDelimitador))
{&TempTable}.cod-lote-destino = String(Entry(16, pTransacao, cDelimitador))
{&TempTable}.dat-valid-lote-origem = Date(Entry(17, pTransacao, cDelimitador))
{&TempTable}.dat-valid-lote-destino = Date(Entry(18, pTransacao, cDelimitador))
{&TempTable}.cod-usuario = String(Entry(19, pTransacao, cDelimitador))
{&TempTable}.qtd-movimento = Decimal(Entry(20, pTransacao, cDelimitador))
{&TempTable}.ct-codigo = String(Entry(21, pTransacao, cDelimitador))
{&TempTable}.sc-codigo = String(Entry(22, pTransacao, cDelimitador))
{&TempTable}.num-sequencia = Integer(Entry(23, pTransacao, cDelimitador))
{&TempTable}.un = String(Entry(24, pTransacao, cDelimitador))
{&TempTable}.cod-livre-1 = String(Entry(25, pTransacao, cDelimitador))
{&TempTable}.cod-livre-2 = String(Entry(26, pTransacao, cDelimitador))
{&TempTable}.cod-livre-3 = String(Entry(27, pTransacao, cDelimitador))
{&TempTable}.num-livre-1 = Integer(Entry(28, pTransacao, cDelimitador))
{&TempTable}.num-livre-2 = Integer(Entry(29, pTransacao, cDelimitador))
{&TempTable}.num-livre-3 = Integer(Entry(30, pTransacao, cDelimitador))
{&TempTable}.dec-livre-1 = Decimal(Entry(31, pTransacao, cDelimitador))
{&TempTable}.dec-livre-2 = Decimal(Entry(32, pTransacao, cDelimitador))
{&TempTable}.dec-livre-3 = Decimal(Entry(33, pTransacao, cDelimitador))
{&TempTable}.log-livre-1 = ( If Entry(34, pTransacao, cDelimitador) = "Sim"
or Entry(34, pTransacao, cDelimitador) = "Yes"
or Entry(34, pTransacao, cDelimitador) = "Si"
Then Yes Else No)
{&TempTable}.log-livre-1 = ( If Entry(35, pTransacao, cDelimitador) = "Sim"
or Entry(35, pTransacao, cDelimitador) = "Yes"
or Entry(35, pTransacao, cDelimitador) = "Si"
Then Yes Else No)
{&TempTable}.log-livre-1 = ( If Entry(36, pTransacao, cDelimitador) = "Sim"
or Entry(36, pTransacao, cDelimitador) = "Yes"
or Entry(36, pTransacao, cDelimitador) = "Si"
Then Yes Else No)
{&TempTable}.dat-livre-1 = Date(Entry(37, pTransacao, cDelimitador))
{&TempTable}.dat-livre-2 = Date(Entry(38, pTransacao, cDelimitador))
{&TempTable}.dat-livre-3 = Date(Entry(39, pTransacao, cDelimitador))
no-error.
End Procedure.
/***************************************************************************************************
** Esta procedure valida os dados armazenados na temp-table{&TempTable}, ja que os dados do **
** parametro pTransacao ja´ foram transferidos para a temp-table. 0 ; **
** Esta procedure e´ executada pelo pre-processador{&TriggerAfterTransfer}. **
****************************************************************************************************/
Procedure ValidaCamposTempTable:
/* Validacoes Inicio --- */
Assign vLogErro = No.
If {&TempTable}.cod-estabel = '' Thendo:
Assign vLogErro = Yes.
{bcp/bc9111.i"0" "Codigo do Estabelecimento deve ser informado"}
End.
If {&TempTable}.num-documento = '' Then do:
Assign vLogErro = Yes.
{bcp/bc9111.i "0" "Numerodo Documento deve ser informado"}
End.
If {&TempTable}.cod-depos-origem = '' Then do:
Assign vLogErro = Yes.
{bcp/bc9111.i "0""Codigo do deposito deve ser informado"}
End.
If {&TempTable}.cod-depos-destino = '' Then do:
Assign vLogErro = Yes.
{bcp/bc9111.i "0""Codigo do deposito de destino deve ser informado"}
End.
If {&TempTable}.cod-item = '' Then do:
Assign vLogErro = Yes.
{bcp/bc9111.i "0""Codigo do Item deve ser informado"}
End.
If {&TempTable}.qtd-movimento = 0 Then do:
Assign vLogErro = Yes.
{bcp/bc9111.i "0""Quantidade deve ser informada"}
End.
If vLogErro = Yes Then Return Error.
/* Validacoes Fim --- */
End Procedure.
/***************************************************************************************************
** Esta procedure esta gerando a transacao no Data Collection atraves dachamada a procedure **
**_GenerateDCTransaction. **
** Esta procedure e´ automaticamente apos a execucao do gatilho{&TriggerAfterTransfer}. **
****************************************************************************************************/
Procedure GravaTransacao:
Def Var vTransDetail As Character No-undo.
Def var vConteudoRaw As Raw No-undo.
Assign vTransDetail = vTransaction +
" Doc:" + String({&TempTable}.num-documento) +
"Item: " + Trim({&TempTable}.cod-item) +
" Ref: " + Trim({&TempTable}.cod-refer-origem) +
" Depos: " + Trim({&TempTable}.cod-depos-destino) +
" Local: " + Trim({&TempTable}.cod-local-destino) +
" Lote: " + Trim({&TempTable}.cod-lote-destino) +
" Qt: " + String({&TempTable}.qtd-movimento).
If Avail Param-bc
And Not Param-bc.Pto-Decimal /* YES-A qtd vem com Ponto Decimal e NO-Não */
Then
Assign {&TempTable}.qtd-movimento = {&TempTable}.qtd-movimento /10000.
Raw-transfer {&TempTable} To vConteudoRaw.
Run_GenerateDCTransaction (Input vTransaction, /* Codigo da Transacao */
Input vConteudoRaw, /*Conteudo da temp-table {&TempTable} */
Input vTransDetail, /* Cabecalho de detalhes da transacao */
Input vNomeUsuario). /* Usuario responsavel pela transacao */
End Procedure.
/************************************* Codigo do Usuario Fim **********************************/
Anexo 5 – Código Fonte Manutenção de Transação
/********************************************************************************
** Copyright DATASUL S.A(1997)
** Todos os Direitos Reservados.
**
** Este fonte e de propriedade exclusiva da DATASUL, sua reproducao
** parcial ou total por qualquer meio, so podera ser feita mediante
** autorizacao expressa.
*******************************************************************************/
/********************************************************************************************
** Programa..:bc9001a.p **
** **
** Versao....: 2.00.00.000 - Set/2000 - LucianoLeonhardt **
** **
** Objetivo..: Teste para o programa de Transferencia de Materiais (bcp/bc9001.p) **
** **
** Includes..:bcp/bc9106.i **
** **
********************************************************************************************/
/******************** Frame Fields Preprocessor Definitions Beg ***************/
&GLOBAL-DEFINE FrameFields tt-transfere-bc.cod-estabel ~
tt-transfere-bc.num-documento~
tt-transfere-bc.cod-serie-documento ~
tt-transfere-bc.num-especie-documento ~
tt-transfere-bc.data-transacao ~
tt-transfere-bc.cod-item~
tt-transfere-bc.cod-unico ~
tt-transfere-bc.cod-refer-origem ~
tt-transfere-bc.cod-refer-destino ~
tt-transfere-bc.cod-depos-origem ~
tt-transfere-bc.cod-depos-destino ~
tt-transfere-bc.cod-local-origem ~
tt-transfere-bc.cod-local-destino ~
tt-transfere-bc.cod-lote-origem ~
tt-transfere-bc.cod-lote-destino ~
tt-transfere-bc.dat-valid-lote-origem ~
tt-transfere-bc.dat-valid-lote-destino ~
tt-transfere-bc.cod-usuario ~
tt-transfere-bc.qtd-movimento ~
tt-transfere-bc.ct-codigo ~
tt-transfere-bc.sc-codigo ~
tt-transfere-bc.num-sequencia ~
tt-transfere-bc.un ~
tt-transfere-bc.cod-livre-1 ~
tt-transfere-bc.cod-livre-2 ~
tt-transfere-bc.cod-livre-3 ~
tt-transfere-bc.num-livre-1 ~
tt-transfere-bc.num-livre-2 ~
tt-transfere-bc.num-livre-3 ~
tt-transfere-bc.dec-livre-1 ~
tt-transfere-bc.dec-livre-2 ~
tt-transfere-bc.dec-livre-3 ~
tt-transfere-bc.log-livre-1~
tt-transfere-bc.log-livre-2 ~
tt-transfere-bc.log-livre-3
/******************** Frame Fields Preprocessor Definitions End ***************/
/***************** Name of TT Include Preprocessor Definitions Beg ************/
&GLOBAL-DEFINE NameOfTTInclude bcp/bc9001.i
/***************** Name of TT Include Preprocessor Definitions End ************/
/******************* Program Title Preprocessor Definitions Beg ***************/
&GLOBAL-DEFINE ProgramTitle Transferencia - bc9001a.p 2.00.00.000
/******************* Program Title Preprocessor Definitions End ***************/
/************** Frame Number of Columns Preprocessor Definitions Beg **********/
&GLOBAL-DEFINE FrameNumOfColumns 2
/************** Frame Number of Columns Preprocessor Definitions End **********/
/***************** Geracao Etiquetas Preprocessor DefinitionsBeg *************/
&GLOBAL-DEFINE TransactionProgram bc9001
/***************** Geracao Etiquetas Preprocessor Definitions End *************/
/********************** Table Preprocessor Definitions Beg ********************/
&GLOBAL-DEFINE Tablett-transfere-bc
/********************** Table Preprocessor Definitions End ********************/
/********************** Table Preprocessor Definitions Beg ********************/
&GLOBAL-DEFINE TransDetail vCodTransaction + ~
" Doc: " + String({&Table}.num-documento) + ~
" Item: " + Trim( {&Table}.cod-item) + ~
" Ref: " + Trim( {&Table}.cod-refer-origem) + ~
" Depos: " + Trim( {&Table}.cod-depos-destino) + ~
" Local: " + Trim( {&Table}.cod-local-destino) + ~
" Lote: " + Trim( {&Table}.cod-lote-destino) + ~
" Qt: " + String({&Table}.qtd-movimento)
/********************** Table Preprocessor Definitions End ********************/
/************** FieldsCustom Display Preprocessor Definitions Beg ************/
&GLOBAL-DEFINE CustomDisplayField01 tt-transfere-bc.data-transacao
&GLOBAL-DEFINE CustomValueField01 String(today,'99/99/9999')
/************** Fields Custom Display Preprocessor Definitions End ************/
/************** Fields Custom Formats Preprocessor Definitions Beg ************/
/************** Fields Custom Formats Preprocessor Definitions End ************/
{bcp/bc9106.i}
Anexo 6 – Código Fonte Pré-API de Efetivação
/********************************************************************************
** Copyright DATASUL S.A.(1997)
** Todos os Direitos Reservados.
**
** Este fonte e de propriedade exclusiva da DATASUL, sua reproducao
** parcial ou total por qualquer meio, so podera ser feita mediante
** autorizacao expressa.
*******************************************************************************/
/**********************************************************************************
** Programa...: bc9001c.p
**
** Finalidade.: Pre-api de transferencia entre depositos
**
** Criado em..: Setembro/2000
**
** Versao.....: 2.00.00.000 Luciano Leonhardt
**********************************************************************************/
{bcp/bc9001.i} /* Definição da temp-table de transferencia do coleta de dados */
{bcp/bc9102.i} /* Definicao da temp-table de erros do coleta de dados */
{bcp/bc9107.i} /* Campos de comunicacao com o adapter */
/*********************************************************************************/
/*********************************************************************************/
Define Input Parameter pNumTrans as integer No-undo.
Define Input Parameter pRawConteudo as raw No-undo.
Define Input-Output Parameter Table For tt-erro.
/*********************************************************************************/
/*********************************************************************************/
Define Variable vNumProduto As Integer No-undo.
Define Variable vAdapterProgram AsCharacter No-undo.
/*********************************************************************************/
/*********************************************************************************/
Do:
Find Last Param-BC No-lock No-error.
If Not AvailAble Param-BC Then Return 'NOK'.
Assign vNumProduto = Param-BC.int-2.
Case vNumProduto:
When 1 Then
Assign vAdapterProgram = 'bcp/bc9001d.p'.
When 2 Then
Assign vAdapterProgram = 'bcp/bc9001e.p'.
End./* Case */
Creatett-transfere-bc.
Raw-Transfer pRawConteudo to tt-transfere-bc.
AddField('cod-estabel ',String(tt-transfere-bc. cod-estabel ), 'Character ').
_AddField('num-documento ',String(tt-transfere-bc. num-documento ), 'Character ').
_AddField('cod-serie-documento ',String(tt-transfere-bc.cod-serie-documento ), 'Character ').
_AddField('num-especie-documento ', String(tt-transfere-bc.num-especie-documento ), 'Integer ').
_AddField('data-transacao ',String(tt-transfere-bc.data-transacao ), 'Date ').
_AddField('cod-item ', String(tt-transfere-bc.cod-item ), 'Character ').
_AddField('cod-unico ', String(tt-transfere-bc.cod-unico ), 'Character ').
_AddField('cod-refer-origem ',String(tt-transfere-bc.cod-refer-origem ), 'Character ')
_AddField('cod-refer-destino ',String(tt-transfere-bc.cod-refer-destino ), 'Character ').
_AddField('cod-depos-origem ',String(tt-transfere-bc.cod-depos-origem ), 'Character ').
_AddField('cod-depos-destino ',String(tt-transfere-bc.cod-depos-destino ), 'Character ').
_AddField('cod-local-origem ',String(tt-transfere-bc.cod-local-origem ), 'Character ').
_AddField('cod-local-destino ',String(tt-transfere-bc.cod-local-destino ), 'Character ').
_AddField('cod-lote-origem ',String(tt-transfere-bc.cod-lote-origem ), 'Character ').
_AddField('cod-lote-destino ',String(tt-transfere-bc.cod-lote-destino ), 'Character ').
_AddField('dat-valid-lote-origem ',String(tt-transfere-bc.dat-valid-lote-origem ), 'Date ').
_AddField('dat-valid-lote-destino ',String(tt-transfere-bc.dat-valid-lote-destino ), 'Date ').
_AddField('cod-usuario ', String(tt-transfere-bc.cod-usuario ), 'Character ').
_AddField('qtd-movimento ', String(tt-transfere-bc.qtd-movimento ), 'Decimal ').
_AddField('ct-codigo ', String(tt-transfere-bc.ct-codigo ), 'Character ').
_AddField('sc-codigo ', String(tt-transfere-bc.sc-codigo ), 'Character ').
_AddField('num-sequencia ', String(tt-transfere-bc.num-sequencia ), 'Integer ').
_AddField('un ',String(tt-transfere-bc.un ), 'Character ').
_AddField('cod-livre-1 ', String(tt-transfere-bc.cod-livre-1 ), 'Character ').
_AddField('cod-livre-2 ', String(tt-transfere-bc.cod-livre-2 ), 'Character ').
_AddField('cod-livre-3 ', String(tt-transfere-bc.cod-livre-3 ), 'Character ').
_AddField('num-livre-1 ', String(tt-transfere-bc.num-livre-1 ), 'Integer ').
_AddField('num-livre-2 ', String(tt-transfere-bc.num-livre-2 ), 'Integer ').
_AddField('num-livre-3 ',String(tt-transfere-bc.num-livre-3 ), 'Integer ').
_AddField('dec-livre-1 ',String(tt-transfere-bc.dec-livre-1 ), 'Decimal ').
_AddField('dec-livre-2 ',String(tt-transfere-bc.dec-livre-2 ), 'Decimal ').
_AddField('dec-livre-3 ',String(tt-transfere-bc.dec-livre-3 ), 'Decimal ').
_AddField('log-livre-1 ',String(tt-transfere-bc.log-livre-1 ), 'Logical ').
_AddField('log-livre-2 ', String(tt-transfere-bc.log-livre-2 ), 'Logical ').
_AddField('log-livre-3 ', String(tt-transfere-bc.log-livre-3 ), 'Logical ').
_AddField('dat-livre-1 ',String(tt-transfere-bc.dat-livre-1 ), 'Date ').
_AddField('dat-livre-2 ', String(tt-transfere-bc.dat-livre-2 ), 'Date ').
_AddField('dat-livre-3 ',String(tt-transfere-bc.dat-livre-3 ), 'Date ').
Run Value(vAdapterProgram) (Input pNumTrans,
Input Table ttIntegracao,
Input-Output Table tt-erro).
End. /* Do Main */
/***********************************************************************************************************/