Рейтинг: 13.627  
Новая
Предложил Николаев Андрей 09.01.2017 11:41:05

D7 ORM - ON DELETE CASCADE

Идея, которую хотелось бы тут изложить, не нова, но руки никак до нее не доходили.
Навеяна она сообщением на форуме: http://dev.1c-bitrix.ru/community/forums/forum6/topic92353/

В sql есть "каскадные операции" - удаление связанных записей или обновлние.
И хотя сейчас я слабо представляю каскадное обновление, но вот каскадное удаление или запрет на изменение/удаление уже отчетливо видно.
Прошу рассмотреть возможность реализации данной функциональности.
Рейтинг: 46.3207  
Новая
Предложил Нечипоренко Тимофей 23.11.2016 18:17:56

Добавление в открытие линии мессенджера WhatsApp через "API"

Здравствуйте, уважаемые разработчики!

Предлагаю вам рассмотреть возможность добавления в открытие линии очень популярного (даже больше, чем viber) мессенджера WhatsApp.

Не смотря на то, что официально API WhatsApp не открыто, есть уже используемые стабильные(!) технические решения, позволяющие выстроить такую интеграцию.

См: https://data5.ru
Видео: https://www.youtube.com/watch?v=Xs8PQkHA9zk

Уверен, что добавление в открытые линии канала Whatsapp, пожалуй, закроет до 99% вероятность предложить клиенту CRM использовать именно тот канал связи, который ему удобнее всего (остальные мессенджеры в России уже не имеют особого веса).

Буду рад, если предложенное решение окажется для вас полезным. Спасибо.
Рейтинг: 1.2706  
Новая
Предложил Николаев Андрей 23.10.2016 14:46:11

Добавить дополнительные служебные компоненты

В поставке Битрикс24 очень много компонентов и частей системы, которые могут помочь, но они очень неюзабельный со стороны других разработчиков.

Пример 1: нет компонента привязки к сущности crm. Да можно вывернуться через system.field.edit, но корявенько получается.
Пример 2: есть компонент выбора пользователя и даже intranet.user.selector.new, но на практике просто взять и использовать нельзя, потому как он требует еще немножко магии

Какие части системы хотелось бы видеть в качестве штатных компонентов:

1) Компонент выбора сотрудников/подразделений. Тут все просто - по аналогии с "набором тегов" в ленте (с красивым выпадающим окошком) выбрать из структуры, найти из экстранет пользователей, выбрать группы и т.п.
Важно сразу учесть несколько моментов:
- Нужно иметь возможность не учитывать права доступа (т.е. выбирать всех пользователей экстранет)
- Давать возможность выбора только определенных сущностей (например только подразделения, только группы, только внешних пользователей)

А на выходе в нужную REQUEST-переменну клал массив по аналогии с лентой (например U1, SG202 и т.п.)

2) Компонент выбора сущности CRM (опять же с возможностью отключения прав доступа)

Это не полный список, но уже качественно улучшит качество разрабатываемых решений (во-первых единый интерфейс, а во-вторых не надо будет костылить с select2 и подобными) и одновременно увеличит скорость разработки (не надо будет писать с 0, когда есть уже готовое)
Рейтинг: 0.2797  
На голосовании
Предложил Клёпов Роман 18.10.2016 11:40:50

Доработать и написать документацию по CSaleViewedProduct::GetList

Приветствую, коллеги!

Доработайте, пожалуйста API - добавьте более сложную фильтрацию товаров - по стандартным полям инфоблока и свойствам.

Хотелось бы писать функционал опираясь на официальную документацию. Добавьте, пожалуйста ее для этого API.
Рейтинг: 0.0913  
Ответил Жуков Евгений 18.10.2016 12:33:21
Этот метод, как и функционал, базирующийся на нем, является устаревшим. Необходимо использовать \Bitrix\Catalog\CatalogViewedProductTable
Рейтинг: 4.5324  
Новая
Предложил Николаев Андрей 09.10.2016 15:03:34

Развитие api для разделов инфоблоков

В версии инфоблоков 16.5.4 вышла прекрасная функциональность для работы с разделами на новом ядре D7.
Правда документации пока нет (но ничего страшного) и можно было бы существенно увеличить возможности новой реализации:

1) Метод compileEntityByIblock мог бы возвращать не полное название класса, а объект этого класса. При этом его работа была бы эффективнее. Сравните 2 подхода:
use \Bitrix\Main\Loader;
use \Bitrix\Iblock\Model\Section as SectionFactory;

Loader::IncludeModule('iblock');
$sSection = SectionFactory::compileEntityByIblock(1);
$oEntity = new $sSection;
var_dump($oEntity->getMap());

