Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Apolo

PHC - Programação em XBASE

Recommended Posts

femo
Em 17/02/2017 às 16:27, NelsonPaiva disse:

Alguém me consegue dar uma ajuda nisto?

Obrigado.

Sem ter testado, parece-me que bastará na condição em vez de colocares = colocares Like '%'#1#'%' (o % em SQL funciona como o * )

  • Vote 1

Fernando Morais

Share this post


Link to post
Share on other sites
NelsonPaiva
Em 18/02/2017 às 22:40, femo disse:

Sem ter testado, parece-me que bastará na condição em vez de colocares = colocares Like '%'#1#'%' (o % em SQL funciona como o * )

Vou testar então a ver.

Share this post


Link to post
Share on other sites
pc.cesar
Em 18/02/2017 às 22:40, femo disse:

Sem ter testado, parece-me que bastará na condição em vez de colocares = colocares Like '%'#1#'%' (o % em SQL funciona como o * )

 

where campo like #1#

 

Ao executar a analise, quando aparecer o ecra das variaveis de pesquisa coloca %oqueprocuras%, a % substitui qualquer caracter

Share this post


Link to post
Share on other sites
Camarao69

Boa tarde

Preciso de ajuda por favor,preciso de saber qual a função que determina a linha seleccionada num dossie interno (se possivel)

O que pretendo é saber qual o st.stock-qttcli da linha seleccionada no dossier interno.

 

Por exemplo tenho este código inserido numa grelha  de um dossier interno que esta a  funcionar lindamente, 

u_sqlexec([select nocredit  from dbo.cl where cl.no=]+astr(bo.no),[curCL])

select curCL
if curCL.nocredit=.T.

SBO.pageframe1.page1.obj92.value="FATURAÇÃO CANCELADA"
else
SBO.pageframe1.page1.obj92.value=" "

SBO.refrescar

endif

 

Agora só não sei como como pedir ao phc que me de os dados de uma  linha seleccionada quero que me  dê o st.stock-qttcli dessa linha.

 

Obrigado

 

Edited by Camarao69
Erros ortograficos

Share this post


Link to post
Share on other sites
pc.cesar

Notas:
1) o PHC ja faz isso nos dosiser, existe um parâmetro para activar
2) pretende a o STOCK - QTTCLI de todos os armazens , ou do armazem que estiver na linha porque as QTT podem ser diferentes

 

3) aqui vai o que pretende no caso de nao interessar a QTT por armazem, o formato grelha funciona, mas apenas se alterar algum valor na linha o simples cliar em cima nao faz nada.
select bo
select bi
if u_sqlexec([select design, stock, st.stock-qttcli  from st(nolock) where st.ref=]+alltrim(bi.ref),[curCL])

mostrameisto("curCL")

endif

Share this post


Link to post
Share on other sites
Camarao69
12 horas atrás, pc.cesar disse:

Notas:
1) o PHC ja faz isso nos dosiser, existe um parâmetro para activar
2) pretende a o STOCK - QTTCLI de todos os armazens , ou do armazem que estiver na linha porque as QTT podem ser diferentes

 

3) aqui vai o que pretende no caso de nao interessar a QTT por armazem, o formato grelha funciona, mas apenas se alterar algum valor na linha o simples cliar em cima nao faz nada.
select bo
select bi
if u_sqlexec([select design, stock, st.stock-qttcli  from st(nolock) where st.ref=]+alltrim(bi.ref),[curCL])

mostrameisto("curCL")

endif

Bom dia Cesar

Mais uma vez muito obrigado pela sua resposta.

A gama do  meu PHC é a Corporate.

Relativamente á 1ª Nota apenas consigo activar as opções:

Mostra stock actual de cada linha de dossier- Já esta activo

Mostra o stock previsto - esta não serve porque também soma o encomendado a fornecedor o que não pertendo.

O objectivo disto é facilitar a chamadas que recebemos por dia mas precisamos de saber ao segundo qual o stock realmente disponível em armazém sem termos de abrir  ficha do artigo em todas as linhas do dossier.

