× Linguagem de Programação ADVPL

Perguntas Rotina para alterar o código de cadastro do produto

Mais
11 anos 8 meses atrás #11921 por Alessandro Villar
Olá pessal boa tarde,
seguinte eu estou com um problema em uma rotina que altera o código do cliente dentro do cadastro de produto, onde no no cadastro de produto se encontra o código do produto/codigo do cliente/ descrição. Essa rotina foi desenvolvida para alterar o codigo do cliente e a descriçao. Quando executo a rotina altero o código do cliente ele não está gravando a informação que alterei, exemplo, eu altero o codigo do cliente e clico em confirmar e depois entrar na tela novamente ela não está gravando a informação que eu alterei. Alguém saberia o que está faltando eu colocar para gravar a informaçao no campo?

segue abaixo a rotina:

User Function RCOMA001()

Private oDlg
Private oGetDados
Private oTPanel
Private aButtons := {}
Private nX := 0
Private aCpoGDa := {"B1_CODCLI","B1_DESC"}
Private aAlter := NIL
Private nOpc := GD_INSERT + GD_DELETE + GD_UPDATE
Private cLinOk := "AllwaysTrue"
Private cTudoOk := "AllwaysTrue"
Private cFieldOk := "AllwaysTrue"
Private cDelOk := "AllwaysTrue"
Private cIniCpos := NIL
Private nFreeze := 000
Private nMax := 999
Private cSuperDel := NIL
Private aHeader := {}
Private aCols := {}
Private nLinha := 0
Private nI := 0

INCLUI := .F.
ALTERA := .T.

RegToMemory( 'SB1', .T.,, .F. )

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Montagem do aHeader ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ O campo que vai receber o Bitmap pode ser um campo³
//³ virtual criado no SX3 ou direto no header sem nem ³
//³ existir no SX3 ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
aAdd( aHeader, { '', 'CHECKBOL', '@BMP', 10, 0,,, 'C',, 'V' , , , 'Enable', 'V', 'S' } )

// Carrega aHeader
dbSelectArea( "SX3" )
SX3->( dbSetOrder( 2 ) ) // Campo
For nX := 1 to Len( aCpoGDa )
If SX3->( dbSeek( aCpoGDa[nX] ) )
aAdd( aHeader, { AlLTrim( X3Titulo() ), ; // 01 - Titulo
SX3->X3_CAMPO , ; // 02 - Campo
SX3->X3_Picture , ; // 03 - Picture
SX3->X3_TAMANHO , ; // 04 - Tamanho
SX3->X3_DECIMAL , ; // 05 - Decimal
SX3->X3_Valid , ; // 06 - Valid
SX3->X3_USADO , ; // 07 - Usado
SX3->X3_TIPO , ; // 08 - Tipo
SX3->X3_F3 , ; // 09 - F3
SX3->X3_CONTEXT , ; // 10 - Contexto
SX3->X3_CBOX , ; // 11 - ComboBox
SX3->X3_RELACAO , ; // 12 - Relacao
SX3->X3_INIBRW , ; // 13 - Inicializador Browse
SX3->X3_Browse , ; // 14 - Mostra no Browse
SX3->X3_VISUAL } )
EndIf
Next nX


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Montagem do aCols ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

SB1->( dbSetOrder( 3 ) )
SB1->( dbGoTop() )

While !SB1-> (EOF() )

If !EMPTY(SB1->B1_CODCLI)

aAdd( aCols, Array( Len( aHeader ) + 1 ) )
nLinha++

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Aqui vai a regra para o Bitmap a ser exibido ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
aCOLS[ nlinha, 1 ] := Iif( Mod(Val(SB1->B1_COD),2)==0, 'ENABLE', 'DISABLE' )

For nI := 2 To Len( aHeader )

cX3Campo := AlLTrim( aHeader[nI][2] )

If aHeader[nI][10] == 'V'
aCols[nLinha][nI] := CriaVar( cX3Campo, .T. )

Else
aCols[nLinha][nI] := &( 'SB1->' + cX3Campo )

EndIf

Next
aCols[nLinha][Len( aHeader ) + 1] := .F.
EndIf
SB1->( dbSkip() )

EndDo