Против
use \Bitrix\Main\Loader;
use \Bitrix\Iblock\Model\Section as SectionFactory;

Loader::IncludeModule('iblock');
$oEntity = SectionFactory::compileEntityByIblock(1);
var_dump($oEntity->getMap());

Мне кажется решение под номером 2 выглядит практичнее.

2) Предлагаю расширить модель SectionTable (или ее производные типа Section1Table) на runtime параметр: ELEMENT_COUNT - который бы доставал активные элементы, привязанные к соответствующему разделу.

Кейс: нужно отобразить только те разделы, где есть активные элементы.
Решение предлагаемое из коробки - составление своего runtime-поля для каждого getList/getRow (где оно требуется).
Если добавить штатное решение как SELECT поле и просто передавать его в массиве полей или соответственно по условию, то код будет выглядеть элегантнее и проще, а другие подобные поля, можно будет посмотреть и сделать по аналогии.
Рейтинг: 4.4576  
Внедрено
Предложил Зайцев Артемий 29.09.2016 17:02:48

Задокументировать \CIBlockElement::GetPropertyValues

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

Используется в умном фильтре. Врядли её поведение будут менять.
Рейтинг: 2.0144  
На голосовании
Предложил Клёпов Роман 19.08.2016 21:02:37

API получения всех настроек (опций) модуля

Уважаемые коллеги!

Нужен API для получения всех настроек модуля.

Входные 3 параметра:

- module_id (catalog, sale, etc.) Обязательный
- arFilter Не обязательный
- arSelect Не обязательный
Рейтинг: 0  
На голосовании
Предложил Казаков Алексей 31.03.2016 15:55:30

Фильтрация элементов SKU по свойствам родительского каталога

Например, у меня есть классический каталог с SKU (2 инфоблока).
В основном каталоге есть, например, свойство "Бренд".

В админке на странице списка элементов SKU было бы полезно вывести фильтр по свойствам родительского элемента, то есть в данном случае - вывести все SKU, у родительского товара которых проставлено "Бренд"=="Ромашка".

Это очень хорошо увязывается с идеей http://idea.1c-bitrix.ru/api-extension-infoblocks-subquery-not-only-by-the-id-of-the-item-in-th/, позволяющей использовать более "прокаченный" режим CIBlockElement::SubQuery
Рейтинг: 2.3532  
Отложено
Предложил Корнев Андрей 18.12.2015 22:47:29

Правила работы с корзиной, CSaleDiscount::DoProcessOrder()

Этот метод при расчёте скидок по правилам работы с корзиной учитывает группы пользователя в базе.

$groupDiscountIterator = Internals\DiscountGroupTable::getList(array(
   'select' => array('DISCOUNT_ID'),
   'filter' => array('@GROUP_ID' => CUser::GetUserGroup($arOrder['USER_ID']), '=ACTIVE' => 'Y')
));
   
Что не даёт по определённым условиям управлять скидками. Как пример, недавняя задача:
Для людей которые бросили корзину(так и не войдя в систему) в гугле получают ссылку с информацией о скидки 5%. Скидка  применяется к условной группе. По урлу захода на сайт эта группа назначается нашему анонимному, пока анонимному, пользователю что бы тот получил свою законную скидку. Но вот беда, DoProcessOrder не понимает группы в сессии пользователя и следовательно не применяется скидка.

Я понимаю что это сделано что бы если в срочном порядке пользователя лишили группы, (допустим золотые покупатели) он не получал из сессии принадлежность и соответственно скидку.

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

А в нашем DoProcessOrder брать группы пользователя из сессии. Это позволило бы и рыбку съесть и ...
и гибко использовать группы для анонимных юзеров и держать актуальные данные в сессии.
Мой алгоритм - всего лишь примитивный пример реализации, уверен вы сможете сделать это более элегантно.  
Рейтинг: 0  
Ответил Жуков Евгений 22.01.2018 15:38:45
Это было сделано для того, чтобы заказ, оформленный клиентом из публички, и заказ, оформленный для того же клиента менеджером, были идентичными. Эта политика меняться не будет, более того, в новом провайдере работа с группами пользователя стала такой же (данные сессии игнорируются).
Рейтинг: 0.547  
Новая
Предложил Рубцов Дмитрий 16.11.2015 19:12:02

Дополнить параметры OnGetDiscountResult

Просьба добавить код товара для передачи в событие OnGetDiscountResult в методе \CAllCatalogDiscount::GetDiscount(). В событие OnGetDiscount он передаётся, а в то что по окончании расчёта - нет. Это позволит управлять скидками для конкретной записи в корзине, не меняя стандартный порядок выбора скидок и без необходимости копировать "к себе" несколько методов.