[RESOLVIDO] Rotina Trocar Empresa Datasul 12

Discussão em 'EMS , HCM e Totvs 11' iniciado por alexandretm, Março 14, 2017.

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

    alexandretm Membro Participativo

    Srs(a) Preciso Ajuda, estou desenvolvendo um Menu Especifico, que precisa trocar empresa, alguém já fez menu em progress, e já resolveu problema trocar empresa.
  2. alexandretm

    alexandretm Membro Participativo

    estou tentando usar seguinte comando pego aqui no fórum
    RUN btb/btb962ad("") , ate abre programa para alterar empresa, porem da erro quando confirmo. Erro: Entrada 1 esta fora da faixa da Lista.
  3. edney

    edney Membro Participativo

    O que voce precisa fazer especificamente? Eu tenho 2 customizações:

    1 - Eu personalizei a troca de empresa e coloquei o estabelecimento para o usuário escolher junto.
    2 - Em um programa sem interface, quando o registro aponta para outra empresa ,eu troco as conexões, mas esse programa não interage com o usuario, fica rodando stand-alone em uma maquina.
  4. alexandretm

    alexandretm Membro Participativo

  5. alexandretm

    alexandretm Membro Participativo

    Edney , seria possível colocar aqui seus programas como exemplo pra mim, meu caso, e que estou desenvolvendo um menu para totvs 12 especifico, para facilitar acesso dos usuários, pois na versão Datasul 11 o menu ficou muito complicados para alguns usuários da empresa, e estou criando do inicio e já me deparei com este problema de troca de empresa.
  6. edney

    edney Membro Participativo

    Entendi... bom, acho que os meus exemplos que mais vão servir para voce são o do procedimento stand-alone.

    Eu conecto todos os bancos quando o usuário conecta (no meu caso é um usuário só), com um alias diferente do normal, ai quando troco a empresa, um procedmento troca o alias para o alias oficial da sessão.

    Lembrando que eu tenho uma tabela de bancos especifica, mas nada impede de voce usar a tabela de bancos atual

    Código:
    /**********************************************************************/
    /* Disconecto todos os bancos com nome logico igual aos novos aliases */
    /**********************************************************************/
    
    RUN ProcessaLog (INPUT "Desconectando bancos com nomes iguais dos futuros aliases...").
    
    FOR EACH tt-conexao NO-LOCK:
    
        IF CONNECTED(tt-conexao.nm-log-conexao) THEN
        DO:
    
            RUN ProcessaLog (INPUT "Desconectando " + tt-conexao.nm-log-conexao + "...").
    
            DISCONNECT VALUE(tt-conexao.nm-log-conexao).
    
            IF CONNECTED(tt-conexao.nm-log-conexao) THEN
            DO:
    
                RUN ProcessaLog (INPUT "Não foi possivel desconectar o banco " + tt-conexao.nm-log-conexao + ".").
    
                RETURN "NOK":U.
    
            END. /* IF CONNECTED(tt-conexao.nm-log-conexao) THEN */
            ELSE
            DO:
    
                RUN ProcessaLog (INPUT "Banco " + tt-conexao.nm-log-conexao + " desconectado com sucesso!").
    
            END.
    
        END. /* IF CONNECTED(tt-conexao.nm-log-conexao) THEN */
    
    END. /* FOR EACH tt-conexao NO-LOCK: */
    
    /****************************************/
    /* Conecto todos os bancos configurados */
    /****************************************/
    RUN ProcessaLog (INPUT "Conectando os bancos de dados...").
    
    FOR EACH tt-conexao NO-LOCK
        BY tt-conexao.ep-codigo:
       
        IF CONNECTED(tt-conexao.nm-log-empresa) THEN
        DO:
    
            RUN ProcessaLog (INPUT "Desconectando " + tt-conexao.nm-log-empresa + "...").
    
            DISCONNECT VALUE(tt-conexao.nm-log-empresa).
    
            IF CONNECTED(tt-conexao.nm-log-empresa) THEN
            DO:
    
                RUN ProcessaLog (INPUT "Não foi possivel desconectar o banco " + tt-conexao.nm-log-empresa + ".").
    
                RETURN "NOK":U.
    
            END. /* IF CONNECTED(tt-conexao.nm-log-conexao) THEN */
            ELSE
            DO:
    
                RUN ProcessaLog (INPUT "Banco " + tt-conexao.nm-log-empresa + " desconectado com sucesso!").
    
            END.
    
        END. /* IF CONNECTED(tt-conexao.nm-log-empresa) THEN */
    
        RUN ProcessaLog (INPUT "Conectando banco de dados (" + tt-conexao.nm-log-empresa + ") pela conexão : " + tt-conexao.conexao).
    
        CONNECT VALUE (tt-conexao.conexao).
    
        IF CONNECTED(tt-conexao.nm-log-empresa) THEN
        DO:
    
            RUN ProcessaLog (INPUT "Banco " + tt-conexao.nm-log-empresa + " conectado com sucesso!").
    
        END.
        ELSE
        DO:
    
            RUN ProcessaLog (INPUT "Não foi possivel conectar o banco " + tt-conexao.nm-log-empresa + ".").
    
            RETURN "NOK":U.
    
        END. /* IF CONNECTED(tt-conexao.nm-log-conexao) THEN */
    
    END. /* FOR EACH tt-conexao NO-LOCK: */
    
    Código:
    /* Quando chega um evento de empresa diferente, troco a conexão */
    
    FOR EACH tt-conexao NO-LOCK
        WHERE tt-conexao.ep-codigo = es-evento-eletro.ep-codigo:
    
        RUN TrocaConexao IN THIS-PROCEDURE (INPUT tt-conexao.nm-log-conexao,
                                            INPUT tt-conexao.nm-log-empresa,
                                            INPUT tt-conexao.aliases).
    
    END. /* FOR EACH tt-conexao NO-LOCK */
    
    Código:
    PROCEDURE TrocaConexao:
    
        DEFINE INPUT PARAMETER pc-nome-logico AS CHARACTER NO-UNDO.
        DEFINE INPUT PARAMETER pc-nome-banco AS CHARACTER NO-UNDO.
        DEFINE INPUT PARAMETER pc-aliases AS CHARACTER NO-UNDO.
    
        DEFINE VARIABLE i-cont AS INTEGER NO-UNDO.
    
        REPEAT i-cont = 1 TO NUM-ALIASES: 
       
            FIND FIRST es-evento-eletro-banco NO-LOCK
                WHERE es-evento-eletro-banco.nm-logico-empresa = LDBNAME(ALIAS(i-cont)) NO-ERROR.
    
            IF AVAIL(es-evento-eletro-banco) THEN
                DELETE ALIAS VALUE (ALIAS(i-cont)).
           
        END. /* REPEAT i-cont = 1 TO NUM-ALIASES */
    
        CREATE ALIAS VALUE (pc-nome-logico) FOR DATABASE VALUE(pc-nome-banco).
    
        REPEAT i-cont = 1 TO NUM-ENTRIES(pc-aliases,","):
    
            CREATE ALIAS VALUE (ENTRY (i-cont,pc-aliases,",")) FOR DATABASE VALUE(pc-nome-banco).
    
        END. /* REPEAT i-cont = 1 TO NUM-ENTRIES(pc-aliases,",") */
    
        RETURN "OK":U.
    
    END PROCEDURE. /* TrocaConexao */
    
    Marcia D Henrique curtiu isso.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página