× Linguagem de Programação ADVPL

Perguntas Query em check box

Mais
10 anos 10 meses atrás - 10 anos 10 meses atrás #20464 por will3698
Query em check box foi criado por will3698
Ola boa tarde !

Estou desenvolvendo uma rotina pra executar um procedimento no banco, fiz uma query, que retorna uma quantidade x de registros, preciso que esses registros apareçam em um checkbox ao usuário, pra que ele possa selecionar os que deseja, e ao confirmar seja executado um update especifico no filtro.

Estou assimilando o fonte FINA380, da totvs que faz algo parecido, pois nunca fiz isso.
Alguém tem algum fonte de exemplo, que faça esse processo ?

att


Anexos:
Ultima edição: 10 anos 10 meses atrás por will3698.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 10 meses atrás #20919 por mbrigagao
Respondido por mbrigagao no tópico Query em check box
Willian,

Utilize a classe FWMarkBrowse com arquivo temporário e faça o tratamento pelo numero do registro (recno)...

Vai ficar mais ou menos assim:
Static Function VK904Sel()
Local cQryTRB	:= ""
Local aStruSC6	:= dbStruct("SC6")
Local aCpos		:= {}
Local aBkRotina	:= Aclone(aRotina)
Local cTitMBrow	:= cTitBrow + OemToAnsi(" | Alocação de Pedido Para Programação")
Local _cArq		:= "T_"+Criatrab(,.F.)

Private cAliasTRB	:= GetNextAlias()
Private cAliasTMP	:= GetNextAlias()
Private aRotina	:= {{"Processa","U_VK904Aloc", 0,4}}

cQryTRB := "SELECT SC6.*,SC6.R_E_C_N_O_ AS C6RECNO FROM "
cQryTRB += RetSqlName("SC6") + " SC6 WHERE "
cQryTRB += "SC6.D_E_L_E_T_ = ' ' AND "

If _lAloca
//	If MV_PAR01 = 1 // Permite alocar pedido ja faturado
//		cQryTRB += "SC6.C6_FILIAL='"+cSC6Filial+"' And SC6.C6_XPROG = ' ' And ( SC6.C6_BLQ = ' ' Or SC6.C6_BLQ = 'N' )"
//    Else
		cQryTRB += "SC6.C6_FILIAL='"+cSC6Filial+"' And SC6.C6_NOTA = ' ' And SC6.C6_XPROG = ' ' And ( SC6.C6_BLQ = ' ' Or SC6.C6_BLQ = 'N' )"
//	EndIf
Else
	cQryTRB += "SC6.C6_FILIAL='"+cSC6Filial+"' And SC6.C6_NUMOP = ' ' And SC6.C6_NOTA = ' ' And SC6.C6_XPROG <> ' ' And ( SC6.C6_BLQ = ' ' Or SC6.C6_BLQ = 'N' )"
EndIf

cQryTRB += " And SC6.C6_NUM>='"+_cPedIni+"' And SC6.C6_NUM<='"+_cPedFim+"'"
cQryTRB += " ORDER BY "+SqlOrder(SC6->(IndexKey()))
cQryTRB := ChangeQuery(cQryTRB)

dbUseArea( .T.,"TOPCONN", TcGenQry( ,,cQryTRB ), cAliasTMP, .T., .F. )

aStruSC6 := dbStruct("SC6")
For nX := 1 To Len(aStruSC6)
	If ( aStruSC6[nX][2] <> "C" )
		TcSetField(cAliasTMP,aStruSC6[nX][1],aStruSC6[nX][2],aStruSC6[nX][3],aStruSC6[nX][4])
	EndIf
Next nX
TcSetField(cAliasTMP,"C6_XDTENV","D",8,0)
TcSetField(cAliasTMP,"C6_XDTRET","D",8,0)
TcSetField(cAliasTMP,"C6_ENTREG","D",8,0)
TcSetField(cAliasTMP,"C6_DATFAT","D",8,0)

dbSelectArea(cAliasTMP)
copy to &_carq
dbUseArea( .T.,__LOCALDRIVER, _cArq,cAliasTRB, .T. , .F. )
dbSelectArea(cAliasTRB)
dbGoTop()

