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

joaquimmoreira

olá boa tarde pessoal

precisava de obter na listagem de artigos uma coluna com os valores com IVA para isso tenho o seguinte código, mas não está funcionar correctamente porque só aparecem 000000, será que alguém pode-me ajudar a verificar onde está o erro.

MEUSELECT = ""

TEXT TO MEUSELECT NOSHOW

SELECT ST.EPV4 * (1+(ISNULL((SELECT TAXASIVA.TAXA FROM TAXASIVA (NOLOCK) WHERE TAXASIVA.CODIGO = ST.TABIVA),0)/100)) AS VALOR

FROM ST (NOLOCK) WHERE ST.REF = '<<m.TsqlReturn>>'

ENDTEXT

U_SQLEXEC (MEUSELECT,"CURSOR_STVAL")

RETURN CURSOR_STVAL.VALOR

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Zm3

alguém me pode ajudar numa questão sobre programação PHC?

é possível criar e trabalhar com funções usando a framework PHC.

Por exemplo dentro de uma regra criar funções que execute determinado procedimento.

Já tentei criar função, mas não obtenho qualquer resposta.

Exemplo:

===============================================

Function FazIsto

** funcao

messagebox("FazIsto")

...

EndFunc

**chamada da funcao

Fazisto()

===============================================

Partilhar esta mensagem


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

Qual a versão do PHC

as funções tem e ser criadas na tecla ou regra que pretende utilizar

exemplo:

function fecha_ecra

PDU_2760WF2LM.Hide

endfunc

fecha_ecra()

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Camarao69

Boa tarde

Alguem me sabe dizer se é possivel passar todos os artigos de um cursor para a memoria interna dos stocks e serviços

if m.escolheu=.t.

navega("ST",curST.ststamp)

como faço para que me de todos sem ter de escolher.

Obrigado

Partilhar esta mensagem


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

boas,

Não percebi o que realmente pretende

mas podes fazer o seguinte

if u_sqlexec([select st.ref, st.design, st.stock from st(nolock) where st.familia=AAA], [sTLIST])

fecha("STLIST")

select STLIST

else

endif

Se clicares no ecra de stock no icone "Lista de seleção" e terás o teu cursor

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
toribeiro

Viva a todos!

Sou iniciante no Phc e surgiu-me uma dúvida, será que é possível restringir alguns campos do ecrã "stock e serviços" para apenas um utilizador ter acesso a esses respectivos campos?

E se sim, qual o procedimento mais adequado?

Se alguém me pudesse esclarecer esta dúvida agradecia :)

Editado por toribeiro

Partilhar esta mensagem


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

Duas formas

- poder criar ecras personalizados

ou

- podes editar o ecra e em cada campo dizer se os utilizadores/Grupos/Perfiz podem ver / editar - de forma a otimizar aconcelho a utilização da personalização por grupos ou perfis e não por utilizador..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
toribeiro

Obrigado pela resposta.

Mas sabes dizer-me qual a propriedade dos ecrãs personalizados que me permite definir os utilizadores/Grupos/Perfis que tem acesso a ver ou editar o respectivo campo?

Estive a ver todas as propriedades dos ecrãs personalizados e não encontrei nenhuma que me permitisse definir o utilizador/Grupo/Perfil.

Estou a trabalhar na versão PHC CS Corporate V18

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NelsonPaiva

Boa tarde.

Eu tenho uma análise que ao ser executada pede uma variável que vai ser pesquisado nos dossiers.

A variável a colocar é do tipo: xx.xxxx.xx em que os dois primeiros xx é o ano, os xxxx um código, e os ultimos xx um valor sequencial.

A minha questão é que apenas funciona se colocar o valor completo da variável. Por exemplo imaginando que colocava 11.1234.01 o mapa funciona correctamente. No entanto nalgumas situações eu pretendia colocar apenas 11.1234. e queria que me mostrassem os resultados para todos os registos encontrados que começassem por esse valor (seja 11.1234.01, 11.1234.02, etc) e também pesquisar apenas pelo ano, ou seja 11.

Existe alguma forma de fazer isto?

Neste momento a variável é testada da seguinte forma: = #1#

De que forma posso alterar isto para ir buscar todos os registos que comessem pelo que indiquei?

Obrigado.

Boa tarde.

Eu tenho uma análise que ao ser executada pede uma variável que vai ser pesquisado nos dossiers.

A variável a colocar é do tipo: xx.xxxx.xx em que os dois primeiros xx é o ano, os xxxx um código, e os ultimos xx um valor sequencial.

A minha questão é que apenas funciona se colocar o valor completo da variável. Por exemplo imaginando que colocava 11.1234.01 o mapa funciona correctamente. No entanto nalgumas situações eu pretendia colocar apenas 11.1234. e queria que me mostrassem os resultados para todos os registos encontrados que começassem por esse valor (seja 11.1234.01, 11.1234.02, etc) e também pesquisar apenas pelo ano, ou seja 11.

