Perguntas Frequentes / Anveo EDI Connect / Como adicionar uma condição IF ao seu mapeamento
Esta é uma tradução automática. O post original está disponível em Inglês .

Como adicionar uma condição IF ao seu mapeamento

Se você tem algumas habilidades em qualquer linguagem de programação, você certamente saberá a instrução IF-THEN-ELSE: se um campo de tabela ou uma variável tem um valor específico X, então faça isso, se não fizer outra coisa. É possível reproduzir este comportamento num mapeamento, existem várias formas de o fazer e neste artigo queremos explicá-las.

No primeiro caso, vamos supor que o usuário deseja exportar uma fatura de venda lançada. Existe um cabeçalho de fatura de vendas e várias linhas de fatura. As linhas da fatura contêm alguns itens e alguns comentários acima e entre as linhas. Sem entrar profundamente em sua estrutura de mapeamento, tenho certeza de que você tem uma linha de loop para o cabeçalho da fatura de vendas e algumas linhas de mapeamento de dados abaixo da linha, seguido por uma linha de loop para suas linhas de vendas e suas linhas de mapeamento:

Cabeçalho
da fatura de vendas ³ Documento
EDI ³ Documento EDI ³ Linha de mapeamento de dados do cabeçalho da fatura
³ Linha de mapeamento de dados do cabeçalho da fatura 2
³ Linha de mapeamento de dados do cabeçalho da fatura …
– Linha de fatura de vendas
— Linha de mapeamento de dados da linha de fatura 1
— e assim por diante ….
Os hífenes devem indicar o nível de indentação do mapeamento.

A questão é: como você separa as linhas do item das linhas com os comentários? É perigoso assumir que a ordem do item e das linhas de comentário é sempre a mesma, por isso é necessária uma solução que seja independente da ordem.

A solução é adicionar duas novas linhas de loop com indentação abaixo da linha de fatura de vendas. No cenário representado acima, todas as linhas de comentário têm o tipo “vazio”, todas as outras linhas têm um certo tipo, o que torna as linhas distinguíveis. A primeira linha de circuito nova é um circuito sobre a tabela da linha de fatura de vendas, com o mesmo link de item de dados e filtros que o seu primeiro circuito, mas você adiciona um novo filtro: Tipo=CONST(‘ ‘ ‘). É possível ler isso como “Se o tipo de linha da fatura de vendas estiver vazio” – a primeira parte do extrato IF!
Agora para a parte “THEN”: todas as linhas de mapeamento que estão recuadas abaixo desta nova linha formam a parte “THEN” e você pode colocar os comentários na tabela “EDI Additional Information”, por exemplo, com todos os links e filtros de itens de dados necessários.

E quanto a todas as outras linhas com seus itens (e contas contábeis e recursos)? Bem, independente de suas regras gerais de exportação que se aplicam ao seu mapeamento, essas linhas têm um tipo que é diferente de vazio. Isso significa que você pode adicionar uma segunda nova linha ao seu mapeamento, abaixo da linha IF, com o mesmo link de item de dados e filtros que seu primeiro loop, mas agora você adiciona o filtro no tipo assim: Tipo=Filtro(0). Você pode lê-lo como “se o tipo de linha da fatura de vendas for qualquer coisa ELSE além de vazio” – sua parte ELSE do extrato. Neste caso, você provavelmente deseja criar algumas Linhas de documento EDI que contenham as informações dos itens (e recursos e contas do Razão), de modo que você refira a linha de mapeamento da Linha de documento EDI abaixo desta outra linha e adicione as linhas de mapeamento de dados apropriadamente.

Se quiser ver mais de perto este exemplo, pode utilizar o modelo para exportar facturas de venda a partir do assistente: crie um novo mapeamento NAV em branco com código e código de projecto e, em seguida, execute o assistente a partir da fita “Acção” em “Executar Criar e actualizar assistente” e seleccione a primeira opção:


Em vez de inserir a segunda linha da fatura de vendas, também é possível uma linha de tipo condicional. Vamos dar um passo atrás para a linha de loop “Linha de Factura de Vendas”: ela passa por todas as linhas de facturação, ou seja cada linha de fatura é passada para o mapeamento uma após a outra. Se for uma linha de comentário, a informação será escrita na tabela EDI Informação Adicional – o que significa que há um registro no filtro.

Com a linha de tipo condicional, você pode tirar vantagem do fato de que se você tem uma linha de não-comentário, o filtro mencionado acima não encontra um registro. A linha condicional pode verificar este caso, com a função “ISEMPTY”. O nome é literalmente, se não houver registro no filtro da linha de Comentário da Nota Fiscal de Vendas, todas as linhas de mapeamento recuadas abaixo da linha condicional serão executadas. Aqui, as Linhas de Documentos EDI serão escritas. As propriedades completas da linha de mapeamento se parecem mais ou menos com isto:

Se você importou o modelo para um novo mapeamento, pode alterar a linha de mapeamento chamada “ELSE” para essa linha condicional.

Outra maneira de criar um condicional é usar uma tradução de valores. Por exemplo, é necessário exportar os códigos de unidade de medida dos itens para uma mensagem do tipo EDIFACT. É muito provável que os códigos no seu sistema NAV não correspondam aos que são esperados em EDIFACT, então você precisa traduzi-los: se o código é “PALLET”, escreva “PAL” para a tabela de buffer. Se for “PIECE”, escreva “PCE”. Se “HORA”, escreva “HORA”. E assim por diante.

É possível utilizar a filtragem descrita acima e adicionar uma linha de vendas (transporte provavelmente neste caso) abaixo da linha original para cada código de unidade de medida e escrever o código correspondente na Linha de documento EDI, mas é muito mais fácil utilizar uma conversão de valor. A cada código de unidade de medida de “origem” atribuído um código de medida de “destino”, esse código de destino é gravado no campo de destino na linha de mapeamento. Para configurar uma tradução de valores, consulte o artigo da base de conhecimentos [insert link=”” here]=””]