2017-01-10 12 views
3

Я работаю над функциональным модулем, чтобы помочь справиться с включенным текстом с встроенной логикой. В то время как, глядя в сторону SAP обрабатывает SAPscript файлы и анализирует логику я нашел структуру, которая объявлена ​​как так:Почему это объявление структуры разрешено во встроенном функциональном модуле, но не в новом?

DATA BEGIN OF events OCCURS 100. 
     INCLUDE STRUCTURE ITCCA. 
DATA: command LIKE BOOLEAN, 
     template LIKE BOOLEAN, 
     mask LIKE BOOLEAN, 
    END OF events. 

Это, очевидно, работает, как я могу проследить через него в то время как он работает программа печати. Поэтому я думал, что попробую похожую структуру в своем собственном коде, но даже когда я скопировал код 1 для 1, как указано выше, я получаю сообщение об ошибке во время активации. Ошибка

"BOOLEAN" must be a flat structure. Internal tables, references, 
strings and structures are forbidden as components. 

Может кто-нибудь объяснить мне, почему эта структура действительна в одной программе, а не моей?

+0

Где вы находили исходный код? – vwegert

+0

Это часть функциональной группы STXC. Я нашел некоторую информацию об этом после того, как я разместил этот вопрос. Кажется, что с 'LIKE' мне пришлось бы определять тип BOOLEAN сам, но если бы я использовал' TYPE', то он использовал бы значение словаря для 'BOOLEAN'. Не знаете, почему они решили сами определить его в своем исходном коде? – JRSofty

ответ

3

Чтобы объяснить реальный эффект: LIKE обычно относится к объекту данных (фактический переменного) на правой стороне, а не типа данных. Как вы правильно поняли, как только вы предоставите объект с именем BOOLEAN, который используется для построения типа. Если объект данных этого имени отсутствует и вы не находитесь в классе или интерфейсе, будет запущен obsolete variant of the LIKE statement, который также учитывает типы данных, но только позволяет использовать определенные элементы с правой стороны - а именно плоские структурированные объекты или их компоненты. LIKE DATATYPE-BOOLEAN должно было сработать. Как обычно, сообщение об ошибке несколько менее полезно.

+1

Спасибо за объяснение. Будучи новичком в SAP и ABAP, я нахожу много маленьких ошибок в понимании того, как все это работает. – JRSofty

+2

Научитесь жить с этим - это чувство не исчезнет в ближайшее время :-) – vwegert

0

Кажется, что во время моего первоначального расследования я пропустил декларацию для типа BOOLEAN. В STXC группе функций SAP решила объявить свою собственную переменную для булевы в другой заголовочный файл, как это:

data: boolean(1) type c. 

я первоначально предполагалось, что они делают это с помощью словаря, определенного типа, который имеет аналогичное название и является строка длиной 1 символ. Я также обнаружил, что если бы я изменить свою структуру декларации, как это:

DATA BEGIN OF events OCCURS 100. 
    INCLUDE STRUCTURE ITCCA. 
DATA: command TYPE BOOLEAN, 
    template TYPE BOOLEAN, 
    mask TYPE BOOLEAN, 
END OF events. 

Мой код будет действительным, потому что тогда было бы с помощью словаря определяется значение. Поэтому либо я должен добавить объявление для моего собственного определения boolean, чтобы использовать ключевое слово LIKE, или я должен использовать ключевое слово TYPE, чтобы использовать определение словаря.

 Смежные вопросы

  • Нет связанных вопросов^_^