aCpos := {}
aAdd(aCpos,{"Prog.Produção"	,"C6_XPROG"		,,,,PesqPict("SC6","C6_XPROG")})
aAdd(aCpos,{"Nr.Pedido"		,"C6_NUM"		,,,,PesqPict("SC6","C6_NUM")})
aAdd(aCpos,{"It.Pedido"		,"C6_ITEM"		,,,,PesqPict("SC6","C6_ITEM")})
aAdd(aCpos,{"Produto"		,"C6_PRODUTO"	,,,,PesqPict("SC6","C6_PRODUTO")})
aAdd(aCpos,{"Descrição"		,"C6_DESCRI"	,,,,PesqPict("SC6","C6_DESCRI")})
aAdd(aCpos,{"Qtd.Vendida"	,"C6_QTDVEN"	,,,,PesqPict("SC6","C6_QTDVEN")})
aAdd(aCpos,{"Opcionais"		,"C6_OPC"		,,,,PesqPict("SC6","C6_OPC")})
aAdd(aCpos,{"Med./Formação"	,"C6_MEDIDA"	,,,,PesqPict("SC6","C6_MEDIDA")})
aAdd(aCpos,{"Entrega"		,"C6_ENTREG"	,,,,PesqPict("SC6","C6_ENTREG")})
aAdd(aCpos,{"Nr. OP"		,"C6_NUMOP"		,,,,PesqPict("SC6","C6_NUMOP")	})
aAdd(aCpos,{"Item OP"		,"C6_ITEMOP"	,,,,PesqPict("SC6","C6_ITEMOP")})
aAdd(aCpos,{"Qtd.Entregue"	,"C6_QTDENT"	,,,,PesqPict("SC6","C6_QTDENT")})
aAdd(aCpos,{"Cod.Cliente"	,"C6_CLI"		,,,,PesqPict("SC6","C6_CLI")})
aAdd(aCpos,{"Nr.N Fiscal"	,"C6_NOTA"		,,,,PesqPict("SC6","C6_NOTA")})
aAdd(aCpos,{"Serie NF"		,"C6_SERIE"		,,,,PesqPict("SC6","C6_SERIE")})
aAdd(aCpos,{"Data NF"		,"C6_DATFAT"	,,,,PesqPict("SC6","C6_DATFAT")})

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Construcao do MarkBrowse                             ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
oMark:=FWMarkBrowse():NEW()   // Cria o objeto oMark - MarkBrowse
oMark:SetAlias(cAliasTRB)          // Define a tabela do MarkBrowse
oMark:SetDescription(cTitMBrow) // Define o titulo do MarkBrowse
oMark:SetFieldMark("C6_OK")    // Define o campo utilizado para a marcacao
oMark:SetFilterDefault()      // Define o filtro a ser aplicado no MarkBrowse
oMark:SetFields(aCpos)         // Define os campos a serem mostrados no MarkBrowse
oMark:SetSemaphore(.F.)        // Define se utiliza marcacao exclusiva
//oMark:DisableConfig()          // Desabilita a opcao de configuracao do MarkBrowse
//oMark:DisableDetails()         // Desabilita a exibicao dos detalhes do MarkBrowse
oMark:DisableReport()          // Desabilita a opcao de imprimir
oMark:Activate()               // Ativa o MarkBrowse

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Restaura condicao original                                              ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea(cAliasTRB)
dbCloseArea(cAliasTRB)
dbSelectArea(cAliasTMP)
dbCloseArea(cAliasTMP)
fErase(_cArq+".DBF")

dbSelectArea("SC6")
RetIndex("SC6")
dbClearFilter()

aRotina := ACLONE(aBkRotina)

Return()

/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³Programa  ³VK904Aloc ³ Autor ³   Marcelo Brigagao    ³ Data ³ 17/08/10 ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡…o ³ Efetiva a alocacao										  ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/
User Function VK904Aloc()

Processa({|| DoAloc()},"Aguarde","Efetivando Alocação...")

Return()

/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³Programa  ³ DoAloc   ³ Autor ³   Marcelo Brigagao    ³ Data ³ 17/08/10 ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡…o ³ Efetiva a alocacao										  ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/
Static Function DoAloc()
Local aRecnosSC6 := {}
Local cMarca := oMark:Mark()
Local nz     := 0

dbSelectArea(cAliasTRB)
dbGoTop()
While !Eof()
	If oMark:IsMark(cMarca)
		aAdd(aRecnosSC6,(cAliasTRB)->C6RECNO )
	EndIf
	dbSkip()
EndDo

dbSelectArea("SC6")

ProcRegua(Len(aRecnosSC6))

For nz := 1 to Len(aRecnosSC6)
	dbGoTo(aRecnosSC6[nz])
	If _lAloca
		RecLock("SC6",.F.)
		SC6->C6_XPROG := _cAno+"-"+_cSemana
		msUnLock()
	Else
		RecLock("SC6",.F.)
		SC6->C6_XPROG := " "
		msUnLock()
	EndIf
	IncProc()
Next nz

If cVersao = "11"
  	CloseBrowse()
Else
	oMark:oBrowse:Hide()
EndIf

Return()

Espero que te ajude.

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 4 meses atrás #28802 por rtsouza777@hotmail.com
Respondido por rtsouza777@hotmail.com no tópico Query em check box
Bom dia,

Marcelo, peguei seu fonte aqui e fiz as alterações para uma necessidade que tenho aqui de liberar os movimentos pagar/receber/transferencias na SE5 para serem aprovados antes de serem conciliados... apos ajustes, marcar os registros, quando confirma-se o processo dá erro na function DoAloca que a variavel _lAloca nao existe, observando o fonte nao foi possivel identificar qual o campo "alimenta" esta variavel...

Você pode me ajudar por favor !?

Abrç!
Rodrigo Teixeira

Por favor Acessar ou Registrar para participar da conversa.

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