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

Apolo

PHC - Programação em XBASE

Mensagens Recomendadas

pc.cesar    5
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

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
camexavi    0
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


Link para a mensagem
Partilhar noutros sites
camexavi    0
camexavi
50 minutos atrás, pc.cesar disse:

colocar no final da tecla


sbo.refresh()

 

já coloquei mas não funciona!!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
camexavi    0
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


Link para a mensagem
Partilhar noutros sites
pc.cesar    5
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
+

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
camexavi    0
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


Link para a mensagem
Partilhar noutros sites
camexavi    0
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


Link para a mensagem
Partilhar noutros sites
camexavi    0
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


Link para a mensagem
Partilhar noutros sites
pc.cesar    5
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...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
FGuedes    0
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


Link para a mensagem
Partilhar noutros sites
camexavi    0
camexavi

Boa noite @FGuedes

Muito provavelmente a nota de credito a clientes está configurada para regularizar os movimentos c/c automaticamente no ato da emissão.

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
camexavi    0
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


Link para a mensagem
Partilhar noutros sites
pc.cesar    5
pc.cesar

valor por defeito

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

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
camexavi    0
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


Link para a mensagem
Partilhar noutros sites
JoseAC    0
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


Link para a mensagem
Partilhar noutros sites
pc.cesar    5
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


Link para a mensagem
Partilhar noutros sites
JoseAC    0
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


Link para a mensagem
Partilhar noutros sites
pc.cesar    5
pc.cesar

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

Pode Explicar exactamente o que pretende ?!!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
camexavi    0
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


Link 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