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 Azeveodo

    Pessoal,
    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 Gandra

    Resolvi 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.
    Marcelo

    Boa 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

  • Transação F110

    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 Vilela

    Olá 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: cesarfex

    Olá
    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

  • Autorizacao Formated Search

    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 AM

    Olá.
    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.

  • Pedido de Vendas

    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.

  • Swing/JScrollPane

    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

  • Get total from string valve

    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