Максимальное количество дополнительных полей в инфо-типе
В этой заметке предлагаю попробовать поломать систему, или, если быть точнее, узнать ее предельные возможности. А возможности ее узнавать буду в поисках ответа на вопрос: какое максимальное количество дополнительных полей в инфо-типе кадрового администрирования может быть?
Задача
Узнать максимально допустимое количество полей, которое может быть добавлено в стандартный инфо-тип кадрового администрирования. Требуется уточнение, что меня интересует не само количество полей, а допустимая длина элементов данных для этих полей. В качестве испытуемого будет использоваться инфо-тип 0290 - "Documents and Certificates (CIS)".
См. Data Elements
Подсчет длины всех используемых полей в таблице
Для начала я хочу обратить внимание на количество актуальных полей, используемых в таблице инфо-типа. Немного забегая вперед скажу, что это может помочь мне избежать ошибочных ситуаций в дальнейшем. Через транзакцию SE11 я сложу длины всех полей таблицы, представленных в столбце Length
Итоговая сумма - 1884. Запоминаю это число, так как оно может понадобиться мне в обозримом будущем.
Расширение инфо-типа
См. Enhancing an Infotype Included in the SAP Standard System
Расширяю стандартный инфо-тип, заполнив инклюд CI_P0290 некоторым количеством полей большой длины (тип CHAR300)
Пытаюсь выполнить активацию выполненных изменений, и получаю ошибку вида
Внимательный читатель уже нашел в чем заключается решение этой проблемы, изучив справочный материал вендора
См. Enhancing an Infotype Included in the SAP Standard System
Constraints
The following infotypes are not included in the enhancement concept:
Actions (infotype 0000)
Additional Actions (infotype 0302)
Time Management infotypes (2nnn)
Leave Entitlement (infotype 0005)
Maternity Protection/Parental Leave (infotype 0080)
Military Service (infotype 0081)
Leave Entitlement Compensation (infotype 0083)
Time Quota Compensation (infotype 0416)
Applicant Actions (infotype 4000)
The length of the data field structure PSnnnn together with the CI include must not exceed 1500 bytes.
If you include additional fields in the Organizational Assignment infotype (0001), you cannot use them as selection fields.
Я превысил максимально допустимое значение длины полей таблицы. В связи с чем статус таблицы PA0290 вместе с заполненным инклюдом меняется на Partly active
При попытке создать новую запись инфо-типа я получаю дамп вида
Решение проблемы
Уверен, что представленная мной длина элементов данных для полей инфо-типа скорее избыточна, и вряд ли может быть объективно задействована в каком-либо из инфо-типов кадрового администрирования. Можно считать смоделированную ситуацию скорее абсурдной, чем реальной. Но есть один нюанс... в дебри которого углубляться я не буду. Скажу лишь, что по данной проблеме есть два решения, одно из которых относится к прочтению некоторых SAP инструкций, ссылки на которые представлены ниже:
- 2458652 - Error AD846 "Table <name> is too long (>4030)" or "Table <name> is too long (>4096)"
- 636217 - ABAP Dictionary activation error due to table width >4030 bytes
- 1512035 - AD 846 error for activation of data element
Второе решение сводится к выполнению простой арифметической операции, заключающейся в вычислении допустимой длины элементов данных для новых полей в таблице, включая уже существующие (См. пункт # 1. Подсчет длины всех используемых полей в таблице). Так, убери я несколько доп. полей, чтобы уместиться в лимит 4030, который представлен в системе SAP, проблема будет решена.
P.S. При выполнении расширений стандартных инфо-типов вам может понадобиться транзакция SE14. О ней много интересного написано вот тут The Database Utility.
Update
Чтобы не заниматься подозрительными и нецелесобзраными операциями подсчета длин всех полей таблицы (См. пункт Подсчет длины всех используемых полей в таблице) можно воспользоваться соответствующей функцией. Находясь в транзакции SE11 выберите в меню Extras -> Table Length
Система уже выполнила все необходимые подсчеты
За данную подсказку большое спасибо читателю Роману.