Ответы пользователя по тегу 1С-Битрикс
  • Почему обработчик события не вызывается?

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

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


    Смотреть лог ошибок (error-log) веб-сервера
    Смотреть лог ошибок php
    Ответ написан
  • Как решить ошибку загрузки картинки на Bitrix?

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

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

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


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

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

    В случае хранение в отдельной таблице алгоритм почти такой же, за исключением того что искать нужно не значение свойства, а запись элемента в таблице при учете что это не множественные свойства.
    Ответ написан
    Комментировать
  • Можно ли работать с 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 это фундаментальная часть данных без бизнес-логики.

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

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    ередаю id картинки, полученной через CFile->SaveFile

    Вам нужно передавать туда не id, а массив полученный через CFile::MakeFileArray, т.к. все методы работают именно с этим массивом.
    Ответ написан
    Комментировать
  • Где лежат PDF-файлы формируемые стандартным генератором документов Битрикс?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Можно ли дать доступ к папке с этими файлами, как к Сетевому диску и настроить права, чтоб скачивать и закачивать файлы обратно в Битрикс?


    Нет, так как можно подключить только логические диски пользователей и/или других сущностей.
    Физические пути вы никогда не получите.
    Ответ написан
  • Установка онлайн чата на cms 1c-Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Чат необходимо сделать как на платформе Twitch или Youtube

    Уверены что речь идет именно о чате, а не о системе комментариев? Потому как это две разные подсистемы.

    В купленном пакете Битрикс нет модуля чата, программисты советуют докупить (оно и понятно, им так проще)

    Вы конечно можете написать свой. Все зависит от квалификации программистов и от прямоты их рук.
    Есть на этот счет два аргумента:
    - Если задача уже решена в системе, то зачем изобретать велосипед? Уже за вас люди подумали и реализовали множество вещей, начиная от socket/long polling и заканчивая обменом сообщений между пользователями
    - С другой стороны это не заточено под ваши нужды, так что все равно придется дорабатывать и если не знаешь что и как, то это обернется в кошмар и проще написать свой.

    но денег нет

    А платить все равно придется: либо за редакцию, либо за труд разработчиков, либо за сторонний сервис.
    Бесплатно только сыр в мышеловке.

    Как вариант можно ли установить AJAX Chat в код сайта на 1С-битрикс?

    Да, это возможно.
    Ответ написан
    Комментировать
  • Как исправить проблему с отключением стилей шаблона компонента?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Проблему в целом можно решить перенеся CSS в основной файл, но не хотелось бы в лишний раз нагружать основной CSS. Есть какие-то способы как это можно исправить?


    Конечно есть!
    Вы можете создать свой css файл для нишевого отображения и в result_modifier.php подключать его к стилям страницы через тот же addCss.
    Получается что вы в одном месте его правите, а во всех остальных он меняется автоматически.

    Что касается:
    Собственно именно этот CSS и отваливается.

    Так как вносили изменения через публичную часть, возможно изменения были внесены не совсем туда, куда хотели. Проверьте пожалуйста чтобы он был добавлен в нужный css файл нужного шаблона и что именно он подключается на странице
    Ответ написан
    3 комментария
  • Как сделать свой Main UI Filter в своём приложении Bitrix24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Увы, но подобного решения для облачных приложений нет. Разве что вы возьмете уже готовые классы и строительство в свое приложение, но опять же - придется все делать самому
    Ответ написан
    Комментировать
  • Bitrix CEvent::Send &CFile::MakeFileArray в письме 2 одинаковых файла?

    gromdron
    @gromdron
    Работаю с Bitrix24
    1) В $arEventField не нужно указывать ключ FILE, он сам будет задан из 6 параметра метода CEvent::Send
    2) \CFile::MakeFileArray вовсе не нужно делать. На последнем битриксе это делают за вас.

    Т.е. в вашем случае код должен выглядеть как-то так:
    $fileName = $_SERVER["DOCUMENT_ROOT"]."/temp/".$MGR_ID.'_'.date("dmYHi").'.xlsx';
    
    $files = [
    	$fileName
    ];
    
    $arEventField = [
    	"EMAIL_TO"  => $USER->GetEmail(),
    	"USER_NAME" => $USER->GetFullName(),
    ];
    
    if ( \CEvent::Send("MGR_INFORMER", "s1", $arEventField, "Y", '', $files ) )
    {
    	@unlink($fileName);
    }


    Если после проделанного файлов все же прикрепляется 2, то необходимо:
    1) Проверить шаблон MGR_INFORMER возможно в самом шаблоне прописана вставка файла. Если файл вставлен в тело письма, то он может быть продублирован 2 раза.
    2) Проверить события OnBeforeEventAdd модуля main. Возможно там есть дублирование файла.
    3) Проверить функцию custom_mail (если таковая существует). Возможно дополнительно работа с файлами находится там.
    Ответ написан
  • Как убрать верхнее меню в CRM Битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Это bitrix:menu с шаблоном top_horizontal, расположен в header.php (выше него стоит область: above_pagetitle)
    Ответ написан
    2 комментария
  • BitrixVM. Push and Pull не работает. Сообщения не приходят в реальном времени. В чем проблема?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Не туда смотрите: сначала в консоль браузера, затем в случае nodejs (а у вас именно такой случай) - /var/log/push-server/ и там уже смотрите логи :)
    Ответ написан
    Комментировать