Valores das linhas do documento em Pesquisas Formatadas
Em uma pesquisa formatada quando é preciso se referir há um valor que está na tela passando a posição utilizamos a seguinte sintaxe:
$[$Item.Coluna.0]
Exemplo: SELECT DISTINCT 'TRUE' FROM ORDR WHERE $[$38.1.0]= ''
Essa pesquisa formatada funciona corretamente desde que não sejam campos no título do documento e não sejam linhas do documento. Por exemplo nos itens do Pedido de Venda, não é possível analisar o total de todas as linhas, o B1 analisa somente a primeira linha ou a linha em que está o foco.
É preciso que está funcionalidade esteja disponível, que seja possível verificar o valor de uma coluna em todas as linhas de um documento em uma pesquisa formatada, pois as empresas tem necessidade de procedimentos de autorização baseados em regras que não estão disponiveis por padrão no B1 e é precisa faze-las com pesquisas formatadas.
Could you post it in English? This is an English forum so that other people could read.
Thanks,
Gordon
Similar Messages
-
Variável $[USER] - Pesquisa Formatada
Olá pessoal,
eu utilizava uma pesquisa formatada para me trazer o código do usuário logado no SBO, mas depois que migrei para a versão 8.81 essa pesquisa passou a não funcionar. Essa variável deixou de existir? Mudou de nome? Agradeço a atenção de todos.
Grato,
Leonardo AzeveodoPessoal,
aparentemente parece que a variável '$[USER]' não está sendo atualizada, pois fazendo um 'SELECT $[USER]' no gerador de consulta ele retorna 0 para qualquer usuário. Estou usando o 8.81 PL08, alguém do time da SAP pode esclarecer o que está acontecendo?!!
Grato,
Leonardo Azevedo
Edited by: Leonardo Azevedo on Jan 2, 2012 3:29 PM -
Pesquisa formatada para trazer preço de lista para UDF (linha) na cotação?
Tenho uma situação onde tenho que trazer o preço de lista para o item em um documento de marketing, no caso uma cotação, antes do campo usual do sistema, isto é, num campo definido pelo usuário criado, para agregar a ele valores adicionais de Despesas (que não devem ser destacadas como adicionais/acessórias no documento), de forma que na cotação seja formado o preço líquido de impostos no campo do Preço Unitário do sistema, isto é, a cada cotação é necessário adicionar ao preço liquido do item (na lista de preços) despesas com venda que devem ser consideradas para cada diferente cotação X PN.
Meu problema é que não sei como identificar o campo do preço da lista de preço para um determinado item em uma ésquisa formatada na cotação que traga este preço...
Olhando a informação do sistema para o campo na lista de preço, os dados são:
$ ____ (Form:157 Item=3 Pane=0 Colum=5 Row= XXX Variable=62)
Alguém pode me ajudar com esta query?Fabielle,
Muito obrigado pelo retorno! É isso mesmo... Me faltava saber a tabela em que os valores estavam gravados!
Inclusive, como era uma consulta de tela que eu precisava, eu tive que adaptá-la para ser automática. Ficou assim:
SELECT ITM1.Price FROM OCRD
INNER JOIN ITM1 ON
OCRD.ListNum = ITM1.PriceList
INNER JOIN OITM ON
OITM.ItemCode = ITM1.ItemCode
WHERE OCRD.CardCode = $[4.0.0]
AND OITM.ItemCode = $[$38..1.0]
Eu já havia obtido o retono forum em inglês, mas valorizo o seu esforço em me ajudar!
Att,
Denis -
Como colocar como padrão o campo "Unidades Base" em um documento de entrada
Olá,
O campo "unidades bases" (UseBaseUn) vem como padrão nos documento de marketing como NÂO, como faço para que ele venha como padrão SIM ou uma pesquisa formatada que ao incluir um item o campo mude para SIM?
Por gentileza, aceito sugestões, pois tem alguns itens que o cliente cadastrou errado no campo NumInBuy(Itens por unidade de compra) da tabela OITM e para esses itens ele precisa sempre quando inserir uma entrada de mercadoria (recebimento ou NF), selecionar sim para o campo "Unidades bases" na linha do item. Se esse campo viesse como "sim" padrão ou uma pesquisa formatada que mude o valor para "sim" me ajudaria muito.
Conto com a ajuda
Abs,
Lucidio GandraResolvi com procedure no SBO_SP_TransactionNotification
-
FI-AA - Inversão de valores entre áreas de avaliação
Caros colegas, tenho o seguinte cenário:
1 - Nosso ativo fixo possui tres áreas de avaliação societárias. As áreas 01, 01 e 03;
2 - Também possui mais quatro áreas gerenciais com outros valores e vidas úteis e regras de depreciação próprias.
3 - O objetivo é que os valores das quatro áreas gerenciais passem a ser os valores societários, refletuido na contabilidade. e os valores das áreas societárias passem a ser gerenciais.
Pensei em fazer esta mudança por meio de uma ajuste por diferença para uma determinada data base. Estes ajustes poderiam ser positivos ou negativos tanto para os valores de aquisição quanto para as depreciaçoes acumuladas e depois faria uma carga para adequar as vidas úteis e regras de depreciação das áreas antes que seja executada a depreciação do mes. O problema é que nos testes que estou efetuando não estou conseguindo usar um tipo de movimento Z para diferenciar estes ajustes.
Alguma idéia melhor ou sugestão?
Grata
AndréOlá,
Para fazer esses ajustes de valores vc terá que habilitar as áreas para lançamentos negativos e positivos. depois é só preparar a planilha com os valores desejados, ou seja, a diferença a ser lançada para chegar nos valores ideais, e em seguida dar carga.
Se quiser compartilhar mais alguma coisa, basta responder aqui.
té mais. -
Cliente nacional de Exportação
Bom tarde
Com o orçamento de Estado de 2009 foi emitida uma nova lei que tem implicações ao nível de clientes exportadores.
Estando um cliente dentro destas condições quando se emite uma factura para esse cliente que exporta para Angola este está isento de IVA, no entanto perante o art.79º da Lei 64-A/2008 (OE 2009) se o valor da factura é inferior a 1000u20AC deve-se aplicar IVA.
Na ficha de cliente indicamos que este está isento de IVA, só que quando emitimos uma factura inferior ou igual a 1000u20AC temos de alterar o grupo de imposto ao nível das linhas da factura, de IVA isento para um IVA com taxa de imposto.
Mas a maior partes destes casos são facturas que tem muitas linhas.
O que torna o processo muito trabalhoso e demorado
Não existe alguma forma de indicar na factura que em vez de inserir o grupo de imposto indicado no parceiro de negócio ir ao grupo de imposto indicado no artigo? Sem ter de ser alterado ao nível de cada linha?Telma,
Se na ficha do PN colocares que este está sujeito e IVA e indicares um grupo de IVA Isento apropriado, esse código de IVA é colocado por predefinição em todas as linhas do documento (em detrimento do IVA definido para o artigo).
Espero que ajude,
Cumprimentos,
Vítor Vieira -
Subtrair o ICMS Comum da Despesa Adicional no cálculo ICMS-ST
Boa tarde pessoal,
estou com um caso bem incomum, pelo menos pra mim até o momento.
Estou criando um código de imposto para o caso de um de nossos clientes que compra refrigerante.
A nota fiscal do fornecedor vem com ICMS-ST Pauta, IPI Pauta, ICMS Comum.
Pois bem, todos os impostos já estão calculando corretamente, a não ser o ICMS-ST que tenho que tirar o valor do ICMS normal do valor calculado pra o ICMS-ST.
O grande problema é que essa nota também tem Despesas Adicionais que incidem o ICMS comum, então na fórmula do imposto quando informo para subtrair o valor do ICMS-ST do ICMS comum calculado, o B1 utiliza somente o cálculo de ICMS comum das linhas dos itens, ignorando o ICMS comum calculado para a despesa adicional (Não importando se a despesa foi informada na linha do item ou no rodapé do documento), contudo, se consultar a aba Impostos, botão Total por Imposto, o ICMS comum está corretamente calculado, ou seja, o SAP somou o ICMS comum das linhas dos itens e o ICMS comum da Despesa Adicional para mostrar nesse painel, mas não utiliza esse valor para realizar a subtração no ICMS-ST, somente o calculado nas linhas dos itens.
Alguém sabe um meio de contornar essa situação?
Agradeço o apoio.
Abraços.
MarceloBoa tarde, Marcelo.
Tenho uma situação semelhante aqui na empresa, em que precisamos calcular a ST sobre as despesas adicionais - no caso, frete e seguro - para algumas notas fiscais de saída. Chegamos à solução que está nos anexos, que funciona bem no nosso caso, os cálculos ficam corretos.
Repare que o valor do ICMS normal referente a despesa adicional aparece negativo; só assim conseguimos fazer o cálculo funcionar.
Espero ter ajudado.
Att.
Edison -
Boa tarde.
Estamos com o seguinte problema. Na elaboração de uma proposta na F110 de 5 documentos de uma mesmo fornecedor todos com somente 1 parcela, apresentou o seguinte erro :
LOG DE EXECUÇÃO
Erro interno: saldo-doc não é zero / empresa BR11 fornec 313396 cliente
Saldos: 0,00 BRL / 0,00 BRL
Saldos: 0,08 EUR / 0,00
Log adicional de documento contábeis----
Moedas na 1. linha: BRL / BRL Moedas na 2. linha: EUR / ___
Doc. empresa BR11 moeda BRL forma pagamento T
Ítem Conta Montante Imposto
001 29 0000313396 14.350,00 0,00
6.057,25 0,00
002 29 0000313396 11.800,00 0,00
4.980,79 0,00
003 29 0000313396 11.800,00 0,00
4.980,79 0,00
004 29 0000313396 11.800,00 0,00
4.980,79 0,00
005 29 0000313396 11.800,00 0,00
4.980,79 0,00
006 50 0000111301 61.550,00 0,00
25.980,33 0,00
Indicação relativa ao fornec 313396 / empresa pagadora BR11 ........
......por motivo do erro mencionado não é possível executar os pagamentos
LOG DA PROPOSTA
Log adicional de documento contábeis----
Moedas na 1. linha: BRL / BRL Moedas na 2. linha: EUR / ___
Doc. F110000001 empresa BR11 moeda BRL forma pagamento T
Ítem Conta Montante Imposto
001 29 0000313396 14.350,00 0,00
6.057,17 0,00
002 29 0000313396 11.800,00 0,00
4.980,79 0,00
003 29 0000313396 11.800,00 0,00
4.980,79 0,00
004 29 0000313396 11.800,00 0,00
4.980,79 0,00
005 29 0000313396 11.800,00 0,00
4.980,79 0,00
006 50 0000111301 61.550,00 0,00
25.980,33 0,00
Fim do log.
O erro mencionado pode ser visto no ítem 001 de amobs os logs onde o montante em moeda forte apresenta a diferença de R$ 0,08 ( R$ 6.057,25 contra R$ 6.057,17 ).
As taxas de câmbio ( tabela TCURR ) foram atualizadas às 5 hrs da madrugada do dia do processamento, na tablea BKPF os valores das taxas para cada um dos dos é rigorosamente igual ao das taxas de câmbio, portanto, EUR 2.36770.
Curioso é que os títulos cujos ítens ( 002 até 005 ) se aplicado a regra de conversão foi aplicado o valor de EUR 2.36769.
Gostaria de saber se alguém já passou por essa situação e pode me ajudar e antecipadamente agradecer pela colaboração.
Atenciosamente.Consegui a solução do problema com a aplicação na nota SAP: 1578928
Porém para versões anteriores a 605 estas outras notas também tratam deste assunto:
1557883
1488637
1433884
1422932
1408793
1401523
1401389
1376505
1321546
1317395
1304847
1298483
Marcelo Rodrigues. -
Relatório NF de recebimento e NF de Devolução
Senhores boa tarde,
preciso mais uma vez de ajuda para a criação de um relatório. Preciso criar um Query que me retorne as NFs de recebimento de mercadoria com seus respectivos item e todas as suas respectivas NFs de devolução e seus itens com status de aberto ou fechado de um determinado cliente.
Onde estou tendo dificuldade?
Eu consigo puxar as NFs de recebimento e seus itens e consigo também amarrar com as NFs de devolução que foram geradas a partir das primeiras. minha dificuldade está nos itens.
Na NF de Recebimento as linhas podem vir com o mesmo código de item, a diferença entre elas é feita pelo número de série do equipamento e não pelo código do item e eu não sei como amarrar isso. Preciso amarrar número de série de entrada com número de série de saída.
Consigo manualmente (pelo relatório de transações por número de série) ver os itens em aberto que podem ser adicionados nas futuras NFs de devolução, mas não sei identificar quem é quem na query.
As tabelas RSRN E RITL que me dão essa informação são virtuais.
Como eu faço essa amarração? Para saber as NFs de saída e os itens que saíram por número de série.
Att.
Jackson VilelaOlá Jackson, estou rodando o SAP Business One família 9, mais precisamente 9.1 PL4.
Você pode conferir os dados de "Numero de Série" nas tabelas OSRI e SRI1.
A tabela OSRI guarda as informações sobre o número de série (cadastro do serial) sendo importante ter em mente que a associação de "ItemCode" e "SysSerial" compõem a chave primária da mesma, a SRI1 guarda as transações relacionadas com aquele número de série, nesta última consta na "BsDocType" o tipo do documento da transação seu id/entry em "BsDocEntry" e seu número de linha no documento em "BsDocLine", o campo "Direction" indica com 0 "Zero" as entradas e com 1 as saídas, caso tenha dúvida recomendo consultar o "Refdb.chm" disponível no pacote "SDK".
Você terá que avaliar os relacionamentos necessários com as tabelas de cadastro de itens e documentos de marketing para obter o seu relatório, mas acredito que com estas informações será plenamente possível criar seu report.
Espero ter colaborado.
Att,
Rodrigo da Costa Feula -
Autorização em Espelho de Nota Fiscal de Entrada
Prezados(as) Senhores(as),
Tenho um procedimento de autorização configurado para as Notas Fiscais de Entrada no B12005B.
Desejo que após aprovação dessa NFe no layout da nota seja impresso o nome do usuário que autorizou e a data e hora em que o documento foi autorizado.
Incluimos no final da página do PLD no layout da nota fiscal de entrada tabela WDD1 os campos aprovadores, data e hora, porém, após a inserção da nota não está retornando o(s) aprovadores.
Alguém já passou por isso ou teria alguma idéia de como conseguir essa informação na nota.
Abs,
Augusto Requião
Skype: cesarfexOlá
Para obter essa informação necessitade de 2 campos UDF's e de 2 queries. Envio aqui os passos.
1. Para o aprovador
1a. Crie uma campo UDF 'NOME' por exemplo
1b. Crie a seguinte query e salve-a
SELECT T3.U_NAME FROM OWDD T0, OINV T1, WDD1 T2 INNER JOIN
OUSR T3 ON T2.UserID = T3.INTERNAL_K
WHERE T1.DocEntry= T0.DocEntry and T2.WddCode=T0.WddCode
and T1.DocNum=$[[$8.1.0]]
1c. asigne a esse campo UDF um pesquisa formatada
1d. no pld adicione o campo UDF para obter a informação impressa
2. Para a data
2a. Crie uma campo UDF 'DATA'
2b. Crie a query e grave-a
Select GETDATE()
2c. asigne a esse campo UDF um pesquisa formatada
2d. no pld adicione o campo UDF para obter a informação impressa
Paulo Calado
SAP Business One Forums Team
Edited by: Paulo Calado on Jun 13, 2008 7:58 PM
Edited by: Paulo Calado on Jun 13, 2008 8:01 PM -
Erro ao pagar um pedido para a geração de Adiantamento automático.
Boa tarde prezados,
Estou com um problema ao tentar efetuar um pagamento em um "Pedido de Compra" para gerar o "Adiantamento a Fornecedor" automaticamente, porém aparece a seguinte mensagem:
"Pagamento acumulado ou valor de IRF podem ser modificados [Mensagem 3546-36]"
O item no documento de marketing não retem imposto, e na linha do documento de marketing tambem está como "não" reter.
Alguém já passou por esta situação, e tem alguma solução???Everton, boa tarde,
estamos enfrentando essa mesma mensagem, porém, na movimentação dos boletos para contas a receber.
Conseguiu sanar esse problema?
att.
Marcelo. -
Registro de CTr com campo "Imposto ISS - sem cálculo ICMS/IPI" marcado
Estamos utilizando o SAP-MM-SRV na gestão de serviços. Os serviços de frete, seja ele municipal ou intermunicipa/interestadual, também estão sendo tratados nesta solução. Para frete municipal incide o imposto ISS e para o transporte intermunicipal/interestadual incide o imposto ICMS Frete. Em ambos casos pode ocorrer a retenção do imposto pela empresa tomadora do serviço. No registro do CTr-Conhecimento de Transporte (transporte intermunicipal ou interestadual) esta solução está registrando o documento fiscal como de serviço, que na minha visão está correto, porem na linha do documento fiscal o campo "Imposto ISS - sem cálculo ICMS/IPI" (J_1BDYLIN-TMISS) está ficando marcado, apesar do cálculo do ICMS.
Alguém saberia me informar como posso parametrizar o sistema para que este campo não fique marcado ?Boa tarde,
Amauri,não sei se ainda esta com este problema, mas tive a mesma dificuldade que você, e pode ser que seja útil par amais alguém. Não localizei parametrização para isto, porém no include LJ1BGF01, o sistema realiza tem a seguinte logica:
" the material is always considered a service for CT-e "1677119
lo_cte_switch = cl_j_1bcte_swf=>get_instance( ). "1677119
IF lo_cte_switch->is_cte_ctx_by_model( wbaa-model ) "1677119
= abap_true. "1677119
wnflin-tmiss = abap_true. "1677119
ENDIF. "1677119
Então no método que é chamado criamos um enhancement no final do mesmo, para alterar o valor da variável rx_is_context para false.
METHOD is_cte_ctx_by_model.
rx_is_context = abap_false.
IF is_cte_context( ) = abap_true AND iv_model = '57'.
rx_is_context = abap_true.
ENDIF.
ENDMETHOD.
Att.,
Ariel -
Boa tarde,
Preciso aplicar uma autorizacao com uma query, onde preciso passar por todas as linhas do grid do
pedido de venda, para verificar se existe uma condicao em uma das linhas. Alguem sabe como fazer essa query para verificar cada linha, ou alguma outra solucao?
Obrigado
Edited by: Rui Pereira on Dec 10, 2008 10:34 AMOlá.
Você vai precisar de um addon que faça a verificação da condição antes de inserir o documento. Caso a condição seja encontrada, o addon terá que preecher um campo de usuário (documento).
Utilize este campo de usuário para fazer a query da autorização.
Att
Marcelo Valforte Castelucci. -
Bom Dia,
Estou com um problema na hora de criar um pedido de venda, onde os campos "utilização", "codigo do imposto", "CFOP" eram preenchido automaticamente, quando selecionava o Parceiro de negocio, agora não esta acontecendo isto mais. Como posso resolver isso?
Att,
Thiago B. Ferreira.Oi Thiago,
O preenchimento parou de funcionar após alguma alteração de regra de negócio? modificação de campo?
Esse caso pode ocorrer por alguns motivos técnicos:
- Pesquisa formatada não está atribuída ao campo
- Pesquisa formatada atribuída, porém está tecnicamante mau elaborada.
- Pesquisa formatada atribuída corresponde a uma regra especifica ou operação, exemplo, so funciona com o Clientes que tem o código entre C0001 até C0099.
Você comenta que essa funcionalidade ocorre quando altera o PN, mas isso está sendo realizado em que situação?
Pois para funcionar os campos na linhs, primeiro temos que colocar o PN, e depois algum item, pois sem item na linha nenhuma funcionalidade vai funcionar, é uma premissa ter uma item antes.
Se você pressionar os botões AltShiftF2, nos campos onde deveria ter alguma automatização, será apresentado se existe alguma atribuição técnica no campo.
Abraços. -
My problem is that I have this class that extends JApplet and has 3 JPanel and an instance from another class that extends JPanel (I will call it class2) inside it.
My problem is that I'm inserting class2 inside a JScrollPane than I insert JScrollPane inside my JApplet, but whenever I move my JScrollPane which should just move the content from class2 (lines, numbers, ...), but I'm getting a messed screen like if the computer was mixing the old content (before using JScrollPane) with the new content (after moving)...something like the JScrollPane listener isnt refreshing the screen when I use it.
If anyone know a fix for this, please contact me and if you want to check the code, email me ([email protected]).I'm posting all the code below...could anyone please help me out with this, there is a very weird behaviour when I move the JScrollPane
* C�digo de Huffman - Applet
* Arildo Fran�a Oliva Filho - 99/32810
* Leonardo Lobo Pulcineli - 99/20064
* Marcos Garrison Dytz - 99/20102
* Octavio do Vale Rocha - 99/20129
package huffman;
// Bibliotecas que fazem parte da implementa��o do applet
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;
import javax.swing.*;
import java.io.*;
import java.text.DecimalFormat;
* Objetos que far�o parte da GUI do programa, onde se tem a ocorrencia de
* tres botoes para o controle do fluxo do programa, uma caixa para a entrada
* das probabilidades, um classe instanciada para controlar as mensagens ao
* usu�rio e outra que far� a apresenta��o de todo conte�do
* Declara��o de todas as vari�veis utilizadas para armazenar as probabilidades
* onde o maior n�mero de vari�ives que podem ser implementadas � 200
public class Huff extends JApplet implements ActionListener, ComponentListener {
JButton reset_button, step_button, end_button;
// JButton file_button, fix_button;
JTextField input_string;
cent Cent = new cent();
ErrorCanvas stdout = new ErrorCanvas();
DecimalFormat f = new DecimalFormat("0.000"); // Define um formato para os valores
DecimalFormat f2 = new DecimalFormat("0.00");
JScrollPane scroll = new JScrollPane(Cent);
boolean inAnApplet = true; // Testa a validade do applet
protected int numProbabilidade; // Numero total de probabilidades
protected int numProbabilidadeTemp; // Numero total de probabilidades
protected int[] marcador; // Marca a pr�xima probabilidade
protected double[][] probabilidade;
protected String[][] simbolo; // Guarda os c�digos bin�rios
protected int passo; // Controle quanto ao fim das probs.
protected boolean proximo = true; // Idem acima
protected double entropia = 0.0; // Entropia;
// protected boolean estArquivo = true; // Estado de um arquivo
protected boolean inic = true;
* Construtor para a classe Huff (inicializa todo o GUI)
public Huff() {
getContentPane().setLayout(new BorderLayout());
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
getContentPane().add("Center", scroll);
Font def = new Font("Dialog", 0, 12);
Cent.setFont(def);
JPanel p = new JPanel(new GridLayout(2, 0));
JPanel q = new JPanel(new GridLayout(2, 0));
JPanel r = new JPanel(new FlowLayout());
r.add(reset_button = new JButton("Reiniciar"));
r.add(step_button = new JButton("Proximo"));
r.add(end_button = new JButton("Concluir"));
// r.add(file_button = new JButton("Arquivo");
// r.add(file_button = new JButton("Corrigir arquivo");
p.add(r);
p.add(input_string = new JTextField());
* O visualizador gr�fico (JPanel q) que � utilizado por ErrorCanvas para
* emitir algumas mensagens para o usu�rio
q.add(p);
q.add(stdout);
getContentPane().add("South", q);
reset_button.addActionListener(this);
step_button.addActionListener(this);
end_button.addActionListener(this);
input_string.addActionListener(this);
scroll.addComponentListener(this);
* M�todo utilizado para inicializar o �ndice dos arrays utilizados e zerar
* o valor de todas as probabilidades utilizadas
public void init() {
marcador = new int[200];
probabilidade = new double[200][400];
simbolo = new String[200][250];
for(int i = 0; i < 200; i++)
for(int j = 0; j < 400; j++) {
probabilidade[i][j]=0.0;
JOptionPane.showMessageDialog(null, " ", "Bem vindo",
JOptionPane.INFORMATION_MESSAGE);
if(inic)
iniciarProbabilidade(probabilidade[0]);
this.reset();
* Conta o n�mero de probabilidades que foram inseridos no TextField, assim
* como testa a validade destes valores. � bem similar ao funcionamento de
* parseProbabilidade
void contarProbabilidade() {
StringTokenizer st = new StringTokenizer(input_string.getText());
double teste = 0.0;
if(input_string.getText().length() > 0 && input_string.getText() != null) {
while (st.hasMoreTokens()) {
try {
teste = Double.valueOf(st.nextToken()).doubleValue();
if(teste < 0) {
JOptionPane.showMessageDialog(null,"Probabilidade negativa.", "Erro",
JOptionPane.ERROR_MESSAGE);
input_string.setText("");
numProbabilidade = 0;
break;
if(teste > 1.0) {
JOptionPane.showMessageDialog(null,"Probabilidade maior que 1.", "Erro",
JOptionPane.ERROR_MESSAGE);
input_string.setText("");
numProbabilidade = 0;
break;
if(teste == 0.0) {
JOptionPane.showMessageDialog(null,"Probabilidade igual a 0.", "Erro",
JOptionPane.ERROR_MESSAGE);
input_string.setText("");
numProbabilidade = 0;
break;
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null,"Numero incorreto.", "Erro",
JOptionPane.ERROR_MESSAGE);
input_string.setText("");
numProbabilidade = 0;
break;
numProbabilidade++;
if(numProbabilidade > 200 && st.hasMoreTokens()) {
JOptionPane.showMessageDialog(null,"S�o permitidos at� 200 probabilidades",
"Erro", JOptionPane.ERROR_MESSAGE);
input_string.setText("");
numProbabilidade = 0;
break;
} else
JOptionPane.showMessageDialog(null,"Insira algum valor.",
"Erro", JOptionPane.ERROR_MESSAGE);
* Todos os m�todos abaixos far�o algum ajuste necess�rio quando ocorrer uma
* mudan�a no ScrollPane
public void componentResized(ComponentEvent e)
scroll.getSize();
public void componentMoved(ComponentEvent e)
public void componentShown(ComponentEvent e)
public void componentHidden(ComponentEvent e)
* Listener utilizado por Java para fazer todo o controle dos Eventos que
* ocorram no aplicativo, ou seja, o pressionar dos tr�s bot�es, assim como
* a utiliza��o da tecla Enter dentro do TextField. Para cada uma destas
* a��es se encontrar� um c�digo diferente para seu processamento correto
public void actionPerformed(ActionEvent evt) {
if(evt.getSource() == reset_button) { // Bot�o de Reiniciar
end_button.setEnabled(true);
step_button.setEnabled(true);
numProbabilidade = 0;
contarProbabilidade();
if(input_string.getText().length() > 0) {
if(parseProbabilidade(input_string.getText()))
this.reset();
stdout.println("Applet reinicializado");
this.reset();
* O bot�o de Proximo pode ser visto abaixo e ele quem far� todo o controle
* gr�fico, assim como matem�tico em rela��o aos pr�ximos valores a serem
* impressos na tela utilizando diversos m�todo diferentes
} else if(evt.getSource() == step_button) {
if(proximo) {
if(calcProbabilidade(passo)) {
proximo = false;
marcador[passo] = -1;
passo--;
} else {
int tmp = 0;
for(; tmp < 400; tmp++)
if(probabilidade[passo-1][tmp] == 0.0)
break;
Cent.printNextStep(passo, probabilidade[passo], marcador[passo]);
stdout.println("As duas probabilidades inferiores da coluna " + passo
+" foram somadas: " +
f.format(probabilidade[passo-1][tmp-1]) + " + " +
f.format(probabilidade[passo-1][tmp-2]) + " = " +
f.format(probabilidade[passo][marcador[passo]]), false);
stdout.println(1, "A soma � mostrada em negrito na coluna 2.",false);
passo++;
if(!proximo) {
if(passo < 0) {
Cent.setReverseStep(-1,-1,-1);
end_button.setEnabled(false);
step_button.setEnabled(false);
for(int k = 0; k < 200; k++) // C�lculo da entropia
if (probabilidade[0][k] != 0)
entropia += probabilidade[0][k]*(-Math.log(probabilidade[0][k])) *
Math.log(10) / Math.log(2) * Math.log(Math.exp(1/(Math.log(10))));
Double ent = new Double(entropia);
entropia = 0;
String cod = new String("Codigo correspondente:\n\n");
for(int m = 0; m < 200; m++)
if (simbolo[0][m].length() > 0)
cod += simbolo[0][m] + "\n";
JOptionPane.showMessageDialog(null, cod, "Codigo", JOptionPane.INFORMATION_MESSAGE);
stdout.println("Num. Prob.: " + numProbabilidade +
" Entropia: " + ent);
} else {
designaSimbolo(passo);
Cent.printReverseStep(passo,simbolo[passo]);
passo--;
* O bot�o de Concluir e ele simplesmente executar� o mesmo c�digo do bot�o
* Proximo, por�m at� o fim da execu��o do programa *
} else if(evt.getSource() == end_button) {
end_button.setEnabled(false);
step_button.setEnabled(false);
entropia = 0;
for(int k = 0; k < 400; k++) {
if(proximo) {
if(calcProbabilidade(passo)) {
proximo = false;
marcador[passo] = -1;
passo--;
} else {
int tmp = 0;
for(; tmp < 400; tmp++)
if(probabilidade[passo-1][tmp] == 0.0)
break;
Cent.printNextStep(passo, probabilidade[passo], marcador[passo]);
passo++;
if(!proximo) {
if(passo < 0) {
Cent.setReverseStep(-1,-1,-1);
} else {
designaSimbolo(passo);
Cent.printReverseStep(passo,simbolo[passo]);
passo--;
} // C�lculo da entropia abaixo
if (probabilidade[0][k] != 0)
entropia += probabilidade[0][k]*(-Math.log(probabilidade[0][k])) *
Math.log(10) / Math.log(2) * Math.log(Math.exp(1/(Math.log(10))));
Double ent = new Double(entropia);
entropia = 0;
stdout.println("Entropia " + f.format(ent));
String cod = new String("Codigo correspondente:\n\n");
for(int m = 0; m < 200; m++)
if (simbolo[0][m].length() > 0)
cod += simbolo[0][m] + "\n";
JOptionPane.showMessageDialog(null, cod, "Codigo", JOptionPane.INFORMATION_MESSAGE);
stdout.println("Num. Prob.: " + numProbabilidade +
" Entropia: " + ent);
* O c�digo abaixo far� todo o papel de abrir um arquivo com probabilidades,
* assim como salvar um arquivo com as probabilidades
/* } else if(evt.getSource() == file_button) {
if(estArquivo) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY):
fileChooser.showSaveDialog(this);
File fileName = fileChooser.getSelectedFile();
if (fileName == null || fileName.getName().equals(""))
JOptionPane.showMessageDialog(null, "Arquivo inv�lido.", "Erro",
JOptionPane.ERROR_MESSAGE);
else {
try {
ObjectInputStream input = new ObjectInputStream(new FileInputStream(fileName));
String arq = (String) input.readObject();
input_string.setText(arq);
if(input_string.getText().length() > 0) {
if(parseProbabilidade(input_string.getText())) {
estArquuivo = false;
end_button.setEnabled(true);
step_button.setEnabled(true);
numProbabilidade = 0;
contarProbabilidade();
this.reset();
stdout.println("Applet reinicializado");
this.reset();
} catch (EOFException e) {
JOptionPane.showMessageDialog(null, "Erro de EOF.", "Erro",
JOptionPane.ERROR_MESSAGE);
} catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(null, "Erro: Class Not Found.", "Erro",
JOptionPane.ERROR_MESSAGE);
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Erro ao abrir arquivo.", "Erro",
JOptionPane.ERROR_MESSAGE);
try {
input.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Erro ao fechar arquivo.", "Erro",
JOptionPane.ERROR_MESSAGE);
} else {
if (passos < 0) {
try {
ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("c:\codigo.txt"));
for(int o = 0; o < 200; o++) {
while(simbolo[0][o].length() != 0) {
output.writeObject(simbolo[0][o])
output.writeObject(" ");
output.flush();
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Erro ao salvar no arquivo.", "Erro",
JOptionPane.ERROR_MESSAGE);
try {
output.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Erro ao fechar arquivo.", "Erro",
JOptionPane.ERROR_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Finalize o processo.", "Erro",
JOptionPane.ERROR_MESSAGE);
/* } else if(evt.getSource() == fix_button) {
try {
input.close();
estArquivo = true;
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Erro abrindo arquivo.", "Erro",
JOptionPane.ERROR_MESSAGE);
* A a��o que ocorre quando se pressiona o bot�o Enter dentro do TextField
* pode ser vista abaixo e � bem similar ao pressionar do bot�o Reiniciar
} else if(evt.getSource() == input_string) { // Utiliza��o da TextBox
end_button.setEnabled(true);
step_button.setEnabled(true);
numProbabilidade = 0;
contarProbabilidade();
if(input_string.getText().length() > 0) {
if(parseProbabilidade(input_string.getText()))
this.reset();
stdout.println("Applet reinicializado");
this.reset();
} else { // Problema!
stdout.println("Evento desconhecido ");
* M�todo utilizado quando o bot�o Reiniciar � pressionado, ele reinicia os
* valores para todas vari�veis e coloca na primeira coluna os primeiros
* valores utilizados na �ltima experimenta��o
void reset() {
int i = 0, j = 0;
Cent.clearScreen(probabilidade[0]);
proximo = true;
passo = 1;
for(i = 0; i < 200; i++)
marcador[i] = -1;
for(i = 0; i < 200; i++)
for(j = 0; j < 250; j++)
simbolo[i][j] = "";
* Testa quanto a viabilidade das probabilidades inseridas no TextBox estarem
* de acordo com os criterios adotados e � bem simples de ser compreendida
boolean parseProbabilidade(String s) {
int linha = 0, i = 0;
double soma = 0.0;
double[] d = new double[200];
StringTokenizer st = new StringTokenizer(s); // Conta o n�mero de itens
// dentro de input_string
for(i = 0; i < 200; i++)
d[i] = 0.0;
i = 0;
while (st.hasMoreTokens()) { // Testa se h� mais Tokens
try {
d[i] = Double.valueOf(st.nextToken()).doubleValue();
if(d[i] < 0) {
return(false);
if(d[i] > 1.0) {
return(false);
if(d[i] == 0.0) {
return(false);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Os n�meros n�o estao em sua forma correta",
"Erro", JOptionPane.ERROR_MESSAGE);
return(false);
i++;
bubblesort(d);
for(i = 0; i < 200; i++) { // Testa quanto a viabilidade da
soma += d; // das vari�veis
if((soma <= 0.999999) || (soma >= 1.000001)) {
JOptionPane.showMessageDialog(null, "A soma das probabilidadades n�o e igual a 1." +
"\nA soma das probabilidade foi " + soma, "Erro", JOptionPane.ERROR_MESSAGE);
return(false);
for(i = 0; i < 200; i++)
probabilidade[0][i] = d[i];
stdout.println("Entrada de probabilidades correta. Pressione " + '\"' +
"Proximo" + '\"' + " para continuar.");
return(true);
* Este m�todo ser� utilizado como sentinela pra a inicializa��o das
* probabilidades
void iniciarProbabilidade(double[] p) {
inic = false;
iniciarProbabilidade(p, p.length-1);
* Executa a inicializa��o para alguns valores das probabilidades a partir
* do objeto Rand()
void iniciarProbabilidade(double[] p, int n) {
Random rand = new Random();
double soma = 0.0, s = 0.0;
int i = 0;
String input = " ";
stdout.println(null); // Limpa o texto abaixo
for(; i < 20; i++) {
p[i] = rand.nextDouble() + 0.1; // Gera os n�meros iniciais
soma += p[i]; // onde se deseja valores pr�ximos
for(i = 0; i < 20; i++) {
p[i] /= soma; // Escalonamento
p[i] = Math.floor(p[i]*100) / 100.0; // Truncamento
s += p[i];
for(i = 0; i < 20; i++) // Utilizado para equilibrar as
if(p[i] < 0.001) { // probabilidades
p[i] += 0.01;
s -= 0.01;
if (s < 1.000) { // Utilizado para inteirar a soma
double resto = 1.0 - s;
p[0] += resto;
bubblesort(p);
for(int k = 0; k < 20; k++) // Constroi string a ser exibida
input += f2.format(p[k]) + " "; // dentro de string_input
String input2 = input.replace(',','.');
input_string.setText(input2);
contarProbabilidade();
* Faz um sort bem comum de todos as probabilidades inseridas
void bubblesort(double[] d) {
for(int i = 0; i < (d.length - 1); i++)
for(int j = 0; j < (d.length - 1); j++)
if(d[j] < d[j+1]) {
double t = d[j];
d[j] = d[j+1];
d[j+1] = t;
* Calcula o valor da probabilidade resultante a partir da soma das duas
* probabilidades anteriores e seu c�digo � representando somente por loops
* que setam estes valores
boolean calcProbabilidade(int passo) {
int n = 0, i = 0;
double soma = 0.0;
if(passo >= 0) {
for(; i < 400; i++)
if(probabilidade[passo-1][i] == 0.0)
break;
n = i;
soma = probabilidade[passo-1][n-1] + probabilidade[passo-1][n-2];
for(i = 0; i < 200; i++)
if(probabilidade[passo-1][i] >= soma) {
probabilidade[passo][i] = probabilidade[passo-1][i];
} else
break;
marcador[passo] = i;
probabilidade[passo][i] = soma;
for(; i < 200; i++)
probabilidade[passo][i+1] = probabilidade[passo-1][i];
probabilidade[passo][n-1] = 0.0;
probabilidade[passo][n] = 0.0;
if(n == 2)
return(true);
else
return(false);
return(true);
* Designa todos os s�mbolos ou c�digos para as probabilidades inseridas
* a partir do controle feito pelos m�todos "actionPerformed" e
* "calcProbabilidade"
void designaSimbolo(int passo) {
int i = 0, m = marcador[passo+1];
String str = "";
if(m == -1) {
simbolo[passo][0] = "0";
simbolo[passo][1] = "1";
stdout.println("Os primeiros valores (0 e 1) foram designados na coluna" +
" da extrema direita.", false);
} else {
for(; i < 400; i++)
if(probabilidade[passo+1][i] != 0.0) {
if(m == i) {
str = simbolo[passo+1][i];
} else if(m < i) {
simbolo[passo][i-1] = simbolo[passo+1][i];
} else if(m > i) {
simbolo[passo][i] = simbolo[passo+1][i];
} else
System.out.println("Problema!!!");
} else
break;
Cent.setReverseStep(passo,i,m);
stdout.println("O c�digo correspondente a probabilidade marcada (" +
f.format(probabilidade[passo+1][m]) +
") foi usado como base para se designar os valores.", false);
stdout.println(1,"O c�digo das duas probabilidade inferiores (" +
f.format(probabilidade[passo][i-1]) + ")(" +
f.format(probabilidade[passo][i]) + ")" +
" foram modificados. Os outros c�digos permanecem" +
" os mesmos.", false);
simbolo[passo][i-1] = str + "0";
simbolo[passo][i] = str + "1";
* Inicializa todo o aplicativo caso seja feito stand-alone
/* public static void main(String args[]) {
JFrame f = new JFrame("C�digo de Huffman");
Huff codigo = new Huff();
codigo.inAnApplet = false;
codigo.init();
f.getContentPane().add("Center", codigo);
f.setSize(800,600);
f.show();
codigo.start();
* A classe abaixo � utilizada para o controle de todas as mensagens exibidas
* ao usu�rio do applet a partir do JPanel stdout, assim como comunica��o
* via interface MS-DOS
class ErrorCanvas extends Canvas {
private String output, output2;
public void paint(Graphics g) {
if(output == null) {
g.drawString("C�digo de Huffman", 350, 20);
g.drawString("Arildo Fran�a Oliva Filho - 99/32810", 20, 40);
g.drawString("Leonardo Lobo Pulcineli - 99/20064", 20, 60);
g.drawString("Marcos Garrison Dytz - 99/20102", 550, 40);
g.drawString("Octavio do Vale Rocha - 99/20129", 550, 60);
} else {
g.drawString(output,20,20);
void println(String s)
println(0,s);
void println(String s,boolean echo)
println(0,s,echo);
void println(int linha,String s)
println(linha,s,true);
void println(int linha,String s,boolean echo)
if(linha == 0)
output = s;
output2 = "";
} else
output2 = s;
this.repaint();
if(s != null && echo)
System.out.println(s);
* A classe abaixo � utilizada na cria��o de toda a interface gr�fica utilizada
* pelo programa como as diversas setas que ligam as probabilidades, a cria��o
* das colunas e controle em rela��o as cores dos c�digos.
* Grande parte do c�digo deste classe deve ser creditado a Paul Williams.
class cent extends JPanel {
private int reverse_step = -1;
private int rs_y, rs_m;
private String[][] buffer; // O conjunto de vari�veis abaixo controlam
private int[] xoffsets; // todo o posicionamento dos diferentes
private int[] yoffsets; // objetos na tela
private int[] lines;
private int yoffset,yhalfoffset,linexoffset,
ybelowoffset,xrightoffset;
protected boolean isinit = false;
protected boolean repainting = false;
Font boldfont = null, deffont;
DecimalFormat f = new DecimalFormat("0.00");
* Executa a inicializa��o de todas vari�veis e arrays, assim como dos objetos
* que ser�o manipulados pela interface gr�fica caso eles n�o tenham ocorrido
void init() {
if(!isinit) {
xoffsets = new int[200];
for(int k =0; k < xoffsets.length; k++)
xoffsets[k] = 40 + k * 60;
yoffset = 16;
yoffsets = new int[400];
int i;
for(i = 0; i < yoffsets.length; i++)
yoffsets[i] = 30 * (i+1) + 60;
buffer = new String[200][400];
int j;
for(i = 0; i < 200; i++)
for(j = 0; j < 400; j++)
buffer[i][j] = "";
lines = new int[400];
for(i = 0; i < lines.length; i++)
lines[i] = -1;
linexoffset = 45; // offset of left of line from left of text
xrightoffset = 5; // offset between forward and reverse(red) text
ybelowoffset = 12; // offset between forward and reverse(red) text
yhalfoffset = 5; // offset for lines (half a character)
deffont = new Font("Dialog", 0, 12);
boldfont = new Font("Dialog", Font.BOLD, 12);
if(deffont == null || boldfont == null) {
boldfont = null;
System.out.println("N�o foi poss�vel indicar o valor para as fontes.");
isinit = true;
repainting = false;
* Construtor para essa classe e define que se a classe n�o tive sido inicia-
* lizada, ent�o ser� por este construtor
public cent()
if(!isinit)
this.init();
* Limpa todo o conte�do exibido no JPanel Cent
void clearScreen(double[] p) {
int i,j;
for(i = 0; i < 200; i++)
for(j = 0; j < 400; j++)
buffer[i][j] = "";
for(i = 0;i < lines.length; i++)
lines[i] = -1;
for(i = 0; i < 200; i++) {
if(p[i] == 0.0)
buffer[0][i*2] = "";
else
buffer[0][i*2] = f.format(p[i]);
repaint();
Maybe you are looking for
-
Dont work 'REUSE_ALV_FIELDCATALOG_MERGE' with table type
Hi Experts ; My problem about 'REUSE_ALV_FIELDCATALOG_MERGE' . I use intarnal table with Table Type ( with header line ). And 'REUSE_ALV_FIELDCATALOG_MERGE' is not working . Field catalog is employ. I dont use 'REUSE_ALV_FIELDCATALOG_MERGE' have a
-
Combine letter size to make tabloid
I've created a brochure that is composed of (4) 8.5" x 11.00" letter sized pages in Pages '09. I need to send these to a printer to have them made up as a duplex printing on a single tabloid 11.00" x 17.00" sheet of heavy glossy paper. Because it's
-
Is there a keyboard stroke for tagging photos in iPhoto?
I would like to learn of a keyboard stroke for tagging photos in iPhoto. I called apple a while back and was told there is no such shortcut. You have to manually click on "add a face." Then, if you want to tag multiple people in one photo, you hav
-
Essbase Client 32 bit v 11.1.1.3 on windows XP computer - Install Fail
Essbase Client 32 bit v 11.1.1.3 install fails on Windows XP, similar install seemms to be working for several users, its failing on one particular user install. error seems to be related to com.hyperion.install.util.ConsoleUtil, ERROR, Can not find
-
hi , I have some like String quesFour=req.getParameter("quesFour"); String quesFive=req.getParameter("quesFive"); String quesSix=req.getParameter("quesSix"); String quesSeven=req.getParameter("quesSeven"); String quesEight=req.getParameter("quesEight