/**
  * Производится инициализация переменных, обработка запросов на редактирование
  *
  * @param array $fields
  * @param bool $isPopup
  * @throws \Bitrix\Main\ArgumentException
  */
 public function __construct(array $fields, $isPopup = false)
 {
     $this->isPopup = $isPopup;
     if ($this->isPopup) {
         $this->fieldPopupResultName = preg_replace("/[^a-zA-Z0-9_:\\[\\]]/", "", $_REQUEST['n']);
         $this->fieldPopupResultIndex = preg_replace("/[^a-zA-Z0-9_:]/", "", $_REQUEST['k']);
         $this->fieldPopupResultElTitle = $_REQUEST['eltitle'];
     }
     parent::__construct($fields);
     $this->restoreLastGetQuery();
     $this->prepareAdminVariables();
     $className = static::getModel();
     $oSort = new \CAdminSorting($this->getListTableID(), static::pk(), "desc");
     $this->list = new \CAdminList($this->getListTableID(), $oSort);
     $this->list->InitFilter($this->arFilterFields);
     if ($this->list->EditAction() and $this->hasWriteRights()) {
         global $FIELDS;
         foreach ($FIELDS as $id => $fields) {
             if (!$this->list->IsUpdated($id)) {
                 continue;
             }
             $this->editAction($id, $fields);
         }
     }
     if ($IDs = $this->list->GroupAction() and $this->hasWriteRights()) {
         if ($_REQUEST['action_target'] == 'selected') {
             $this->setContext(AdminListHelper::OP_GROUP_ACTION);
             $IDs = array();
             //Текущий фильтр должен быть модифицирован виждтами
             //для соответствия результатов фильтрации тому, что видит пользователь в интерфейсе.
             $raw = array('SELECT' => $this->pk(), 'FILTER' => $this->arFilter, 'SORT' => array());
             foreach ($this->fields as $code => $settings) {
                 $widget = $this->createWidgetForField($code);
                 $widget->changeGetListOptions($this->arFilter, $raw['SELECT'], $raw['SORT'], $raw);
             }
             $res = $className::getList(array('filter' => $this->arFilter, 'select' => array($this->pk())));
             while ($el = $res->Fetch()) {
                 $IDs[] = $el[$this->pk()];
             }
         }
         $filteredIDs = array();
         foreach ($IDs as $id) {
             if (strlen($id) <= 0) {
                 continue;
             }
             $filteredIDs[] = IntVal($id);
         }
         $this->groupActions($IDs, $_REQUEST['action']);
     }
     if (isset($_REQUEST['action']) || isset($_REQUEST['action_button']) && count($this->getErrors()) == 0) {
         $listHelperClass = $this->getHelperClass(AdminListHelper::className());
         $className = $listHelperClass::getModel();
         $id = isset($_GET['ID']) ? $_GET['ID'] : null;
         $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : $_REQUEST['action_button'];
         if ($action != 'edit' && $_REQUEST['cancel'] != 'Y') {
             $params = $_GET;
             unset($params['action']);
             unset($params['action_button']);
             $this->customActions($action, $id);
             $sectionEditHelperClass = $this->getHelperClass(AdminSectionEditHelper::className());
             if ($sectionEditHelperClass) {
                 $element = $className::getById($id)->Fetch();
                 $sectionField = $listHelperClass::getSectionField();
                 if ($element[$sectionField]) {
                     $params['ID'] = $element[$sectionField];
                 }
             }
             LocalRedirect($listHelperClass::getUrl($params));
         }
     }
     if ($this->isPopup()) {
         $this->genPopupActionJS();
     }
     // Получаем параметры навигации
     $navUniqSettings = array('sNavID' => $this->getListTableID());
     $this->navParams = array('nPageSize' => \CAdminResult::GetNavSize($navUniqSettings), 'navParams' => \CAdminResult::GetNavParams($navUniqSettings));
 }