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

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

    gromdron
    @gromdron
    Bitrix developer
    TLDR; Делайте в цикле по элементам изменение свойства.

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


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

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

    В случае хранение в отдельной таблице алгоритм почти такой же, за исключением того что искать нужно не значение свойства, а запись элемента в таблице при учете что это не множественные свойства.
    Ответ написан
  • Можно ли работать с Bitrix CMS имея опыт работы только с другими фреймворками (Yii2, Lumen...)?

    gromdron
    @gromdron
    Bitrix developer
    Добрый день.

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

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

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

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

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

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

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

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

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

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

    gromdron
    @gromdron
    Bitrix developer
    Давайте разберем чуть подробнее ваш фрагмент кода и представим гипотетическую ситуацию: у вас на сайте создана 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) из всех не системных отгрузок, так что задавать его бесполезно.
    Ответ написан
  • Как избежать неправильной типизации данных при работе с ORM?

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


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

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

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

    gromdron
    @gromdron
    Bitrix developer
    Как-то можно используя возможности 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
    Bitrix developer
    Но спустя какое-то время (через пару часов/дней), все картинки 404, и в файлах их нет, пути меняются.


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

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


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

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

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

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

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

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

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

    gromdron
    @gromdron
    Bitrix developer
    ередаю id картинки, полученной через CFile->SaveFile

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

    gromdron
    @gromdron
    Bitrix developer
    Можно ли дать доступ к папке с этими файлами, как к Сетевому диску и настроить права, чтоб скачивать и закачивать файлы обратно в Битрикс?


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

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

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

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

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

    но денег нет

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

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

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

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


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

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

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

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

    gromdron
    @gromdron
    Bitrix developer
    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
    Bitrix developer
    Это bitrix:menu с шаблоном top_horizontal, расположен в header.php (выше него стоит область: above_pagetitle)
    Ответ написан
  • BitrixVM. Push and Pull не работает. Сообщения не приходят в реальном времени. В чем проблема?

    gromdron
    @gromdron
    Bitrix developer
    Не туда смотрите: сначала в консоль браузера, затем в случае nodejs (а у вас именно такой случай) - /var/log/push-server/ и там уже смотрите логи :)
    Ответ написан
  • Битрикс. Где лежат веб формы?

    gromdron
    @gromdron
    Bitrix developer
    Если спрашиваете концептуально: Админа - Сервисы - Веб-формы.

    Рекомендую так же ознакомиться с курсом, но делать это на примере указанном в официальной документации
    Ответ написан
  • Как перенести сайт на 1С-Битрикс с минимальной недоступностью и потерей информации?

    gromdron
    @gromdron
    Bitrix developer
    Переезжать нужно резко (вот прям 1-2 дня)? Или можно растянуть на 1-2 месяца?

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

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

    2) Купил сервер чисто под веб (т.е. без базы данных).
    Далее вы знаете - rsync, dns и т.п.

    Таким образом у тебя 2 новых сервера (если все сделал правильно, то цена сильно не выросла), но появился еще и запас куда расти дальше
    Ответ написан