Jump to content
Apolo

PHC - Programação em XBASE

Recommended Posts

NelsonPaiva
15 horas atrás, JoseAC disse:

Olá a todos,

estou a tentar construir um IDU com este valores

Tenho um campo numérico   bo.u_valorini  que quero multiplicar 1.23  que é o valor do iva

exemplo se o campo tiver 150€ quando multiplico * 1.23 , devia dar 184.50 mas da-me 185 ( assim funciona mas eu queria eu ele fosse buscar o valor do iva a tabela BI.IVA )

quando tento correr este código não aparece nada  bo.u_valorini * BI.IVA   da-me erro

Alguma ajuda agradeço,

Obrigado

José

Eu tive um problema parecido e resolvi da seguinte forma:

Na expressão do campo do IDU coloca:

bo.u_valorini*((100+BI.IVA)/100)

Pode não ser a melhor forma de o fazer mas foi a forma que eu consegui de resolver.

Em relação a aparecer 185 em vez de 184.50 colocas-te mascara no campo?
Na mascara coloca @Z ###,###,###.## a ver se resolve.

EDIT: Reparei agora numa coisa que não vi antes. Tu queres calcular o valor de um campo da tabela bo com a IVA das linhas é isso ou foi um erro?
A expressão que uso é: "BI.ETTDEB*((100+BI.IVA)/100)" mas neste caso estou a calcular o IVA por linha.

Não sei se o código que enviei vai funcionar sem um join como são dois campos de tabelas diferentes. Também podes é usar um campo de IVA da tabela BO em vez do bi.iva.

Edited by NelsonPaiva
Melhoramento da resposta

Share this post


Link to post
Share on other sites
JoseAC
Em 27/06/2018 às 11:07, NelsonPaiva disse:

Eu tive um problema parecido e resolvi da seguinte forma:

Na expressão do campo do IDU coloca:

bo.u_valorini*((100+BI.IVA)/100)

Pode não ser a melhor forma de o fazer mas foi a forma que eu consegui de resolver.

Em relação a aparecer 185 em vez de 184.50 colocas-te mascara no campo?
Na mascara coloca @Z ###,###,###.## a ver se resolve.

EDIT: Reparei agora numa coisa que não vi antes. Tu queres calcular o valor de um campo da tabela bo com a IVA das linhas é isso ou foi um erro?
A expressão que uso é: "BI.ETTDEB*((100+BI.IVA)/100)" mas neste caso estou a calcular o IVA por linha.

Não sei se o código que enviei vai funcionar sem um join como são dois campos de tabelas diferentes. Também podes é usar um campo de IVA da tabela BO em vez do bi.iva.

Olá Nelson Paiva,

Obrigado pela dica, funcionou :) e a mascara também.

pelo que vi na tabela BI é onde eu tenho a taxa do IVA para este cliente que é de 23% , na tabela BO não vejo essa campo do IVA.

José

Edited by JoseAC

Share this post


Link to post
Share on other sites
Filipe Alves

Boa tarde. Estou a criar uma regra de utilizador no PHC para haver um controlo automático de stocks. 

A logica é a seguinte: Ao efectuar uma encomenda a fornecedor, se existir stock do artigo, o PHC corrige automaticamente a quantidade a encomendar.

Questões. O código pode ser melhorado ? Como melhoro as mensagens de log para por exemplo dizer:

"A referência XXX tem N unidades em stock. Quantidade a encomendar de Y unidades"

Estará tudo corrigido de forma correcta nas linhas da BI ? Existe algum comando que ao mudar a quantidade corrige as restantes variáveis da tabela BI ? 

O código está abaixo.

Select bo
**Verifica se é Encomenda de Fornecedor

