There are different kinds of technologies that provide enhancement options:
Program-bound enhancement implementations in a multiple-use include can only be displayed when the related main programs are generated. The programs, function groups, classes, and so on can be generated within the respective editors. Alternatively, transaction SGEN can be used to perform a mass generation in a system.
Class enhancements, function group enhancements and enhancement options at particular predefined positions (such as the end of a report, a function module, an include or a structure and the beginning and the end of a method) are called implicit enhancement options. They are provided by the framework, only their implementation has to be inserted
If there is a need for additional or different enhancement options than those provided by the framework, you can use explicit enhancement options. They have to be inserted explicitly by the developer. There are two types of explicit enhancement options: BAdIs and explicit enhancement points or sections, where you can insert source code plug-ins.