Existe alguma forma de fazer isto?

Neste momento a variável é testada da seguinte forma: = #1#

De que forma posso alterar isto para ir buscar todos os registos que comessem pelo que indiquei?

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Camarao69

Boa tarde

 

Preciso de uma tecla de utilizador que abra uma imagem cujo caminho está no campo st.u_imagem3. Alguem me pode dar uma ajuda com a  função?

 

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camexavi

Boa tarde,

Solicito a amabilidade de alguém que me possa ajudar na seguinte situação:

Tenho um dossier interno "bo.ndos=30" que tem um campo "bo.APROVADO" (tipo checkbox 0/1), que tem um campo nas linhas "bi.U_APROVADO" (tipo checkbox 0/1).
Pretendia que, se todas as linhas tivessem o referido campo marcado(=1), automaticamente o campo "bo.APROVADO" ficasse também marcado(1), caso contrário, se alguma das linhas não tivesse marcada o campo "bo.APROVADO" ficaria desmarcado(=0)

O que tenho feito é isto, mas não funciona:

If bo.ndos=30
 Select bi
 Go Top
 Scan For !Empty(bi.ref)
  u_sqlexec([select U_APROVADO from bi where bi.U_aprovado=0 and Bi.bostamp=']+(Alltrim(bo.bostamp))+['],[curBIAPROV])
  u_sqlexec([select U_APROVADO from bi WHERE Bi.bostamp=']+(Alltrim(bo.bostamp))+['],[curBITOTAL])

  Select curBIAPROV
  Var = Reccount()

  Select curBITOTAL
  Var1 = Reccount()


  If Var=Var1
   Replace bo.aprovado With .F.
  Else
   Replace bo.aprovado With .T.
  Endif
 Endscan

Endif
Return .T.

 

Obrigado

Partilhar esta mensagem


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

Boas, 

Acho que percebi o conceito da ideia....

Da forma como fizeste em cada linha ele verifica se este tudo bem, ou seja de o dossier tiver 50 linhas existem 100 consultas ao SQL sem necessidade.
A regra deverá ser as ultimas a ser executada ou seja coloca no campo ordem da regra 80 assim esta será das ultimas regras a correr.

----------------Forma 1---- com select á BD--------------------

If bo.ndos!=30
   return .F.
else

Text to m.cSelbo noshow textmerge
select 
      (select count(bi.U_APROVADO) from bi where bi.ref<>'' and bi.U_APROVADO=1 and Bi.bostamp='<< (Alltrim(bo.bostamp)) >>') aprov
    , (select count(bi.U_APROVADO) from bi where bi.ref<>'' and bi.U_APROVADO=0 and Bi.bostamp='<< (Alltrim(bo.bostamp)) >>') Naprov
    , (select count(bi.U_APROVADO) from bi where bi.ref<>'' and Bi.bostamp='<< (Alltrim(bo.bostamp)) >>') total]
EndText

u_sqlexec(m.cSel,"AprovaBO")

  If (AprovaBO.aprov=AprovaBO.total) and AprovaBO.Naprov=0
   Replace bo.aprovado With .T.
  Else
   Replace bo.aprovado With .F.
  Endif

Endif
----------------Forma 2------ sem select á bd -- na teoria é mais rápido ----------------

select bo

If bo.ndos=30
replace bo.aprovado=.t.

 Select bi
 Go Top
 Scan For !Empty(bi.ref)
  if bi.u_aprovado=.f.
      Replace bo.aprovado With .F.
  Endif
 Endscan

Endif

 

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camexavi

Muito obrigado pela ajuda pc.cesar.

A forma 1 não funciona, mas a forma 2 está a funcionar.

Mais uma vez muito obrigado

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Camarao69

Boa noite

 

Gostava de saber se é possivel num browlist visualizar as respetivas imagens cujo caminho esta no campo ST.U_IMAGEM3.

 

Cumprimentos

 

Marcos Vieira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camexavi
Em 14/11/2016 às 18:48, pc.cesar disse:

Boas, 

Acho que percebi o conceito da ideia....

Da forma como fizeste em cada linha ele verifica se este tudo bem, ou seja de o dossier tiver 50 linhas existem 100 consultas ao SQL sem necessidade.
A regra deverá ser as ultimas a ser executada ou seja coloca no campo ordem da regra 80 assim esta será das ultimas regras a correr.


----------------Forma 1---- com select á BD--------------------

If bo.ndos!=30
   return .F.
else

Text to m.cSelbo noshow textmerge
select 
      (select count(bi.U_APROVADO) from bi where bi.ref<>'' and bi.U_APROVADO=1 and Bi.bostamp='<< (Alltrim(bo.bostamp)) >>') aprov
    , (select count(bi.U_APROVADO) from bi where bi.ref<>'' and bi.U_APROVADO=0 and Bi.bostamp='<< (Alltrim(bo.bostamp)) >>') Naprov
    , (select count(bi.U_APROVADO) from bi where bi.ref<>'' and Bi.bostamp='<< (Alltrim(bo.bostamp)) >>') total]
