Fórum
Ver pergunta

Como inserir linhas no meio de uma coleção usando o metodo Me.DocumentoVenda.Linhas.Insere   

152 visualizações
0
♥ 0

Boa tarde

tenho um desenvolvimento que ao pressionar um conjunto de teclas abre um utilitário para inserir conjuntos de artigos em que só mudam as medidas (o utilitário pergunta o artigo  e um conjunto de parâmetros desse artigo e depois vai pedindo as medidas sempre que o utilizador clica no botão inserir, não tendo o utilizador de colocar sempre o artigo preço e os parâmetros desse artigo de cada vez que tivesse de colocar uma medida nova etc), no entanto surge que os utilizadores por vezes saltam 2 ou 3 medidas ou esquecem-se de colocar meia dúzia de medidas e saltam para o conjunto de artigos seguinte.
Ora o meu problema é que os utilizadores necessitam de utilizando o utilitário consigam inserir as linhas que faltam junto com os artigos do mesmo tipo, ou seja, o documento tem 15 linhas, no entanto querem colocar depois da linha 7 mais 10 linhas pelo utilitário, no entanto o Me.DocumentoVenda.Linhas.Insere só insere no final e não no meio, trocando a ordem dos artigos o que confunde as pessoas que vão distribuir pois por vezes é facturado a uma entidade mas é distribuído por vários locais.

existe forma de no VBA da V9 fazer um Me.DocumentoVenda.Linhas.Insere mas em vez de ser no fim ser a meio ou a partir de um numero de linha especificado?

Public artigo As String
Public sairproducao As String
Public sairartigomedida As String

Private Sub EditorVendas_TeclaPressionada(KeyCode As Integer, Shift As Integer)

