27 $entityResult =
new CCatalogResult(
'\Bitrix\Catalog\Model\Product');
29 if (!is_array($arOrder) && !is_array(
$arFilter))
31 $arOrder = (string)$arOrder;
38 $defaultQuantityTrace =
Option::get(
'catalog',
'default_quantity_trace');
39 $defaultCanBuyZero =
Option::get(
'catalog',
'default_can_buy_zero');
40 $defaultNegativeAmount =
Option::get(
'catalog',
'allow_negative_amount');
41 $defaultSubscribe =
Option::get(
'catalog',
'default_subscribe');
44 "ID" =>
array(
"FIELD" =>
"CP.ID",
"TYPE" =>
"int"),
45 "QUANTITY" =>
array(
"FIELD" =>
"CP.QUANTITY",
"TYPE" =>
"double"),
46 "QUANTITY_RESERVED" =>
array(
"FIELD" =>
"CP.QUANTITY_RESERVED",
"TYPE" =>
"double"),
47 "QUANTITY_TRACE_ORIG" =>
array(
"FIELD" =>
"CP.QUANTITY_TRACE",
"TYPE" =>
"char"),
48 "CAN_BUY_ZERO_ORIG" =>
array(
"FIELD" =>
"CP.CAN_BUY_ZERO",
"TYPE" =>
"char"),
49 "NEGATIVE_AMOUNT_TRACE_ORIG" =>
array(
"FIELD" =>
"CP.NEGATIVE_AMOUNT_TRACE",
"TYPE" =>
"char"),
50 "QUANTITY_TRACE" =>
array(
51 "FIELD" =>
"CASE WHEN CP.QUANTITY_TRACE = 'D' THEN '".
$DB->ForSql($defaultQuantityTrace).
"' ELSE CP.QUANTITY_TRACE END",
54 "CAN_BUY_ZERO" =>
array(
55 "FIELD" =>
"CASE WHEN CP.CAN_BUY_ZERO = 'D' THEN '".
$DB->ForSql($defaultCanBuyZero).
"' ELSE CP.CAN_BUY_ZERO END",
58 "NEGATIVE_AMOUNT_TRACE" =>
array(
59 "FIELD" =>
"CASE WHEN CP.NEGATIVE_AMOUNT_TRACE = 'D' THEN '".
$DB->ForSql($defaultNegativeAmount).
"' ELSE CP.NEGATIVE_AMOUNT_TRACE END",
62 "SUBSCRIBE_ORIG" =>
array(
"FIELD" =>
"CP.SUBSCRIBE",
"TYPE" =>
"char"),
64 "FIELD" =>
"CASE WHEN CP.SUBSCRIBE = 'D' THEN '".
$DB->ForSql($defaultSubscribe).
"' ELSE CP.SUBSCRIBE END",
67 "AVAILABLE" =>
array(
"FIELD" =>
"CP.AVAILABLE",
"TYPE" =>
"char"),
68 "BUNDLE" =>
array(
"FIELD" =>
"CP.BUNDLE",
"TYPE" =>
"char"),
69 "WEIGHT" =>
array(
"FIELD" =>
"CP.WEIGHT",
"TYPE" =>
"double"),
70 "WIDTH" =>
array(
"FIELD" =>
"CP.WIDTH",
"TYPE" =>
"double"),
71 "LENGTH" =>
array(
"FIELD" =>
"CP.LENGTH",
"TYPE" =>
"double"),
72 "HEIGHT" =>
array(
"FIELD" =>
"CP.HEIGHT",
"TYPE" =>
"double"),
73 "TIMESTAMP_X" =>
array(
"FIELD" =>
"CP.TIMESTAMP_X",
"TYPE" =>
"datetime"),
74 "PRICE_TYPE" =>
array(
"FIELD" =>
"CP.PRICE_TYPE",
"TYPE" =>
"char"),
75 "RECUR_SCHEME_TYPE" =>
array(
"FIELD" =>
"CP.RECUR_SCHEME_TYPE",
"TYPE" =>
"char"),
76 "RECUR_SCHEME_LENGTH" =>
array(
"FIELD" =>
"CP.RECUR_SCHEME_LENGTH",
"TYPE" =>
"int"),
77 "TRIAL_PRICE_ID" =>
array(
"FIELD" =>
"CP.TRIAL_PRICE_ID",
"TYPE" =>
"int"),
78 "WITHOUT_ORDER" =>
array(
"FIELD" =>
"CP.WITHOUT_ORDER",
"TYPE" =>
"char"),
79 "SELECT_BEST_PRICE" =>
array(
"FIELD" =>
"CP.SELECT_BEST_PRICE",
"TYPE" =>
"char"),
80 "VAT_ID" =>
array(
"FIELD" =>
"CP.VAT_ID",
"TYPE" =>
"int"),
81 "VAT_INCLUDED" =>
array(
"FIELD" =>
"CP.VAT_INCLUDED",
"TYPE" =>
"char"),
82 "TMP_ID" =>
array(
"FIELD" =>
"CP.TMP_ID",
"TYPE" =>
"char"),
83 "PURCHASING_PRICE" =>
array(
"FIELD" =>
"CP.PURCHASING_PRICE",
"TYPE" =>
"double"),
84 "PURCHASING_CURRENCY" =>
array(
"FIELD" =>
"CP.PURCHASING_CURRENCY",
"TYPE" =>
"string"),
85 "BARCODE_MULTI" =>
array(
"FIELD" =>
"CP.BARCODE_MULTI",
"TYPE" =>
"char"),
86 "MEASURE" =>
array(
"FIELD" =>
"CP.MEASURE",
"TYPE" =>
"int"),
87 "TYPE" =>
array(
"FIELD" =>
"CP.TYPE",
"TYPE" =>
"int"),
88 "ELEMENT_IBLOCK_ID" =>
array(
"FIELD" =>
"I.IBLOCK_ID",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_iblock_element I ON (CP.ID = I.ID)"),
89 "ELEMENT_XML_ID" =>
array(
"FIELD" =>
"I.XML_ID",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_iblock_element I ON (CP.ID = I.ID)"),
90 "ELEMENT_NAME" =>
array(
"FIELD" =>
"I.NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_iblock_element I ON (CP.ID = I.ID)")
93 $arSelectFields = $entityResult->prepareSelect($arSelectFields);
97 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
99 if (empty($arGroupBy) && is_array($arGroupBy))
101 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_product CP ".$arSqls[
"FROM"];
102 if (!empty($arSqls[
"WHERE"]))
103 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
104 if (!empty($arSqls[
"GROUPBY"]))
105 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
114 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_product CP ".$arSqls[
"FROM"];
115 if (!empty($arSqls[
"WHERE"]))
116 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
117 if (!empty($arSqls[
"GROUPBY"]))
118 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
119 if (!empty($arSqls[
"ORDERBY"]))
120 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
123 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
124 if ($boolNavStartParams && isset($arNavStartParams[
'nTopCount']))
125 $intTopCount = (int)$arNavStartParams[
'nTopCount'];
127 if ($boolNavStartParams && $intTopCount <= 0)
129 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_product CP ".$arSqls[
"FROM"];
130 if (!empty($arSqls[
"WHERE"]))
131 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
132 if (!empty($arSqls[
"GROUPBY"]))
133 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
137 if (empty($arSqls[
"GROUPBY"]))
144 $cnt =
$dbRes->SelectedRowsCount();
148 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
152 if ($boolNavStartParams && $intTopCount > 0)
153 $strSql .=
" LIMIT ".$intTopCount;
155 $entityResult->setResult(
$DB->Query($strSql));