× Linguagem de Programação ADVPL

Perguntas Tela de cadastro enchoice com 2 tabelas

Mais
9 anos 10 meses atrás #26736 por flaviodocarmo
Bom dia Senhores!
Alguem pode me ajudar com as seguintes duvidas:
1)Meu programa esta com o seguinte erro (em anexo a tela) na hora de gravar do acols na tabela. Justamente nos campos de quantidade e valor. Como resolvo?

2)Resolvi este erro ignorando os campos de quantidade e valor (Mas gostaria q mostrasse). Mas não gostaria q minha msgetdados mostrasse o campo codigo(Contador da getdados nao marca direito mas grava na tabela com numero certo) mas ele aparece na getdados. Como tiro o zd_cod da msgetdados?

Agradeço a Atenção.
Flávio Oliveira
31-93516397
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #26737 por saulorv
Flávio o campo esta recebendo um tipo de dado errado. Ex: Campo caractere recebendo número. Campo numérico recebendo caractere.

Utilize VAL()
Realiza a conversão de uma informação do tipo caractere em numérica.
Sintaxe: VAL(cValor)

ou Utilize STR()
Realiza a conversão de uma informação do tipo numérico em uma string, adicionando espaços à direita.
Sintaxe: STR(nValor)

Quanto ao segundo problema pode mandar o pedaço do código que trata disto? Obrigado.

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #26740 por flaviodocarmo
Obrigado pela resposta saulo.O erro acontece quando vou gravar o q tem no msgetdados.
1)Saulo ja tentei com val, alltrim e transform no acols(nos comentarios do codigo abaixo), segue abaixo:
Quando chega no campo de quantidade e valor e onde esta o erro na tela.
If (!aCols[1,Len(aHeader) + 1])
If RecLock("SZD",.T.)
Replace SZD->ZD_Filial With xFilial("SZD"),;
SZD->ZD_CODITEM With aCols[1,1],;
SZD->ZD_ITEM With aCols[1,2],;
SZD->ZD_QUANT With Transform(aCols[1,3],"@E 999999999.99"),;
SZD->ZD_UNIT With Transform(aCols[1,4],"@E 999999999.99"),;
SZD->ZD_VLRTOT With Transform(aCols[1,5],"@E 999999999.99")
SZD->ZD_CODORC With cCodigo
msunlock()
/*
Ja tentei isso tudo
SZD->ZD_QUANT With alltrim(Val(Transform(aCols[1,3],"@E 999999999.99"))),;
SZD->ZD_UNIT With alltrim(Val(Transform(aCols[1,4],"@E 999999999.99"))),;
SZD->ZD_VLRTOT With alltrim(Val(Transform(aCols[1,5],"@E 999999999.99"))),;
SZD->ZD_CODORC With cCodigo

SZD->ZD_QUANT With aCols[1,3],;
SZD->ZD_UNIT With aCols[1,4],;
SZD->ZD_VLRTOT With aCols[1,5],;
SZD->ZD_CODORC With cCodigo
*/
EndIf
EndIf

O segundo pedaço tentei isolar o campo zd_cod (So coloquei o campo "ZD_CODITEM/ZD_ITEM") mas nao adiantou segue abaixo:
dbSelectArea("SX3")
dbSeek("SZD")
aHeader:={}
Do While (!Eof()) .And. (SX3->X3_Arquivo == "SZD")
If AllTrim(SX3->X3_CAMPO) $ "ZD_CODITEM/ZD_ITEM"
//"ZD_CODITEM/ZD_ITEM/ZD_QUANT/ZD_UNIT/ZD_VLRTOT"
//"ZD_CODITEM/ZD_ITEM"
If X3Uso(SX3->X3_Usado) .And. (cNivel >= SX3->X3nAuxvel)
aAdd(aHeader,{AllTrim(SX3->X3_Titulo), SX3->X3_Campo, SX3->X3_Picture, SX3->X3_Tamanho, SX3->X3_Decimal, SX3->X3_Valid, SX3->X3_Usado, SX3->X3_Tipo, SX3->X3_Arquivo, SX3->X3_Context})
EndIf
EndIf
Agradeço
flavio

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #26741 por flaviodocarmo
Saulo, so assim com esses campos q o programa funciona:
If (!aCols[1,Len(aHeader) + 1])
If RecLock("SZD",.T.)
Replace SZD->ZD_Filial With xFilial("SZD"),;
SZD->ZD_CODITEM With aCols[1,1],;
SZD->ZD_ITEM With aCols[1,2],;
SZD->ZD_CODORC With cCodigo,;
SZD->ZD_COD With cCod
MsUnLock()

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #26746 por kanaamlrr
Flávio, verifique a criação dos campos de valores se ela está correta no seu dicionário e qual o tipo definido para esses campos.
Ai então realize a tratativa dos valores que virão do aCols.
Como você está utilizando o aHeaders baseado no X3, não vejo problemas de incompatibilidade.
Se possível, tente excluir os 2 campos do dicionário e criá-los novamente.
Pode ter ocorrido algum problema nessa criação.
Outro ponto é que você não deve utilizar AllTrim ou Transform na gravação do campo numérico.


Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #26747 por flaviodocarmo
Muito Obrigado Kanaam !!!

So deu certo porque criei outra tabela(SZB) e criei os campos de novo e coloquei zb_quant como val. Segue abaixo:
If (!aCols[1,Len(aHeader) + 1])
If RecLock("SZB",.T.)
Replace SZB->ZB_Filial With xFilial("SZB"),;
SZB->ZB_CODITEM With aCols[1,1],;
SZB->ZB_ITEM With aCols[1,2],;
SZB->ZB_QUANT With val(aCols[1,3]),;
SZB->ZB_UNIT With aCols[1,4],;
SZB->ZB_VLRTOT With aCols[1,5],;
SZB->ZB_CODORC With cCodigo,;
SZB->ZB_COD With cCod

MsUnLock()

Por favor Acessar ou Registrar para participar da conversa.

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