× Linguagem de Programação ADVPL

Perguntas Ordenar Chamados - chamus.prw

Mais
11 anos 1 mês atrás #17574 por parks
Bom dia a todos !

Essa é a primeira vez que posto no Forum. Sou iniciante em ADVPL e tenho como primeiro trabalho, criar uma função que ordene os chamados de acordo com uma posição que eu informar, por exemplo, o chamado 001234 quero que seja o primeiro da lista, então determino posição = 1, o chamado 001235 posição = 2 e assim sucessivamente, porem quero que ao indicar uma posição já existente ele reposicione os outros aumentando 1, ou seja, se eu adicionar um novo chamado e colocar na posição 2 - aquele da posição 2 atualmente será 3.

Chamo a função enviando (numero da posicao, numero opcao(incluir, alterar e etc))
Lembrando que antes de chamar a função, eu já verifico antes se existe um valor de posição igual.

User Function Ordena(nPosNova, nOp)

Local nPosNova
Local nOp
Private aRetorno := {}
Private cQuery := ""

//Verifico se a opção é incluir - no momento estou so preocupado com a inclusão
//Faço o select para pegar a posição igual e maior que o valor que passei
If nOp == 3
cQuery := " SELECT ZD_NUMCHAM, ZD_HIPPOS "
cQuery += " FROM " + RetSqlName("SZD") + " SZD "
cQuery += " WHERE ZD_HIPPOS >= "+ str(nPosNova)+""
cQuery += " AND D_E_L_E_T_ <> '*'"


If Select("Qry") <> 0
Qry->(dbCloseArea())
End

TCQuery cQuery Alias Qry New

//Aqui TENTO fazer o incremento das posições
While Qry->(!Eof())
RecLock('SZD', .F.)
SZD->ZD_HIPPOS := (Qry->ZD_HIPPOS + 1)
MsUnLock()
Qry->(dbSkip())
EndDo
EndIf

O que ocorre com essa função é que ela incrementa somente o ultimo objeto do select.

Gostaria de opiniões sobre o que estou fazendo, se estou na direção certa, ou estou viajando muito.. e caso seja por ai, o que estou fazendo de errado na função....

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 1 mês atrás #17576 por lalberto
Respondido por lalberto no tópico Ordenar Chamados - chamus.prw
Peterson bom dia, que loucura isso hein, posso perguntar porque essa necessidade ? sendo que os chamados já tem uma numeração sequencial ? Porque neste caso não usa o conceito de prioridade ao invez deste tipo de numeração para posicionar os mais urgentes ?

Tipo Prioridade Baixa, Normal e Urgente ?, porque pensando nisso, vc tem a obrigatoriedade de varrer toda a tabela de chamados a cada inclusão, vai chegar uma hora que vai tornar-se extremamente lento seu sistema.

Abraços.

Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 1 mês atrás #17577 por parks
Respondido por parks no tópico Ordenar Chamados - chamus.prw
Bom dia Luiz Alberto.
Obrigado pela pronta resposta...

Pois é, na verdade me passaram isso, primeiro para que eu pudesse ir me familiarizando cada vez mais com o advpl e segundo o analista Protheus aqui da empresa, facilitaria ainda mais a identificação dos chamados com maior prioridade.

Olhando pela sua perspectiva, realmente não tem grande necessidade essa alteração.
Quanto a lentidão, acredito que não foi pensado nisso...

Mas Luiz, como é minha primeira missão gostaria de resolve-la, até mesmo pela satisfação pessoal e do analista que me pediu isso.

Abraço...

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 1 mês atrás #17578 por lalberto
Respondido por lalberto no tópico Ordenar Chamados - chamus.prw
Faz Assim:

//Verifico se a opção é incluir - no momento estou so preocupado com a inclusão
//Faço o select para pegar a posição igual e maior que o valor que passei
If nOp == 3
cQuery := " SELECT ZD_NUMCHAM, ZD_HIPPOS, R_E_C_N_O_ REG "
cQuery += " FROM " + RetSqlName("SZD") + " SZD "
cQuery += " WHERE ZD_HIPPOS >= "+ str(nPosNova)+""
cQuery += " AND D_E_L_E_T_ <> '*'"


If Select("Qry") <> 0
Qry->(dbCloseArea())
End

TCQuery cQuery Alias Qry New

//Aqui TENTO fazer o incremento das posições
While Qry->(!Eof())
SZD->(dbGoTo(Qry->REG))

RecLock('SZD', .F.)
SZD->ZD_HIPPOS := (Qry->ZD_HIPPOS + 1)
SZD->(MsUnLock())
Qry->(dbSkip())
EndDo
EndIf

Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 1 mês atrás #17619 por parks
Respondido por parks no tópico Ordenar Chamados - chamus.prw
Luiz Alberto. Funcionou perfeitamente.

Vou terminar de fazer a loukura aqui hehe, e depois deixo a disposição caso alguém tenha interesse.

Obrigado !

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.185 segundos
Joomla templates by a4joomla