2ª Nota, apenas temos 1 armazem.

3ª Nota O codigo que me deu teria de funcionar como uma tecla certo?

É quase como clicar 2 vezes no artigo e ele abre me o stock e serviços, o codigo anterior que eu ponho numa grelha invisivel que passa a informação para um campo..

Mais concretamente sempre que abro um cliente no dossier  o phc mostra me num campo FATURAÇÂO CANCELADA, no caso de ter o visto na ficha do cliente. Eu queria algo parecido com isto que me desse logo a informação.Quero um  campo igual ao do stock e o stock previsto mas apenas para st.stock-qttcli.

 

Cumprimentos

 

Marcos Vieira

 

 

Edited by Camarao69
Acrescentei informação

Share this post


Link to post
Share on other sites
pc.cesar

O que enviei poderia ser colocado também numa grelha mas só actualiza se actualizar algo nas linhas.
Se percebi o cenário, não necessita de ser nos dossier?!!! porque nesse caso teria sempre de criar um dossier com os artigos, certo?

 

No caso de ter um dossier com a referencias a tecla abaixo apresenta uma lista de todos os artigos existentes no dossier

local yref 
select bo
select bi
go top

yref= "('"
scan
if !empty(bi.ref)
  yref= yref + "','"+alltrim(bi.ref)
endif
endscan 
yref= yref + "')"
**msg(yref)


Text to m.cSel noshow textmerge
select ref, design, stock, st.stock-qttcli StkActual, qttcli, qttfor   from st(nolock) where st.ref in << yref >>
EndText
msg(m.cSel)

u_sqlexec(m.cSel,"meuPC")
mostrameisto("meuPC")



mostrameisto("meuPC")

endif

 

Share this post


Link to post
Share on other sites
Camarao69
5 horas atrás, pc.cesar disse:

O que enviei poderia ser colocado também numa grelha mas só actualiza se actualizar algo nas linhas.
Se percebi o cenário, não necessita de ser nos dossier?!!! porque nesse caso teria sempre de criar um dossier com os artigos, certo?

 

No caso de ter um dossier com a referencias a tecla abaixo apresenta uma lista de todos os artigos existentes no dossier


local yref 
select bo
select bi
go top

yref= "('"
scan
if !empty(bi.ref)
  yref= yref + "','"+alltrim(bi.ref)
endif
endscan 
yref= yref + "')"
**msg(yref)


Text to m.cSel noshow textmerge
select ref, design, stock, st.stock-qttcli StkActual, qttcli, qttfor   from st(nolock) where st.ref in << yref >>
EndText
msg(m.cSel)

u_sqlexec(m.cSel,"meuPC")
mostrameisto("meuPC")



mostrameisto("meuPC")

endif

 

IMG%5D

Cesar boa tarde

Pode ser que a imagem ajude

O cenario é este, damos muitos orçamentos pelo telefone, o cliente liga e pede cotação para a referencia x, eu dou lhe o preço e tenho de ir ver sempre á ficha de artigo quantos estão reservados  fazer a conta e dizer quantos tenho disponiveis para lhe entregar no dia seguinte.

E queria ter como na imagem em anexo abaixo do campo que me dá o stock e o stock previsto um campo com o stock disponivel.

Cumprimentos

Share this post


Link to post
Share on other sites
pc.cesar

Vou analisar...

Pretende ver quando introduz a encomenta/orcamento? Se sim pode criar um novo campo nas linhas e ao gravar coloca o stock actual... mas passa sempre por ter uma tecla para actualizar o campo mesmo que nao grave...

. . . . .  . . . . 

O ultimo codigo enviado se for colocado numa tecla permite ver  browlist a qtt real dos artigos na encomenda.

Quanto ao ver num campo... passa sempre por ter uma tecla a actualizar no momento da consulta.

Share this post


Link to post
Share on other sites
Camarao69
24 minutos atrás, pc.cesar disse:

Vou analisar...

Pretende ver quando introduz a encomenta/orcamento? Se sim pode criar um novo campo nas linhas e ao gravar coloca o stock actual... mas passa sempre por ter uma tecla para actualizar o campo mesmo que nao grave...

