[RESOLVIDO] Compilação de programa

Discussão em 'EMS , HCM e Totvs 11' iniciado por noellen, Novembro 19, 2010.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. noellen

    noellen Equipe de Suporte Moderador Equipe de Suporte

    Olá galera, mais uma dúvida, eu sei que é boba, mas realmente não está dando certo :oops: .

    De que outras formas é possível fazer a compilação de um programa? Sem ser pelo AppBuilder --> Tools --> Application Compiler?


    Está ocorrendo o seguinte, a usuária responsável pelo DP não quer que saia informações sobre o Relatópio ponte no PE5000 - Emissão Cartão Ponto. Eu sei que não é bom modificar os fontes, mas precisamos nesse caso, até por uma questão de economia na impressão dos espelhos. Mas mesmo tendo certeza que os fontes estão nos diretórios corretos, e que não há nenhuma modificação no código, depois de compilar os fontes originais da Totvs e rodar, da a mensagem 3230 - "Mismatched parameter types passed to procedure <procedure>. (3230). You tried to pass parameters to a procedure but the datatypes do not match. For example: RUN subr.p ( 123 ). where subr.p looks like: DEFINE INPUT PARAMETER parm1 AS CHARACTER. This example is trying to pass an integer parameter but the sub procedure expects a character parameter. All parameter types must match. " Ou seja, os parâmetros estão errados, tentando passar uma informação incompatível. Mas com o mesmo fonte compilado pela Totvs, usando só o .r, funciona perfeitamente.

    Estive fazendo algumas tentativas usando o Compile, mas não deram muito certo. Vcs tem alguma sugestão? Ou então um exemplo mais claro da sintaxe do comando?


    desde já, obrigada.


    Att Noellen.
    rohis curtiu isso.
  2. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Oi Noellen,

    Conforme nosso contato via GTalk, como havia te prometido que de segunda-feira você não passaria sem ter solucionado seu problema, aqui vai a solução, estou respondendo no forum, pois assim poderá servir de ajuda caso alguem passe por está situação:

    01) O erro que apresenta em tempo de execução "Mismatched parameter types passed to procedure pi_histor_sal_func prghur/pep/pe5001rp.p. (3230)":

    Na rotina PE5001RP.P tem uma chamada da procedure "pi_histor_sal_func" que passa os parâmetros abaixo:
    Código:
    run pi_histor_sal_func (input func_ptoelet.cdn_estab,
                               input func_ptoelet.cdn_funcionario,
                               input tt-param.idi_tip_cargo_funcao /*hist½rico de Cargo/Fun‡Æo*/ ,
                               output v_cdn_cargo_basic,
                               output v_cdn_niv_cargo,
                               output v_val_sal_mes,
                               output v_val_sal_hor,
                               output v_val_sal_cat,
                               output v_cdn_tab_sal,
                               output v_num_fx_sal,
                               output v_num_niv_sal,
                               output v_cdn_cargo_basic_funcao,
                               output v_cdn_niv_cargo_funcao,
                               output v_val_sal_mes_funcao,
                               output v_val_sal_hor_funcao,
                               output v_val_sal_cat_funcao,
                               output v_cdn_tab_sal_funcao,
                               output v_num_fx_sal_funcao,
                               output v_num_niv_sal_funcao).
    
    A procedure "pi_histor_sal_func" está definida na include FP9400.I que encontra-se no diretório "PRGHUR/FPP", o que identifiquei é que a include que encontra-se na sua base está com a definição dos parâmetros na versão antiga, quando você compila uma rotina (transformando em extensão "r", todas as includes são escritas no arquivo) é possível visualizar de certa forma as definições e ao visualizar o arquivo compilado que você me enviou encontrei a seguinte linha. O erro não ocorre na compilação, somente em tempo de execução:

    Código:
    PROCEDURE pi_histor_sal_func,,INPUT v_cdn_estab INTEGER,INPUT v_cdn_func INTEGER,OUTPUT v_cdn_cargo_basic INTEGER,OUTPUT v_cdn_niv_cargo INTEGER,OUTPUT v_val_salario DECIMAL,OUTPUT v_val_sal_hor DECIMAL PROCEDURE pi_func_unid_lotac,,
    
    Ao verificar o arquivo compilado pela TOTVS já encontramos a seguinte linha:

    Código:
    PROCEDURE pi_histor_sal_func,,INPUT v_cdn_estab INTEGER,INPUT v_cdn_func INTEGER,INPUT v_idi_tip_cargo_funcao INTEGER,OUTPUT v_cdn_cargo_basic INTEGER,OUTPUT v_cdn_niv_cargo INTEGER,OUTPUT v_val_sal_mes DECIMAL,OUTPUT v_val_sal_hor DECIMAL,OUTPUT v_val_sal_cat DECIMAL,OUTPUT v_cdn_tab_sal INTEGER,OUTPUT v_num_fx_sal INTEGER,OUTPUT v_num_niv_sal INTEGER,OUTPUT v_cdn_cargo_basic_funcao INTEGER,OUTPUT v_cdn_niv_cargo_funcao INTEGER,OUTPUT v_val_sal_mes_funcao DECIMAL,OUTPUT v_val_sal_hor_funcao DECIMAL,OUTPUT v_val_sal_cat_funcao DECIMAL,OUTPUT v_cdn_tab_sal_funcao INTEGER,OUTPUT v_num_fx_sal_funcao INTEGER,OUTPUT v_num_niv_sal_funcao INTEGER PROCEDURE pi_func_unid_lotac,,
    
    Você pode verificar que existe muito mais informação que o primeiro, colocando em linhas temos:

    Rotina Compilada pelos fontes disponível, a definição da procedure no FP9400.I está assim:
    Código:
    INPUT  v_cdn_estab              INTEGER,
    INPUT  v_cdn_func               INTEGER,
    OUTPUT v_cdn_cargo_basic        INTEGER,
    OUTPUT v_cdn_niv_cargo          INTEGER,
    OUTPUT v_val_salario            DECIMAL,
    OUTPUT v_val_sal_hor            DECIMAL 
    
    Rotina Compilada pela TOTVS, a definição da procedure no FP9400.I está assim:
    Código:
    INPUT  v_cdn_estab              INTEGER,
    INPUT  v_cdn_func               INTEGER,
    INPUT  v_idi_tip_cargo_funcao   INTEGER,
    OUTPUT v_cdn_cargo_basic        INTEGER,
    OUTPUT v_cdn_niv_cargo          INTEGER,
    OUTPUT v_val_sal_mes            DECIMAL,
    OUTPUT v_val_sal_hor            DECIMAL,
    OUTPUT v_val_sal_cat            DECIMAL,
    OUTPUT v_cdn_tab_sal            INTEGER,
    OUTPUT v_num_fx_sal             INTEGER,
    OUTPUT v_num_niv_sal            INTEGER,
    OUTPUT v_cdn_cargo_basic_funcao INTEGER,
    OUTPUT v_cdn_niv_cargo_funcao   INTEGER,
    OUTPUT v_val_sal_mes_funcao     DECIMAL,
    OUTPUT v_val_sal_hor_funcao     DECIMAL,
    OUTPUT v_val_sal_cat_funcao     DECIMAL,
    OUTPUT v_cdn_tab_sal_funcao     INTEGER,
    OUTPUT v_num_fx_sal_funcao      INTEGER,
    OUTPUT v_num_niv_sal_funcao     INTEGER 
    
    Conclusão:

    Sempre que for compilar um fonte liberado pela Datasul, é preciso que seja verificado também todas as includes que estão no fonte, neste exemplo mesmo temos várias includes que devem estar atualizadas em sua base para que funcione, são estas:

    Código:
    Lista de Includes:     
         . prghur\fpp\fp9200*.*
         . prghur\fpp\fp9300*.*
         . prghur\fpp\fp9400*.*
         . prghur\pep\pe9994.i
         . prghur\pep\pe9995.i
    
    Verifique se na sua estrutura de diretórios especificos e padrão Totvs existem estas includes, se existir na estrutura de diretórios padrão Totvs e em especificos, delete da estrutura de especificos que irá passar a pegar do padrão (que deverá estar atualizado) e funcionárá.

    Se não existir na estrutura de diretórios Padrão e existir na estrutura de diretórios específicos, então baixe da suporte Totvs os arquivos zipados destas includes e atualize na estrutura de diretórios padrão (como trata-se de includes criptografadas, não precisa estar em especifico, podendo ser colocada na padrão mesmo, isto somente para includes criptografadas, assim caso a Totvs envie em pacote alguma atualizada, não terá problemas com includes desatualizadas no especifico).

    Após baixar as includes, atualizar as includes na sua estrutura de diretórios, verifique pelo SEARCH do Propath onde está buscando a include "prghur\fpp\fp9400.i", se estiver pegando a que você baixou então está tudo ok, compile as rotinas novamente e faça o teste.

    Acredito que você poderá "correr para o abraço" e gritar "goooolllll" :).

    Aqui, não esqueça, para funcionar corretamente as rotinas do PE5000 você tem que atualizar todas as includes que listei acima. No próprio site da TOTVS você consegue baixar pelo menu de Fontes Liberados.

    Espero ter ajudado...
    rohis curtiu isso.
  3. muertebr

    muertebr Membro Participativo

    pode ser compilado diretamente pelo editor.

    Segue exemplo.
    Código:
    Compile upc\upc-teste.p SAVE.
    
    rohis curtiu isso.
  4. noellen

    noellen Equipe de Suporte Moderador Equipe de Suporte

    Olá pessoal,

    Eduardo, muito obrigada pela ajuda, é exatamente o que vc falou, não imaginava que era algo tão simples. Sinceramente, como pedi os códigos através de FO, imaginei que me enviaram td o que seria necessário, mas não, e ninguém soube me passar essa informação. Valeu mesmo!!! :D

    Muertbr, obrigada tbm pela dica ;)


    Att.
    rohis curtiu isso.
  5. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    É simples para quem já tem alguns anos de trabalho, para quem está começando é um pouco complicado entender tudo isso.

    Estamos aqui para o que sempre precisar e o que estiver ao nosso alcance.

    Disponham sempre...
    rohis curtiu isso.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página