If (Astr(bo.NDOS) == '2')

    Select bi
    **Percorrer as linhas
    Scan
        **Referencia tem que estar preenchida
        If (!Empty(bi.ref))

            qttencomenda = bi.qtt

            **query - vai buscar quantidade anterior (para possibilitar alterações nas EF). Apenas faz alguma coisa se a quantidade variar
            If u_sqlexec([select qtt from bi where bistamp = ']+bi.bistamp+['],"tmp_verific_qtt")
                if (tmp_verific_qtt.qtt = qttencomenda)
                    LOOP
                endif
            endif

            **query para variaveis de stock
            TEXT to msomaqtt textmerge noshow
            select stock, qttfor, qttcli, usr1, stmin, stns, epcusto from st where ref = '<<bi.ref>>'
            ENDTEXT

            **executa query
            If u_sqlexec(msomaqtt,"tmp_somaqtt")
                **Não pode ser fornecedor XXX nem serviço
                If ( tmp_somaqtt.usr1 != 'XXX' And tmp_somaqtt.stns == .F.)

            **STOCKVAR = Quant. a Encomendar na EF + Quant. em stock + Encomendado a Fornecedores - Reservado para clientes - Stock Mínimo
                    stockvar = bi.qtt + tmp_somaqtt.stock + tmp_somaqtt.qttfor - tmp_somaqtt.qttcli - tmp_somaqtt.stmin

                    **Stockvar é maior que 0 é porque tem stock previsto positivo após efectuar a presente EF
                    If (stockvar > 0)
                        **se a quantidade encomendada for maior que o stockvar, é preciso encomendar a diferença
                        If (bi.qtt > stockvar)
                            qttsub = bi.qtt - stockvar
                            Replace bi.qtt With qttsub
                                                        ettdebsub = st.epcusto * qttsub
                                                        Replace bi.ettdeb With ettdebsub
                            msg("A referência " + Alltrim(bi.ref) + " tem unidades em stock. Quantidade corrigida")
                        Else
                            **Quantidade <= stockvar , não é necessário encomendar , logo coloca a quantidade/custo a zero
                            qttsub = 0
                                                        ettdebsub =0
                            Replace bi.qtt With qttsub
                                                        Replace bi.ettdeb With ettdebsub
                            msg("A referência " + Alltrim(bi.ref) + " tem unidades em stock. Quantidade anulada")
                        Endif

                    Endif
                Endif
            Endif
        Endif
    Endscan
Endif

 

Share this post


Link to post
Share on other sites
JoseAC

Olá a todos,

 

fiz a actualização para o phc cs advanced 24 tinha uma tecla configurada para quando estava nas PATs abrir um dossier e meter o artigo dentro do dossier e ficava associado a PAT.

tive esta tecla a funcionar nos ultimos anos

depois da versão 24 deixou de funcionar, abrir o IDU com o orçamento, não aparece o codigo da referencia e não associa a numero da pat ao idu.

alguém já teve este problema e alguma sugestão ?

Obrigado,


 

select pa
if alltrim(pa.ptipo)="JOSE" then
    mensagem("Vamos criar um ORÇAMENTO para este processo")
if empty(pa.nopat)
    msg("Tem de ter o nº de PAT preenchido para utilizar esta opção")
endif
lc_NOPAT=pa.nopat
lc_NO=pa.no
lc_NOME=pa.nome
lc_PASTAMP=pa.pastamp
lc_MASTAMP=pa.mastamp
**messageb("nº PAT")
**messageb(pa.nopat)
**messageb("nº PAT via Lc")
**messageb(lc_NOPAT)
do dbfusecl
u_sqlexec("Select clstamp from cl (nolock) where no = " + astr(pa.no), "myclstamp")
v_clstamp = myclstamp.clstamp
fecha("myclstamp")
u_requery("CL")
m_dossier = 11
doread("BO", "SBO")
sbo.newndos(m_dossier)
sbo.dointroduzir
select bo
** estava sem comentario a linha abaixo
** Do Boine2in 
do BOCLACT
SBO.REFRESH()
    replace bo.nmdos with 'Orçamento'
    replace bo.nome with pa.nome
    replace bo.no with pa.no
    replace bo.nopat with pa.nopat
    replace bo.obs with ' '
    replace bo.dataobra with date()
    replace bo.origem with 'PA'
    replace bo.orinopat with pa.nopat
    replace bo.pastamp with lc_PASTAMP
    replace bo.mastamp with lc_MASTAMP
SBO.REFRESH()
** Introducao linhas
select bi
** estava comentada esta linha
**Do Boine2in 
replace bi.ref with 'ORCAMENTO'
replace bi.design with 'Serviço. PAT:' + astr(lc_NOPAT)
replace bi.qtt with 1
Do BOACTREF with '',.t.,'OKPRECOS'
**Do Boine2in 
***********************
** TOTALIZAMOS A LINHA
***********************
Do U_BOTTDEB
** Fim introducao linhas
** a linha abaixo faz ok, ficando o dossier gravado
**SBO.Bok1.Okbuttomdef1.click()
return .t.
else
     messagebox("Esta tecla só pode ser usada nas PAT do JOSE")
    return .f.
endif

 

Share this post


Link to post
Share on other sites
pc.cesar

De facto deve existir alguma anomalia

Acresente as linhas

