× Linguagem de Programação ADVPL

Perguntas MSSELECT só altera primeiro registro do view

Mais
9 anos 8 meses atrás - 9 anos 8 meses atrás #24341 por will3698
Ola amigos, boa tarde !

Estou trabalhando já a uma semana em um fonte, pra tentar fazer um msselect funcionar .. rsrs
o problema é que , ele apenas faz as alterações no primeiro registro do view, caso eu tenha 10 registros , e marque os 10 , ele
apenas ira fazer a alteração no primeiro.


fico grato desde já por qualquer ajuda :)


segue fonte :
User Function PMFAT03E()

SetPrvt("NVALOR,NINDEX,_CINDEX,LRET,CINDEX,NOPCA,OVALOR,CMARCA,ACAMPOS,LINVERTE,OMARK,BMARK,LCANALLMARK,BALLMARK,NDUP,NO")
SetPrvt("nQtdTit,OGET,NX,CFILTRO,NREG,CALIASANT,NREC,WRET,ccAlias")

Private aCampos := {} // Monta as colunas para serem exibidas na tela
Private aCpoBro:={}
Private cMarca := GetMark()
Private nValor := 0
Private nQtdTit := 0


// Chama a tela de Parametro para Digitação , caso nao exista os parametros retorna falso
If !Pergunte("PMFAT03E",.T.)
Msgbox("Operacao Cancelada")
Endif

aCampos := { {"FILIAL" ,"C",2,0},;
{"PREFIXO" ,"C",3,0},;
{"NUMERO" ,"C",9,2},;
{"PARCELA" ,"C",2,0},;
{"TIPO" ,"C",2,0},;
{"CLIFOR" ,"C",6,0},;
{"LOJA" ,"C",2,0},;
{"SEQ" ,"C",7,0},;
{"EMISSAO" ,"D",8,0},;
{"VALOR" ,"N",15,2},;
{"MARCA" ,"C",2,0} }

aCpoBro:= { {"MARCA" ,, " " ," "},;
{"FILIAL" ,, "Filial" ,"@!"},; //"N£mero T¡tulo"
{"EMISSAO" ,, "Data do Tit." ,"@!"},; //"Valor Receber"
{"NUMERO" ,, "numero." ,"@!"},; //"Data EmissÆo"
{"PREFIXO" ,, "Prefixo" ,"@!"},; //"Data EmissÆo"
{"PARCELA" ,, "Pracela" ,"@E 999,999,999.99"},;
{"TIPO" ,, "Tipo" ,"@!"},;
{"LOJA" ,, "Loja" ,"@!"},;
{"SEQ" ,, "Seq" ,"@!"},;
{"CLIFOR" ,, "CliFor" ,"999999999999999"} }


If ( Select ( "TRB" ) <> 0 )
dbSelectArea ( "TRB" )
dbCloseArea ()
End

TRB:=CriaTrab(aCampos)
dbUseArea( .T.,, TRB, "TRB", NIL, .F. )

cIndex := CriaTrab(nil,.f.)
IndRegua("TRB",cIndex,"NUMERO",,,OemToAnsi("Selecionando Registros...")) //"Selecionando Registros..."

PMFATRepl(TRB)
dbSelectArea("TRB")
dbGotop()

DEFINE MSDIALOG oDlg1 TITLE "Seleção dos Pedidos de Vendas - Cancelamento " From 9,0 To 32,80 OF oMainWnd
//linha , coluna
@ 1.0 , 0.3 To 3.35,39 OF oDlg1
@ 1.4 , 0.8 Say "Valor Total: "
@ 1.4 , 7 Say oValor VAR nValor Picture "@E 999,999,999.99"
@ 1.9 , 0.8 Say "Quantidade: "
@ 1.9 , 9 Say oQtdTit VAR nQtdTit Picture "999"

oMark := MsSelect():New("TRB","MARCA"," ",aCpoBro,@lInverte,@cMarca,{45,1,143,315})
oMark:bMark := {||FFAT02Exibe(cMarca,oValor,oQtdTit)}
oMark:oBrowse:lhasMark = .t.
oMark:oBrowse:lCanAllmark := .t.
oMark:oBrowse:bAllMark := { || FFAT02Inverte(cMarca,oValor,oQtdTit) }

ACTIVATE MSDIALOG oDlg1 CENTERED ;
ON INIT EnchoiceBar(oDlg1,{|| nOpca := 1,;
Iif(FW320ValOK(),oDlg1:End(),.f. ) }, {|| nOpca := 2,oDlg1:End()})

dbSelectArea("TRB")

If nOpca == 1

dbSelectArea("TRB")
TRB->(DbGoTop())

While ! Eof()
// Exclui o pedido de venda , não será utilizado
If TRB->MARCA == cMarca

dbSelectArea("SE5")
SE5->(DbGoTop())
dbSetOrder(7)
dbSeek(E5_FILIAL+E5_PREFIXO+E5_NUMERO+E5_PARCELA+E5_TIPO+E5_CLIFOR+E5_LOJA+E5_SEQ)

