Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Previsão de Horas para Customizações em ERP TOTVS

_Créditos da imagem: Gerada com auxílio do ChatGPT_ --- # **Previsão de Horas para Customizações em ERP TOTVS: Uma Abordagem Baseada em Fatores de Complexidade** No universo de customizações para o ERP da TOTVS, uma das etapas mais desafiadoras é a estimativa precisa do esforço necessário para o desenvolvimento. Muitas vezes, projetos aparentemente simples podem se tornar complexos devido a fatores como dificuldade de acesso ao ambiente ou falta de conhecimento da regra de negócio. Por isso, criamos uma metodologia de cálculo baseada em fatores de ajuste para tornar as estimativas mais precisas e confiáveis. ## **Por que uma boa estimativa é essencial?** Um orçamento mal calculado pode impactar diretamente o cronograma, os custos e até a qualidade da entrega. No caso de projetos relacionados ao ERP TOTVS, onde cada customização está ligada a regras de negócios específicas e a um ambiente muitas vezes complexo, subestimar ou superestimar o tempo necessário pode gerar problemas sign

BlackTDN :: ADVPL ~ dbChangeAlias

#include "tbiconn.ch"
#include "protheus.ch"
/*
Programa : U_CT1CTASup.prw
Funcao : U_CT1CTASup
Autor : Marinaldo de Jesus [http://www.blacktdn.com.br]
Data : 11/07/2012
Uso : Obter o valores para os campos CT1_CTASUP e CT1_DC
*/
User Function CT1CTASup( lRPC , cEmp , cFil , cModulo )

DEFAULT lRPC := MyIsBlind()

IF ( lRPC )

DEFAULT cEmp := "99"
DEFAULT cFil := "01"
DEFAULT cModulo := "CTB"

RPCSetType(3)
#IFDEF TOP
SetTopType("A")
#ENDIF
PREPARE ENVIRONMENT EMPRESA ( cEmp ) FILIAL ( cFil ) MODULO ( cModulo )
SetsDefault()
SetModulo("SIGACTB","CTB")
EndIF

Processa( { || CT1CTASup() } , "Atualizando Conta Superior e Digito" , "Aguarde" )

IF ( lRPC )
RESET ENVIRONMENT
EndIF

ApMsgAlert( "Atualização Conta Superior e Digito Finalizada" )

Return( NIL )

/*
Programa : U_CT1CTASup.prw
Funcao : CT1CTASup
Autor : Marinaldo de Jesus [http://www.blacktdn.com.br]
Data : 11/07/2012
Uso : Obter o valores para os campos CT1_CTASUP e CT1_DC
*/
Static Procedure CT1CTASup()

Local cCTA
Local cDgC
Local cSup

Local cCT1Alias := GetNextAlias()

ChkFile("CT1")

dbChangeAlias("CT1",cCT1Alias)

ChkFile("CT1")

(cCT1Alias)->( dbGoTop() )

ProcRegua(0)

While (cCT1Alias)->( !Eof() )
IncProc()
cCTA := (cCT1Alias)->CT1_CONTA
cSup := CTBCTASup(cCTA)
IF (cCT1Alias)->( RecLock( cCT1Alias , .F. ) )
(cCT1Alias)->CT1_CTASUP := cSup
(cCT1Alias)->( MsUnLock() )
EndIF
cDgC := CTBDigCont(cCTA)
IF (cCT1Alias)->( RecLock( cCT1Alias , .F. ) )
(cCT1Alias)->CT1_DC := cDgC
(cCT1Alias)->( MsUnLock() )
EndIF
(cCT1Alias)->( dbSkip() )
End While

(cCT1Alias)->( dbCloseArea() )
CT1->( dbCloseArea() )

Return

/*
Programa : U_CT1CTASup.prw
Funcao : MyIsBlind
Autor : Marinaldo de Jesus [http://www.blacktdn.com.br]
Data : 11/07/2012
Uso : Verificar Blind
*/
Static Function MyIsBlind()
Local oWnd := GetWndDefault()
Return( IsBlind() .and. ( oWnd == NIL ) .and. ( Select("SM0") == 0 ) )

Comentários

  1. Naldo,
    dbChangeAlias() funcionaria como a CHKFILE()?

    Ver: http://tdn.totvs.com/pages/viewpage.action?pageId=6814713

    abs,

    ResponderExcluir
    Respostas
    1. Não! dbChangeAlias(cAlias,cNewAlias), função da API, altera o "apelido" da tabela enquanto que ChkFile() (Obtenha os parâmetros formais com GetFuncPrm("ChkFile")), função em ADVPL, abre uma tabela e atribui-lhe um apelido usando dbUseArea(). Um uso para dbChangeAlias(), como no exemplo, é ter a mesma tabela em memória, com Aliases diferentes de forma a não ser necessário salvar e restaurar o "ponteiro" da tabela no caso de se executar uma função do RPO que o desposicione. No exemplo alteramos o Apelido(Alias) da tabela CT1 para um apelido válido retornado pela GetNextAlias() e abrimos uma "nova instância" da mesma tabela usando ChkFile() (poderia ser dbUseArea()) ou simplesmente referenciando o alias CT1 (que seria aberta pela rotina de tratamento de erro uma vez que o Alias CT1, após dbChangeAlias(), não existir mais). No exemplo, A Função CTBCTASup necessita usar o Alias CT1 para encontrar a Conta Superior e, para evitar salvar e restaurar o "ponteiro do registro e índice da CT1) atribuimo-lhe um novo Apelido. Neste caso teremos 2x a mesma tabela em memória mas com Aliases diferentes (podendo navegar de forma independente entre os seus registros).

      Excluir
  2. Naldo,

    será que é possível manipular a mesma tabela com alias diferente com o objeto FWmBrowse()?? (setAlias)
    (

    estou utilizando a FWmBrowse() e estou tendo problemas.
    abro uma tabela com a FWmBrowse e em seguida a mesma tabela é aberta com FWmBrowse so q com filtros diferentes.
    ae quando tento manilupar os dados da conflito entre os dois FWmBrowse.

    grato pela ajuda!

    ResponderExcluir

Postar um comentário

Postagens mais visitadas