EndText

u_sqlexec(m.cSel,"AprovaBO")

  If (AprovaBO.aprov=AprovaBO.total) and AprovaBO.Naprov=0
   Replace bo.aprovado With .T.
  Else
   Replace bo.aprovado With .F.
  Endif

Endif

----------------Forma 2------ sem select á bd -- na teoria é mais rápido ----------------

select bo

If bo.ndos=30
replace bo.aprovado=.t.

 Select bi
 Go Top
 Scan For !Empty(bi.ref)
  if bi.u_aprovado=.f.
      Replace bo.aprovado With .F.
  Endif
 Endscan

Endif

 

Boas pc.cesar,

Desculpa a insistência, mas tendo em conta o código que enviaste, será possível atualizar o campo "bo.trab5" do dossier no. 30 tendo em conta o campo "bi.u_aprovado" das linhas com a seguinte condição:

- Todas as linhas bi.u_aprovado = .t. então bo.trab5=Aprovado totalidade

- Todas as linhas bi.u_aprovado = .f. então bo.trab5=Recusado

- Algumas linhas bi.u_aprovado = .t. outras .f. então bo.trab5=Aprovado parcialmente

Obrigada

Partilhar esta mensagem


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

Possivel é mas nao me recordo se funciona em corporate....

Bom dia

Não faz mal, já me tem ajudado muito a troco de nada.

Muito obrigado

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NelsonPaiva

É possível fazer com que um determinado utilizador não tenha acesso aos botoes de criar e eliminar linhas?

Eu pretendo que esse utilizador possa preencher algumas colunas das linhas mas não queria que ele eliminasse ou criasse linhas novas.

Não sei se isto é possível.

Partilhar esta mensagem


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

qual a versão ? corporate,  advanced ou enterprise?

 

A forma mais simples  não é esconder os botões, mas sim controlar se o cursor DELBI está vazio
não testei mas é algo do genero

REGRA

select bo
select BI

select delbi
if reccount>0
   msg("Não pode Gravar, Apagou alguma linha e não é permitido")
   SBO.pageframe.page1.cont1.lapagar,enabled=.f.
** ou
   SBO.pageframe.page1.cont1.lapagar,visible=.f.
   return .f.
else
   SBO.pageframe.page1.cont1.lapagar,enabled=.t.
endif

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pc.cesar
Em 11/15/2016 às 22:57, camexavi disse:

Boas pc.cesar,

Desculpa a insistência, mas tendo em conta o código que enviaste, será possível atualizar o campo "bo.trab5" do dossier no. 30 tendo em conta o campo "bi.u_aprovado" das linhas com a seguinte condição:

- Todas as linhas bi.u_aprovado = .t. então bo.trab5=Aprovado totalidade

- Todas as linhas bi.u_aprovado = .f. então bo.trab5=Recusado

- Algumas linhas bi.u_aprovado = .t. outras .f. então bo.trab5=Aprovado parcialmente

Obrigada

local contador1, contador2
contador1=0
contador2=0

select bi

scan
if bi.u_aprovado = .t.
contador1 = contador1 +1
endif

if bi.u_aprovado = .f.
contador2 = contador2 +1
endif
endscan

if contador1>=1 and Contador2=0
replace bo.trab5 with "Aprovado totalidade"

else
 if contador1=0 and Contador2>=1
   replace bo.trab5 with "Reprovado"
else
   replace bo.trab5 with "Aprovado parcialmente "+astr(contador1) + " / "+ astr(contador2)
endif

endif

 

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NelsonPaiva
Em 07/06/2016 às 16:16, NelsonPaiva disse:

Boa tarde.

Eu tenho uma análise que ao ser executada pede uma variável que vai ser pesquisado nos dossiers.

A variável a colocar é do tipo: xx.xxxx.xx em que os dois primeiros xx é o ano, os xxxx um código, e os ultimos xx um valor sequencial.

A minha questão é que apenas funciona se colocar o valor completo da variável. Por exemplo imaginando que colocava 11.1234.01 o mapa funciona correctamente. No entanto nalgumas situações eu pretendia colocar apenas 11.1234. e queria que me mostrassem os resultados para todos os registos encontrados que começassem por esse valor (seja 11.1234.01, 11.1234.02, etc) e também pesquisar apenas pelo ano, ou seja 11.

Existe alguma forma de fazer isto?

Neste momento a variável é testada da seguinte forma: = #1#

De que forma posso alterar isto para ir buscar todos os registos que comecem pelo que indiquei?

Obrigado.

Alguém me consegue dar uma ajuda nisto?

Obrigado.

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.