[RESOLVIDO] Salvar dados trazidos de uma View em Txt


#1

Boa tarde.
Estou desenvolvendo um processo, para exportar o cálculo das comissões, pois a empresa tem um sistema antigo para a folha de pagamento. Preciso exportar os dados para um arquivo txt. Os dados são o Nome2 do parceiro de negócios (comparando da tabela Cálculo de Comissão, com a Comissão e com a Parceiro de Negócios) e o Valor total da tabela Cálculo de Comissão.
O método para gravar no arquivo Txt, eu já fiz; o problema está sendo em pegar os dados (Nome2 e Valor Total)
Peguei de exemplo um método que meu colega fez, que joga os dados de um select numa arraylist, mas segundo ele, como meu select tem inner join, não daria certo, e também como é a partir de uma View, não tem a classe Model :frowning: . Alguém tem alguma sugestão?

P.S. O usuário escolhe uma data para calcular a comissão, campo StartDate

Desde já, obrigada :smiley:


#2

Até agora tenho isso:

protected String doIt() throws Exception { PreparedStatement pstm = null; ResultSet rs = null; String trx = null; String sql = " SELECT cbp.name2, cmr.grandtotal, cm.c_commission_id, cmr.startdate "+ " FROM c_commissionrun cmr "+ " INNER JOIN c_commission cm ON cmr.c_commission_id = cm.c_commission_id "+ " INNER JOIN c_bpartner cbp ON cm.c_bpartner_id = cbp.c_bpartner_id "+ " WHERE cmr.startdate = ? "; try { pstm = DB.prepareStatement(sql, trx); rs = pstm.executeQuery(); String Nome2 = rs.getString("name2"); double ValorTotal = rs.getDouble("grandtotal"); String Data = rs.getString("startdate"); pstm.setString(1, Data); while(rs.next()) { BufferedWriter arquivo; String valores = "460"+ Nome2 + "00322" + ValorTotal; try { /*JFileChooser choose = new JFileChooser(); int retorno = choose.showSaveDialog(Arq.this); if (retorno == JFileChooser.APPROVE_OPTION) { File diretorio = choose.getSelectedFile(); File novoArquivo = new File(diretorio, arquivo.getName());*/ arquivo = new BufferedWriter(new FileWriter("TBDIGI004.txt", true)); arquivo.write(valores); arquivo.newLine(); arquivo.flush(); arquivo.close(); } catch (IOException erro) { // trata o erro } if(Nome2 == "") continue; } }catch(Exception ex){ // } finally { DB.close(rs, pstm); pstm = null; rs = null; } return null; }
só que a data ele pede como parâmetro no adempiere, antes de gerar o relatório; sem a data, ele traz todos os registros… como faço pra filtrar pela data???

obrigada :slight_smile:


#3

dê uma olhada na classe base/src/org.adempierelbr.process.ProcGenerateRPS, lá é um bom exemplo de como gerar um txt e os parâmetros do adempiere


#4

Meu método ficou assim:

[code]protected String doIt() throws Exception {
PreparedStatement pstm = null;
ResultSet rs = null;
String trx = null;
String sql = " SELECT cbp.name2, cmr.grandtotal, cmr.startdate "+
" FROM c_commissionrun cmr "+
" INNER JOIN c_commission cm ON cmr.c_commission_id = cm.c_commission_id "+
" INNER JOIN c_bpartner cbp ON cm.c_bpartner_id = cbp.c_bpartner_id “+
" WHERE cmr.startdate = ? “;
try {
pstm = DB.prepareStatement(sql, trx);
pstm.setTimestamp(1, p_Date);
rs = pstm.executeQuery();
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int acao = chooser.showOpenDialog(chooser);
String fileName = null;
switch(acao){
case JFileChooser.APPROVE_OPTION:
fileName = chooser.getSelectedFile().getPath() + System.getProperty(“file.separator”) + “TBDIGI.004”;
break;
case JFileChooser.CANCEL_OPTION:
return null;
}
while(rs.next())
{
String Nome2 = rs.getString(“name2”);
BigDecimal ValorTotal = rs.getBigDecimal(“grandtotal”);
BufferedWriter arquivo;
String Nome = StringUtils.leftPad(Nome2, 8, “0”);
String Total = StringUtils.leftPad(ValorTotal.setScale(2).toString().replace(”.”, “”), 18, “0”);
String valores = “460”+ Nome + “00322” + Total;

            arquivo = new BufferedWriter(new FileWriter(fileName, true));
            arquivo.write(valores);  
            arquivo.newLine();  
            arquivo.flush();  
            arquivo.close(); 
            if(Nome2 == "")
                continue;
        }    
    }catch(Exception ex){ 
        //
        }
    finally {
        DB.close(rs, pstm);
        pstm = null;
        rs = null; 
        }
return null;
}[/code]

Só meu único problema agora, é ver qual é a organização, porque muda o nome do arquivo salvo:
Organização 1 = TBDIGI.004
Organização 2 = TBDIGI.005
Tentei pegar o getAD_Org_ID mas pelo jeito não dá :question:


#5

vc chegou a olhar a classe que eu falei para vc ?

lá mostrar um exemplo bem legal de como usar a criação de arquivos e os parâmetros… na sua classe mesmo, vc faz um monte de coisa que tem métodos prontos que facilitam muito a vida…

Sobre o nome da organização só vc instanciar um MOrgInfo

MOrgInfo orgInfo = MOrgInfo.get(getCtx(), Env.getAD_Org_ID(getCtx()), get_TrxName());

#6

Peguei da MOrg, porque na MOrgInfo não tem o nome, e eu vou comparar pelo nome.
Mas valeu a dica. :slight_smile: