Показать сообщение отдельно
Старый 01.02.2021, 20:43   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от ppson Посмотреть сообщение
в поддержку им напиши
В связи с тем, что у меня процесс обращения в поддержку не очень прямой, а исправление до PU40 так и не доехало - решил просто дописать код самостоятельно. Фактически, критически не хватает только одной строчки кода в начале метода validateWrite() датасорса RAssetInventIssueTrans, который был в 2012 - это строчка по вычислению InventDimId с сохранением вычисленного значения в таблицу RAssetInventIssueTrans.

Но я решил пройти немного подальше и попытаться заполнить некоторые аналитики по умолчанию, дополнительно проверив, что они активные.

X++:
/// <summary>
/// Перенос кода из AX 2012 по сохранению InventDimId
/// </summary>

// VSUH, RAssesFixes, 01.02.2021
[ExtensionOf(formDataSourceStr(RAssetInventIssueTrans,RAssetInventIssueTrans))]
final class RAssetInventIssueTransForm_RAssetInventIssueTransDS_VS_Extension
{
    public boolean validateWrite()
    {
        FormRun   fr = element;
        InventDim inventDim = fr.dataHelper().FindDataSource(formDataSourceStr(RAssetInventIssueTrans, InventDim)).cursor();
        RAssetInventIssueTrans rAssetInventIssueTrans = fr.dataHelper().FindDataSource(this.name()).cursor();
        RAssetInventIssueTable assetInventIssueTable = fr.assetInventIssueTable();
        InventTable            inventTable = InventTable::find(rAssetInventIssueTrans.ItemId);

        if (!rAssetInventIssueTrans.RecId)
        {
            if (!inventDim.InventLocationId && InventDimGroupSetup::newInventTable(inventTable).isDimensionActive(fieldNum(inventDim, InventLocationId)))
            {
                inventDim.InventLocationId   = assetInventIssueTable.InventLocationId;
                inventDim.InventSiteId = InventLocation::find(assetInventIssueTable.InventLocationId).InventSiteId;
            }

            if (!inventDim.InventProfileId_RU && InventDimGroupSetup::newInventTable(inventTable).isDimensionActive(fieldNum(inventDim, InventProfileId_RU)))
            {
                if (inventTable.AssetGroupId_RU)
                {
                    inventDim.InventProfileId_RU = RAssetParameters::find().LowCostAssetInventProfileId;
                }
                else
                {
                    inventDim.InventProfileId_RU = inventDim.inventLocation().InventProfileId_RU;
                }
            }
        }

        rAssetInventIssueTrans.InventDimId  = InventDim::findOrCreate(inventDim).InventDimId;
        
        return next validateWrite();
    }

}
На всякий случай (для тех, кто захочет себе быстро поставить фикс) - прикреплю .axmodel и .axpp-файлы
Вложения
Тип файла: axpp RAssetFixes.axpp (2.9 Кб, 24 просмотров)
Тип файла: axmodel RAssetFixes-VSUH.axmodel (2.3 Кб, 27 просмотров)
__________________
Возможно сделать все. Вопрос времени