- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- MSSELECT só altera primeiro registro do view
×
Linguagem de Programação ADVPL
Perguntas MSSELECT só altera primeiro registro do view
- will3698
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 310
- Obrigados Recebidos: 1
10 anos 3 meses atrás - 10 anos 3 meses atrás #24341
por will3698
MSSELECT só altera primeiro registro do view foi criado 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
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
Ultima edição: 10 anos 3 meses atrás por will3698.
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
10 anos 3 meses atrás #24345
por kanaamlrr
Respondido por kanaamlrr no tópico MSSELECT só altera primeiro registro do view
Mude sua linha:
por:
Deve resolver.
Abraço!
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.
- will3698
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 310
- Obrigados Recebidos: 1
10 anos 3 meses atrás #24348
por will3698
Respondido por will3698 no tópico MSSELECT só altera primeiro registro do view
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
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.
- will3698
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 310
- Obrigados Recebidos: 1
10 anos 3 meses atrás #24434
por will3698
Respondido por will3698 no tópico MSSELECT só altera primeiro registro do view
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
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
Por favor Acessar ou Registrar para participar da conversa.
- arthisboot
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 2
- Obrigados Recebidos: 0
7 anos 8 meses atrás #31955
por arthisboot
Respondido por arthisboot no tópico MSSELECT só altera primeiro registro do view
Boa tarde amigo,
Só para agradecer o fonte, apesar do post ter sido há alguns anos atrás! haah
Abraço
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.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- MSSELECT só altera primeiro registro do view
Tempo para a criação da página:0.121 segundos