Разница в поведении между графиком автоматизации и процессом Все действия на странице обработки - PullRequest
0 голосов
/ 22 мая 2019

Я настроил в ЦАП GLTran настраиваемое поле для Налоговой зоны, и оно будет заполнено вместе с Налоговой категорией и Налоговым идентификатором, если установлен флажок «Создать налоговые операции». Я также настроил «Выпуск», чтобы заполнить эту налоговую зону таблицей TaxTran.

Транзакции журнала создаются пользовательской страницей обработки, которая читает файл XML и создает документ транзакции журнала, а также выпускает его.

Все отлично работает в моем локальном экземпляре, а также в нашем экземпляре песочницы.

На производстве, когда я обрабатываю XML-файлы с помощью страницы Обработка, все в порядке. Но когда я создаю расписание автоматизации, транзакции журнала создаются с заполнением налоговой зоны, и документ публикуется без ошибок. Однако Налоговая зона не заполняется в таблице TaxTran!

У меня нет той же проблемы с расписанием автоматизации в моем локальном экземпляре или песочнице. Все эти экземпляры имеют одинаковую версию Acumatica.

public class GLTranExt : PXCacheExtension<PX.Objects.GL.GLTran>
    {
        #region UsrTaxZoneID
        [PXDBString(10)]
        [PXSelector(typeof(Search<TaxZone.taxZoneID>),
              typeof(TaxZone.taxZoneID),
              typeof(TaxZone.descr))]
        [PXUIField(DisplayName = "Tax Zone")]
        public virtual string UsrTaxZoneID { get; set; }
        public abstract class usrTaxZoneID : IBqlField { }
        #endregion
    }

public class PostGraph_Extension : PXGraphExtension<PostGraph>
    {
        public PXSelect<GLTran, Where<GLTran.batchNbr, Equal<Required<GLTran.batchNbr>>, And<GLTran.accountID, Equal<Required<GLTran.accountID>>, And<GLTran.subID, Equal<Required<GLTran.subID>>, And<GLTran.branchID, Equal<Required<GLTran.branchID>>>>>>> GLTransactions;
        public delegate void ReleaseBatchProcDelegate(Batch b, bool unholdBatch = false);
        [PXOverride]
        public void ReleaseBatchProc(Batch b, bool unholdBatch, ReleaseBatchProcDelegate baseMethod)
        {
            baseMethod(b, unholdBatch = false);
            foreach(TaxTran rec in Base.GL_GLTran_Taxes.Select(b.Module, b.BatchNbr))
            {
                GLTran glTran = GLTransactions.Select(rec.RefNbr, rec.AccountID, rec.SubID, rec.BranchID);
                GLTranExt glTranExt = PXCache<GLTran>.GetExtension<GLTranExt>(glTran);
                if (glTranExt != null)
                    rec.TaxZoneID = glTranExt.UsrTaxZoneID;
                Base.GL_GLTran_Taxes.Update(rec);
                Base.GL_GLTran_Taxes.Cache.Persist(PXDBOperation.Update);
            }
        }
}

1 Ответ

0 голосов
/ 26 мая 2019

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

using (new PXImpersonationContext(PX.Data.Update.PXInstanceHelper.ScopeUser))
{
                            using (new PXReadBranchRestrictedScope())
                            {
                            }
}

: первое использование приводит к запуску кода из имени пользователя admin, а второе - к запуску кода с правами доступа к необходимым веткам

...