Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Apolo

PHC - Programação em XBASE

Mensagens Recomendadas

pc.cesar

Boas

O codigo correcto segue em baixo, verifique nao testei

___________
Erros 
1) No select faltava o stamp (bi.bistamp) da linha a fazer o update
2) No update :
            para utilizar o comando update pelo SQL, deveria  controlar se o ecra não esta em modo de edição ou introdução, se estiver a browlist nao deveria abrir
            se o ecra estiver em modo de edição ou introdução deveria ser corrigido  atravès do replace
_______
Possivel melhoria:
   Na BI existe o campo peso, que preenche o peso existente na ficha do produto, e este sim utilizado para actualizar, mas este campo nao fica visivel nas linhas
   ao utilizar a campo u_pesogr, este pode ficar disponivel nas linhas e editavel, e desta forma nao necessita da browlist, pode apresentar uma mensagem ao gravar a indicar que faltam pesos.

_______

select bi
u_sqlexec([SELECT bi.bistamp, bi.bostamp,  ref,design, qtt, peso, u_pesogr, u_pesogr as u_pesogr2 FROM bi where bi.bostamp=']+alltrim(bi.bostamp)+['],[PESOS])


Declare list_tit(4),list_cam(4),list_pic(4),list_tam(4),list_tag(4),list_ronly(4)
list_tit(1) = 'Ref'
list_tit(2) = 'Desginação'
list_tit(3) = 'Qtt'
list_tit(4) = 'Peso'

List_cam(1) = 'PESOS.ref'
List_cam(2) = 'PESOS.design'
List_cam(3) = 'PESOS.qtt'
List_cam(4) = 'PESOS.u_pesogr'


list_pic(1) = ''
list_pic(2) = ''
list_pic(3) = ''
list_pic(4) = ''

list_tam(1) = 100
list_tam(2) = 300
list_tam(3) = 100
list_tam(4) = 100


list_ronly(1) = .t.
list_ronly(2) = .t.
list_ronly(3) = .t.
list_ronly(4) = .f.

m.escolheu=.f.
browlist('Correção de Pesos','PESOS','Browlist1',.t.,.F.,.F.,.F.,.F.,'',.t.)

IF m.escolheu=.t.
go top
select PESOS
scan
 x1 = [ update bi set peso=']+StrTran(astr(PESOS.u_pesogr, 10, 3), ',', '.')+[' where bi.bistamp=']+alltrim(pesos.bistamp)+[' ]
 u_sqlexec(x1)
endscan


endif

 

  • Voto 2

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camexavi

Muito obrigado @pc.cesar já funciona.

Só ficou a faltar o refresh do dossier,  para ver os valores alterados, sem precisar de clicar no botão atualizar.

Será que podes indicar-me qual o comando e onde colocar?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camexavi

continua sem funcionar o refresh

O código que ficou a funcionar conforme o que pretendo está abaixo, será que tenho alguma coisa que impede o refresh??

Mais uma vez, muito obrigado pela ajuda!!

if sbo.adding=.t. or sbo.editing=.t.

mensagem('Para usar esta opção, o dossier não pode estar a ser editado ou criado novo...','directa')

else

select bi
u_sqlexec([SELECT bi.bistamp, bi.bostamp, ref, design, qtt, u_pesogr FROM bi where bi.bostamp=']+alltrim(bi.bostamp)+['],[PESOS])


Declare list_tit(4),list_cam(4),list_pic(4),list_tam(4),list_tag(4),list_ronly(4)
list_tit(1) = 'Ref'
list_tit(2) = 'Desginação'
list_tit(3) = 'Qtt'
list_tit(4) = 'Peso'

List_cam(1) = 'PESOS.ref'
List_cam(2) = 'PESOS.design'
List_cam(3) = 'PESOS.qtt'
List_cam(4) = 'PESOS.u_pesogr'


list_pic(1) = ''
list_pic(2) = ''
list_pic(3) = ''
list_pic(4) = ''

list_tam(1) = 100
list_tam(2) = 300
list_tam(3) = 100
list_tam(4) = 100


