Как настроить экран AP Release All и AR Relase All в системе Acumatica ERP

У меня проблема с настройкой экрана AR Relase All (AR501000). Проблема заключалась в том, что я пытался передать значение номера счета-фактуры (поле заказа клиента) на экране «Счета-фактуры и заметки» (AR301000), используя экран AR «Освободить весь процесс» (AR501000) с помощью флажка.

Сначала я создаю GLTranExtension, как показано ниже:

using System;
using PX.Data;
using PX.Objects.CM;
using PX.Objects.CS;
using PX.Objects.PM;
using PX.Objects.CR;
using PX.Objects.TX;
using System.Collections.Generic;
using PX.Objects;
using PX.Objects.GL;

namespace SGLCustomizeProject
{
  [Serializable]
  public class GLTranExtension: PXCacheExtension<PX.Objects.GL.GLTran>
  {
    #region UsrInvoiceNbr
    public abstract class usrInvoiceNbr : IBqlTable { }
     [PXDBString(60, IsFixed = true)]
    [PXUIField(DisplayName = "Vendor Ref. / Customer Order")]
    public string UsrInvoiceNbr { get; set; }
    #endregion
 }
}

А затем я пытаюсь создать настраиваемое расширение ARReleaseProcessExtension. Это ниже моего кода настройки:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PX.Data;
using PX.Objects.AR;
using PX.Objects.GL;
using PX.Objects.CM;
using PX.Objects.CA;
using PX.Objects.CR;
using PX.Objects.CS;
using PX.Objects.CT;
using PX.Objects.PM;

namespace SGLCustomizeProject
{
 public class ARRelaseProcessExtension: PXGraphExtension<ARReleaseProcess>
 {
   public delegate List<ARRegister> ReleaseDocProcDel(JournalEntry je, ref ARRegister doc, PXResult<ARInvoice, CurrencyInfo, Terms, Customer, Account> res, out PMRegister pmDoc);
  [PXOverride]
  public List<ARRegister>ReleaseDocProc(JournalEntry je, ref ARRegister doc, PXResult<ARInvoice, CurrencyInfo, Terms, Customer, Account> res, out PMRegister pmDoc, ReleaseDocProcDel del)
  {
      je.RowInserting.AddHandler<GLTran>((sender, e) =>
          {
              GLTran glTran = e.Row as GLTran;

              ARInvoice ari = PXResult<ARInvoice>.Current;
              if (ari != null && ari.InvoiceNbr != null)
              {
                  GLTranExtension glTex = PXCache<GLTran>.GetExtension<GLTranExtension>(glTran);
                  glTex.UsrInvoiceNbr = ari.InvoiceNbr;
              }
          });
      return del(je, ref doc, res, out pmDoc);
  }
 }
}

Если перейти на экран Release AR Documents (AR501000), и мне нужно только разблокировать одну транзакцию, используя кнопку флажка. Это работает .. Но когда я пытаюсь выпустить более одной транзакции с помощью кнопки флажка, мои вторые транзакции заполняют тот же номер счета на экране транзакции журнала, я опишу это с помощью этого условия:

Если я выпущу две транзакции

  1. ссылочный номер = 000012 и номер счета (в поле Заказ клиента) = inv1254
  2. ссылочный номер = 000013 и номер счета (в поле Заказ клиента) = inv1255

Затем я отпускаю эти две транзакции, и в журнале транзакций отображается результат, подобный следующему:

  1. ссылочный номер = 000012 и номер счета (в поле Заказ клиента) = inv1254
  2. ссылочный номер = 000013 и номер счета (в поле Заказ клиента) = inv1254

Я не знаю, почему во второй транзакции отображается то же значение номера счета-фактуры на экране транзакции журнала.


person HariEko    schedule 25.05.2016    source источник


Ответы (1)


В вашем случае это происходит из-за

ARInvoice ari = PXResult<ARInvoice>.Current;

PXResult.Current может отличаться от фактического счета, который вы обрабатываете.

В этом случае лучше явно выбрать требуемый счет:

ARInvoice ari = PXSelect<ARInvoice, Where<ARInvoice.refNbr, Equal<Required<GLTran.refNbr>>, And<ARInvoice.docType, Equal<Required<GLTran.tranType>>>>>.Select(sender.Graph, glTran.RefNbr, glTran.TranType);
person Dmitrii Naumov    schedule 25.05.2016
comment
привет Дмитрий, Спасибо за сообщения. Я внедрил ваш код в свою настройку, и он работает. Большое спасибо за это :) но это также происходит и на экране APReleaseDocument. это работает, если я реализую в APReleaseProcessExtension? Я имею в виду тот же код выше, мне просто нужно заменить ARInvoice на APInvoice ..? - person HariEko; 25.05.2016
comment
Да, все будет нормально. Вы можете найти пример кода в stackoverflow.com/questions/36784480/ - person Dmitrii Naumov; 25.05.2016