Получена ошибка редактирования в измененном поле. - PullRequest
0 голосов
/ 03 марта 2020

Каждый раз, когда я использую этот код, я получаю сообщение об ошибке «Вы не можете редактировать запись в таблице Закупки». Я не могу выполнить заказ с этим. Моя задача - получить адрес по умолчанию для каждого сайта.

[ExtensionOf(formdatasourcestr(PurchCreateOrder, PurchTable))]
final class PurchCreateOrderGetDefAdress_Extension
{
[FormDataFieldEventHandler(formDataFieldStr(PurchCreateOrder, PurchTable, OrderAccount), FormDataFieldEventType::Modified)]
public static void OrderAccount_OnModified(FormDataObject sender, FormDataFieldEventArgs e)
{
    Formdatasource                              purchtable_ds = sender.datasource();
    PurchTable                                  purchtable = purchtable_ds.cursor();
    InventSite                                  inv;
    InventLocation                              invent;

    str iid =  UserInfoSz::findDefaultSite(curUserId()).InventSiteId;
    purchtable.inventsiteid = iid;
    purchTable.setAddressFromInventSiteId(iid);

    select firstonly invent where invent.inventsiteid == iid && invent.WMSLocationIdDefaultReceipt == "recv";
    if(invent.RecId !=0)
    {
        purchtable.inventlocationid = invent.InventLocationId;
    }
    else
    {
        select firstonly invent where invent.inventsiteid == iid;
        purchtable.inventlocationid = invent.InventLocationId;
    }
}

}

1 Ответ

2 голосов
/ 03 марта 2020

Я думаю, что метод purchTable.setAddressFromInventSiteId(iid); вызывает у вас эту проблему.

Попробуйте этот код:

[ExtensionOf(formdatasourcestr(PurchCreateOrder, PurchTable))]
final class PurchCreateOrderGetDefAdress_Extension
{
    [FormDataFieldEventHandler(formDataFieldStr(PurchCreateOrder, PurchTable, OrderAccount), FormDataFieldEventType::Modified)]
    public static void OrderAccount_OnModified(FormDataObject sender, FormDataFieldEventArgs e)
    {
        Formdatasource                              purchtable_ds = sender.datasource();
        PurchTable                                  purchtable = purchtable_ds.cursor();
        InventSite                                  inv;
        InventLocation                              invent;

        str iid =  UserInfoSz::findDefaultSite(curUserId()).InventSiteId;
        ttsbegin;
        If(purchtable.recid)
        {
            purchtable.selectforupdate(true);    
            purchtable.inventsiteid = iid;
            purchTable.setAddressFromInventSiteId(iid);

            select firstonly invent where invent.inventsiteid == iid && invent.WMSLocationIdDefaultReceipt == "recv";
            if(invent.RecId !=0)
            {
                purchtable.inventlocationid = invent.InventLocationId;
            }
            else
            {
                select firstonly invent where invent.inventsiteid == iid;
                purchtable.inventlocationid = invent.InventLocationId;
            }
        }
        ttscommit;
    }
}
...