** Introducao linhas
    Do BOBIACT
    Select bi
    delete all
    ** estava comentada esta linha
    Do Boine2in
    Replace bi.ref With 'ORCAMENTO'
    Replace bi.qtt With 1
    Do BOACTREF With '',.T.,'OKPRECOS'
    Replace bi.Design With 'Serviço. PAT: ' + astr(lc_NOPAT)
    sbo.Refresh()

 

Share this post


Link to post
Share on other sites
sacaco
Em 05/04/2018 às 13:12, PHonorato disse:

Boa tarde.

Como é que consigo chamar um programa externo com um argumento?

Se fizer um botão e tentar chamar o programa externo com argumento dá erro (exemplo: programa.exe teste1)(mas se fizer só programa.exe funciona)

O programa externo aceita argumentos depois do nome do programa, dá através de outros programas e através de linha de comandos.

Possivelmente por programação devo conseguir, só preciso mesmo de executar o programa externo com um argumento.

Obrigado

Boa tarde, 

Tenho um problema semelhante! Podem partilhar a solução?

Obrigado.

Share this post


Link to post
Share on other sites
pc.cesar
Em 19/01/2019 às 21:18, sacaco disse:

Boa tarde, 

Tenho um problema semelhante! Podem partilhar a solução?

Obrigado.

experimentem utilizar o shellexecute do windows

  • Vote 1

Share this post


Link to post
Share on other sites
JoseAC
Em 21/11/2018 às 22:27, pc.cesar disse:

De facto deve existir alguma anomalia

Acresente as linhas


** Introducao linhas
    Do BOBIACT
    Select bi
    delete all
    ** estava comentada esta linha
    Do Boine2in
    Replace bi.ref With 'ORCAMENTO'
    Replace bi.qtt With 1
    Do BOACTREF With '',.T.,'OKPRECOS'
    Replace bi.Design With 'Serviço. PAT: ' + astr(lc_NOPAT)
    sbo.Refresh()

 

Obrigado pc.cesar,

Não tinha reparado que tinhas-me ajudado com esta pergunta, por algum motivo não recebi o email a informar que o tópico tinha sido respondido.

já estou a conseguir que apareçam as linhas com a referencia ORCAMENTO e quantidade

não me esta associar o orçamento ao numero da PAT

 

Fazendo uma query a tabela BO , ele não me esta a escrever estes campos.

   replace bo.origem with 'PA'
    replace bo.orinopat with pa.nopat
    replace bo.pastamp with lc_PASTAMP
    replace bo.mastamp with lc_MASTAMP

 

está-me a aparecer o nome do orçamento, nome do cliente , numero ,obs, data

isto devia escrever PA e estava a escrever BO 

replace bo.origem with 'PA'

select bo
** estava sem comentario a linha abaixo
** Do Boine2in 
do BOCLACT
SBO.REFRESH()
    replace bo.nmdos with 'Orçamento Laboratório'
    replace bo.nome with pa.nome
    replace bo.no with pa.no
    replace bo.nopat with pa.nopat
    replace bo.obs with ' '
    replace bo.dataobra with date()

    replace bo.origem with 'PA'
    replace bo.orinopat with pa.nopat
    replace bo.pastamp with lc_PASTAMP
    replace bo.mastamp with lc_MASTAMP
SBO.REFRESH()

 

Obrigado pelo ajuda.

José

Share this post


Link to post
Share on other sites
JoseAC
Em 30/01/2019 às 18:58, JoseAC disse:

Obrigado pc.cesar,

Não tinha reparado que tinhas-me ajudado com esta pergunta, por algum motivo não recebi o email a informar que o tópico tinha sido respondido.

já estou a conseguir que apareçam as linhas com a referencia ORCAMENTO e quantidade

não me esta associar o orçamento ao numero da PAT

 

Fazendo uma query a tabela BO , ele não me esta a escrever estes campos.

   replace bo.origem with 'PA'
    replace bo.orinopat with pa.nopat
    replace bo.pastamp with lc_PASTAMP
    replace bo.mastamp with lc_MASTAMP

 

está-me a aparecer o nome do orçamento, nome do cliente , numero ,obs, data

isto devia escrever PA e estava a escrever BO 

replace bo.origem with 'PA'

select bo
** estava sem comentario a linha abaixo
** Do Boine2in 
do BOCLACT
SBO.REFRESH()
    replace bo.nmdos with 'Orçamento Laboratório'
    replace bo.nome with pa.nome
    replace bo.no with pa.no
    replace bo.nopat with pa.nopat
    replace bo.obs with ' '
    replace bo.dataobra with date()

    replace bo.origem with 'PA'
    replace bo.orinopat with pa.nopat
    replace bo.pastamp with lc_PASTAMP
    replace bo.mastamp with lc_MASTAMP
