Решил поделиться интересной особенностью поведения InventDim::findOrCreate() в параллельных транзакциях. Для демонстрации запустите данный job на 2х клиентах. после запуска второго, продолжить первый (набор аналитик должен не существовать). В итоге сгенерится ошибка, что набор аналитик существует. Лечится ситуация с помощью UserConnection для findOrCreate()
X++:
static void job(Args _args)
{
InventDim inventDim;
;
ttsbegin;
inventDim.InventColorId = 'color1';
inventDim.InventLocationId = 'Loc1';
inventDim.InventSizeId = 'size1';
inventDim = InventDim::findOrCreate(inventDim);
Pause;
ttscommit;
info(inventdim.inventDimId);
}