Документация для разработчиков
Темная тема

Добавление сделки с выбором реквизитов существующей компании или контакта

Пример размещения на странице сайта формы, после заполнения которой в Битрикс24 создавётся новая сделка с прикреплением компании с реквизитами.

Внимание! Для использования примера настройте работу класса CRest и подключите файл crest.php в файлах, где используется данный класс. Подробнее.

  1. Создайте форму на нужной странице:
    <?
    $arAddressFields = CRest::call('crm.address.fields',[]);
    /*
    crm.address.fields return:  https://dev.1c-bitrix.ru/rest_help/crm/requisite/requisite_fields.php#address
    */
    $arRequisiteType = CRest::call('crm.requisite.preset.list',
    	[
    		'select'=>[
    			"ID", "NAME"
    		]
    	]
    );
    if(!empty($arRequisiteType['result'])):
    	$arRequisiteType = array_column($arRequisiteType['result'],'NAME','ID');
    	//unset system address fields
    	unset($arAddressFields['result']['TYPE_ID']);
    	unset($arAddressFields['result']['ENTITY_TYPE_ID']);
    	unset($arAddressFields['result']['ENTITY_ID']);
    	//unset uninteresting address fields
    	unset($arAddressFields['result']['COUNTRY_CODE']);
    	unset($arAddressFields['result']['ANCHOR_TYPE_ID']);
    	unset($arAddressFields['result']['ANCHOR_ID']);
    	?>
    	<form id="form_to_crm">
    		<select name="REQ_TYPE" required>
    			<option value="" disabled selected>Select</option>
    			<?foreach($arRequisiteType as $id=>$name):?>
    				<option value="<?=$id?>"><?=$name?></option>
    			<?endforeach;?>
    		</select>
    		<input type="text" name="TITLE" placeholder="Org name" required>
    		<input type="text" name="INN" placeholder="INN">
    		<input type="text" name="PHONE" placeholder="Phone">
    		<?if(is_array($arAddressFields['result'])):?>
    			<?foreach($arAddressFields['result'] as $key=>$arField):?>
    				<input type="text" name="ADDRESS[<?=$key?>]" placeholder="<?=$arField['title']?>" <?=($arField['isRequired'])?'required':'';?>>
    			<?endforeach;?>
    		<?endif;?>
    		<input type="submit" value="Submit">
    	</form>
    <?else:?>
    	No requisite types.
    <?endif;?>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script>
    $(document).ready(function() {
    	$('#form_to_crm').on( 'submit', function(el) {//event submit form
    		el.preventDefault();//the default action of the event will not be triggered
    		var formData = $(this).serialize();
    		$.ajax({
    			'method': 'POST',
    			'dataType': 'json',
    			'url': 'form.php',
    			'data':  formData,
    			success: function(data){//success callback
    				alert(data.message);
    			}
    		});
    	});
    });
    </script>
  2. Создайте файл form.php для сохранения заполненных форм:
    <?
    $iRequisitePresetID = intVal($_POST["REQ_TYPE"]);
    $sTitle = htmlspecialchars($_POST["TITLE"]);
    $sINN = htmlspecialchars($_POST["INN"]);
    $sPhone = htmlspecialchars($_POST["PHONE"]);
    $arAddress = [];
    
    foreach($_POST["ADDRESS"] as $key=>$val){
    	$arAddress[$key] = htmlspecialchars($val);
    }
    $arAddress['TYPE_ID'] = 1;//1 is actual address in CRest::call('crm.enum.addresstype');
    $arAddress['ENTITY_TYPE_ID'] = 8;//8 - is requisite in CRest::call('crm.enum.ownertype');
    
    $arPhone = (!empty($sPhone)) ? array(array('VALUE' => $sPhone, 'VALUE_TYPE' => 'WORK')) : array();
    
    $result = CRest::call(
    	'crm.company.add',
    	[
    		'fields' =>[
    			'TITLE' => $sTitle,
    			'COMPANY_TYPE' => 'CUSTOMER',//is Client in CRest::call('crm.status.list',['filter'=>['ENTITY_ID'=>'COMPANY_TYPE']])
    			'PHONE' => $arPhone,
    		]
    	]
    );
    if(!empty($result['result'])){
    	$resultRequisite = CRest::call(
    		'crm.requisite.add',
    		[
    			'fields' =>[
    				'ENTITY_TYPE_ID' => 4,//4 - is company in CRest::call('crm.enum.ownertype');
    				'ENTITY_ID' => $result['result'],//company id
    				'PRESET_ID' => $iRequisitePresetID,
    				'TITLE' => $sTitle,
    				'ACTIVE' => 'Y',
    				'NAME' => $sTitle,
    				'RQ_INN' => $sINN,
    			]
    		]
    	);
    	$arDealFields = [
    		'TITLE' => $sTitle,
    		'COMPANY_ID' => $result['result']
    	];
    	if(!empty($resultRequisite['result'])){
    		$arDealFields['REQUISITE_ID'] = $resultRequisite['result'];//add requisite to deal is analogue "crm.requisite.link.list"
    		$arAddress['ENTITY_ID'] = $resultRequisite['result'];//id requisite
    		$resultAddress = CRest::call(
    			'crm.address.add',
    			[
    				'fields' =>$arAddress
    			]
    		);
    	}
    	$resultDeal = CRest::call(
    		'crm.deal.add',
    		[
    			'fields' => $arDealFields
    		]
    	);
    	echo json_encode(['message' => 'add']);
    }elseif(!empty($result['error_description'])){
    	echo json_encode(['message' => 'not added: '.$result['error_description']]);
    }else{
    	echo json_encode(['message' => 'not added']);
    }?>


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024