SBO.REFRESH()

 

Obrigado pelo ajuda.

José

Fiz uma actualização do EXE e agora a tecla já funciona.

Share this post


Link to post
Share on other sites
JoseAC

Ola a todos outra vez,

Estava a tentar no dossier automático uma segunda linha.

mas quando corro a tecla a primeira linha desaparece

a Bold o codigo que estou a meter.

 

agradeço a ajuda,

Obrigado 
José

 

 

** Introducao linhas     

Do BOBIACT     

Select bi     

delete all     

** estava comentada esta linha     

Do Boine2in     

Replace bi.ref With 'ORCAMENTO'     

Replace bi.qtt With 1     

Do BOACTREF With '',.T.,'OKPRECOS'     

Replace bi.Design With 'Serviço. PAT: ' + astr(lc_NOPAT)     

 

Replace bi.ref With 'ORCAMENTO1'     

Replace bi.qtt With 1     

Do BOACTREF With '',.T.,'OKPRECOS'     

Replace bi.Design With 'Serviço Externo. PAT: ' + astr(lc_NOPAT)     

 

sbo.Refresh()

Share this post


Link to post
Share on other sites
pc.cesar

Bom dia

 

Na minha acima do negrito falta o

O comando para criar uma nova linha

Do bo.....

Share this post


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

Bom dia

 

Na minha acima do negrito falta o

O comando para criar uma nova linha

Do bo.....

Bom dia César,

já experimentei estes 3 comandos , um de cada vez e não consigo ter as duas linhas.

 Do Boine2in   
 Do Bo
 Do BOBIACT

será que é outro comando ?

Obrigado,
José

Share this post


Link to post
Share on other sites
pc.cesar

Denunciar mensagem

 

Publicado 16 horas atrás

Ola a todos outra vez,

Estava a tentar no dossier automático uma segunda linha.

mas quando corro a tecla a primeira linha desaparece

a Bold o codigo que estou a meter.

 

agradeço a ajuda,

Obrigado 
José

 

 

** Introducao linhas     

Do BOBIACT     

Select bi     

delete all     

** estava comentada esta linha     

Do Boine2in     

Replace bi.ref With 'ORCAMENTO'     
Replace bi.qtt With 1     
Do BOACTREF With '',.T.,'OKPRECOS'     
Replace bi.Design With 'Serviço. PAT: ' + astr(lc_NOPAT)  

 

Do Boine2in

Replace bi.ref With 'ORCAMENTO1'     
Replace bi.qtt With 1     
Do BOACTREF With '',.T.,'OKPRECOS'     
Replace bi.Design With 'Serviço Externo. PAT: ' + astr(lc_NOPAT)   

Share this post


Link to post
Share on other sites
JoseAC

Muito Obrigado César,

Funciona já percebi que quando testei o que aconteceu.

Só se via a ultima linha tive que ir fazer scroll up, estavam  a primeira linha.

 

Share this post


Link to post
Share on other sites
FGuedes

Bom dia,

Gostava de saber se é possível nos docs internos, conseguir uma impressão em que filtre os dados de uma coluna e os mostre por folha. Ou seja, ter 10 linhas com diversas referencias só que com uma coluna a dizer se o produto é novo ou usado, e na impressão na folha 1 apareça as Refs que são produto novo e na folha 2 os produtos usados.

Desde já obrigado pela atenção!

 

 

Share this post


Link to post
Share on other sites
femo
10 horas atrás, FGuedes disse:

Bom dia,

Gostava de saber se é possível nos docs internos, conseguir uma impressão em que filtre os dados de uma coluna e os mostre por folha. Ou seja, ter 10 linhas com diversas referencias só que com uma coluna a dizer se o produto é novo ou usado, e na impressão na folha 1 apareça as Refs que são produto novo e na folha 2 os produtos usados.

Desde já obrigado pela atenção!

 

 

É simples: experimenta agrupar as linhas pela coluna onde está identificado se é produto novo ou usado.

Na configuração do grupo, diz que "Começa o Grupo numa nova página"


Fernando Morais

Share this post


Link to post
Share on other sites
pc.cesar
1 hora atrás, femo disse:

É simples: experimenta agrupar as linhas pela coluna onde está identificado se é produto novo ou usado.

Na configuração do grupo, diz que "Começa o Grupo numa nova página"

 

No configuração do idus deve aceder ao Grupo e indicar  qual a coluna que pretende agrupar, depois no mesmo ecra em baixo tem varia opções deve indicar "Começa o Grupo numa nova página",

