User-defined data types are special data structures you CREATE yourself that you can use in the whole S7 program once they have been defined.
User-defined data types can be used like elementary data types or complex data types in the VARIABLE declaration of logic blocks (FC, FB, OB) or as a data type for variables in a data block (DB). You then have the ADVANTAGE that you only NEED to define a special data structure once to be able to use it as many times as you wish and assign it any number of variables.
User-defined data types can be used as a template for creating data blocks with the same data structure, meaning you create the structure once and then create the required data blocks by SIMPLY assigning the user-defined data type (Example: Recipes: The structure of the data block is always the same, only the amounts used are different.)
User-defined data types are created in the SIMATIC Manager or the incremental editor just like other blocks.