1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

erro: Registro de históricos de setores não esta' disponível

Discussão em 'Progress 4GL' iniciado por syclone, Abril 19, 2009.

  1. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Caros colegas,

    Vou tentar ser mais detalhista neste assunto, porém quando surgem dúvidas, estas nem sempre serão possíveis de ser solucionadas caso não sejam passado-nos todos os detalhes possíveis, por exemplo:

    01) Usando o FIND ou FIND FIRST, quando não tem nenhum registro, será retornado o mesmo erro "** Registro histórico dos setores não esta' disponível. (91)", pois não foi encontrado nenhum registro. Olhem o código abaixo, repliquei criando uma tabela temporária e não apresenta o erro.

    Código:
    
    DEF VAR v_empresa       AS CHARACTER        NO-UNDO.
    DEF VAR v_estab         AS CHARACTER        NO-UNDO.
    DEF VAR v_funcionario   AS CHARACTER        NO-UNDO.
    DEF VAR v_setor         AS CHARACTER        NO-UNDO.
    DEF VAR v_data_term     AS DATE             NO-UNDO.
    
    DEF TEMP-TABLE cft_histor_setor
        FIELD cdn_empresa      LIKE v_empresa    
        FIELD cdn_estab        LIKE v_estab      
        FIELD cdn_funcionario  LIKE v_funcionario
        FIELD cod_setor        LIKE v_setor
        FIELD dat_inic_histor  LIKE v_data_term
        FIELD dat_term_histor  LIKE v_data_term.
    
    ASSIGN v_empresa        = "1"
           v_estab          = "1"
           v_funcionario    = "100"
           v_setor          = "ALM".
    
    FIND cft_histor_setor EXCLUSIVE-LOCK 
        WHERE cft_histor_setor.cdn_empresa      = v_empresa 
          AND cft_histor_setor.cdn_estab        = v_estab 
          AND cft_histor_setor.cdn_funcionario  = v_funcionario 
          AND cft_histor_setor.cod_setor        = v_setor NO-ERROR.
    
    IF AVAIL cft_histor_setor THEN
        IF cft_histor_setor.dat_inic_histor < v_data_term AND
           cft_histor_setor.dat_term_histor > v_data_term THEN DO:
            MESSAGE "Data final dentro de um período já cadastrado." VIEW-AS ALERT-BOX INFO BUTTONS OK.
            LEAVE.
        END.
    
    
    02) Quando solicitei o DF da tabela "cft_histor_setor" era extamente para verificar se a tabela foi criada corretamente, pois existem TRIGGERS de tabelas e VALIDAÇÕES de campos que podem não estar corretos, vamos supor que na validação do campo funcionário esteja definido para verificar se já existe um outro registro com este código, onde está sendo utilizado o FIND FIRST sem o NO-ERROR, ou exista uma TRIGGER DE DICIONÁRIO da tabela (WRITE ou CREATE) que esteja validando se já existe o registro, onde usa-se o FIND sem informar o NO-ERROR. Neste caso será apresentado a mensagem de erro, não no FIND da rotina, mas no CREATE e ASSIGN dos campos.

    Por isso, solicitei 2 vezes o DF, para verificar se existe alguma TRIGGER ou VALIDAÇÃO e então, estaria solicitando esté codigo para veriricar o que está errado.

    Syclone, sabemos que está apredendo e posso garantir para você que estaremos sempre aqui para ajudar no que for possível, mas para isto precisamos de sua colaboração em informar-nos todos os detalhes. Somente assim podemos ajudá-lo, as dicas colocadas acima vão te ajudar e muito, mas como você mesmo disse, está aplicando o que aprendeu até o momento, a lógica da rotina então, pelo que já aprendeu está certo, talvez o problema esteja na tabela. Envie-me o DF da tabela referenciada para analisar e assim tirar sua dúvida. Meu e-mail: leite1969@yahoo.com.br
  2. atila.cm

    atila.cm Membro Participativo

    Caro Cyclone:

    Corroboro a solicitação das DF's feita pelo Leite, quando lhe enviei mensagem pedindo para verificar a tabela, isto já faz alguns dias atrás, é por que executei o programa que você postou, criando as tabelas como temporárias, e o programa funcionou corretamente.

    Para fazer o dump das tabelas sega os passos abaixo relacionados:
    01 - no menu-bar <TOOLS> selecione DATA ADMINISTRATION
    02 - na tela do DATA ADMINISTRATION, no menu-bar <ADMIN> selecione DUMP DATA AND DEFINITIONS e
    DATA DEFINITIONS (.DF FILES)
    03 - na tela SELECT TABLES selecione as tabelas cft_histor_setor, cft_empresa, cft_estabelecimento e cft_funcionario
    04 - após selecionar as tabelas clique em OK
    05 - na tela DUMP DATA DEFINITIONS FOR SAME TABLES em OUTPUT FILE informe c:\tabelas.df e em seguida clique em OK

    Em C: será criado o arquivo TABELAS.DF que você deverá postar para que possamos verificar se existe alguma TRIGGER ou VALIDATE.
    Como o Leite falou, para que possamos te ajudar, necessitamos da tua ajuda.

    Abraços

    Atila.cm@hotmail.com
  3. syclone

    syclone Sem Pontuação

    df das tabelas:

    Código:
    ADD TABLE "cft_empresa"
      AREA "Schema Area"
      LABEL "Empresa"
      DESCRIPTION "Cont‚m as informa‡oes b sicas das empresas"
      DUMP-NAME "cft_empr"
    
    ADD FIELD "Cdn_empresa" OF "cft_empresa" AS integer 
      FORMAT "999"
      INITIAL "0"
      LABEL "Empresa"
      POSITION 2
      SQL-WIDTH 4
      COLUMN-LABEL "Emp"
      HELP "Informar o c¢digo da empresa"
      ORDER 10
      MANDATORY
    
    ADD FIELD "Des_empresa" OF "cft_empresa" AS character 
      FORMAT "X(40)"
      INITIAL ""
      LABEL "Descri‡Æo"
      POSITION 3
      SQL-WIDTH 80
      COLUMN-LABEL "Descri‡Æo"
      HELP "Informar a descri‡Æo da empresa"
      ORDER 20
      MANDATORY
    
    ADD INDEX "id_empresa" ON "cft_empresa" 
      AREA "Schema Area"
      UNIQUE
      PRIMARY
      INDEX-FIELD "Cdn_empresa" ASCENDING 
    
    ADD TABLE "cft_estabelecimento"
      AREA "Schema Area"
      LABEL "Estabelecimento"
      DESCRIPTION "Cont‚m as informa‡oes b sicas dos estabelecimentos"
      DUMP-NAME "cft_esta"
    
    ADD FIELD "Cdn_empresa" OF "cft_estabelecimento" AS integer 
      FORMAT "999"
      INITIAL "0"
      LABEL "Empresa"
      POSITION 2
      SQL-WIDTH 4
      COLUMN-LABEL "Emp"
      HELP "Informar o c¢digo da empresa"
      ORDER 10
      MANDATORY
    
    ADD FIELD "Cdn_estab" OF "cft_estabelecimento" AS integer 
      FORMAT "999"
      INITIAL "0"
      LABEL "Estabelecimento"
      POSITION 3
      SQL-WIDTH 4
      COLUMN-LABEL "Estab"
      HELP "Informar o c¢digo do estabelecimento"
      ORDER 20
      MANDATORY
    
    ADD FIELD "Des_estab" OF "cft_estabelecimento" AS character 
      FORMAT "X(40)"
      INITIAL ""
      LABEL "Descri‡Æo"
      POSITION 4
      SQL-WIDTH 80
      COLUMN-LABEL "Descri‡Æo"
      HELP "Informar a descri‡Æo do estabelecimento"
      ORDER 30
      MANDATORY
    
    ADD INDEX "id_estabelecimento" ON "cft_estabelecimento" 
      AREA "Schema Area"
      UNIQUE
      PRIMARY
      INDEX-FIELD "Cdn_empresa" ASCENDING 
      INDEX-FIELD "Cdn_estab" ASCENDING 
    
    ADD TABLE "cft_funcionario"
      AREA "Schema Area"
      LABEL "Funcion rio"
      DESCRIPTION "Cont‚m as informa‡äes dos funcion rios"
      DUMP-NAME "cft_func"
    
    ADD FIELD "Cdn_empresa" OF "cft_funcionario" AS integer 
      FORMAT "999"
      INITIAL "0"
      LABEL "Empresa"
      POSITION 2
      SQL-WIDTH 4
      COLUMN-LABEL "Emp"
      HELP "Informar o c¢digo da empesa"
      ORDER 10
      MANDATORY
    
    ADD FIELD "Cdn_estab" OF "cft_funcionario" AS integer 
      FORMAT "999"
      INITIAL "0"
      LABEL "Estabelecimento"
      POSITION 3
      SQL-WIDTH 4
      COLUMN-LABEL "Estab"
      HELP "Informar o c¢digo do estabelecimento"
      ORDER 20
      MANDATORY
    
    ADD FIELD "Cdn_funcionario" OF "cft_funcionario" AS integer 
      FORMAT "99999999"
      INITIAL "0"
      LABEL "Funcion rio"
      POSITION 4
      SQL-WIDTH 4
      COLUMN-LABEL "Func"
      HELP "Informar o c¢digo do funcion rio"
      ORDER 30
      MANDATORY
    
    ADD FIELD "Des_funcionario" OF "cft_funcionario" AS character 
      FORMAT "X(40)"
      INITIAL ""
      LABEL "Nome"
      POSITION 5
      SQL-WIDTH 80
      COLUMN-LABEL "Nome"
      HELP "Informar o nome do funcion rio"
      ORDER 40
      MANDATORY
    
    ADD FIELD "Cod_setor" OF "cft_funcionario" AS character 
      FORMAT "X(08)"
      INITIAL ""
      LABEL "Setor"
      POSITION 6
      SQL-WIDTH 16
      COLUMN-LABEL "Setor"
      HELP "Informar o c¢digo do setor"
      ORDER 50
      MANDATORY
    
    ADD FIELD "Cdn_cargo" OF "cft_funcionario" AS integer 
      FORMAT "99999"
      INITIAL "0"
      LABEL "Cargo"
      POSITION 7
      SQL-WIDTH 4
      COLUMN-LABEL "Cargo"
      HELP "Informar o c¢digo do cargo"
      ORDER 60
      MANDATORY
    
    ADD FIELD "Dat_admis" OF "cft_funcionario" AS date 
      FORMAT "99/99/99"
      INITIAL ?
      LABEL "AdmissÆo"
      POSITION 8
      SQL-WIDTH 4
      COLUMN-LABEL "Admis"
      HELP "Informar a data de admissÆo"
      ORDER 70
    
    ADD FIELD "Dat_nasc" OF "cft_funcionario" AS date 
      FORMAT "99/99/99"
      INITIAL ?
      LABEL "Nascimento"
      POSITION 9
      SQL-WIDTH 4
      COLUMN-LABEL "Nasc"
      HELP "Informar a data de nascimento"
      ORDER 80
      MANDATORY
    
    ADD FIELD "Val_sal_func" OF "cft_funcionario" AS decimal 
      FORMAT "zz,zzz.99"
      INITIAL "0"
      LABEL "Sal rio"
      POSITION 10
      SQL-WIDTH 17
      COLUMN-LABEL "Sal rio"
      HELP "Informar o sal rio do funcion rio"
      DECIMALS 2
      ORDER 90
      MANDATORY
    
    ADD INDEX "id_funcionario" ON "cft_funcionario" 
      AREA "Schema Area"
      UNIQUE
      PRIMARY
      INDEX-FIELD "Cdn_empresa" ASCENDING 
      INDEX-FIELD "Cdn_estab" ASCENDING 
      INDEX-FIELD "Cdn_funcionario" ASCENDING 
    
    ADD TABLE "cft_histor_setor"
      AREA "Schema Area"
      LABEL "Hist¢ricos dos setores"
      DESCRIPTION "Cont‚m as informa‡äes dos hist¢ricos dos setores dos funcion rios"
      DUMP-NAME "cft_hst"
    
    ADD FIELD "Cdn_empresa" OF "cft_histor_setor" AS integer 
      FORMAT "999"
      INITIAL "0"
      LABEL "Empresa"
      POSITION 2
      SQL-WIDTH 4
      COLUMN-LABEL "Emp"
      HELP "Informar o c¢digo da empresa"
      ORDER 10
      MANDATORY
    
    ADD FIELD "Cdn_estab" OF "cft_histor_setor" AS integer 
      FORMAT "999"
      INITIAL "0"
      LABEL "Estabelecimento"
      POSITION 3
      SQL-WIDTH 4
      COLUMN-LABEL "Estab"
      HELP "Informar o c¢digo do estabelecimento"
      ORDER 20
      MANDATORY
    
    ADD FIELD "Cdn_funcionario" OF "cft_histor_setor" AS integer 
      FORMAT "99999999"
      INITIAL "0"
      LABEL "Funcion rio"
      POSITION 4
      SQL-WIDTH 4
      COLUMN-LABEL "Func"
      HELP "Informar o c¢digo do funcion rio"
      ORDER 30
      MANDATORY
    
    ADD FIELD "Cod_setor" OF "cft_histor_setor" AS character 
      FORMAT "X(08)"
      INITIAL ""
      LABEL "Setor"
      POSITION 5
      SQL-WIDTH 16
      COLUMN-LABEL "Setor"
      HELP "Informar o c¢digo do setor"
      ORDER 40
      MANDATORY
    
    ADD FIELD "Dat_inic_histor" OF "cft_histor_setor" AS date 
      FORMAT "99/99/99"
      INITIAL "Today"
      LABEL "Inicio Hist¢rico"
      POSITION 6
      SQL-WIDTH 4
      COLUMN-LABEL "Inicio"
      HELP "Informar a data de inicio do hist¢rico"
      ORDER 50
      MANDATORY
    
    ADD FIELD "Dat_term_histor" OF "cft_histor_setor" AS date 
      FORMAT "99/99/99"
      INITIAL "Today"
      LABEL "Final Hist¢rico"
      POSITION 7
      SQL-WIDTH 4
      COLUMN-LABEL "Final"
      HELP "Informar a data final do hist¢rico."
      ORDER 60
      MANDATORY
    
    ADD INDEX "id_histor_setor" ON "cft_histor_setor" 
      AREA "Schema Area"
      UNIQUE
      PRIMARY
      INDEX-FIELD "Cdn_empresa" ASCENDING 
      INDEX-FIELD "Cdn_estab" ASCENDING 
      INDEX-FIELD "Cdn_funcionario" ASCENDING 
      INDEX-FIELD "Cod_setor" ASCENDING 
      INDEX-FIELD "Dat_inic_histor" ASCENDING 
      INDEX-FIELD "Dat_term_histor" ASCENDING 
    
    .
    PSC
    cpstream=ibm850
    .
    0000006266
    
    Desculpa a demora.. como disse.. estou iniciando.. e fiquei com receio de perguntar o que era DF :)

    Mas acho que agora está tudo certo.. eu coloquei FIND FIRST nas validações.. e agora fiz um teste:

    Apaguei todos os registros da tabela e rodei o programa denovo pra inserir o primeiro registro.. e funcou.
    Mas se vvcs tiverem algum comentário a acrescentar.. muito obrigado desde já.
    Com certeza, quando estiver com dúvida, estarei aqui :]
    EStou no 1º mês de curso.. estou aprendendo bastante.
  4. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Meu amigo, não tenha receio, principlamente por que vc está iniciando, de perguntar, estamos aqui para ajudar...

    Vou dar uma olha e te retorno...
  5. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    É meu amigo,

    Importei o DF para uma base local, executei com Progress 10.1 com Service-Pack aplicado e copiei seu código para um sessão do progress.

    Processou sem erro.

    A rotina está Ok, o DF, se foi feito corretamente, está Ok, e não deu erro aqui... o problema pode estar com a versão do progress aí (BUG).

    Muito estranho...
  6. syclone

    syclone Sem Pontuação

    Problema resolvido.. muito obrigado pela atencao de todos.. obrigado mesmo!!!

    Podem bloquear o topico!

Compartilhe esta Página