desta forma cada grupo inicia numa nova pagina

Share this post


Link to post
Share on other sites
asimas

Bom dia,

Como faço para ter um logótipo no IDU das faturas que varie consoante o campo PNOME? Continuo a ter uma imagem e utilizo a Variável do Objeto ou crio um campo com expressão? Qual a função que utilizo para ir buscar a imagem?

Obrigado,

António Simas

Share this post


Link to post
Share on other sites
pc.cesar
Em 06/08/2019 às 12:38, asimas disse:

Bom dia,

Como faço para ter um logótipo no IDU das faturas que varie consoante o campo PNOME? Continuo a ter uma imagem e utilizo a Variável do Objeto ou crio um campo com expressão? Qual a função que utilizo para ir buscar a imagem?

Obrigado,

António Simas

colocas uma imagem e na nas propriedades,

SQL : pnome

Xbase

if pnome=1

return "c:\phc\logos\logo_1.bmp

else

return "c:\phc\logos\logo_1.bmp

endif

 

Share this post


Link to post
Share on other sites
asimas

@pc.cesar Quando dizes propriedades referes-te à opção Variável do Objeto? É que com esse código obtenho a mensagem "Erro a criar os PRGs temporários para impressão." e é adicionado "Parameters iduvaltsql" ao início do código xbase. E já agora, se for uma imagem da base de dados basta retornar o nome?

Edited by asimas

Share this post


Link to post
Share on other sites
Filipe Alves

Bom dia. Precisava de uma ajuda. Quero gerar automaticamente uma fatura em pdf para enviar por email automaticamente. Usei um exemplo da enciclopédia PHC, mas não estou a conseguir (penso que me falta um ficheiro...)

Tecla de utilizador:

Local cTitIDU,cDir
If Not Eof("FT")
    m.cTitIDU = "Fatura / Nota de Credito"
    m.cDir = "C:\Users\User\Desktop\"+Alltrim(ft.Nome)+astr(ft.fno)+".pdf"
    IduToPdf("FT","FI","FTCAMPOS","FICAMPOS","FTIDUC","FTIDUL",2,cTitIDU,cDir,"","NO",.F.,"ONETOMANY")
Endif


Erro obtido:

Código: 1
Linha: 0
Mensagem 1: File 'xfrx.prg' does not exist.
Mensagem 2: 
Local: REPORTESPECIAL
Chamada: 
         MAINCORP
         MAINMAIN
         APP_CLASS.OLETIMER.TIMER
         ON... 
         EXECUTAUSERTECLAS
         TCEXEC
         PRGRUN
         XTEC9020190914114452
         IDUTOPDF
         IDUIGENP

 

Alguma ideia ou sugestão ?

Obrigado

Share this post


Link to post
Share on other sites
Orféu Lourenço

Boas Ilustres,

prentendo mudar a cor do fundo de um objecto conforme o resultado de um determinado dado no IDU, já tentei usar no desenho da IDU o código abaixo dentro do objecto na janela de expressão em xbase e não consigo, alguém poderia me ajudar nesta situação por favor.

Código xbase:

If cl.tipo='A'

   obj33.backcolor = 65535 (amarelo)

Else

   obj33.backcolor = 65280 (verde)

Endif

 

Obrigado

OL


Orféu Lourenço

Share this post


Link to post
Share on other sites
Camarao69

Bom dia

Preciso de criar um botão de procura para a tabela stobs numa aba do ecra sst , o botão esta criado e o campo stobs.stos  foi atribuído ao botão, o problema é que não funciona. Supostamente os botões de procura deveriam funcionar tambem com tabelas que tenham ligação directa com a principal neste caso á tabela ST ligação  st.ref=stobs.ref 

Alguém sabe o que pode estar a acontecer ?

PHC VS 24

Obrigado

Edited by Camarao69

Share this post


Link to post
Share on other sites
femo
22 horas atrás, Camarao69 disse:

Bom dia

Preciso de criar um botão de procura para a tabela stobs numa aba do ecra sst , o botão esta criado e o campo stobs.stos  foi atribuído ao botão, o problema é que não funciona. Supostamente os botões de procura deveriam funcionar tambem com tabelas que tenham ligação directa com a principal neste caso á tabela ST ligação  st.ref=stobs.ref 

Alguém sabe o que pode estar a acontecer ?

PHC VS 24

Obrigado

Penso que o problema possa estar por estares a pesquisar num campo do tipo Memo. Experimenta com outro campo para veres se está tudo bem configurado.


Fernando Morais

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

×
×
  • Create New...

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.