• Как интегрировать 2 Битрикса не перенося общих пользователей и БП, только отправлять задачи?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Прежде всего разберемся с терминологией: Задача и задание это разные сущности в системе.
    Задание это определенный шаг бизнес-процесса, генерируемый при запуске бизнес-процесса, т.е. в отрыве от бизнес-процесса задания не существует. Два даже одинаковых бизнес-процесса не генерируют одинаковое задание. Следовательно "шарить" задания между порталами нельзя.

    С точки зрения решаемой задачи есть следующие способы ее достижения:

    В облачном битрикс24 Вы можете попробовать воспользоваться межпортальными задачами, т.е. если пользователи порталов будут внешними пользователями. В таком случае между двумя облачными порталами эта схема может сработать.

    В продукте Битрикс24 (коробочная версия) такие возможности не предусмотрены. То есть: вы не можете ставить межпортальные задачи если хотя бы один из порталов коробочный. Для реализации "шаринга" задач вы можете воспользоваться API, но с ограничениями:
    - В REST-апи нельзя передавать файлы и на одной из коробочных сторон придется поддерживать таблицы маппинга
    - Если мы говорим про php код то реализовать там можно вообще все, но механик придется реализовать достаточно большое количество.

    Мы пробовали сделать синхронизацию задач между коробкой и облаком, но ничего хорошего из этого не вышло. Слишком мало возможностей api и слишком много подводных камней и механик.
    Ответ написан
    4 комментария
  • Как настроить левое меню в коробке б24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Кумуляционный ответ на вопрос.

    В каждом конкретном случае необходимо рассматривать код и настройки соответствующего портала.
    В общем и целом такая проблема может наблюдаться в следующих случаях:

    1) Пользователь не является сотрудником портала, но имеет доступ к сайту.
    Такое возникает, когда пользователя добавляют на портал, но он не учитывается как сотрудник.
    Нерадивые разработчики начинают выдавать права на чтение файлов и папок в битриксе и получается франкенштейн.

    Как лечить?
    - Поставить дефолтную коробку, посмотреть права и выставить аналогичные (не копировать)
    - Включить пользователей в соотвутствующие группы
    - Добавить пользователей в подразделения

    2) Проект дорабатывался или обновлялся со старых версий (до 16)
    Дело в том, что ранее механики левого меню отличались и в случае когда портал дорабатывался, код его может быть изменен.
    Как лечить? Проверить код меню-файлов

    3) Некорректные права на продукте и экстранет-пользователь
    Собственно это частный случай номера 1, кто-то поправил права или index.php страницу и пользователь не редиректится в экстранет.
    Соответственно пунктов меню не прибавляется и редиректа не происходит.
    Как лечить? Смотреть код страницы и права

    Ну и конечно же, перед тем как приступать необходимо очищать кеш продукта (в частности меню), чтобы убедиться в существовании проблемы
    Ответ написан
    Комментировать
  • Как создать поле файл у сущности?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Другой способ есть и он довольно простой: вы пишете что сущность работает с свойствами и добавляете UF_* свойство типа файл (или файл на диске) и битрикс делает все за вас. Единственное есть несколько ограничений:

    - Поле называется с UF_ префиксом
    - Валидация согласно настройкам поля
    - Добавлять uf нужно отдельно
    Ответ написан
    1 комментарий
  • Как убрать блоки в sidebar?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    За отображение этих блоков отвечает компонент bitrix:intranet.bitrix24.banner расположенный на странице /stream/index.php

    Удалите компонент со страницы или деактивируйте его и поля исчезнут
    Ответ написан
    1 комментарий
  • Как посмотреть письмо перед отправкой в Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    boris tyrepharm, к сожалению вы не можете посмотреть "будущие" письма, так как такая генерация очень сложна.
    Но вы можете посмотреть существующее письмо в новом дизайне. К тому же - вы можете увидеть только как будет выглядеть ваше письмо, если его вывести в браузере, но это не одно и то же, как если оно пройдет через MTA и будет отображаться в Outlook/Thundebird/OWA и т.п.

    Например я хочу посмотреть как приблизительно(*) будет выглядеть сообщение с ID 336020 (в таблице b_event), после изменения дизайна в существующем шаблоне.
    use Bitrix\Main\Mail;
    
    /**
     * Get from b_event table
     * @var integer Existed event id
     */
    $displayedEventId = 336020;
    
    /**
     * List of site ids, for event theme generation
     * must be replaced by current site id in public
     * @var array
     */
    $arSites = [
    	's1'
    ];
    
    try
    {
    	/**
    	 * First, try to find event
    	 */
    	$arEvent = Mail\Internal\EventTable::getRow([
    		'filter' => [
    			'=ID' => $displayedEventId,
    		]
    	]);
    
    	if ( !$arEvent )
    	{
    		throw new \Exception('Event not found');
    	}
    
    	$arEvent['FIELDS'] = $arEvent['C_FIELDS'];
    
    	/**
    	 * Try to find all message templates for 
    	 * sites. In event handler we send for one letter
    	 * per site.
    	 */
    	$arEventMessageFilter = [
    		'=ACTIVE' => 'Y',
    		'=EVENT_NAME' => $arEvent["EVENT_NAME"],
    		'=EVENT_MESSAGE_SITE.SITE_ID' => $arSites,
    	];
    
    	$messageDb = Mail\Internal\EventMessageTable::getList([
    		'select' => ['ID'],
    		'filter' => $arEventMessageFilter,
    		'group' => ['ID']
    	]);
    
    	foreach ($messageDb as $arMessage)
    	{
    		$eventMessage = Mail\Internal\EventMessageTable::getRowById($arMessage['ID']);
    
    		$eventMessage['FILES'] = array();
    		$attachmentDb = Mail\Internal\EventMessageAttachmentTable::getList(array(
    			'select' => array('FILE_ID'),
    			'filter' => array('=EVENT_MESSAGE_ID' => $arMessage['ID']),
    		));
    		while($arAttachmentDb = $attachmentDb->fetch())
    		{
    			$eventMessage['FILE'][] = $arAttachmentDb['FILE_ID'];
    		}
    
    		$arFields = $arEvent['FIELDS'];
    
    		// get message object for send mail
    		$arMessageParams = array(
    			'EVENT' => $arEvent,
    			'FIELDS' => $arFields,
    			'MESSAGE' => $eventMessage,
    			'SITE' => $arSites,
    			'CHARSET' => $charset,
    		);
    		$message = Mail\EventMessageCompiler::createInstance($arMessageParams);
    		$message->compile();
    		echo $message->getMailBody();
    	}
    }
    catch( \Exception $e )
    {
    	var_dump($e);
    }
    Ответ написан
    Комментировать
  • Как через getlist вывести множественное свойство привязка к другим элементам инфоблока?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Такое поведение встречается когда вы используете Инфоблоки вверсии 1 (хранение свойств в общей таблице) и запрашиваете множественное свойство.
    Чтобы исключить этот момент, можно изменить механику работы (первести их на версию 2), т.е. изменить расположение свойств в отдельной таблице.

    Это конечно накладывает определенные ограничения, но зато в getList'ах пропадут дубли элементов.
    См. документацию: https://dev.1c-bitrix.ru/learning/course/?COURSE_I...
    Ответ написан
    7 комментариев
  • Почему обработчик события не вызывается?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Во первых, такие методы стоит помечать как static, чтобы не вызывать ошибки самого php.
    Во вторых, есть описание событий - https://dev.1c-bitrix.ru/api_d7/bitrix/sale/events... в которых сказано что обработчик события принимает 3 параметра.
    Ответ написан
  • Почему не загружается тип инфоблока?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Выдает белый экран.


    Смотреть лог ошибок (error-log) веб-сервера
    Смотреть лог ошибок php
    Ответ написан
  • Как с помощью Bitrix24 API можно изменить колонку сделки в CRM?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Если уж совсем по сути, то вы задали несколько вопросов:

    1) Как прочитать ответ из вайбера
    2) Как понять к какой сделке относится этот ответ (если он относится к сделке)
    3) Как изменить стадию сделки

    Отвечая на ваш вопрос "Как изменить стадию сделки", вы можете воспользоваться rest-методом crm.deal.update (для облака) или CCrmDeal::update (см аналогично для лида https://dev.1c-bitrix.ru/api_help/crm/example.php)
    Ответ написан
    2 комментария
  • Как решить ошибку загрузки картинки на Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Проверьте значение константы BX_TEMPORARY_FILES_DIRECTORY - там содержится пусть к временному каталогу для хранения файлов.
    Он должен существовать и к нему должен (его владелец bitrix, группа bitrix, права 0775).
    Ответ написан
  • Как в Битрикс через SQL запрос, нескольким товарам записать свойство?

    gromdron
    @gromdron
    Работаю с Bitrix24
    TLDR; Делайте в цикле по элементам изменение свойства.

    не должно быть сложно!


    Вообще-то образно говоря - никак.
    Можно написать конкретное решение под вашу структуру, но уместить это в запрос нет (минимум процедура).

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

    В случае хранение в отдельной таблице алгоритм почти такой же, за исключением того что искать нужно не значение свойства, а запись элемента в таблице при учете что это не множественные свойства.
    Ответ написан
    Комментировать
  • Ворнинг Alternate page with proper canonical tag по AMP страницам, но почему этих страниц нету в вкладке AMP?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А вы выполнили рекомендации относительно текущей страницы?
    Подробнее по ссылке: https://amp.dev/documentation/guides-and-tutorials...
    Ответ написан
  • Можно ли работать с Bitrix CMS имея опыт работы только с другими фреймворками (Yii2, Lumen...)?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Добрый день.

    С вашего позволения, начну по порядку отвечать на ваши вопросы
    Интересуют отличия CMS Bitrix и работы с ним, от работы с фреймворками

    Кардинальные различия.
    Начиная с архитектурного подхода (роутинг смешанный, основан на физических файлах + urlrewrite) и заканчивая парадигмой системы (она нацелена на конечного пользователя, а не на разработчика).

    Есть желание доработать сайт на Битрикс CMS, но никогда раньше с ним не работал.

    Сейчас многие набегут и скажут не делать этого, но для расширения кругозора задача хорошая, но начать стоит именно с изучения документации.
    Если для laravel ты можешь почитать пару статей и примеров и что-то сделать, то для битрикс пока ты не изучишь и не получишь сертификаты, ничего кроме высера ты сделать не сможешь, а если не хочешь читать и учиться, то стоит ли делать высер?

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

    Да платная, но 30 дней (а по факту ~45 дней), полностью для тебя все фишки продукта.
    Документация по большей части есть, но как только начинаешь копать глубже, то сразу она исчезает.
    Плагины сторонних разработчиков часто недокументированы и внятных примеров нет.
    По битриксу нормально описаны только инфоблоки и интернет-магазин, но не все аспекты.

    Слышал у них есть какой-то свой CDN который якобы многократно ускоряет сайты (когда-то видел один сайт с их CDN, как-то не впечатлило, у бесплатного Cloudflare вероятно побыстрее будет). Если это правда, как эффективно его использовать?

    Да есть, но из-за наплыва пользователей он понижает скорость работы продукта.
    Лучше не использовать или использовать, но свой.

    Нужно ли получать жёлтый листок от 1C для работы с их CMS как фрилансер, или это только в 1C: Предприятие?

    Для того чтобы работать как фрилансер ничего не нужно - берешь и работаешь.
    В лучшем случае нужно пройти сертификацию + 2 очных экзамена. Научишься понимать систему и много типовых запросов на лендинги и странички будут делаться автоматом.
    Ответ написан
  • Каким образом в Битриксе назначать стоимость доставок при синхронизации?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Давайте разберем чуть подробнее ваш фрагмент кода и представим гипотетическую ситуацию: у вас на сайте создана 1 отгрузка, а после обмена из вашей системы прилетает 2 новые отгрузки, вместо 1 существовавшей.

    Начнем с того что в:
    // создаём отгрузки
    $shipmentCollection = $orderBx->getShipmentCollection();


    Вы получаете коллекцию отгрузок. Коллекция отгрузок представляет из себя набор, состоящий из системной отгрузки + созданных системой или пользователем.
    При обработке существующего заказа с одной отгрузкой вам вернется коллекция (объект) с содержимым в 2 отгрузки: системная + ваша.

    Далее, вы производите итерацию по пришедшим отгрузкам
    foreach (importJson['Shipments'] as $importOrderShipment)

    Т.е. получается вам пришло 2 отгрузки и соответственно вы 2 раза зайдете в ваш цикл.

    Фрагмент:
    $shipment = $shipmentCollection->createItem();
    Создаст еще одну отгрузку. Иными словами после выполнения фрагмента в коллекции отгрузок у вас будет уже 4 отгрузки: системная, исходная (которая была на сайте), а так же две новых отгрузки, которые вы создали при итерировании по импортируемым отгрузкам.

    В данном случае у вас есть несколько вариантов развития событий:
    1) Вы можете очищать коллекцию отгрузок и создавать новые. Событий на изменение заказа у вас будет большое количество, но тем не менее это даст вам больше прозрачности в вашем процессе (не говоря уже о простоте реализации).

    2) Добавить маркер и по нему обновлять существующие отгрузки - менять стоимость тип и т.п.
    Это будет сложнее, но при этом чище с точки зрения событий в системе.

    P.S. И насколько я помню, цена доставки PRICE_DELIVERY из order это вроде как сумма PRICE_DELIVERY (?CUSTOM_PRICE_DELIVERY) из всех не системных отгрузок, так что задавать его бесполезно.
    Ответ написан
    1 комментарий
  • Как избежать неправильной типизации данных при работе с ORM?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если сделать dump basketItem, то все поля будут типа string


    Правильно. Это ограничение вызванное не bitrix framework, а драйвером для работы с СУБД. В базе храняться реальные значения, а вот mysqli возвращает string-результаты.
    Т.е. в битрикс они такими уже приходят из СУБД.

    Объекты эту проблему решают приводя результаты к нужным типами, а raw-значения так и остаются string'ами.

    Если хотите, то можете в $rsBasketItems->fetch() передать класс-наследника \Bitrix\Main\Text\Converter и его может encode будет применен к каждому значению и вы получите сразу нужные вам поля, но если сделать это нужно в одном месте, то проще будет конечно же в цикле пробежаться и привести самостоятельно.
    Ответ написан
    1 комментарий
  • Как использовать D7 для работы с местоположениями?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Как-то можно используя возможности D7 извлечь допданные сразу, в том же запросе, где извлекаются данные по локациям?


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

    Будет нечто выглядящее так:

    $res = \Bitrix\Sale\Location\LocationTable::getList([
    	'filter' => [
    		'=ID' => intval($id),
    		'=CHILDREN.NAME.LANGUAGE_ID' => 'ru',
    	],
    	'select' => [
    		'_ID' => 'CHILDREN.ID',
    		'CODE' => 'CHILDREN.CODE',
    		'DEPTH_LEVEL' => 'CHILDREN.DEPTH_LEVEL',
    		'LATITUDE' => 'CHILDREN.LATITUDE',
    		'LONGITUDE' => 'CHILDREN.LONGITUDE',
    		'NAME_RU' => 'CHILDREN.NAME.NAME',
    		'TYPE_CODE' => 'CHILDREN.TYPE.CODE',
    
    		'UF_XML_ID' => 'LOCODES.UF_XML_ID',
    		'UF_LOCATION_ID' => 'LOCODES.UF_LOCATION_ID',
    	],
    	'runtime' => [
    		new \Bitrix\Main\Entity\ReferenceField(
    			'LOCODES',
    			$this->locodes_data_class,
    			['=this.ID' => 'ref.UF_LOCATION_ID'],
    			['join_type' => 'LEFT']
    		)
    	],
    	'order' => [
    		'CHILDREN.NAME.NAME' => 'ASC'
    	]
    ]);
    Ответ написан
  • Меняется путь к изображению?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Но спустя какое-то время (через пару часов/дней), все картинки 404, и в файлах их нет, пути меняются.


    Когда вы загружаете избражение, определяется его путь, каждый раз когда вы обновляете изображение, то его путь меняется.
    Например: выгружаете каталог из 1С со всей номенклатурой каждые 2 часа, значит каждые 2 часа путь к изображению будет меняться
    Ответ написан
    Комментировать
  • Bitrix ORM: Как реализовать импорт в инфоблок нескольких тысяч элементов?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Но ведь почему-то разработчики Битрикса решили от него отказаться?


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

    Выходит нужно использовать старый CIBlockElement::Add() без вариантов?

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

    Есть какой-то аналог Batch Processing от Doctrine?

    Аналогов нет, но и операция не такая уж частая. Есть потребность в таких объемах - обычно либо это сторонние каталоги (цены, наличие, свойства и т.п.) и тут без CIblockElement::add не обойтись, либо своя таблица (а там уже что хочешь, хоть sql)
    Ответ написан
    4 комментария
  • Правильно ли я пониманию, что архитектура "битрикс управление сайтом" несколько кривая?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если смотреть на вещи реальнее скорее это ошибка в документации. По сути архитектура битрикса это не MVC, это некий набор из конкретных архитектур и стоит рассматривать их независимо. Если говорить о Компонентах, Моделях и Шаблонах, то битрикс скорее это MVVM модель, где компонент - ViewModel, шаблон это View, а Model это фундаментальная часть данных без бизнес-логики.

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

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Можно ли так сделать ?


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