Acumatica: База единиц измерения UOM доступна только для чтения? - PullRequest
0 голосов
/ 19 февраля 2019

Я обновляю non / stock-item из-за неправильной UOM, но база единиц некоторых предметов доступна только для чтения.Как я могу обновить его?

Я хочу избежать удаления и добавления элемента снова.

https://imgur.com/KQl7pMY

1 Ответ

0 голосов
/ 19 февраля 2019

Основной ответ: Base UOM cannot be changed for the item in use.

В общем, что означает in use, означает, что этот элемент инвентаря используется в деталях транзакции выпущенного документа.

Механизм проверки расположенв ЦАП, использующих PreventEditIfExists класс.

InventoryItem ЦАП имеет общий запрос проверки:

public abstract class baseUnit : PX.Data.IBqlField
{
    public class PreventEditIfExists<TSelect> : PreventEditOf<baseUnit>.On<InventoryItemMaintBase>.IfExists<TSelect>
        where TSelect : BqlCommand, new()
    {
        protected override String CreateEditPreventingReason(GetEditPreventingReasonArgs arg, Object firstPreventingEntity, String fieldName, String currentTableName, String foreignTableName)
            => PXMessages.Localize(Messages.BaseUnitCouldNotBeChanged);
    }
}

Другие ЦАП используют общие типы запросов <TSelect> для проверки, если Элемент инвентаря равен in use.

Например, это запрос проверки, определенный в INTran ЦАП в поле INTran.InventoryID:

public abstract class inventoryID : PX.Data.IBqlField
{
    public class InventoryBaseUnitRule :
        InventoryItem.baseUnit.PreventEditIfExists<
            Select<INTran,
            Where<inventoryID, Equal<Current<InventoryItem.inventoryID>>,
                And<released, NotEqual<True>>>>>
    { }
}

Так что, если я создаю новый товарный инвентарь, я могу изменить его BaseUOM поле, потому что это не in use нигде.Если я затем создаю инвентарную квитанцию ​​для этого предмета и выпускаю ее, она создает деблокированную транзакцию INTran, и, таким образом, BaseUOM для этого предмета становится in use и недоступна для редактирования.

Я полагаю, что причиной такого поведения является сохранение точности статистики для прошлых транзакций без необходимости кэширования (дублирования) UOM для каждой транзакции на случай, если пользователь изменит ее позже.Если это так, то это компромисс между предоставлением пользователю возможности изменить что-либо в любое время и контролем размера базы данных для большого объема транзакций.

Проверка не является исключительной для транзакций получения.Вы можете найти запросы на проверку для других ЦАП, выполнив поиск исходного кода Acumatica для baseUnit.PreventEditIfExists на странице исходного кода (SM204570): enter image description here

...