. . . . .  . . . . 

O ultimo codigo enviado se for colocado numa tecla permite ver  browlist a qtt real dos artigos na encomenda.

Quanto ao ver num campo... passa sempre por ter uma tecla a actualizar no momento da consulta.

Eu neste momento tenho uma solução semelhante, tenho uma regra que me avisa depois de eu gravar o documento se tenho algum artigo sem stock para satisfazer o cliente.

Por acaso a 1 solução até tenho um codigo que serve para me reordenar as linha pela localização em armazem, ou seja depois de gravar ele introduz numa coluna do dossiers a localização do artigo, era so substituir pelo stock. Mas continuo com o mesmo problema só de pois de gravar. 

O codigo que eu postei inicialmente resultava se desse para funcionar com a linha seleccionada, que é a parte do código que eu não sei se dá para escrever.

Obrigado na mesma Cesar

 

Cumprimentos

Share this post


Link to post
Share on other sites
Camarao69

Boa tarde Cesar

Pus este código numa grelha e esta a funcionar em parte , como o césar já tinha dito antes só funciona depois de um duplo clique ou quando se edita  a linha.

select bi

msel = "select (st.stock-st.qttcli) as Disp from st(nolock) where st.ref='"+alltrim(bi.ref)+"'"


u_sqlexec(msel,[curRES])

select curRES
if reccount()>0


SBO.pageframe1.page1.obj100.value=curRES.disp
else
SBO.pageframe1.page1.obj100.value=" "

SBO.refrescar


endif

Isto pode ser uma pergunta estúpida mas cá vai, é possivel adicionar neste codigo um click tigger ?

Ou seja eu queria que ele so funcionasse  quando eu clicar num objeto mais propriamente no  pageframe1.page1.cont1.grid1 ele fazia automaticamente a actualização da linha. Imaginemos que ao clicar na grelha activa uma tecla de utilizador que actualizava o BI selecionado.

Cumprimentos

Marcos

 

Share this post


Link to post
Share on other sites
pc.cesar

Em corporate nao... pode colocar num botao. Mas e o mesmo que colocar numa tecla..

A browlist com a lista de artigos  da encomenda.. e com os campos de stock actua deve ser o melhor. Podendo ainda esta browlist estar disponivem em varios ecras

Share this post


Link to post
Share on other sites
pc.cesar

Um cenario que pode testar. Criar um campo para o stock actual nas linhas, criar uma tecla onde sempre que cria executa corrige o valor do stock em todas as linhas do documento

Desta forma mesmo que seja uma consulta ao documento tem sempre o stock correto.. de forma a garantir que nao houve esquecimento de correr a tecla.... ao gravar deve gravar sempre com zero... podera com outro campo gravar a qtt actual .no momento da criacao das linhas. 

  • Vote 1

Share this post


Link to post
Share on other sites
itallo122

Olá boa tarde,

Estou com um pequeno problema numa parte do meu programa e queria uma ajudinha.

O que eu pretendo fazer nestas linhas de código é actualizar o plafond do fornecedor na tabela FL com um dos dados do cursor CrsPlafond.

cSqlUpdate = ""
cSqlUpdate = " UPDATE FL SET FL.PLAFOND = " + astr(CrsPlafond.PLAFOND) + " WHERE FL.NO = 200028 "
u_sqlexec(cSqlUpdate,"CrsActualizaPlafond")

If !u_sqlexec(cSqlUpdate)
	MessageBox("Errou: O plafond não foi actualizado")
EndIf

O problema é que a mensagem aparece e não actualiza.

PS: Sou novo no PHC 

Obrigado !

Edited by itallo122

Share this post


Link to post
Share on other sites
pc.cesar

Falta as plicas no plafond

 

 

If u_sqlexec(cSqlUpdate) 

Else

MessageBox("Errou: O plafond não foi actualizado")

EndIf

Share this post


Link to post
Share on other sites
Camarao69

Boas Cesar

Finalmente arranjei uma solução.