list_ronly(1) = .t.
list_ronly(2) = .t.
list_ronly(3) = .t.
list_ronly(4) = .f.

m.escolheu=.f.
 browlist('Correção de Pesos','PESOS','Browlist1',.t.,.F.,.F.,.F.,.F.,'',.t.)

IF m.escolheu=.t.
go top
select PESOS
scan
x1 = [update bi set u_pesogr=']+StrTran(astr(PESOS.u_pesogr, 10, 3), ',', '.')+[' where bi.bistamp=']+alltrim(pesos.bistamp)+[' ]
u_sqlexec(x1)
endscan
endif

endif

sbo.refresh

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pc.cesar

Vou testar

Retire o

if m.escolheu=.t.

Endif

Assim so actualiza a última linha alterada 

 

-------

Dentro do scan pode controlar se o valor foi alterado e se for efectua o update

Editado por pc.cesar
+
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camexavi
1 hora atrás, pc.cesar disse:

Vou testar

Retire o

if m.escolheu=.t.

Endif

Assim so actualiza a última linha alterada 

 

-------

Dentro do scan pode controlar se o valor foi alterado e se for efectua o update

Peço desculpa @pc.cesar mas acho que não entendi o que sugeriu.

Contudo já retirei

if m.escolheu=.t.

mas continua sem funcionar o refresh do dossier

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camexavi

Boa tarde.

No PHC a opção exportar nos mapas definidos permite criar ficheiro TXT Delimitado com TAB's (.TXT), mas os campos de texto ficam delimitados por aspas.

Será possível exportar o mesmo ficheiro mas sem aspas a delimitar os campos?

Mais uma vez obrigado!

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camexavi

Boa noite,

Primeiramente quero agradecer toda a ajuda que tenho obtido neste fórum.

Venho mais uma vez pedir a vossa estimada ajuda. Tenho o código que publico abaixo, para pesquisar um valor no campo "bo.obranome", e funciona bem quando tenho um registo já selecionado no ecrã, mas não funciona no caso de ainda não ter qualquer registo selecionado, isto é quando seleciono o nome do dossier na 1a vez sem abrir qualquer registo.

O que estou a fazer de errado?

Obrigado!

If bo.ndos<>39 and bo.ndos<>40
 msg("Esta opção só pode ser utilizada nos dossiers Ordem de Fabrico e Ficha Técnica.")
 return
endif

If sbo.adding=.t. Or sbo.editing=.t.
 msg("O dossier Ordem de Fabrico está em modo de edição/introdução. Deve gravar ou cancelar para usar esta opção.")
 Return
endif


 Local vRef
  Select bo 
  vRef=getnome("Indique a referência que pretende pesquisar")
  If bo.ndos=39
   TEXT to msel textmerge noshow
   select bo.bostamp,bo.obranome as Referencia, st.design as designacao from bo(nolock)
   inner join st(nolock) on bo.obranome=st.ref where bo.obranome like '<<alltrim(vRef)>>%' and bo.ndos=39
   ENDTEXT
  endif
  If bo.ndos=40
   TEXT to msel textmerge noshow
   select bo.bostamp,bo.obranome as Referencia, st.design as designacao from bo(nolock)
   inner join st(nolock) on bo.obranome=st.ref where bo.obranome like '<<alltrim(vRef)>>%' and bo.ndos=40
   ENDTEXT
  endif




  If !u_sqlexec(msel,"curRef")
   msg("Erro a pesquisar referência. Contacte o Administrador de Sistema")
   Return
  Endif

  If Reccount("curRef")=0
   msg("Não foram encontradas referencias com esse critério. Tente novamente com outra referência")
  Endif

  If Reccount("curRef")=1
   Select bo
   navega("BO",curRef.bostamp)
  Else

   If Reccount("curRef")>0
    Select curREF

    i=2
    Declare list_tit(i),list_cam(i),list_tam(i),list_pic(i),list_ronly(i)

    i=0

    i=i+1
    list_tit(i)="Referência"
    list_cam(i)="curRef.referencia"
    list_ronly(i)=.F.
    list_pic(i)=""
    list_tam(i)=8*18

    i=i+1
    list_tit(i)="Designação"
    list_cam(i)="curRef.designacao"
    list_ronly(i)=.T.
    list_pic(i)=""
    list_tam(i)=8*60

    m.escolheu = .F.

    browlist('Referência a produzir','curRef','curRef',.F.,.F.,.F.,.T.,.F.)

    If m.escolheu = .F.
     msg("Operação cancelada")
    Else
     Select bo
     vRef=curREF.referencia
     navega("BO",curREF.bostamp)
    Endif
   Endif
  Endif

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pc.cesar
15 horas atrás, camexavi disse:

