Добрый день.
Столкнулся с неприятным явлением. Ситуация такая: есть транзакция ORGANIZER, в которой ведем записи. К записям можно привязывать различные объекты (те, что в swo1).
В самом органайзере можно открывать несколько записей, причем можно открыть следующую, не сохранив предыдущую(т.е. не вызывая commit).
И проблема заключается в следующем: Если повторить следующую цепочку:
1. открыть в органайзере запись, попробовать привязать к ней объект (т.е. вызвать диалог запроса ключа объекта и потом отменить, не заполняя полей).
2. не закрывая и не сохраняя эту запись, открыть другую или создать новую.
то при попытке привязать объект выдаст ошибку, что объект "*****" не имеет ключевых полей.
Такая ситуация со всеми объектами, правда все объекты z*.
Что удалось найти:
Ключ объекта запрашивается стандартным модулем: SWO_DIALOG_OBJECT_KEY_EDIT.
В нем для определения полей ключа объекта вызывается модуль SWO_QUERY_KEYFIELDS, в подпрограмме которого SWO_QUERY_VERBS.
Там из стандартной таблицы выбираются поля объекта, но перед этим есть кусок кода:
Code:
LOOP AT DBVTYPES.
CONCATENATE '_BASEDATA-_' DBVTYPES-LOW INTO VTYPES_NAME.
ASSIGN (VTYPES_NAME) TO <VT>.
IF <VT> = DBVTYPES-LOW.
DELETE DBVTYPES.
ADD 1 TO DBVTYPES_SELECTED.
ELSE.
<VT> = DBVTYPES-LOW.
ENDIF.
ENDLOOP.
и если DBVTYPES_SELECTED > 0, то выборка не происходит.
А проблема в том, что рабочая область таблицы _BASEDATA при первой записи пустая, да и при всех последующих попытках привязать объект тоже, НО только когда открываешь вторую запись, рабочая область не очищается, и в DBVTYPES_SELECTED добавляется единица.
Уже не знаю куда и копать. Может кто сталкивался с подобным? Может что-то в объектах не так(хотя n попыток при одной записи все хорошо), или то, что запись в том же режиме открыта вторая.
** Забыл добавить, при том, что _BASEDATA содержит информацию об объекте, табличка с полями объекта пустая.
*** исчерпав цивилизованные способы, вставил в эхашмент очистку.