Проблема с GET переменной PAGEN_ , пагинация в каталоге

Информация для разработчиков

Проблема была с тем что в компонент bitrix:system.pagenavigation приходили не верные данные для постраничной навигации, из-за чего GET параметр PAGEN_{NUM} был с не верным номером.

Подробнее о постраничной навигации

Для понимания решения данной задачи, нужно немного понять как работает постраничная навигация Очевидно что на странице может быть несколько компонентов со своим количеством элементов и у каждого из них должна быть своя пагинация.
Соответственно, мы сталкиваемся с проблемой, как понять какой из компонентов инициализировал переход на другую страницу, те в каком из компонентов была переключена страница?
И в зависимости от того как реализована постраничная навигация, это может быть отправка формы с уникальным ID, это может быть POST запрос с переменной уникальной или, как в Bitrix CMS, уникальная GET переменная, которая строится по шаблону PAGEN_ + $navNum, где $navNum это уникальный ID для конкретного компонента
А что бы понимать какой ID нужно присвоить текущей пагинации, в Битрикс используют, бараманная дробь... Global variables - прекрасное решение прямо из индии я полагаю
И при каждой инициализации новой навигации происходит инкрементация global $NavNUM на 1. Это происходит в методе InitNavStartVars класса CAllDBResult Вызывается он в таких методах как CAllDBResult->NavStart($nPageSize=0, $bShowAll=true, $iNumPage=false) и CDBResultMysql->NavQuery($strSql, $cnt, $arNavStartParams, $bIgnoreErrors = false)
Наиболее используемые методы вызова это CIBlockElement::GetList()->navStart() (Метод GetList возвращает CIBlockResult наследника CDBResult), или на прямую. CDBResult->NavStar(наследник CAllDBResult),

Описание проблемы

Беря во внимание выше сказанное, выяснилось что проблема проявлялась из-за того что перед вызовом компонента bitrix:catalog.section, который отвечал за вызов компонента bitrix:system.pagenavigation и передачи ему параметров, было вызвано несколько других компонентов где была инициализированна постраничная навигация, из-за чего произошла инкрементация переменной global $NavNum.
Однако, итоговое значение $navNum могло быть разным, те в один момент $navNum = 5, а при следующей странице уже $navNum = 5, из-за чего постраничная навигация работала не корректно.

Принятое решение

Исходя из понимания работы пагинации и глобальной переменной, решить можно было несколькими способами, один из них это сделать так что бы инкрементация переменной $navNum всегда была постоянной, те или методы должны всегда вызываться одно и тоже количество раз, или убрать лишние вызовы.
Или просто убрать вероятность того что придут разные значения global $NavNum, установив свой номер, например, априори, выше любых значений, скажем 100, тогда $navNum у catalog.section всегда будет 101
Или установив его в 0, это можно сделать если вы уверены что конфликтов не произойдет с теми пагинациями что были инициализированные ранее по коду.
Мною был выбран последний вариант, тк на страницах разделов и детальных страницах кроме нужной мне пагинации, вывода других я не обнаружил