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

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.