Fórum
Ver pergunta

ERP não assume stock reservado   

64 visualizações
0
0

Boas,

Estou com um problema ao fazer uma reserva de lote pelos motores para a matéria prima de uma Ordem Fabrico.

O código que estou a fazer é o seguinte:

InvBEReserva reserva = new InvBEReserva();

           InvBELinhasReserva objLinhasReserva = new InvBELinhasReserva();
           InvBELinhaReserva objLinhaReserva = new InvBELinhaReserva();
           BasBEArtigo artigoMatPrima = bso.Base.Artigos.Edita(matPrima);

           objLinhaReserva.Lote = GetLote(chapa, matPrima);
           objLinhaReserva.IdChaveDestino = GetIdChaveDestino(matPrima, idOrdemFabrico);
           objLinhaReserva.ReservadoPor = InvBETipos.EnumReservadoPor.Destino;
           objLinhaReserva.TipoDocDestino = "OF";
           objLinhaReserva.Quantidade = quantidade;
           objLinhaReserva.Artigo = matPrima;
           objLinhaReserva.EstadoOrigem = "DISP";
           objLinhaReserva.EstadoDestino = "RES";
           objLinhaReserva.Armazem = artigoMatPrima.ArmazemSugestao;
           objLinhaReserva.Localizacao = artigoMatPrima.LocalizacaoSugestao;
           objLinhaReserva.IdTipoOrigemDestino = GetIdTipoOrigemDestino();

           objLinhasReserva.Insere(objLinhaReserva);

           reserva.Linhas = objLinhasReserva;
           //reserva.Insere(objLinhaReserva);
           bso.Inventario.Reservas.Actualiza(reserva);

Ele cria a reserva com sucesso (aparece no gestor de reservas) mas não assume no inventário do artigo a quantidade do lote como estado RESERVADO.

Eu faço uma consulta de inventário do artigo e a quantidade continua toda disponivel. Estou a fazer algo de erro ou falta alguma coisa?

Faça login para poder traduzir
Integração
V10
Marcado como spam
Criado há 11 meses e 2 semanas brunooliveira
b
brunooliveira Iniciante
Comentários
Experimente criar uma reserva idêntica, manualmente, através do ERP. Verifique se esta tem o mesmo problema. Se não tiver o mesmo problema, use o método dos motores para editar a reserva criada manualmente e a reserva criada pelos motores. Compare as duas e verifique se falta alguma coisa à reserva criada pelos motores.
11 meses e 2 semanas
antniofreitas
    @antniofreitas Manualmente funciona. Comparei pelos motores como sugeriu e aparenta estar tudo igual exceto o campo DescricaoDestino, mas não parece que seja disso (pelo menos não faz sentido ser). Editado: Entretanto testei com a descrição a preencher e continua a não funcionar.
    11 meses e 2 semanas
    brunooliveira
      Infelizmente, não estou familiarizado com este "módulo", por isso não consigo ajudar melhor... Talvez valha a pena conferir as tabelas na BD que registam reservas e comparar a reserva feita manualmente com a da API. Pode ir mais longe e fazer um SQL Server Profiler para comparar a criação das reservas usando os dois métodos...
      11 meses e 2 semanas
      antniofreitas
        Boa tarde @brunooliveira, chegaste a alguma resolução deste problema? Como ultrapassaste?
        9 meses e 1 semana
        andrfilipeborges-f3m
          1 respostas
          0
          Resposta privada

          Aqui vai um exemplo

          public void InsereVEndas_reservas()
          {
          try
          {
          var avisos = string.Empty;

          var doc = new VndBE100.VndBEDocumentoVenda()
          {
          Tipodoc = "ECL",
          Serie = "A",
          Filial = "000",
          Cambio = 1,
          DataDoc = DateTime.Now,
          TipoEntidade = "C",
          Entidade = "SILVA"
          };

          BSO.Vendas.Documentos.PreencheDadosRelacionados(doc);

          BSO.Vendas.Documentos.AdicionaLinha(doc, "A0001");

          var linha = doc.Linhas.GetEdita(1);

          /* Preenchimento manual

          linha.ReservaStock = new InvBEReserva
          {
          Linhas = new InvBELinhasReserva
          {
          new InvBELinhaReserva
          {
          ID = Guid.NewGuid().ToString(),
          Artigo = linha.Artigo,
          Armazem = linha.Armazem,
          Localizacao = linha.Localizacao,
          Lote = linha.Lote,
          DataEntrega = linha.DataEntrega,
          IdCabec = doc.ID,
          EstadoOrigem = "DISP",
          EstadoDestino = BSO.Inventario.Reservas.DaEstadoReservaSistema(linha.IdLinha), //RES
          Quantidade = linha.Quantidade,
          QuantidadePendente = linha.Quantidade,
          IdChaveDestino = linha.IdLinha,
          IdTipoOrigemDestino = BSO.Inventario.TiposOrigem.DaIDTipoOrigem(ConstantesPrimavera100.AbreviaturasApl.Vendas, ConstantesPrimavera100.Modulos.Vendas),
          TipoDocDestino = doc.Tipodoc,
          DescricaoDestino = doc.Documento,
          EmModoEdicao = false,
          EstadoBE = "",
          ReservadoPor = InvBE100.InvBETipos.EnumReservadoPor.Destino
          }
          }
          };
          */
          var reservasPendentes = new InvBE100.InvBELinhasReserva();
          var IdTipoOrigemDestino = BSO.Inventario.TiposOrigem.DaIDTipoOrigem(ConstantesPrimavera100.AbreviaturasApl.Vendas, ConstantesPrimavera100.Modulos.Vendas);
          linha.ReservaStock = BSO.Inventario.Reservas.SugereReservasAutomaticas(linha.Artigo, linha.Quantidade, IdTipoOrigemDestino, linha.IdLinha, doc.Documento, BSO.Inventario.Reservas.DaEstadoReservaSistema(linha.IdLinha), reservasPendentes, linha.Armazem, linha.Localizacao, linha.Lote, doc.ID);

          BSO.Vendas.Documentos.Actualiza(doc, ref avisos);
          PSO.MensagensDialogos.MostraMensagem(StdBSTipos.TipoMsg.PRI_SimplesOk, $"Criado Com Sucesso  {doc.Tipodoc} {doc.Serie}/{doc.NumDoc}.n{avisos}", StdBSTipos.IconId.PRI_Informativo);

          }
          catch (Exception ex)
          {
          MessageBox.Show(ex.Message);
          }
          }

           

          //Anular uma reserva

          BSO.Inventario.Reservas.AnularReserva("ID");

          Faça login para poder traduzir
          Marcado como spam
          Criado há 10 meses e 6 dias gonalocosteira-2