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

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.

Editado por NelsonPaiva
Melhoramento da resposta

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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é

Editado por JoseAC

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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()

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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é

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.