Boa noite,

Primeiramente quero agradecer toda a ajuda que tenho obtido neste fórum.

Venho mais uma vez pedir a vossa estimada ajuda. Tenho o código que publico abaixo, para pesquisar um valor no campo "bo.obranome", e funciona bem quando tenho um registo já selecionado no ecrã, mas não funciona no caso de ainda não ter qualquer registo selecionado, isto é quando seleciono o nome do dossier na 1a vez sem abrir qualquer registo.

O que estou a fazer de errado?

Obrigado!
 


If bo.ndos<>39 and bo.ndos<>40
 msg("Esta opção só pode ser utilizada nos dossiers Ordem de Fabrico e Ficha Técnica.")
 return
endif

If sbo.adding=.t. Or sbo.editing=.t.
 msg("O dossier Ordem de Fabrico está em modo de edição/introdução. Deve gravar ou cancelar para usar esta opção.")
 Return
endif


 Local vRef
  Select bo 
  vRef=getnome("Indique a referência que pretende pesquisar")
  If bo.ndos=39
   TEXT to msel textmerge noshow
   select bo.bostamp,bo.obranome as Referencia, st.design as designacao from bo(nolock)
   inner join st(nolock) on bo.obranome=st.ref where bo.obranome like '<<alltrim(vRef)>>%' and bo.ndos=39
   ENDTEXT
  endif
  If bo.ndos=40
   TEXT to msel textmerge noshow
   select bo.bostamp,bo.obranome as Referencia, st.design as designacao from bo(nolock)
   inner join st(nolock) on bo.obranome=st.ref where bo.obranome like '<<alltrim(vRef)>>%' and bo.ndos=40
   ENDTEXT
  endif




  If !u_sqlexec(msel,"curRef")
   msg("Erro a pesquisar referência. Contacte o Administrador de Sistema")
   Return
  Endif

  If Reccount("curRef")=0
   msg("Não foram encontradas referencias com esse critério. Tente novamente com outra referência")
  Endif

  If Reccount("curRef")=1
   Select bo
   navega("BO",curRef.bostamp)
  Else

   If Reccount("curRef")>0
    Select curREF

    i=2
    Declare list_tit(i),list_cam(i),list_tam(i),list_pic(i),list_ronly(i)

    i=0

    i=i+1
    list_tit(i)="Referência"
    list_cam(i)="curRef.referencia"
    list_ronly(i)=.F.
    list_pic(i)=""
    list_tam(i)=8*18

    i=i+1
    list_tit(i)="Designação"
    list_cam(i)="curRef.designacao"
    list_ronly(i)=.T.
    list_pic(i)=""
    list_tam(i)=8*60

    m.escolheu = .F.

    browlist('Referência a produzir','curRef','curRef',.F.,.F.,.F.,.T.,.F.)

    If m.escolheu = .F.
     msg("Operação cancelada")
    Else
     Select bo
     vRef=curREF.referencia
     navega("BO",curREF.bostamp)
    Endif
   Endif
  Endif

 

Não sei exactamente o que pretende, mas colocar uma lupa de pesquisa nesse campo, é o correcto nao precisa de codigo

relativamente ao apresentada, é normal que nao funcione porque no inicio do codigo tem 

If bo.ndos<>39 and bo.ndos<>40