If (Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_idprod").Valor = Null) Then
respostainicial = vbNo
Else
respostainicial = MsgBox("Deseja inserir artigos associados à produção da linha selecionada?", vbYesNoCancel)
End If

'======================================================================================================================
'======================================================================================================================
'======================================================================================================================
'======================================================================================================================

If respostainicial = vbYes Then
sairproducao = 0
sairartigomedida = 0
Dim ultimoid As Long
Dim numlinhacontrolo As Long
ultimoid = 0
numlinhacontrolo = 1
ultimoid = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_idprod").Valor
If Shift = 1 Then
If KeyCode = 112 Then
Dim descricao As String
If Me.DocumentoVenda.TipoDoc = "REQ" Or Me.DocumentoVenda.TipoDoc = "ORC" Then

artigo = Me.DocumentoVenda.Linhas(Me.LinhaActual).artigo
OrdemProducao.PriTextBoxF41.Text = artigo
OrdemProducao.txtEspessura = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_Espessura")
OrdemProducao.txtPoliuretano = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_Poliuretano")
OrdemProducao.txtCpExtCor = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_CECor")
OrdemProducao.txtCpExtEsp = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_CEEsp")
OrdemProducao.txtCpExtAcab = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_CEAcab")
OrdemProducao.txtCpExtFilme = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_CEFilme")
OrdemProducao.txtCpIntCo = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_CICor")
OrdemProducao.txtCpIntEsp = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_CIEsp")
OrdemProducao.txtCpIntAcab = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_CIAcab")
OrdemProducao.txtCpIntFilme = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_CIFilme")
OrdemProducao.txtRal = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_Ral")
ultimoid = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_idprod")
OrdemProducao.txtTipoPainel = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_TipoPainel")
OrdemProducao.txtproduto = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_Produto")
OrdemProducao.DTPicker1.Value = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_Data_Entrega")
OrdemProducao.cbEntrega = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_Entrega")
OrdemProducao.cbRecolha = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_Recolha")
OrdemProducao.txtOBSOP = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_OBS_OP")
OrdemProducao.cmbSolape = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("CDU_solape")
OrdemProducao.txtSolape = Me.DocumentoVenda.Linhas(Me.LinhaActual).CamposUtil("cdu_solapeMM")
OrdemProducao.txtPVP.Text = Me.DocumentoVenda.Linhas(Me.LinhaActual).PrecUnit = OrdemProducao.txtPVP.Text
OrdemProducao.txtDesconto = Me.DocumentoVenda.Linhas(Me.LinhaActual).Desconto1 = OrdemProducao.txtDesconto

OrdemProducao.Show
If sairproducao = 1 Then
GoTo 40
Else
descricao = OrdemProducao.txtObservacoes
artigo = OrdemProducao.PriTextBoxF41.Text
Dim answer As Integer
Dim SpecialLine As GcpBELinhaDocumentoVenda
Set SpecialLine = New GcpBELinhaDocumentoVenda
SpecialLine.TipoLinha = 60
SpecialLine.descricao = descricao
SpecialLine.CamposUtil("CDU_idprod") = ultimoid
Me.DocumentoVenda.Linhas.Insere SpecialLine
Set SpecialLine = Nothing
Dim solape As String
If OrdemProducao.cmbSolape = "R" Then
solape = "RETRO"
Else
If OrdemProducao.cmbSolape = "F" Then
solape = "FRONTAL"
Else
solape = ""
End If
End If

30
sairartigomedida = 2
ArtigoMedida.txtComprimento = ""
ArtigoMedida.txtLargura = "1000"
ArtigoMedida.txtQtd = ""
ArtigoMedida.Show
If sairartigomedida = 0 Then
Dim artigolinha As GcpBELinhaDocumentoVenda
Set artigolinha = New GcpBELinhaDocumentoVenda
With artigolinha
.artigo = BSO.Comercial.Artigos.DaValorAtributo(artigo, "Artigo")
.Armazem = "A1" 'BSO.Comercial.Artigos.DaValorAtributo(artigo, "ArmazemSugestao")
.Localizacao = "A1"
.Unidade = BSO.Comercial.Artigos.DaValorAtributo(artigo, "UnidadeVenda")
.PrecUnit = OrdemProducao.txtPVP.Text
.Desconto1 = OrdemProducao.txtDesconto
.TipoLinha = 10
If BSO.Comercial.Clientes.DaValorAtributo(Me.DocumentoVenda.Entidade, "tipocli") = 1 Then
.CodIva = 12
.TaxaIva = 0
End If
If BSO.Comercial.Clientes.DaValorAtributo(Me.DocumentoVenda.Entidade, "tipocli") = 2 Then
.CodIva = 23
.TaxaIva = 0
End If
If BSO.Comercial.Clientes.DaValorAtributo(Me.DocumentoVenda.Entidade, "tipocli") = 0 Then
.CodIva = BSO.Comercial.Artigos.DaValorAtributo(artigo, "Iva")
.TaxaIva = BSO.Comercial.Iva.DaValorAtributo(.CodIva, "Taxa")
End If
.Vendedor = Me.DocumentoVenda.Responsavel
.quantidade = ArtigoMedida.txtQtd * (ArtigoMedida.txtComprimento / 1000) * (ArtigoMedida.txtLargura / 1000) ' divide-se por 1000 para converter para M2
.CamposUtil("CDU_Espessura") = OrdemProducao.txtEspessura
.CamposUtil("CDU_Poliuretano") = OrdemProducao.txtPoliuretano
.CamposUtil("CDU_CECor") = OrdemProducao.txtCpExtCor
.CamposUtil("CDU_CEEsp") = OrdemProducao.txtCpExtEsp
.CamposUtil("CDU_CEAcab") = OrdemProducao.txtCpExtAcab
.CamposUtil("CDU_CEFilme") = OrdemProducao.txtCpExtFilme
.CamposUtil("CDU_CICor") = OrdemProducao.txtCpIntCor
.CamposUtil("CDU_CIEsp") = OrdemProducao.txtCpIntEsp
.CamposUtil("CDU_CIAcab") = OrdemProducao.txtCpIntAcab
.CamposUtil("CDU_CIFilme") = OrdemProducao.txtCpIntFilme
.CamposUtil("CDU_Ral") = OrdemProducao.txtRal
.CamposUtil("CDU_idprod") = ultimoid
.CamposUtil("CDU_QTD") = ArtigoMedida.txtQtd
.CamposUtil("CDU_Comp") = ArtigoMedida.txtComprimento
.CamposUtil("CDU_Larg") = ArtigoMedida.txtLargura
.CamposUtil("CDU_TipoPainel") = OrdemProducao.txtTipoPainel
.CamposUtil("CDU_Produto") = OrdemProducao.txtproduto
.CamposUtil("CDU_Data_Entrega") = DateValue(OrdemProducao.DTPicker1.Value)
.CamposUtil("CDU_Entrega") = OrdemProducao.cbEntrega
.CamposUtil("CDU_Recolha") = OrdemProducao.cbRecolha
.CamposUtil("CDU_OBS_OP") = OrdemProducao.txtOBSOP
If OrdemProducao.cmbSolape = "" Then
.descricao = ArtigoMedida.txtQtd + "x" + ArtigoMedida.txtComprimento
Else
.descricao = ArtigoMedida.txtQtd + "x" + ArtigoMedida.txtComprimento + " INCLUI " + OrdemProducao.txtSolape + "MM DE SOLAPE " + solape
.CamposUtil("CDU_solape") = OrdemProducao.cmbSolape
.CamposUtil("cdu_solapeMM") = OrdemProducao.txtSolape
End If
End With
Me.DocumentoVenda.Linhas.Insere artigolinha
Set artigolinha = Nothing
End If
If sairartigomedida = 0 Then GoTo 30
End If
End If ' do sair2
End If ' do tipo doc
End If ' do F1
End If ' do shift

 

Faça login para poder traduzir
Integração
V10
Marcado como spam
Criado há 6 anos e 8 meses jorgesilva
j
jorgesilva Jorge Silva Iniciante
Comentários

Olá jorge adiciona o teu exemplo de código, e existe uma explicação muito longo o que dificulta a ajuda. Se o mais resumido possivél.
E exemplo de código ajuda a obter uma resposta mais rápida.

6 anos e 8 meses
sergiosereno
    Bom Dia Sério está ai o excerto do codigo que deveria inserir a meio das linhas em vez de no fim
    6 anos e 8 meses
    jorgesilva
      1 respostas
      0
      Resposta privada

      Olá jorge

      O que se passa é que por defeito numa colecção primavera sempre que adicionas uma nova linha ela é colocada no fim, não tens forma de contornar isso. A unica forma que vejo é usares uma lista nativa C#/VB para fazeres o insert na posição desejada, assim desta forma.

              public override void DepoisDeEditar(ExtensibilityEventArgs e)
              {
      
                  List<VndBELinhaDocumentoVenda> linhas = new List<VndBELinhaDocumentoVenda>();
      
                  foreach (VndBELinhaDocumentoVenda linha in this.DocumentoVenda.Linhas)
                  {
                      linhas.Add(linha);
                  }
      
                  // Nova a linha a inserir
                  var novaLinha = new VndBELinhaDocumentoVenda();   
                  novaLinha = linhas[1];
                  linhas.Insert(2, novaLinha);
      
                  this.DocumentoVenda.Linhas.RemoveTodos();
      
                  // Inserir na ordem desejada.
                  foreach (var linha in linhas)
                  {
                      this.DocumentoVenda.Linhas.Insere(linha);
                  }
              }

       

      Faça login para poder traduzir
      Marcado como spam
      Criado há 6 anos e 8 meses sergiosereno
      sergiosereno sergio sereno Most Valuable Professional