Задать вопрос
Ответы пользователя по тегу 1С-Битрикс
  • Импорт товаров битрикс из 1с, совет?

    gromdron
    @gromdron
    Работаю с Bitrix24
    может у битрикса есть какие стандартные инструменты по импорту или может вы знаете адекватные бесплатные модули.


    Есть, стандартные средства, но насколько я помню, минимальная редакция "Малый Бизнес" (сам модуль называется "Интернет-магазин").
    Алгоритмы и форматы описаны в документации: https://dev.1c-bitrix.ru/api_help/sale/algorithms/...
    Кстати, там можно получить сведения о форматах, содержимом файлов и вообще много интересно. Учитывая что сам модуль для 1С бесплатный, то вы всегда можете реализовать свою реализацию по данному алгоритму

    Либо писать свой парсер, тогда какой - csv или xml?
    Подскажите, как лучше поступить?


    Лучше - используйте штатные механизмы.
    Потому что:
    1) Всегда можно обратиться в ТП за решением проблемы
    2) Проще найти специалиста и диагностировать проблему
    3) Если поддерживать все в актуальном состоянии и не сильно усердствовать с кастомизациями - получается лучшее решение практически без вложений
    Ответ написан
    Комментировать
  • Битрикс и Wordpress на одном хостинге?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вы можете разделить на httpd в VirtualHost необходимые параметры. По факту, единственное что различается это mbstring
    Ответ написан
    Комментировать
  • Как восстановить кодировку в 1c Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Во-первых, неплохо было бы показать скриншот, где показаны корикозябры
    Во-вторых, необходимо проверить в какой кодировке у Вас сайт - UTF-8 или windows-1251 и не переключалась ли она
    В-третьих, необходимо проверить в какой кодировке БД и в какой кодировке Вы читаете файлы
    Ответ написан
    Комментировать
  • Как добавить в компонент main.feedback select?

    gromdron
    @gromdron
    Работаю с Bitrix24
    1) Копировать компонент в свое пространство
    2) Кастомизировать компонент:
    2.1) В component.php сделать получение select полей
    2.2) В component.php сделать отправку select-поля
    2.3) В template.php сделать вывод select поля
    3) Кастомизировать шаблон
    3.1) Копировать почтовый шаблон
    3.2) Изменить почтовый шаблон для отправления select-значения
    3.3) Изменить component.php для отправки своего шаблона
    4) Разместить на странице копированный компонент компонент
    Ответ написан
    Комментировать
  • Битрикс CRM Коробка. Как добавить пользовательское поле в форму импорта лидов из файла?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Чтобы это поле появилось при импорте, нужно чтобы оно существовало у лида.
    Для этого нужно создать пользовательское поле у лида. А сделать это можно двумя способами:
    1) Через публичные настройки CRM: Настройки -> Настройки форм отчетов -> Пользовательские поля -> Лид: Добавить поле
    2) Через административную панель: Настройки -> Настройки сайтов -> Пользовательские поля -> Добавить.
    В таком случае Вы должны сначала выбрать тип поля, а потом уже объект, который в случае лида будет (как вы верно указали) - CRM_LEAD (насколько я помню, в идеальном случае оно должно не множественным)
    Ответ написан
    4 комментария
  • Из-за чего может быть ошибка в базе?

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

    У Вас типовая проблема переноса - MySQLi -> MySQL.
    Проверьте, что драйвер mysql подключен или переведите на mysqli.
    Ответ написан
    Комментировать
  • Не срабатывает кнопка "В корзину" на карточке товара 1C Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Компонент "новость детально" (bitrix:news.detail) не предназначен для вывода товаров.
    Для вывода товара, Вам необходимо воспользоваться возможностями компонента bitrix:catalog.element

    По ходу текста не очень понятно, как это Вы находясь в корзине хотите добавить его в корзину? У Вас popup окно? А скрипты подключаете и передаете?
    Ответ написан
  • Где ошибка в выводе элементов каталога через catalog.section и catalog.element?

    gromdron
    @gromdron
    Работаю с Bitrix24
    bitrix:catalog.element - выводит карточку товара
    bitrix:catalog.section - содержимое раздела.

    Соответственно, у Вас должно быть два правила в urlrewrite.php
    // Для элемента
    array(
    	"CONDITION" => "#^/podobrat-dver/([a-z0-9\-]+)/([^/\?]*)(.*)$#",
    	"RULE" => "SECION_CODE=\$1&ELEMENT_CODE=\$2&$3",
    	"PATH" => "/podobrat-dver/detail.php",
    )
    // Для раздела
    array(
    	"CONDITION" => "#^/podobrat-dver/([a-z0-9\-]+)/(.*)$#",
    	"RULE" => "SECION_CODE=$1&$2",
    	"PATH" => "/podobrat-dver/section.php",
    )


    Соответственно на странице detail.php у вас должен быть вызов одного компонента:
    <?$APPLICATION->IncludeComponent(
      "bitrix:catalog.element", 
      "detail",
      array(
        .....
        "IBLOCK_ID" => "30",
        "ELEMENT_ID" => "",
        "ELEMENT_CODE" => $_REQUEST["ELEMENT_CODE"],
        "SECTION_ID" => "",
        "SECTION_CODE" => $_REQUEST["SECION_CODE"],
        "SECTION_URL" => "",
        "DETAIL_URL" => "/podobrat-dver/#ELEMENT_CODE#/",
        "SECTION_ID_VARIABLE" => "ELEMENT_CODE",
        "SECTION_CODE_PATH" => ""
                     .....
      ),
      false
    );?>


    А на странице section.php у вас должен быть вызов одного компонента:
    <?$APPLICATION->IncludeComponent(
      "bitrix:catalog.section", 
      "catalog_list", 
      array(
                     ....
        "DETAIL_URL" => "/podobrat-dver/#ELEMENT_CODE#/",
        "SECTION_CODE" => $_REQUEST["SECTION_CODE"],
        "SECTION_ID" => "",
        "SECTION_URL" => "",
        "SHOW_ALL_WO_SECTION" => "Y",
                     ....
      ),
      false
    );?>


    За регулярки не ручаюсь (писал навскидку, без тестирования)
    Ответ написан
    Комментировать
  • Как задать сортировку в catalog.section.list по id в прямом или обратном порядке?

    gromdron
    @gromdron
    Работаю с Bitrix24
    $arSort - это ассоциативный массив, для сортировки значения, в формате "Код поля" => "Порядок".
    Причем порядок может быть только ASC (по возрастанию) или DESC (по убыванию)
    В Вашем случае должно быть так:

    $arSort = array(
    	"LEFT_MARGIN" => "ASC",
    );
    Ответ написан
    Комментировать
  • Как получить количество элементов?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Во-первых, прекратите совокуплять мертвецов. Для каждой задачи есть отдельный инструмент, со строго определенными канонами. То что вы делаете в result_modifier.php делается через расширение меню и компонент bitrix:menu.sections.

    Во-вторых, количество активных элементов получается через доп. операции внутри итерирования. См. справочную литературу: coder-diary.ru/programming/bitrix-kolichestvo-akti...
    Ответ написан
  • Групповая смена ответственного из сделки в контакте и компании в CRM Битрикс, коробочная версия?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Вы правильно нашли, за это отвечает компонент bitrix:crm.deal.list, который лежит в /bitrix/components/bitrix/crm.deal.list/component.php.
    Код несколько запутанный, но работает следующим образом:

    На ~614 сроке ( ~ 614 - 679 ) находится код, который парсит полученные данные и собирает их в массив $actionData
    //region Try to extract user action data
    // We have to extract them before call of CGridOptions::GetFilter() or the custom filter will be corrupted.
    $actionData = array(
    	'METHOD' => $_SERVER['REQUEST_METHOD'],
    	'ACTIVE' => false
    );
    
    if(check_bitrix_sessid())
    {
    	$postAction = 'action_button_'.$arResult['GRID_ID'];
    	$getAction = 'action_'.$arResult['GRID_ID'];
    	//We need to check grid 'controls'
    	$controls = isset($_POST['controls']) && is_array($_POST['controls']) ? $_POST['controls'] : array();
    	if ($actionData['METHOD'] == 'POST' && (isset($controls[$postAction]) || isset($_POST[$postAction])))
    	{
    		CUtil::JSPostUnescape();
    
    		$actionData['ACTIVE'] = true;
    
    		if(isset($controls[$postAction]))
    		{
    			$actionData['NAME'] = $controls[$postAction];
    		}
    		else
    		{
    			$actionData['NAME'] = $_POST[$postAction];
    			unset($_POST[$postAction], $_REQUEST[$postAction]);
    		}
    	...
    	...
    	...
    		$actionData['AJAX_CALL'] = $arResult['IS_AJAX_CALL'];
    	}
    }
    //endregion


    А с ~915 строки начинается непосредственная обработка ( ~915 - 1457):

    // POST & GET actions processing -->
    if($actionData['ACTIVE'])
    {
    	if ($actionData['METHOD'] == 'POST')
    	{
    		if($actionData['NAME'] == 'delete')
    		{
    		...
    		elseif($actionData['NAME'] == 'assign_to')
    		{
    			if(isset($actionData['ASSIGNED_BY_ID']))
    			{
    				$arIDs = array();
    				if ($actionData['ALL_ROWS'])
    				{
    					$arActionFilter = $arFilter;
    					$arActionFilter['CHECK_PERMISSIONS'] = 'N'; // Ignore 'WRITE' permission - we will check it before update.
    					$dbRes = CCrmDeal::GetListEx(array(), $arActionFilter, false, false, array('ID'));
    					while($arDeal = $dbRes->Fetch())
    					{
    						$arIDs[] = $arDeal['ID'];
    					}
    				}
    				elseif (isset($actionData['ID']) && is_array($actionData['ID']))
    				{
    					$arIDs = $actionData['ID'];
    				}
    
    				foreach($arIDs as $ID)
    				{
    					if (!CCrmDeal::CheckUpdatePermission($ID, $userPermissions))
    					{
    						continue;
    					}
    
    					$DB->StartTransaction();
    
    					$arUpdateData = array(
    						'ASSIGNED_BY_ID' => $actionData['ASSIGNED_BY_ID']
    					);
    
    					if($CCrmDeal->Update($ID, $arUpdateData, true, true, array('DISABLE_USER_FIELD_CHECK' => true)))
    					{
    						$DB->Commit();
    
    						$arErrors = array();
    						CCrmBizProcHelper::AutoStartWorkflows(
    							CCrmOwnerType::Deal,
    							$ID,
    							CCrmBizProcEventType::Edit,
    							$arErrors
    						);
    					}
    					else
    					{
    						$DB->Rollback();
    					}
    				}
    			}
    		}
    		...
    	}
    }
    // <-- POST & GET actions processing


    Но есть маленький нюанс, если Вам нужно менять ответственного в связанных сущностях, кастомизация данного кода будет не лучшим решением.
    В таком случае у Вас будет задвоение, например ответственного можно поменять через массовую смену ответственного в списке, через редактирование сделки, через блок действия бизнес-процесса и так далее. И все это разные механизмы. Общее у них только одно - они все используют события на изменения/добавление.
    Ответ написан
  • В какой кодировке возвращать данные при ajax запросе?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Так как JSON кодируется символами Юникода, то наилучшим вариантом является UTF-8 кодировка.
    Как практикующий разработчик на 1С-Битрикс строго рекомендую Вам переводить проекты на UTF-8.

    P.S. У вас неймпсейс
    use Bitrix\TestPartner\TestPartnerModule\TestPartnerModuleListTable;

    А должен быть:
    use TestPartner\TestPartnerModule\TestPartnerModuleListTable;

    Так как Вы не Bitrix и не нужно никого вводить в заблуждение :)
    Ответ написан
    Комментировать
  • Как вывести товары, если нет категорий?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Все круто, но куда он должен их вывести? У каталога есть иерархия Список разделов -> уточнение(*) -> Список элементов.
    Когда я последний раз с ним работал, он не умел выводить mixed content (когда и разделы и элементы выводились вместе).

    Но вы можете использовать не комплексный компонент, а отдельно catalog.section и выводить там
    Ответ написан
    Комментировать
  • Как массово загрузить и вставить на страницу много файлов?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Можно ли это сделать встроенными средствами битрикса?


    Относительно. Вы можете использовать инфоблок и news.list для вывода с доп. свойством, но это не будет лучшим решением.

    Может есть готовые дополнения?


    Это нишевая задача и вряд ли есть готовые решения.

    Что касается исходной задачи, то есть масса способов это сделать:
    1) Положить в папку и выводить простым скриптом (в лоб, но может быть долго и из админки не поправить)
    2) Загрузить из в битрикс и доставать через CFile - уже лучше, но если их много, может не выдержать сервер и браузер
    3) Разработать свое решение.
    Ответ написан
    Комментировать
  • Битрикс CRM Получить ID контакта?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Есть как минимум 2 варианта (без прямых запросов в базу) как это сделать:

    1) Высокоуровневый (работает всегда). Метод с поддержкой обратной совместимости: CCrmContact::GetList (bxapi.ru/src/?id=183244)

    Применение (за основу взял код описанный Артем):

    /* @var array Список контактов */
    $arContacts = array();
    
    if ( \Bitrix\Main\Loader::IncludeModule('crm') )
    {
    	/* @var array Сортировка полученного списка контактов */
    	$arOrder  = array('ID' => 'DESC');
    
    	/* @var array Условия получаемого списка контактов */
    	$arFilter = array(
    		"NAME"      => "Имя",
    		"LAST_NAME" => "Фамилия",
    		'CHECK_PERMISSIONS' => 'N' // Данный ключ необходим для того чтобы получить всех пользоватей,
    								   // иначе, будет найден только если ответственным за него является тот,
    								   // под кем запускается скрипт в битриксе
    	);
    
    	/* @var array Получаемые поля для списка контактов */
    	$arSelect = array(
    		'ID'
    	);
    
    	// NOTE: Запрашивайте только необходимые поля
    	$res = CCrmContact::GetList( $arOrder, $arFilter, $arSelect );
    
    	while( $arContact = $res->fetch() )
    	{
    		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
    	}
    }
    
    // Тут в $arContacts либо пустой массив, либо массив с ID контактами, которые соответствуют условию поиска


    2) Низкоуровневый DataMapper (новый подход d7)

    use \Bitrix\Main\Loader;
    use \Bitrix\Crm;
    
    /* @var array Список контактов */
    $arContacts = array();
    
    if ( Loader::IncludeModule('crm') )
    {
    
    	$resContacts = Crm\ContactTable::getList(array(
    		'select' => array('ID'),
    		'filter' => array(
    			"NAME"      => "Имя",
    			"LAST_NAME" => "Фамилия",
    		),
    		'order' => array('ID' => 'DESC')
    	));
    
    	while( $arContact = $resContacts->fetch() )
    	{
    		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
    	}
    
    	/*
    	Начиная с 17 версии (вроде бы), можно делать так:
    	foreach( $resContacts as $arContact)
    	{
    		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
    	}
    	вместо while цикла
    	*/
    }


    Преимущество первого подхода:
    - Работает всегда, как для новых, так и для старых проектов
    - Можно использовать уровни доступа

    Преимущество нового подхода:
    - Технологически универсален за счет d7 (можно в runtime прибавлять связи, доставать связанные сущности и т.п.)
    - В DataMapper есть технология кеширования, т.е. можно закешировать результат просто добавив в массив getList еще один ключик
    - Субъективно код легче воспринимается
    Ответ написан
    3 комментария
  • Как при создании таблицы поставить полю значение null?

    gromdron
    @gromdron
    Работаю с Bitrix24
    За создание таблицы в MySQL отвечает метод MysqlCommonConnection::createTable(), где в не зависимости от ситуации включается - NOT NULL
    Ответ написан
    2 комментария
  • Как сделать так чтобы бала активная ссылка?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Я так понял, у вас есть какое-то меню, например:

    /top/index.php
    /root/index.php
    /test/index.php

    И в /root/ есть пункт меню (вложенного) меню, в котором есть ссылка на /catalog/index.php
    И вы хотите, чтобы при заходе на /catalog/index.php пункт меню /root/index.php выделялся??

    Если да, то в 3 параметр меню у /root/index.php укажите ссылку /catalog/index.php

    См. комментарий Пётр Невенчанный
    https://dev.1c-bitrix.ru/api_help/main/reference/c...
    Ответ написан
    Комментировать
  • Где битрикс хранит данные из корзины?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Содержимое корзины Битрикс записывает в базу данных, но напрямую доставать из нее не советую - лучше используйте API.

    Если интересует прямо таблица с товарами, то b_sale_basket и b_sale_basket_props. Они вяжутся в sale_user из таблицы b_sale_fuser
    Ответ написан
  • Как найти ошибку в битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Наилучшим решением служит обращение в техническую поддержку Битрикса, но только после того как перенесете/развернете сайт штатными средствами битрикса.
    Ответ написан
    1 комментарий