e se o ecra nao tem registos entao  bo.ndos='', alias nesta altura o BO não existe, quando abre o PHC pela primeira ves "sem views"

retire o if,  para permitir executar em qualquer ecran e altere a query para,

   TEXT to msel textmerge noshow
   select bo.bostamp, bo.nmdos, bo.obranome as Referencia, st.design as designacao from bo(nolock)
   inner join st(nolock) on bo.obranome=st.ref where bo.obranome like '<<alltrim(vRef)>>%' and bo.ndos in (39, 40) order by bo.ndos, bo.obranome
   ENDTEXT

desta forma com o navega vai para o registo... mas a partir de qualquer outro ecra...

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
FGuedes

Bom dia,

Sou novo por aqui, e no phc também, não sei se me conseguem ajudar, pois isto é mais uma duvida do que programação no phc.

Temos a versão 22 com o último update e o nossos recibos a clientes, na partes dos documentos a regularizar as n/ crédito aparecem com valor final a zero não sendo possível ajustar com as faturas. No entanto na parte dos fornecedores funciona sem qualquer problema.

phc.png

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camexavi

Boa noite,

Peço mais uma vez ajuda.

Pretendia criar tecla de utilizador, para compras, com a função de preencher o armazém de cada nova linha inserida com o mesmo armazém da linha anterior.

Tenho este código, que funciona quando é inserida a nova linha, mas assim que digito referencia de artigo o armazém desaparece.

Local mARM
mARM=fn.armazem
Select fn

&& mensagem(astr(mARM),'directa')
Do foine2in
Replace fn.armazem With mARM

sfo.pageframe1.page1.cont1.grid1.SetFocus()
sfo.pageframe1.page1.cont1.grid1.Column&fo_colref..&fo_cColRef..Refresh()
sfo.pageframe1.page1.cont1.grid1.Column&fo_colref..&fo_cColRef..SetFocus()

sfo.Refresh()

Obrigado!!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camexavi
18 horas atrás, pc.cesar disse:

valor por defeito


SKIP -1
v_armazem = bi.armazem 
goto bottom
replace bi.armazem with v_armazem
return bi.armazem

 

obrigado pela resposta @pc.cesar

Com estava a referir-me a compras, coloquei o valor por defeito na tabela FN, campo fn.armazem, e alterei "BI" por "FN", mas não funciona.

Quando insiro a nova linha, até copia o armazém da linha anterior, mas após digitar a referencia e avançar (com enter ou tab), limpa o campo armazém!!

 A versão que estou a usar é Corporate, não sei se terá alguma limitação!!

Mais uma vez Obrigado!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoseAC

Olá a todos,

procuro a possibilidade no PHC Adavanced V21 , a possibilidade de usar um campo memo na opção do menu dropdown, isto deve-se ao limite do campo C

de momento tenho o tipo de campo criado com C, disseram-me que tinha de criar um campo M memo e depois associar ao campo C

Alguém já tentou fazer isto?

Alguma ajuda era bem vinda :)

 

Obrigado

José

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pc.cesar

Ou seja pretendem que com um campo tipo combobox não dropdown ir buscar um campo memo para visualisar ou inserir

Pretendem inserir onde? num campo memo , na impressão, ou nas linhas(o phc tem uma junção identica.. "inserir muito texto")

Sim é possível

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoseAC

@pc.cesar

queria inserir na tabela dos equipamentos.

quando diz "inserir muito texto" se calhar isto serve não devo ter mais de 1.000 caracteres.

como posso fazer isso ?

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pc.cesar

Nao server, "inserir muito texto", é para inserir nas linhas dos dossier ou facturas

Pode Explicar exactamente o que pretende ?!!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camexavi

Boa noite!!

Tenho o código abaixo associado a tecla no ecrã faturação. Pretendia saber se existe algum comando que depois da pesquisa e selecionar o cliente, alem do nome do cliente os restantes dados que normalmente são preenchidos, sejam preenchidos como se fosse a "pesquisa normal" do PHC

Obrigado!

