Árvore de páginas

Carregando...
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 */

 

/***********************************************************************************************************/