Задать вопрос
Ответы пользователя по тегу Битрикс24
  • Как в смарт-процессах проверять поле на дубль перед сохранением?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    добавьте обработчик события
    AddEventHandler('crm', 'OnBeforeCrmCompanyAdd', 'checkINN');
    
    function checkINN(&$fields) {
        if (isset($fields['UF_CRM_INN'])) {  // Предполагается, что UF_CRM_INN - это пользовательское поле для ИНН
            $filter = array("UF_CRM_INN" => $fields['UF_CRM_INN']);
            $result = CCrmCompany::GetList(array(), $filter);
            if ($row = $result->Fetch()) {
                global $APPLICATION;
                $APPLICATION->throwException("Такая компания с ИНН уже есть.");
                return false;
            }
        }
        return true;
    }


    Либо можно добавить валидацию на фронте
    <script>
    BX.ready(function() {
        var form = document.querySelector('[name="form_element"]'); // Замените на актуальный селектор формы
        form.addEventListener('submit', function(e) {
            var innValue = document.querySelector('[name="UF_CRM_INN"]').value; // Замените на актуальный селектор поля ИНН
            BX.ajax.runComponentAction('bitrix:crm.company', 'getList', {  // Замените на актуальный вызов API
                data: {
                    filter: {'UF_CRM_INN': innValue},
                    select: ['ID']
                }
            }).then(function(response) {
                if (response.data.length > 0) {
                    alert('Такая компания с ИНН уже есть.');
                    e.preventDefault(); // Остановить отправку формы
                }
            });
        });
    });
    </script>
    Ответ написан
  • Как получить данные проиндексированных файлов?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    Проблема с установкой значения для ключа "TITLE" может возникать из-за того, что в вашем коде события OnSearchGetFileContent не учитывается возвращаемое значение функции processPdfFile.
    class FindInFiles
    {
        public static function OnSearchGetFileContent($absolute_path)
        {
            if(file_exists($absolute_path) && is_file($absolute_path) && substr($absolute_path, -3) == "pdf")
            {
                return self::processPdfFile($absolute_path);
            }
            else
                return false;
        }
    
        private static function processPdfFile($absolute_path) {
            $parser = new \Smalot\PdfParser\Parser();
            $pdf = $parser->parseFile($absolute_path);
            $text = $pdf->getText();
            $result = array(
                "TITLE" => basename($absolute_path),
                "CONTENT" => $text,
                "PROPERTIES" => [],
            );
            return $result;
        }
    }
    Ответ написан
    Комментировать
  • Выполнение фонового скрипта пхп в битрикс?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    в скрипте пролог подключен?
    Ответ написан
  • Как взять сделки сразу одним запросом?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    CModule::IncludeModule('crm'); 
    use Bitrix\Crm\DealTable;
    
    $arFilter = [
    	'STAGE_ID' => 'WON',
    		'<=CLOSEDATE' => \Bitrix\Main\Type\DateTime::createFromTimestamp(strtotime("-1 month"))
            ];
    $arSelect = ['ID','ASSIGNED_BY_ID', 'CLOSEDATE'];
    
    
     $arDeals=DealTable::getList([
                'order'=>['ID' => 'DESC'],
                'filter'=>$arFilter,
                'select'=>$arSelect,
                'cache' => ['ttl' => 3600],
    			'limit'=>100
            ])->fetchAll();
            $deals=[];
            foreach($arDeals as $deal){
                $deals[$deal['ID']]=$deal;
            }
    
    print_r($deals);
    Ответ написан
  • Как написать обработчик для bitrix?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    найдите файл
    local/php_interface/init.php
    возможно в нем уже есть подключение отдельного файла для обработки событий
    что-то типа
    include_once __DIR__.'/events.php';
    если такого нет, то рекомендую создать, и события обрабатывать там, чтобы не засорять init.php
    Далее в файле events.php - пишете обработчик события

    $eventManager = \Bitrix\Main\EventManager::getInstance();
    
    $eventManager->addEventHandler(
        'main',
        'OnSaleCheckPrepareData ',
    'addCheckPrintType'
    );
    
    function addCheckPrintType(array $fields, string $type) : array{
    
            if(!empty($fields['PRODUCTS'])){
                foreach($fields['PRODUCTS'] as $key => $product){
                    $fields['PRODUCTS'][$key]['PAYMENT_OBJECT'] = \Bitrix\Sale\Cashbox\Check::PAYMENT_OBJECT_SERVICE;
                }
            }
    
            return $fields;
        }
    Ответ написан
    Комментировать
  • Как добавить свою кнопку в карточку контактов bitrix 24?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    Реализация в несколько шагов
    1. Регистрация своей JS библиотеки в init.php
    //регистрируем библиотеку 
    CJSCore::RegisterExt(
        'custom_js',
        array(
            'js'   => '/local/js/custom.js',
            'css'  => '/local/css/custom.css',
            'lang' => '/local/js/lang/'.LANGUAGE_ID.'/custom.js.php',
            'rel'  => array(
                'ajax',
                'popup',
            ),
        )
    );
    
    //добавляем js d header не в административной части
    if (!ВАШ_NAMESPACE\Main::inBitrixDir()) {
        CJSCore::Init('custom_js'); 
    }


    2. в самом скрипте JS
    var CustomJS = BX.namespace('CustomJS');
    
    CustomJS.initGlobalEvents = function () {
        var self = this;
        BX.addCustomEvent("SidePanel.Slider:onOpen", function (event) {
            CustomJS.addDealButtons();
        });
    }
    
    CustomJS.addDealButtons = function () {
        var page_title_btn_box = document.querySelector('.crm-pagetitle-btn-box');
        if (page_title_btn_box) {
            if (!document.getElementById('custom-btn-get-order')) {
                page_title_btn_box.prepend(
                    BX.create('div', {
                        attrs: {
                            id: 'custom-btn-get-order',
                            className: 'ui-btn ui-btn-split ui-btn-themes ui-btn-light-border ui-btn-success'
                        },
                        text: BX.message('CUSTOM_BTN_GET_ORDER'),
                        events: {
                            click: BX.proxy(CustomJS.updateDealFromOrder, this)
                        },
                    })
                );
            }
    	}
    }
    
    CustomJS.updateDealFromOrder = function (event) {
    
    console.log("Событие нажатие на кнопку")
    }
    Ответ написан
    8 комментариев
  • Почему выкидывает на авторизацию в Битрикс24?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    если б24 на поддомене сайта, то скрее всего у вас пробелме с дублированием сессий.
    решение вот
    Ответ написан
    Комментировать
  • Есть ли возможность добавить лид с товарами а товары по названию а не по ID?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    Очень плохое решение обмен по названию. Заведи у товаров артикулы - и обмен делайте по артикулам. Названия у товаров могут меняться. Могут быть названия на разных языках, поставят лишний пробел - который сразу и не увидишь и все - это уже другое название. Одним словом не делай так. Во всех системах всегда есть для обмена поле внешний код - и сущности между системами предаются по внешнему коду
    Ответ написан
  • Каким образом можно получить цены и остатки товаров ИЗ Битрикс 24?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    готового нет. надо самим делать
    Получаем товары из каталога.
    if (CModule::IncludeModule("catalog")
       && CCatalog::GetByID(IBLOCK_CATALOG_ID))
    {
    $db_res = CCatalogProduct::GetList(
            [],
            [],
            false,
            array("nTopCount" => 10)
        );
    while (($ar_res = $db_res->Fetch()))
    {
        $res[]= $ar_res;
    
    }
    
    }

    Ну а дальше как это хозяйство выгрузить - это другой вопрос
    Ответ написан
  • Как передавать лиды из формы на сайте на платформе Nethouse в CRM Битрикс?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    Не знаком с Nethouse. Но стандартно, вам надо отправить запрос с сайта в Б24 с данными пользователя.
    Скорее всего если на платформе Nethose нет готового решения, то Вам придется самостоятельно написать AJAX запрос, или сделать форму из php скрипта которой отправить запрос, в Б24. В Б24 у Вас должен быть зарегистрирован WEBHOOK, для обработки этого запроса
    Ответ написан
  • Rich-контент на Битрикс, как это сделать?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    Это делается в шаблоне карточки товара. Если вы не знаете как кастомизировать шаблон в Битрикс, то без помощи программиста врядли удастся повторить.
    Вам надо кастомизировать
    local/templates/НАЗВАНИЕ _ВАШЕГО_ШАБЛОНА/components/bitrix/catalog/main/bitrix/catalog.element/ШАБЛОН_КАРТОЧКИ ТОВАРА/template.php
    Ответ написан
    Комментировать