Criei um campo  BI que pode ser visto nas Grelhas chamado disp

Numa Grelha invisivel no ecra sbo pus o seguinte codigo xbase

select bi

msel = "select case when st.stock<st.qttcli then 0 else st.stock-st.qttcli end as disp from st(nolock) where st.ref='"+alltrim(bi.ref)+"'"

u_sqlexec(msel,[curRES])

select curRES
if reccount()>0

replace bi.u_disp with astr(curRES.disp)

SBO.refrescar

endif

Bastou isto e não preciso de clicar em nenhuma tecla ao introduzir a  referencia ele ele vai buscar o que pretendo .

Há tambem é necessário ter o calculo automático de totais activo.

Tive também de alterar alguma teclas existente para introduzirem o valor que eu pretendia na coluna.

 

Obrigado

Share this post


Link to post
Share on other sites
pc.cesar

Boas,

Conheco essa funcionalidade, no entanto nao fiques supreendido se com a actualização do PHC deixar de funcionar, 

Share this post


Link to post
Share on other sites
dfernandes

Já devo vir muito tarde, mas no entanto tenho uma solução muito simples que ao digitar o código do produto num DI mostra logo o stock por armazém numa grelha.

Se ainda precisares posso disponibilizar.

 

 

Share this post


Link to post
Share on other sites
Camarao69
4 horas atrás, dfernandes disse:

Já devo vir muito tarde, mas no entanto tenho uma solução muito simples que ao digitar o código do produto num DI mostra logo o stock por armazém numa grelha.

Se ainda precisares posso disponibilizar.

 

 

Boas

A solução está acima e está a funcionar perfeitamente, eu não queria saber o stock que isso o phc já diz,precisava de saber stock - reservado para clientes.

 

Mas obrigado na mesma

Share this post


Link to post
Share on other sites
NelsonPaiva

Bom dia.

Tenho uma tecla num dossier que vai criar um novo documento num outro dossier copiando já alguns campos. Essa tecla está configurada num botão que existe no dossier.

Ao se clicar no botão o dossier é criado mas surge uma janela com uma anomalia com a seguinte mensagem:

Citação

Object is not contained in a FORM.

A janela aparece 2 vezes mas clicando em ignorar desaparece e não dá mais nenhum problema e o dossier criado também está ok com os dados correctos.

Alguém sabe do porque deste erro? Se em vez do botão usar o atalho do teclado, neste caso Shift+f2 a mensagem já não aparece.

Obrigado.

Share this post


Link to post
Share on other sites
pc.cesar

O Problema é ser um botão onde a função é o keyboard, que é um objecto que nao existe no novo ecra/dossier que está a criar

experimente copiar e colar no ecra do dossier que pretende abrir.. nao foi testado, normalmente coloco em texto para correr a função via teclado...

  • Vote 1

Share this post


Link to post
Share on other sites
NelsonPaiva
18 horas atrás, pc.cesar disse:

O Problema é ser um botão onde a função é o keyboard, que é um objecto que nao existe no novo ecra/dossier que está a criar

experimente copiar e colar no ecra do dossier que pretende abrir.. nao foi testado, normalmente coloco em texto para correr a função via teclado...

Quando se refere a copiar e colar está a referir-se ao botão que depois colo na personalização do ecrã do dossier que pretendo criar?
Já tentei mas o erro surge na mesma.

Tenho alguns botões deste tipo e na maioria deles não surge este erro mas em dois deles aparece, sendo o código base igual.

Share this post


Link to post
Share on other sites
camexavi

Boa tarde,

Precisava de ajuda para criar uma tecla, que apresentasse browlist com as linhas do dossier que estamos a visualizar, e permitisse atualizar (update bi) o campo U_pesogr com o valor digitado na browlist.

Tenho isto mas não funciona:

select bi

u_sqlexec([SELECT 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

u_sqlexec([update bi set u_pesogr=PESOS.u_pesogr where bi.bostamp=']+alltrim(bi.bostamp)+[' and ref=']+alltrim(PESOS.ref)+['])

endscan


endif

Muito obrigado!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.