- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Rotina para alterar o código de cadastro do produto
×
Linguagem de Programação ADVPL
Perguntas Rotina para alterar o código de cadastro do produto
- Alessandro Villar
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 121
- Obrigados Recebidos: 0
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()
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.
- arlindoneto
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 31
- Obrigados Recebidos: 0
11 anos 8 meses atrás - 11 anos 8 meses atrás #11939
por arlindoneto
Respondido por arlindoneto no tópico Rotina para alterar o código de cadastro do produto
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.
- Alessandro Villar
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 121
- Obrigados Recebidos: 0
11 anos 8 meses atrás #11983
por Alessandro Villar
Respondido por Alessandro Villar no tópico Rotina para alterar o código de cadastro do produto
Opa irei tentar, dessa forma, se der certo aviso.
Obrigado!!
Obrigado!!
Por favor Acessar ou Registrar para participar da conversa.
- Alessandro Villar
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 121
- Obrigados Recebidos: 0
11 anos 8 meses atrás #11989
por Alessandro Villar
Respondido por Alessandro Villar no tópico Rotina para alterar o código de cadastro do produto
Arlindo coloquei o trecho como disse mais ainda não está gravando quando alterado.
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
11 anos 8 meses atrás #11991
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Respondido por lalberto no tópico Rotina para alterar o código de cadastro do produto
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
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.
- Alessandro Villar
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 121
- Obrigados Recebidos: 0
11 anos 8 meses atrás #11997
por Alessandro Villar
Respondido por Alessandro Villar no tópico Rotina para alterar o código de cadastro do produto
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()
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.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Rotina para alterar o código de cadastro do produto
Tempo para a criação da página:0.120 segundos