Я обычно делаю так: в php_interface/include/ создаю файл, в котором размещаю весь функционал.
Дальше - в папке /bitrix/admin/ создаем файл с аналогичным названием, в нем - инклюдим наш файл с функционалом.
Осталось дело за малым - вывести ссылку на данный файл в меню. А в этом нам поможет обработчик события "OnBuildGlobalMenu":
AddEventHandler("main", "OnBuildGlobalMenu", "ModifiAdminMenu");
function ModifiAdminMenu(&$adminMenu, &$moduleMenu){
$moduleMenu[] = array(
"parent_menu" => "global_menu_services", // в раздел "Сервис"
"section" => "ваше название",
"sort" => 100, // сортировка пункта меню - поднимем повыше
"url" => "имя страницы.php?lang=".LANG, // ссылка на пункте меню - тут как раз и пишите адрес вашего файла, созданного в /bitrix/admin/
"text" => 'Текст пункта меню',
"title" => 'Всплывашка для пункта меню',
"icon" => "form_menu_icon", // малая иконка
"page_icon" => "form_page_icon", // большая иконка
"items_id" => "menu_ваше название", // идентификатор ветви
"items" => array() // остальные уровни меню
);
}
Ну и если вы все же делаете свой модуль, то файл со скриптом-обработчиком вы разместить уже у себя в модуле, проинклюдите уже его. А вот чтобы добавить страницу в меню для модуля, нужно при разработке собственного модуля разместить файл /bitrix/modules/НАЗВАНИЕ_МОДУЛЯ/admin/menu.php с таким примерно содержанием:
$aMenu = array(
'parent_menu' => 'global_menu_store',
'sort' => 150,
'text' => GetMessage('YOURMODULE_MENU'),
'title' => GetMessage('YOURMODULE_MENUTITLE'),
'icon' => 'sale_menu_icon_statisti',
'page_icon' => 'sale_menu_icon_statisti',
'items_id' => 'some_id',
'items' => array(
array(
'text' => GetMessage('YOURMODULE_MENU_1'),
'title' => GetMessage('YOURMODULE_MENU_1'),
'url' => 'somepage.php?lang='.LANGUAGE_ID,
),
)
);
return (!empty($aMenu) ? $aMenu : false);
Более подробно о работе с доп. меню можно почитать в официально документации и тут
