heraldoluciano / freedom-erp

Automatically exported from code.google.com/p/freedom-erp
10 stars 12 forks source link

Bug - Abrir Ordem de Serviço para edição #4

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
Modulo: Freedom-GMS
Versão atual: 1.2.2.5
Sistema operacional: Linux
Opção do menu: Serviço-> Ordem de Serviço 
Ação em que o erro ocorre: Ao buscar uma Ordem de Serviço (F2) selecione uma 
OS de clique em OK, e o seguinte erro é apresentado:

Erro ao montar grid para tabela EQITRECMERC
GDS Exception. 335544652. multiple rows in singleton select 

Descrição detalhada do problema: Ao debugar o código descobri que o problema 
está no SQL gerado:
"SELECT  CodItRecMerc,CodProd,(SELECT DescProd FROM EQPRODUTO WHERE 
CODEMP=master.CODEMPPD AND CODFILIAL=master.CODFILIALPD AND codprod = 
master.CodProd AND ATIVOPROD='S'), 
RefProd,QtdItRecMerc,NumSerie,CodProcRecMerc,(SELECT
DescProcRecMerc FROM EQPROCRECMERC WHERE CODEMP=master.CODEMPTP AND
CODFILIAL=master.CODFILIALTP AND CodProcRecMerc =
master.CodProcRecMerc),CodTipoRecMerc,garantia,StatusItRecMerc,DescItRecMerc,Def
eitoItRecMerc,CondicoesItRecMerc,ServicoSolicItRecMerc,ObsItRecMerc
FROM EQITRECMERC master WHERE master.CODEMP=? AND master.CODFILIAL=?
AND Ticket=?

O problema está no subselec que retorna a "DescProcRecMerc". Na
clausula WHERE dessa subselect está faltando a condição "AND CODTIPORECMERC 
= master.CODTIPORECMERC".

Pelo que entendi o código que faz com que exista esse subselect são as linhas 
503, 504, 505 do arquivo FOrdemServico.java

adicCampoInvisivel( txtCodProcRecMerc, "CodProcRecMerc", "Cod.Proc.", 
ListaCampos.DB_FK, txtDescProcRecMerc, true );
        adicDescFKInvisivel( txtDescProcRecMerc, "DescProcRecMerc", "Descrição do processo" );
        adicCampoInvisivel( txtCodTipoRecMercDet, "CodTipoRecMerc", "Cod.Tp.Rec.Merc", ListaCampos.DB_SI, true );

Original issue reported on code.google.com by paulobue...@hotmail.com on 25 Jun 2010 at 12:43

GoogleCodeExporter commented 8 years ago
Fiz a seguinte implementação que aparentemente resolveu o problema:
Inseri o seguinte código logo abaixo da linha 503 do arquivo FOrdemServico.java

txtCodProcRecMerc.getTabelaExterna().setWhereAdicSubSel( "CODTIPORECMERC = 
master.CODTIPORECMERC" );

Acredito que não seja a melhor solução mas por enquanto resolveu.

Mas logo após resolver esse erro surgiu um outro, informando que não foi 
encontrada a coluna REFPROD na tabela EQITRECMERCITOS.

Criei essa coluna na tabela somente para testar e aparentemente funcionou.

Original comment by paulobue...@hotmail.com on 25 Jun 2010 at 3:20

GoogleCodeExporter commented 8 years ago
A solução de criar o campo na tabela não é a recomendada.
O problema já foi corrigido no código fonte.
Quanto ao primeiro problema, não foi possível reproduzir, 
pode ser algum problema referente à parametrização. 
Informe como estão as preferencias do módulo GMS , bem como o cadastros
de tipos de recepção em Recepção/Tipos de recepção. Outra informação 
relevante é se você utiliza mais de uma empresa ou filial.

Original comment by anderson...@gmail.com on 28 Jun 2010 at 3:04

GoogleCodeExporter commented 8 years ago
Você não deve ter conseguido reproduzir o erro porque provavelmente você 
você só tenha um tipo de recepção cadastrado, cadastre mais de um tipo de 
recebimento e teste por favor.

Original comment by paulobue...@hotmail.com on 29 Jun 2010 at 7:00

GoogleCodeExporter commented 8 years ago
Problema corrigido Paulo, no método GuardaCampos existe um parâmetro que 
informa se o campo é uma Primary Key (ListaCampos.DB_PK), Foreign Key 
(ListaCampos.DB_FK), 
Simpes (ListaCampos.DB_SI) ou Primary Key e Foreign Key ao mesmo tempo 
(ListaCampos.DB_PF), no caso do campo CodTipoRecMerc o parâmetro deveria ser 
ListaCampos.DB_PF, com isso o ListaCampos completa a SQL corretamente.

Original comment by anderson...@gmail.com on 7 Jul 2010 at 3:15