Задать вопрос
@aspirantes

Как выгрузить все разделы, если фильтр не работает?

В общем игнорирует фильтр, есть ли другие способы, или как можно переделать данный?
public static function sections()
    {
        $data = [];
        $method = 'crm.productsection.list';
        $b24_result = self::callFull(
            $method,
            $data,
        );
        var_dump($b24_result);
        die;
        return $b24_result;
    }
    private static function callFull($method, $data) // работает для юзеров, не работает для департаментов, разделов
    {
        $res = [];
        $lastId = 0;
        $finish = false;
        $data['order']['ID'] = 'ASC';
        $data['start'] = -1;
        $i = 0;
        while (!$finish && $i <= 2) {
            var_dump($lastId);
            $i++;
            $data['filter'][">ID"] = $lastId;
            $result = CRest::call(
                $method,
                $data
            );
            if (count($result['result']) > 0) {
                $lastId = end($result['result'])['ID'];
                $res = array_merge($res, $result['result']);
            } else {
                $finish = true;
            }
            usleep(200000);
        }
        return $res;
    }


ps Решил вопрос через параметр 'start' (работает в качестве NAV_PARAMS)
private static function callFull($method, $data) // работает для юзеров, не работает для департаментов, разделов
    {
        $res = [];
        $finish = false;
        $pages = 0;
        $data['order']['ID'] = 'ASC';
        //$data['start'] = -1;
        $i = 0;
        $n = 0;
        while (!$finish && $i <= 2) {
            if ($i == 0) {
                $result = CRest::call(
                    $method,
                    $data
                );
                unset($data);
                $pages = ceil($result['total'] / 50);
                $res[] = $result['result'];
            } else {
                $data[$i] = [
                    'method' => $method,
                    'params' => [
                        'order' => [
                            'ID' => 'ASC'
                        ],
                        'start' => $i * 50
                    ],

                ];
                if ($n == 50) {
                    $res = array_merge($res, CRest::callBatch($data, 50)['result']['result']);
                    unset($data);
                    $n = 0;
                }
            }
            $i++;
            if ($i <= $pages) {
            } else {
                $finish = true;
            }
            usleep(200000);
        }
        $res = array_merge($res, CRest::callBatch($data, 50)['result']['result']);
        $result = [];
        foreach ($res as $val) {
            $result = array_merge($result, $val);
        }
        return $res;
    }
  • Вопрос задан
  • 79 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы