Bom dia, Como faço para pegar o valor de uma variável que esta em uma include. Exemplo: for each tabela: assign total1 = 10. {pasta/spbo001.i} end. /*aqui quero executar o calculo*/ assign total = total1 - (a variavel que se encontra dentro da include). Tenho um relatório que executa vários cálculos de produção em 5 includes diferentes. Estou precisando somar um valor que se encontra no calculo da include 2 e o outro na 4. Obrigado!
Tem 2 jeitos de você fazer isso, vejamos: 1ª Opção) Você pode declarar a variável como global (lá no definitions), então assim ela estará disponível dentro do programa e dentro das includes. Para evitar muitas definições, você pode fazer como a datasul e criar includes de definições de variáveis e chamar no DEFINITIONS, exemplo: Dentro do Definitions Código: {minhasincludes\defininicoes.i} Na Include "definicoes.i", você coloca: Código: DEF VAR total1 AS DECIMAL. DEF VAR QualquerCoisa as CHAR. DEF VAR.... Assim dessa forma ao alterar a variável global, você poderá ver esse valor em qualquer lugar do programa. Pronto, ao atualizar essa include, é só compilar os programas que a utilizam e pronto. IMPORTANTE (EFEITOS COLATERAIS): - Quando você usa variável global, não pode mais definir essa variável dentro da include pois dará erro de compilação - Consequentemente ao tentar verificar o código da include (SHIFT+F2), dará erro, mas ao compilar funciona perfeitamente. 2ª Opção) Cria na include um parâmetro de Saída, Exemplo: Dentro da sua include: Código: DEF OUTPUT PARAMETER total1 AS DECIMAL. No programa que chama a variável, você define a variável antes da chamada da include com o mesmo nome (pra não complicar), aí na chamada você faz assim: Cria Uma procedure e coloca nela sua include, você pode criar essa procedure no MainBlock (como no código abaixo), ou simplesmente crie um procedure normal e coloque a chamada dentro: Código: PROCEDURE ProcedureMinhaInclude. {pasta/spbo001.i} END. Depois é só chamar da forma abaixo Código: DEF VAR total1 AS DECIMAL. RUN ProcedureMinhaInclude(OUTPUT total1) Pronto. Espero ter sido claro e ajudado. Att, Rafael