Использование различных типов цен в 1С Битрикс Малый бизнес

Как вы знаете, Битрикс поставляется в различных редакциях, и в редакции малый бизнес практически ничего нет. Например, можно иметь только один тип цен. Но иногда бывает нужно иметь несколько типов цен, а купить более дорогую редакцию нет техни...

Автор . Дата: 29.10.2014

Как вы знаете, Битрикс поставляется в различных редакциях, и в редакции малый бизнес практически ничего нет. Например, можно иметь только один тип цен. Но иногда бывает нужно иметь несколько типов цен, а купить более дорогую редакцию нет технической или финансовой возможности.

Есть 2 способа получить несколько типов цен в редакции малый бизнес. Первый заключается в отключении механизма проверки доступности расширения. Но с этим способом много проблем с лицензией, так же битрикс может вполне заблокировать вашу лицензию при попытке обновиться или залесть на маркет. Поэтому мы с вами рассмотрим второй способ, более сложный, но и более безопасный.

Смысл способа заключается в том, что мы будет создавать руками все записи в СУБД. В качестве примера мы будем рассматривать СУБД MySQL.

Итак, для начала нам нужно создать новый тип цен. Для этого нам нужно добавить новую запись в таблицу b_catalog_group. В ней хранятся различные типы цен. Структура этой таблицы:

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| ID          | int(11)      | NO   | PRI | NULL    | auto_increment |
| NAME        | varchar(100) | NO   |     | NULL    |                |
| BASE        | char(1)      | NO   |     | N       |                |
| SORT        | int(11)      | NO   |     | 100     |                |
| XML_ID      | varchar(255) | YES  |     | NULL    |                |
| TIMESTAMP_X | datetime     | YES  |     | NULL    |                |
| MODIFIED_BY | int(18)      | YES  |     | NULL    |                |
| DATE_CREATE | datetime     | YES  |     | NULL    |                |
| CREATED_BY  | int(18)      | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
  • ID это уникальный индентификатор нашей цены.
  • NAME - код. Важно: при создании новых типов цен вам нужно будет давать им точно такой же код, какой и у базовой цены, иначе этот тип цен не загрузится из-за проверок.
  • BASE - указывает на то, является ли этот тип цен базовым. Базовым может быть только один тип цен
  • SORT - число для сортировки
  • XML_ID - ID из 1С

Остальные поля не особо важные, да и смысл думаю их итак понятен по их названию. Создаем новый тип цен, при этом указываем, что цена не является базовой (т.к. одна базовая цена у нас уже есть).

Теперь этот тип цен можно отредактировать через админпанель, указать нормальное название и отредактировать права.

Новый тип цен добавлен, но нам ещё нужно создать новые цены для всех товаров, потому что окно задания различных цен для элементов каталога у нас заблокировано.

Цены хранятся в таблице b_catalog_price. Её структура:

+------------------+---------------+------+-----+-------------------+-----------------------------+
| Field            | Type          | Null | Key | Default           | Extra                       |
+------------------+---------------+------+-----+-------------------+-----------------------------+
| ID               | int(11)       | NO   | PRI | NULL              | auto_increment              |
| PRODUCT_ID       | int(11)       | NO   | MUL | NULL              |                             |
| EXTRA_ID         | int(11)       | YES  |     | NULL              |                             |
| CATALOG_GROUP_ID | int(11)       | NO   | MUL | NULL              |                             |
| PRICE            | decimal(18,2) | NO   |     | NULL              |                             |
| CURRENCY         | char(3)       | NO   |     | NULL              |                             |
| TIMESTAMP_X      | timestamp     | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| QUANTITY_FROM    | int(11)       | YES  |     | NULL              |                             |
| QUANTITY_TO      | int(11)       | YES  |     | NULL              |                             |
| TMP_ID           | varchar(40)   | YES  |     | NULL              |                             |
+------------------+---------------+------+-----+-------------------+-----------------------------+

Где:

  • ID - уникальный индентификатор цены.
  • PRODUCT_ID - ID продукта
  • EXTRA_ID - ID наценки
  • CATALOG_GROUP_ID - ID типа цен.
  • PRICE - цена
  • CURRENCY - валюта
$DB->query("DELETE FROM `b_catalog_price` WHERE `CATALOG_GROUP_ID` = '2'");
$result = $DB->select("SELECT * FROM `b_catalog_price`");

for ($i = 0; $i < count($result); $i++)
{
    if ($result[$i]['QUANTITY_FROM'] == '' || intval($result[$i]['QUANTITY_FROM']) == 0)
        $result[$i]['QUANTITY_FROM'] = 'NULL';
    if ($result[$i]['QUANTITY_TO'] == '' || intval($result[$i]['QUANTITY_TO']) == 0)
        $result[$i]['QUANTITY_TO'] = 'NULL';
    if ($result[$i]['TMP_ID'] == '' || intval($result[$i]['TMP_ID']) == 0)
        $result[$i]['TMP_ID'] = 'NULL';

    $result_cost = $result[$i]['PRICE'];

    $DB->query("INSERT INTO `b_catalog_price` (`PRODUCT_ID`, `EXTRA_ID`, `CATALOG_GROUP_ID`, `PRICE`, `CURRENCY`, `TIMESTAMP_X`, `QUANTITY_FROM`, `QUANTITY_TO`, `TMP_ID`) VALUES ('".$result[$i]['PRODUCT_ID']."', 'NULL', '2', '".$result_cost."', '".$result[$i]['CURRENCY']."', '".$result[$i]['TIMESTAMP_X']."', '".$result[$i]['QUANTITY_FROM']."', '".$result[$i]['QUANTITY_TO']."', '".$result[$i]['TMP_ID']."');");
}

Теперь у нас есть 2 цены для товара. И мы можем использовать её на свое усмотрение. Например назначить наценку на все товары с новой ценой:

UPDATE b_catalog_price SET EXTRA_ID = 1 WHERE CATALOG_GROUP_ID = 2;

 


comments powered by HyperComments