× Linguagem de Programação ADVPL

Perguntas Erro ao usar MsGetDados()

Mais
10 anos 5 meses atrás #23502 por s1qu31r4@gmail.com
Olá pessoal!
Sou novo nessa área de desenvolvimento em advpl.

estou tentando fazer uma tela aonde tem um grid que eu posso incluir dados nele como se fosse um modelo 2, mas todo jeito que eu faço da o seguinte erro:

access violation in function fieldwblock on E_FIELD(MATXFUNB.PRX)


segue em anexo tbm o erro...

desde já agradeço a quem poder me ajudar. :)


//fonte:

#include "protheus.ch"
/*/
+
| Função | GETDADOSA1 | Autor | MICROSIGA |Data | |
+
| Descrição | Programa que demonstra a utilização do objeto MSGETADOS() |
+
| Uso | Curso ADVPL |
+
/*/
User Function GetDadoSA1()
Local nI
Local oDlg
Local oGetDados
Local nUsado := 0
Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}
Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")
While !Eof() .and. SX3->X3_ARQUIVO == "SA1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
EndIf
DbSkip()
End
AADD(aCols,Array(nUsado+1))
For nI := 1 To nUsado
aCols[1][nI] := CriaVar(aHeader[nI][2])
Next
aCols[1][nUsado+1] := .F.
oDlg := MSDIALOG():New(000,000,300,400, "MsGetDados - SA1",,,,,,,,,.T.)
oGetDados := MsGetDados():New(05, 05, 145, 195, 4, "U_LINHAOK", "U_TUDOOK",;
"+A1_COD", .T., {"A1_NOME"}, , .F., 200, "U_FIELDOK", "U_SUPERDEL",,;
"U_DELOK", oDlg)
oDlg:lCentered := .T.
oDlg:Activate()
Return
User Function LINHAOK()
ApMsgStop("LINHAOK")
Return .T.
User Function TUDOOK()
ApMsgStop("LINHAOK")
Return .T.
User Function DELOK()
ApMsgStop("DELOK")
Return .T.
User Function SUPERDEL()
ApMsgStop("SUPERDEL")
Return .T.
User Function FIELDOK()
ApMsgStop("FIELDOK")
Return .T.
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 5 meses atrás #23519 por kanaamlrr
Respondido por kanaamlrr no tópico Erro ao usar MsGetDados()
Cara, você está chamando essa função pelo menu ou direto pelo debug?
Você alterou algum inicializador padrão do cadastro de clientes?
Pode ser que tenha algum erro em um deles.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 5 meses atrás #23550 por s1qu31r4@gmail.com
Respondido por s1qu31r4@gmail.com no tópico Erro ao usar MsGetDados()
Olá Kanaãm Luz, respondendo a sua primeira pergunta eu estou executando pelo menu, direto pelo debug também da erro.
Respondendo a segunda pergunta eu baixei um protheus novo no site da totvs e mesmo assim continua com o erro.

Esse exemplo é um de uma apostila de advpl avançado 3 que tenho aqui...

você teria um exemplo de MsGetDados() que funcione na sua maquina para vc me enviar?

Queria uma tela com o codigo e nome
e tbm com um grid editavel tipo aqueles que vc aperta com a cetinha
pra baixo e ele acrescenta uma linha para vc escrever...
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 5 meses atrás #23558 por gustavo
Respondido por gustavo no tópico Erro ao usar MsGetDados()
Cara segue em anexo uma tela modelo 2 acho que vai te ajudar. To com o mesmo problema para fazer a MSGetdados.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 5 meses atrás #23559 por kanaamlrr
Respondido por kanaamlrr no tópico Erro ao usar MsGetDados()
Lucas, tente utilizar o MsNewGetDados()

Segue exemplo que eu peguei no site da TOTVS
#include "protheus.ch"

User Function MrbwGtCl()
Private cCadastro := "Pedidos de Venda"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;					
                    {"Visualizar", "U_ModGtd" , 0, 2},;	  
                    {"Incluir"   , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)
Local nX := 0
Local nUsado := 0
Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAliasLocal 
aAlterEnch := {}
Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999
Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
	If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO)
		AADD(aCpoEnch,SX3->X3_CAMPO)
	EndIf
	DbSkip()[
Enda
AlterEnch := aClone(aCpoEnch)
DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
	If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO)
		AADD(aCpoGDa,SX3->X3_CAMPO)
	EndIf
	DbSkip()
End
aAlterGDa := aClone(aCpoGDa)
nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
	If X3USO(x3_usado).And.cNivel>=x3_nivel
		nUsado:=nUsado+1
		AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
			x3_tamanho, x3_decimal,"AllwaysTrue()",;
			x3_usado, x3_tipo, x3_arquivo, x3_context } )
	Endif
	dbSkip()
End
If
 	nOpc==3 // Incluir	
	aCols:={Array(nUsado+1)}
	aCols[1,nUsado+1]:=.F.
	For nX:=1 to nUsado
		IF aHeader[nX,2] == "C6_ITEM"
			aCols[1,nX]:= "0001"
		ELSE
			aCols[1,nX]:=CriaVar(aHeader[nX,2])
		ENDIF
	Next
Else
	aCols:={}
	dbSelectArea("SC6")
	dbSetOrder(1)
	dbSeek(xFilial()+M->C5_NUM)
	While !eof().and.C6_NUM==M->C5_NUM
		AADD(aCols,Array(nUsado+1))
		For nX:=1 to nUsado
			aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
		Next
		aCols[Len(aCols),nUsado+1]:=.F.
		dbSkip()
	End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)
RegToMemory("SC5", If(nOpc==3,.T.,.F.))
oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/, /*cTexto*/,;
					aCpoEnch,aPos, aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
					cTudoOk,oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,lProperty)

oGetD:= MsNewGetDados():New(nSuperior,nEsquerda,nInferior,nDireita, nOpc,;
							cLinOk,cTudoOk,cIniCpos,aAlterGDa,nFreeze,nMax,cFieldOk, cSuperDel,;
							cDelOk, oDLG, aHeader, aCols)

// Tratamento para definição de cores específicas,
// logo após a declaração da MsNewGetDadosoGetD:oBrowse:lUseDefaultColors := .F.
oGetD:oBrowse:SetBlkBackColor({|| GETDCLR(oGetD:aCols,oGetD:nAt,aHeader)})
oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()}, {||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()
Return

// Função para tratamento das regras de cores para a grid da MsNewGetDados
Static Function GETDCLR(aLinha,nLinha,aHeader)
Local nCor2 := 16776960 // Ciano - RGB(0,255,255)
Local nCor3 := 16777215 // Branco - RGB(255,255,255)
Local nPosProd := aScan(aHeader,{|x| Alltrim(x[2]) == "C6_PRODUTO"})
Local nUsado := Len(aHeader)+1
Local nRet := nCor3
If !Empty(aLinha[nLinha][nPosProd]) .AND. aLinha[nLinha][nUsado]
	nRet := nCor2
ElseIf !Empty(aLinha[nLinha][nPosProd]) .AND. !aLinha[nLinha][nUsado]
	nRet := nCor3
Endif
Return nRet

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 5 meses atrás #23566 por gustavo
Respondido por gustavo no tópico Erro ao usar MsGetDados()
Achei o erro naquele modelo em que você estava com problema, muda o alias e faz um teste que vai funcionar.

Por favor Acessar ou Registrar para participar da conversa.

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