Fórum
Ver pergunta

Duplicar linha num orçamento de produção   

72 visualizações
0
0

Bom dia,

Estou a ter algumas dificuldades a perceber como posso fazer para duplicar uma linha de um orçamento de produção através de extensibilidade.

Eu já consigo inserir a linha duplicada no orçamento mas gravo e ao verificar o orçamento novamente a linha não se encontra lá.

Estou a utilizar o método Insere() mas penso que esse método apenas insere na coleção… Como nos orçamento não existe o Adicionalinha como posso fazer?

O código que tenho é o seguinte:

GprBEOrcamentoLinha gprBEOrcamentoLinha = new GprBEOrcamentoLinha();
for (int i = 1; i <= this.Orcamento.Linhas.NumItens; i++)
{
if(this.Orcamento.Linhas.GetEdita(i).Sequencia == frmLinhasOrcArtigo.seqselecionada)
{
gprBEOrcamentoLinha.Artigo = this.Orcamento.Linhas.GetEdita(i).Artigo;
gprBEOrcamentoLinha.Orcamento = this.Orcamento.Linhas.GetEdita(i).Orcamento;
gprBEOrcamentoLinha.IdPai = this.Orcamento.Linhas.GetEdita(i).IdPai;
gprBEOrcamentoLinha.Quantidade = this.Orcamento.Linhas.GetEdita(i).Quantidade;
gprBEOrcamentoLinha.PCUnit = this.Orcamento.Linhas.GetEdita(i).PCUnit;
gprBEOrcamentoLinha.TipoLinha = this.Orcamento.Linhas.GetEdita(i).TipoLinha;
gprBEOrcamentoLinha.Unidade = this.Orcamento.Linhas.GetEdita(i).Unidade;
gprBEOrcamentoLinha.Descricao = this.Orcamento.Linhas.GetEdita(i).Descricao;

gprBEOrcamentoLinha.Sequencia = this.Orcamento.Linhas.GetEdita(i).Sequencia + 1;

gprBEOrcamentoLinha.CamposUtil[“CDU_BC_CorteMesa”].Valor = this.Orcamento.Linhas.GetEdita(i).CamposUtil[“CDU_BC_CorteMesa”].Valor;
gprBEOrcamentoLinha.CamposUtil[“CDU_BC_CorteRolo”].Valor = this.Orcamento.Linhas.GetEdita(i).CamposUtil[“CDU_BC_CorteRolo”].Valor;
gprBEOrcamentoLinha.CamposUtil[“CDU_BC_QtdPecas”].Valor = this.Orcamento.Linhas.GetEdita(i).CamposUtil[“CDU_BC_QtdPecas”].Valor;
gprBEOrcamentoLinha.CamposUtil[“CDU_BC_Observacoes”].Valor = this.Orcamento.Linhas.GetEdita(i).CamposUtil[“CDU_BC_Observacoes”].Valor;
gprBEOrcamentoLinha.CamposUtil[“CDU_BC_QtdConfeccao”].Valor = this.Orcamento.Linhas.GetEdita(i).CamposUtil[“CDU_BC_QtdConfeccao”].Valor;
gprBEOrcamentoLinha.CamposUtil[“CDU_BC_Qtdtingimento”].Valor = this.Orcamento.Linhas.GetEdita(i).CamposUtil[“CDU_BC_Qtdtingimento”].Valor;
this.Orcamento.Linhas.Insere(gprBEOrcamentoLinha);

 

}
}

Faça login para poder traduzir
V10
Marcado como spam
Criado há 1 ano e 6 meses brunooliveira
b
brunooliveira Iniciante
1 respostas
0
Resposta privada

Olá.

gprBEOrcamentoLinha.EmMododEdicao = false;

Julgo que deve ser essa propriedade que te falta indicar.

Faça login para poder traduzir
Marcado como spam
Criado há 1 ano e 6 meses ricardorodrigues
    Comentários
    É preciso adicionar alguma referência em especifico? É que diz me que essa propriedade não existe...
    1 ano e 6 meses
    brunooliveira
      Hummm...não...julgava que essa propriedade existisse tal como, por exemplo, nos documentos de venda. Antes de gravar, consegues validar a linha com um "CalculaTotais" ou algo similar?
      1 ano e 6 meses
      ricardorodrigues
        Não será this.Orcamento.EmModoEdicao = false ? Este código que mostrei está no evento TeclaPressionada, poderá ser por isso?
        1 ano e 6 meses
        brunooliveira
          Poderá ser. Experimenta colocar a true antes de gravar. Já agora, éssa propriedade ("EmModoEdicao") faz parte do "Orcamento" (objecto) e nada tem a ver com o evento que acede ao objeto em si (só para clarificar).
          1 ano e 6 meses
          ricardorodrigues
            Não funcionou... Existe algum projeto de produção que possa utilizar como base?
            1 ano e 6 meses
            brunooliveira
              Não estou a ver... Vê lá se tens o método "Clone" no "gprBEOrcamentoLinha" e parte daí.
              1 ano e 6 meses
              ricardorodrigues
                Existe mas não faz nada... Não estou a perceber se afinal é possível ou não duplicar a linha do orçamento por extensibilidade.
                1 ano e 5 meses
                brunooliveira
                  Olá. Tens que atribuir a linhaX.Clone() a uma nova linha…isso devolve um objeto, não é um método. GprBEOrcamentoLinha gprBEOrcamentoLinha; for (int i = 1; i <= this.Orcamento.Linhas.NumItens; i++) { if(this.Orcamento.Linhas.GetEdita(i).Sequencia == frmLinhasOrcArtigo.seqselecionada) { gprBEOrcamentoLinha = this.Orcamento.Linhas.GetEdita(i).CLONE(); gprBEOrcamentoLinha.XPTO = 'XPTYYY'; (...) this.Orcamento.Linhas.Insere(gprBEOrcamentoLinha); } }
                  1 ano e 5 meses
                  ricardorodrigues
                    Olá. Testei também assim e não funcionou... Não me parece que seja possível duplicar linhas através dos motores, a minha questão é se será possível através de inserção manual na base de dados.
                    1 ano e 5 meses
                    brunooliveira
                      Olá. É possível sim! Eu faço isso em Vendas, só nunca fiz em Orçamentos! Estás a atribuir um novo ID à linha depois de clonar? Inserção manual em BD é sempre possível, mas também deves ter que ir "mexer" no cabeçalho (totais e coisas assim...)...não aconcelho.
                      1 ano e 5 meses
                      ricardorodrigues