При разработке интеграции Б24 с 1С:Бухгалтерией наткнулся на ошибку получения реквизитов в пакетном запросе.
Делаю пакетный запрос с целью получить реквизиты компании, связанные со счетом:
BX24.callBatch({
lnk: ['crm.requisite.link.get', { entityTypeId: 5, entityId:63 }],
req: ['crm.requisite.get', { id : '$result[lnk][REQUISITE_ID]'}]
},
function(result) {
console.log(result.req.data());
}
);Получаю ошибку при выполнении второго запроса req:
{"req":{"error":"","error_description":"Resource \u0027GET\u0027 is not supported in current context."}}Если задать
id в запросе req статично, то результат возвращается корректно.Это методы реквизитов не поддерживают макросы в составе пакетного запроса или у меня глаз замылился и я макрос не правильно написал?
Та же ошибка возникает, если вместо макроса
$result[lnk][REQUISITE_ID] передать конкретный ID (но первый запрос оставить).Если первый запрос удалить, а во втором указать конкретное значение, то ошибки не будет.
Также ошибки не будет, если выполнить в пакете несколько запросов `crm.requisite.get. Т.е. ошибка возникает только если одновременно выполняются два указанных вида запроса.
Отладка кода в коробке показала что есть ошибка в методе
CCrmRestService::onRestServiceMethod (http://bxapi.ru/src/?module_id=crm&name=CCrmRestService::onRestServiceMethod): для методов crm.requisite.* и crm.requisite.link.* используются разные прокси-объекты, но кэшируются они все по одному и тому же ключу "requisite", в итоге в пакетном запросе кто первый из них в пакете вызывается, то прокси того объекта сохраняется в кэш и далее только он и работает для обоих методов, что и приводит к указанной ошибке.Написал в поддержку Б24 в чате, а пока обход один: разделить один пакет на два: в одном получить ID связанных со счетом реквизитов, а в другом уже получать сами реквизиты.