While (!EOF() .And. TRB->FILIAL == SE5->E5_FILIAL .And. ;
TRB->PREFIXO == SE5->E5_PREFIXO .And. ;
TRB->NUMERO == SE5->E5_NUMERO .And. ;
TRB->PARCELA == SE5->E5_PARCELA .And. ;
TRB->TIPO == SE5->E5_TIPO .And. ;
TRB->CLIFOR == SE5->E5_CLIFOR .And. ;
TRB->LOJA == SE5->E5_LOJA .And. ;
TRB->SEQ == SE5->E5_SEQ )
RecLock("SE5",.F.)
SE5->E5_AUTBCO := " "
MsUnLock()
dbSelectArea("SE5")
dbSkip()
EndDo

Endif
dbSelectArea("TRB")
dbSkip()
Enddo

Endif

Return

///// Carrega os dados para serem mostrados no browse
Static Function PMFATRepl(TRB)

If ( Select ( "CQ1" ) <> 0 )
dbSelectArea ( "CQ1" )
dbCloseArea ()
End

cQuery := " SELECT E5_FILIAL,E5_PREFIXO,E5_NUMERO,E5_PARCELA,E5_TIPO,E5_CLIFOR,E5_LOJA,E5_SEQ,E5_DATA,E5_VALOR FROM SE5010 WHERE E5_NUMERO = '"+MV_PAR01+"' "

TCQUERY cQuery NEW ALIAS "CQ1"

DbSelectArea("CQ1")
DbGoTop()

While !Eof()

dbSelectArea("TRB")
RecLock("TRB",.T.)

Replace FILIAL With CQ1->E5_FILIAL
Replace PREFIXO With CQ1->E5_PREFIXO
Replace NUMERO With CQ1->E5_NUMERO
Replace PARCELA With CQ1->E5_PARCELA
Replace TIPO With CQ1->E5_TIPO
Replace CLIFOR With CQ1->E5_CLIFOR
Replace LOJA With CQ1->E5_LOJA
Replace SEQ With CQ1->E5_SEQ
Replace VALOR With CQ1->E5_VALOR
Replace EMISSAO With STOD(CQ1->E5_DATA)
Replace MARCA With " "

dbselectArea("CQ1")
dbSkip()
EndDo
Return


// Função para exibir o valor total e quantidade de vendas diretas marcadas
Static Function FFAT02Exibe(cMarca,oValor,oQtdTit)

IF TRB->MARCA == cMarca // Marcando o titulo
nValor += TRB->VALOR
nQtdTit++
Else // Desmarcando o titulo
nValor -= TRB->VALOR
nQtdTit--
Endif

nQtdTit:= Iif(nQtdTit<0,0,nQtdTit)
oValor:Refresh() // Mostra os valores atualizados
oQtdTit:Refresh()
Return


Static Function FW320ValOK()
IF nValor <= 0
Help(" ",1,"VLFATNEG")
Return .F.
Endif
Return .T.


// Função que Inverte as marcaçoes ou seja desmarca e marca
Static Function FFAT02Inverte(cMarca,oValor,oQtdTit)

//nReg := TRB->(Recno())
//ccAlias := Alias()

dbSelectArea("TRB")
dbGotop()

While ! Eof()
RecLock("TRB")
If TRB->MARCA == cMarca
TRB->MARCA := " "
nValor -= TRB->VALOR
nQtdTit--
Else
TRB->MARCA := cMarca
nValor += TRB->VALOR
nQtdTit++
Endif

dbSkip()
End

dbSelectArea("TRB")
dbGotop()
oValor:Refresh()
oQtdTit:Refresh()
oMark:oBrowse:Refresh(.t.)
Return Nil

//Funcao que Limpa registros marcados
STATIC Function FWLimpaSZ2()

cAliasAnt := Alias()
dbSelectArea("TMP")
nRec := Recno()
While ! Eof()
Reclock("TMP",.F.)
TRB->MARCA := " "
TRB->(MsUnlock())
dbSkip()
EndDo
dbGotop()
dbSelectArea(cAliasAnt)
Return
Anexos:
Ultima edição: 9 anos 8 meses atrás por will3698.

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 8 meses atrás #24345 por kanaamlrr
Mude sua linha:
dbSeek(E5_FILIAL+E5_PREFIXO+E5_NUMERO+E5_PARCELA+E5_TIPO+E5_CLIFOR+E5_LOJA+E5_SEQ)

por:
dbSeek(xFilial("SE5")+TRB->(PREFIXO+NUMERO+PARCELA+TIPO+CLIFOR+LOJA+SEQ))

Deve resolver.
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 8 meses atrás #24348 por will3698
Ola Kanaãm
Obrigado pela resposta .;

alterei como o Sr sugeriu , e não funcionou , mas acredito que seja pelo fato do meu financeiro
ser compartilhado .... ai que vem a questão , algo muda no dbseek quando é assim ??

att

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 8 meses atrás #24434 por will3698
Ola boa tarde !

Gostaria de postar o resultado do esforço no uso do msselect() , finalmente funcionou como queria
postei na área de download o exemplo do fonte com comentários que fui fazendo linha a linha
para ajudar alguém que precise desta ferramenta.

att
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 1 mês atrás #31955 por arthisboot
Boa tarde amigo,
Só para agradecer o fonte, apesar do post ter sido há alguns anos atrás! haah
Abraço

Por favor Acessar ou Registrar para participar da conversa.

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