DEFINE MSDIALOG oDlg TITLE "Alteração Cadastro de Produtos" FROM 065, 000 TO 350, 550 PIXEL

oGetDados := MsNewGetDados():New( 012, 002, 120, 265, nOpc, cLinOk, cTudoOk, cIniCpos, aAlter, nFreeze, nMax, cFieldOk, cSuperDel, cDelOk, oDlg, aHeader, aCols )
oGetDados:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT

oTPanel := TPanel():New(0,0,"",oDlg,NIL,.T.,.F.,NIL,NIL,0,16,.T.,.F.)
oTPanel:Align := CONTROL_ALIGN_BOTTOM

/* @ 5,1 BITMAP oBmp RESNAME "DISABLE" OF oTPanel SIZE 20,20 NOBORDER PIXEL
@ 5,10 SAY "Código par" OF oTPanel SIZE 100,10 PIXEL
@ 5,50 BITMAP oBmp RESNAME "ENABLE" OF oTPanel SIZE 20,20 NOBORDER PIXEL
@ 5,59 SAY "Código ímpar" OF oTPanel SIZE 100,10 PIXEL */
Public a := .t.
ACTIVATE MSDIALOG oDlg CENTERED ON INIT EnchoiceBar( oDlg, { || Alterar() }, { || Alert( "Ação do Cancel" ), oDlg:End() },, aButtons )

Return


Static Function Alterar()

Alert(aCols[oGetDados:nAt,2])
dbSelectArea("SB1")
// dbOrderNickName("COD_CLI")
dbSetOrder(11)
If dbSeek(xFilial("SB1") + aCols[oGetDados:nAt,2])
SB1->(RecLock("SB1",.F.))
SB1->B1_CODCLI := aCols[oGetDados:nAt,2]
SB1->B1_DESC := aCols[oGetDados:nAt,3]
SB1->(MsUnlock())
EndIf
Close(oDlg)

Return()

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 8 meses atrás - 11 anos 8 meses atrás #11939 por arlindoneto
Voce já verificou se realmente se o registro esta posicionado?
If dbSeek(xFilial("SB1") + aCols[oGetDados:nAt,2])
SB1->(RecLock("SB1",.F.))
SB1->(dbGoTo(RECNO()))   <------ Tenta acessar assim
SB1->B1_CODCLI := aCols[oGetDados:nAt,2]
SB1->B1_DESC := aCols[oGetDados:nAt,3]
SB1->(MsUnlock())
EndIf
Ultima edição: 11 anos 8 meses atrás por arlindoneto.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 8 meses atrás #11983 por Alessandro Villar
Opa irei tentar, dessa forma, se der certo aviso.

Obrigado!!

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 8 meses atrás #11989 por Alessandro Villar
Arlindo coloquei o trecho como disse mais ainda não está gravando quando alterado.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 8 meses atrás #11991 por lalberto
O Problema é que vc está alterando a própria chave:

Tenta assim

If SB1->(dbSetOrder(11), dbSeek(xFilial("SB1") + aCols[oGetDados:nAt,2]))
nReg := SB1->(Recno())

// Altera Indice para nâo Interferir na Gravacao

SB1->(dbSetOrder(1))

SB1->(dbGoTo(nReg))

If RecLock("SB1",.F.)
SB1->B1_CODCLI := aCols[oGetDados:nAt,2]
SB1->B1_DESC := aCols[oGetDados:nAt,3]
SB1->(MsUnlock())
EndIf
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 8 meses atrás #11997 por Alessandro Villar
Olá Luiz, fiz da seguinte forma mais não deu certo quando eu altero o código e clico em confirmar, não fecha a tela, tem que utilizar o close(odlg)? segue abaixo como ficou:

Static Function Alterar()
If SB1->(dbSetOrder(11), dbSeek(xFilial("SB1")+ aCols[oGetDados:nAt,2]))
nReg := SB1->(Recno())
SB1->(dbSetOrder(1))
SB1->(dbGoTo(nReg))

If RecLock("SB1",.F.)
SB1->B1_CODCLI := aCols[oGetDados:nAt,2]
SB1->B1_DESC := aCols[oGetDados:nAt,3]
SB1->(MsUnlock())
EndIf
EndIf
Return()

Por favor Acessar ou Registrar para participar da conversa.

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