Aumentar o número de caracteres de um campo


#1

Olá a todos,

Como minha empresa trabalha com serviços, as descrições dos trabalhos (produtos) são frequentemente extensas. Na minha instalação atual do compiere, uso o campo descrição das linhas de ordem de venda (e fatura) para esse objetivo, porém diversas vezes tive dificuldades com o número máximo de caracteres (512). Vendo o BD do adempiere, percebo que o limite desse mesmo campo é ainda menor (256 caracteres).

Há algum problema em aumentar esses campos pra algo como 1000 caracteres? E aonde mudar isso? Preciso ir tabela por tabela como SuperUser, aumentar o limite e mandar sincronizar a coluna? Ou há uma maneira mais direta?

Obrigado


#2

Acredito eu que essa é a melhor maneira.

[]'s

Fernando


#3

Desculpe, não entendi… qual maneira você acha melhor, ir sincronizando a coluna em cada lugar que é utilizado?

E agora me ocorreu outra pergunta, como fica no caso de um upgrade? Afinal vou modificar um campo dictionary…

Obrigado.


#4

bom não é tão simples quanto parece aumentar o tamanho dos campos.

Vc precisa sim aumentar o tamanho no AD, e pode utilizar o sincronizar com o banco para alterar o banco. Mas ai que está o primeiro problema, se estiver usando o postgresql, e existir uma view com este campo, ele vai reclamar que não pode alterar pq existe uma view associada a esta tabela, e dai começa os problemas… precisa pesquisar um pouco na net para achar uma solução para isso, ou criar um outro campo, ex. Description2 e dai já colocar com o tamanho que vc quer.

Se vc resolver alterar o campo padrão, vc precisará executar o generatemodel, para que o sistema “crie” novamente as classes X e I pois nelas existe a informação do campo, e se vc não fizer isso, o Adempiere, vai “truncar” sua string mesmo com o tamanho correto no AD e no BD.

sds, Mario


#5

Verdade que o mgrigioni.

Mas criar um novo campo também ele vai acabar tendo problema pra expedicao do cliente e fatura, no caso onde os campos são “copiados” (m_inout).
Logo sobrescrever a classe não adianta muito, pois ele ia ter q alterar tanto a da ordem de venda quanto a da Expedicao.

Caso queira dar uma olhada ou alterar para testes apenas:

Classes: X_C_Order and X_M_InOut

dentro do source folder: base

package org.compiere.model

Método

o que o mgrigioni falou:

[code] public void setDescription (String Description)
{

	if (Description != null && Description.length() > 255) 
	{
		log.warning("Length > 255 - truncated");
		Description = Description.substring(0, 255); 
	}
	set_Value (COLUMNNAME_Description, Description);
}[/code]

Ai analisar algumas idéias com a criação do novo campo na Ordem de Venda, fazer uso de triggers…
Na Expedicao apenas fazer o uso da idéia de coluna virtual…

[]'s

Fernando


#6

Pensei um pouco e na pior das hipóteses eu posso realmente criar um description2 somente pras propostas (maior necessidade, uso somente na view) e deixar o description em 255 mesmo, só pra NF, pois posso diminuir bastante o texto pra isso.

Mesmo assim obrigado pelas idéias, vou deixar essa pendência pra depois, analisar a dificuldade que isso traria com as informações que vcs deram, porém no momento estou vendo coisas mais importantes.


#7

Realmente aumentar o campo description vai ser muito mais trabalhoso, então adaptei pra uma outra solução, que foi criar um campo SalesDescription na table C_OrderLine. O campo Description vou deixar como sendo para texto da NF, já que o texto que é necessário nas NFs emitidas frequentemente é diferente do texto que enviamos na proposta comercial.

Como não vou precisar do texto que vai pra NF no momento da ordem de venda, só modifiquei as views (_v e _vt) da linha da ordem de venda pra pegarem esse novo campo SalesDescription em vez do campo Description padrão.

Obrigado pela ajuda.