Repository navigation
Изменение заказа пока он редактируется кассиром #583
Description
Здравствуйте! Поступила задача внедрять систему акций и бонусов в режиме онлайн, когда кассир добавляет товар в заказ сразу отправляем состав заказ в внешний АПИ и исходя из полученных данных можем добавить акционные товары, применять скидки. Но пока заказ редактируется кассиром при применении скидов получаем ошибку
[24.12.2025 18:58:54.830] | ERROR | ApplyMindboxDiscounts error for order 20: One or more objects used in edit session are already in use.
Server stack trace:
в Resto.Front.Api.V9Preview7.Editors.EditSessionWriter.LockEntities(ILockedObjectsToken lockedObjectsToken) в H:\BuildAgent\work\release-installer\dev\iikoFront.Net\Api\Resto.Front.Api\V9Preview7\Editors\EditSessionWriter.cs:строка 111
в Resto.Front.Api.V9Preview7.OperationServiceInternal.SubmitChanges(IUser user, IEditSession editSession) в H:\BuildAgent\work\release-installer\dev\iikoFront.Net\Api\Resto.Front.Api\V9Preview7\OperationServiceInternal.cs:строка 2430
в Resto.Front.Api.V9Preview7.OperationServiceInternal.Resto.Front.Api.IOperationServiceInternal.SubmitChanges(IEditSession editSession, ICredentials credentials) в H:\BuildAgent\work\release-installer\dev\iikoFront.Net\Api\Resto.Front.Api\Generated\Api_V9Preview7\Operations.g2.cs:строка 3137
в System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
в System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)
Exception rethrown at [0]:
в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
в Resto.Front.Api.IOperationServiceInternal.SubmitChanges(IEditSession editSession, ICredentials credentials)
в Resto.Front.Api.OperationServiceFacade.Resto.Front.Api.IOperationService.SubmitChanges(IEditSession editSession, ICredentials credentials)
в Resto.Front.Api.Extensions.OperationServiceExtensions.AddCardLoyaltyDiscounts(IOperationService operationService, IReadOnlyCollection`1 discounts, IOrder order, ICredentials credentials)
в EvosPlugin.Subscriptions.OrderChangedHandler.ApplyMindboxDiscounts(IOrder order, JObject response) в ....Plugin\Subscriptions\OrderChangedHandler.cs:строка 348
как мы можем добиться к выполнению задачи, т.е., изменить состав заказа , применять скидки пока заказ формируется кассиром ?
Activity
baddev1337 commentedon Dec 25, 2025
Добрый день, вы можете использовать метод Operations.TryEditCurrentOrder()
rgalk commentedon Jan 12, 2026
@maksudnishanov, ознакомьтесь с информацией в статье про Редактирование данных. В ней есть описание и рекомендации с том как работать с исключениями типа EntityAlreadyInUseException.
Если не разберетесь, то приведите кусок кода с описанием логики его работы и описанием ожиданий как этот код должен работать. Потребуются также пояснения действий и условий, при которых выбрасывается исключение.
serjmors commentedon May 5, 2026
Добрый день. Мне необходимо реализовать аналогичный сценарий с удаленным расчетом скидок и их применением к текущему заказу. Со статьями я ознакомился, если я правильно понял в версии SDK 9.5.6059 ограничение на изменение открытого пользователем заказа уже снято. Однако, возникает проблема с редактированием через обертку TryEditCurrentOrder.
Что сделано:
В конструкторе плагина добавляю кнопку на экран
Код команды:
В консоль выводится только первая строка "executing calculate command", не возникает никаких исключений, выполнение блокируется на вызове TryEditCurrentOrder.
Касса показывает лоадер с пояснением "Выполняется сторонний плагин".
Разве метод TryEditCurrentOrder не должен выполниться и поставить колбэк в некую очередь? Может я концепцию не верно уловил?