If sft.adding=.T. Or sft.editing=.T.

	Create Cursor xVars ( no N(5), tipo c(1), Nome c(40), Pict c(100), lOrdem N(10), tbVal m, nValor N(18,5), cValor c(250),mValor m, lValor l, dValor d )

	* prencher os dados de cada variavel a pedir

	Select xVars
	Append Blank
	Replace xVars.no With 1
	Replace xVars.tipo With "C"
	Replace xVars.Nome With "Nome do Cliente"
	Replace xVars.Pict With ""
	Replace xVars.lOrdem With 1
	Replace xVars.cValor With ''

	Select xVars
	Append Blank
	Replace xVars.no With 2
	Replace xVars.tipo With "C"
	Replace xVars.Nome With "Telemóvel"
	Replace xVars.Pict With ""
	Replace xVars.lOrdem With 2
	Replace xVars.cValor With ''


	m.Escolheu = .F.

	m.mCaption = "Listagem de Clientes"

	docomando("do form usqlvar with 'xvars',m.mCaption")

	If Not m.Escolheu
		Return .F.
	Else
		Select xVars
		Locate
		clnome=xVars.cValor
		Select xVars
		Skip
		clncont=xVars.cValor
	Endif

	If !Empty(clnome) And !Empty(clncont)
		msel="select no,estab,nome,nome2,morada,local,codpost,ncont,telefone,tlmvl from cl where (nome like '%'+'"+Alltrim(clnome)+"'+'%' or nome2 like '%'+'"+Alltrim(clnome)+"'+'%') and (ncont like '%'+'"+Alltrim(clncont)+"'+'%' or telefone like '%'+'"+Alltrim(clncont)+"'+'%' or tlmvl like '%'+'"+Alltrim(clncont)+"'+'%')"
endif
	If !Empty(clnome) And Empty(clncont)
		msel="select no,estab,nome,nome2,morada,local,codpost,ncont,telefone,tlmvl from cl where (nome like '%'+'"+Alltrim(clnome)+"'+'%' or nome2 like '%'+'"+Alltrim(clnome)+"'+'%')"
endif
	If Empty(clnome) And !Empty(clncont)
		msel="select no,estab,nome,nome2,morada,local,codpost,ncont,telefone,tlmvl from cl where (ncont like '%'+'"+Alltrim(clncont)+"'+'%' or telefone like '%'+'"+Alltrim(clncont)+"'+'%' or tlmvl like '%'+'"+Alltrim(clncont)+"'+'%')"
endif
	If Empty(clnome) And Empty(clncont)
		msel="select no,estab,nome,nome2,morada,local,codpost,ncont,telefone,tlmvl from cl"
endif


		*msel=msel+"tlmvl like '%'+'"+alltrim(clncont)+"'+'%' where (nome like '%'+'"+alltrim(clnome)+"'+'%' or "
		*msel=msel+"nome2 like '%'+'"+alltrim(clnome)+"'+'%') and tlmvl like '%'+'"+alltrim(clncont)+"'+'%'order by nome,estab"



		u_sqlexec(msel,[curCL])

		Select curCL

		Declare list_tit(4),list_cam(4),list_pic(4),list_tam(4),list_tag(4)

		list_tit(1)='Nome do Cliente'
		list_cam(1)='curCL.nome'
		list_pic(1)=''
		list_tam(1) = 100

		list_tit(2)='Loja'
		list_cam(2)='curCL.nome2'
		list_pic(2)=''
		list_tam(2) = 100

		list_tit(3)='Número'
		list_cam(3)='curCL.no'
		list_pic(3)='###,###'
		list_tam(3) = 100

		list_tit(4)='Estabelecimento'
		list_cam(4)='curCL.estab'
		list_pic(4)='###'
		list_tam(4) = 100


		m.Escolheu=.F.

		Browlist('Listagem de Clientes','curCL','browlistCL',.F.,.F.,.F.,.F.,.F.,' ',.F.,.F.)

		If m.Escolheu=.T.

			Replace ft.Nome With curCL.Nome
					
		Endif

	Else

		Return

	Endif

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.