Вопрос или проблема
Я добавляю счет через конечную точку по умолчанию в Acumatica. Он отвечает с ошибкой:
{
"message": "Произошла ошибка.",
"exceptionMessage": "Счет.Детали[0].Субсчет: Субсчет '560' не может быть найден в системе. Пожалуйста, проверьте, есть ли у вас соответствующие права доступа к этому объекту.\nВставка записи 'AP Transactions' вызвала как минимум одну ошибку. Пожалуйста, проверьте ошибки.",
"exceptionType": "PX.Api.ContractBased.OutcomeEntityHasErrorsException",
"stackTrace": " at PX.Api.ContractBased.EntityService.GetOperationResult(EntityImpl entity, EntityExportContextBuilder entityExportContextBuilder, PXSYTable exportedKeys, PXOuterException contextError, Boolean throwOnError, Boolean addCancelCommand) in C:\\build\\code_repo\\NetTools\\PX.Api.ContractBased\\EntityService.cs:line 724\r\n at PX.Api.ContractBased.EntityService.Put(ISystemContract systemContract, String version, String name, EntityImpl entity, CbOperationContext operationContext, Boolean throwOnError) in C:\\build\\code_repo\\NetTools\\PX.Api.ContractBased\\EntityService.cs:line 676\r\n at PX.Api.ContractBased.Soap.SoapFacadeBase.PutImpl(EntityImpl entity, Boolean throwOnValidationError) in C:\\build\\code_repo\\NetTools\\PX.Api.ContractBased\\Soap\\SoapFacadeBase.cs:line 126\r\n at PX.Api.ContractBased.SystemContracts.V2.RestController.PutEntity(EntityImpl entity, String select, String filter, String expand, String custom) in C:\\build\\code_repo\\NetTools\\PX.Api.ContractBased\\SystemContracts\\V2\\RestController.cs:line 304\r\n at lambda_method(Closure , Object , Object[] )\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_2.<GetExecutor>b__2(Object instance, Object[] methodParameters)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- Конец трассировки стека из предыдущего места, где было выброшено исключение ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext()\r\n--- Конец трассировки стека из предыдущего места, где было выброшено исключение ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()\r\n--- Конец трассировки стека из предыдущего места, где было выброшено исключение ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()\r\n--- Конец трассировки стека из предыдущего места, где было выброшено исключение ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()\r\n--- Конец трассировки стека из предыдущего места, где было выброшено исключение ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()\r\n--- Конец трассировки стека из предыдущего места, где было выброшено исключение ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()\r\n--- Конец трассировки стека из предыдущего места, где было выброшено исключение ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__5.MoveNext()\r\n--- Конец трассировки стека из предыдущего места, где было выброшено исключение ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__3.MoveNext()\r\n--- Конец трассировки стека из предыдущего места, где было выброшено исключение ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__6.MoveNext()\r\n--- Конец трассировки стека из предыдущего места, где было выброшено исключение ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()"
}
Счета и субсчета контролируются доступом GL, и пользователь, с которым я вхожу, действительно имеет доступ, также я могу вводить счет и субсчет через интерфейс без проблем.
Единственное, что работает, это если у поставщика нет установленного счета расходов и субсчета расходов, или если счет и субсчет совпадают со счетом расходов и субсчетом поставщика.
Любая помощь будет оценена.
Ниже приведен мой запрос в формате Json
{
"Id": null,
"Type": {
"Value": "INV"
},
"ReferenceNbr": null,
"Status": null,
"Date": {
"Value": "2024-08-25T00:00:00"
},
"PostPeriod": {
"Value": "052025"
},
"Vendor": {
"Value": "2495"
},
"VendorRef": {
"Value": "test"
},
"DueDate": null,
"Hold": null,
"BranchID": {
"Value": "90"
},
"CapturedTax": {
"Value": 5.1
},
"CapturedTotal": {
"Value": 39.13
},
"Amount": {
"Value": 39.13
},
"WorkgroupID": null,
"Owner": {
"Value": 13912
},
"note": null,
"files": null,
"FinancialDetails": null,
"Details": [
{
"InventoryID": {
"Value": null
},
"TransactionDescription": {
"Value": "Dunite AP25 ECR680"
},
"Qty": {
"Value": 0.86
},
"UnitCost": {
"Value": 39.57
},
"Account": {
"Value": "7463"
},
"SubAccount": {
"Value": "560"
},
"TaxCategory": null,
"POLine": null,
"POOrderType": null,
"POOrderNbr": null,
"POReceiptNbr": null,
"POReceiptLine": null,
"Branch": {
"Value": "90"
},
"note": null
}
]
}
Ответ или решение
Ваша проблема заключается в том, что Acumatica API не может найти указанный субсчет (‘560’) при добавлении счета. Ошибка, которую вы получили, указывает на то, что система не может найти этот субсчет и предлагает проверить права доступа к этому объекту. Рассмотрим несколько важных шагов, которые могут помочь решить эту проблему.
1. Проверьте наличие субсчета
Убедитесь, что субсчет ‘560’ действительно существует в системе Acumatica. Вы можете это проверить, зайдя в соответствующий раздел и просмотрев доступные субсчета. Если он отсутствует, вам нужно создать ее или использовать существующий субсчет.
2. Проверьте права доступа
Хотя вы упомянули, что у вас есть необходимые права доступа, это стоит перепроверить. Убедитесь, что ваш пользователь действительно имеет доступ к этому субсчету в рамках учетной записи GL (Главной книги). Это можно сделать, зайдя в администрирование прав доступа и проверив настройки безопасности для вашего пользователя.
3. Проверьте настройки поставщика
Проблема может возникать из-за того, что выбранный вами поставщик не имеет установленного счета расходов и субсчета. Убедитесь, что в карточке поставщика правильно указаны счета и субсчета, особенно если они являются обязательными.
4. Используйте правильный этап продажи
Если поставщик не имеет указанного счета и субсчета или если они совпадают с его счетом расходов, как вы указали, это может указывать на особую бизнес-логику или ограничения в ваше окружение Acumatica. Проверьте, не применяются ли какие-либо настройки или правила на уровне бизнеса, которые могут препятствовать правильному сохранению операции.
5. Проверьте настройки входных данных
Ваш JSON-запрос выглядит корректным в целом. Убедитесь, что поле SubAccount
корректно указано и соответствует тому, что ожидается в системе. Попробуйте заменить его на другой существующий субсчет и посмотрите, будет ли это работать.
Пример исправленного запроса
Если все вышеперечисленное правильно, попробуйте изменить субсчет в вашем запросе:
"SubAccount": {
"Value": "123" // Замените на существующий субсчет
}
6. Консультируйтесь с поддержкой Acumatica
Если вы выполнили все вышеперечисленное и проблема все еще не решена, настоятельно рекомендую обратиться в службу поддержки Acumatica с указанной ошибкой, предоставив их все необходимые детали запроса и среды. Это может быть связано с багом или ограничениями специфичными для вашего инстанса.
Следуя этим шагам, вы сможете диагностировать и, возможно, решить проблему с добавлением субсчета в систему. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться.