• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/requisite/importhelper.php
  • Класс: Bitrix\Crm\Requisite\ImportHelper
  • Вызов: ImportHelper::importParsedRequisites
public function importParsedRequisites($entityTypeId, $entityId, $dupControlType)
{
	$result = new Main\Result();

	foreach ($this->requisiteList as $requisiteFields)
	{
		$presetId = isset($requisiteFields['PRESET_ID']) ? (int)$requisiteFields['PRESET_ID'] : 0;

		if(!in_array($dupControlType, array('REPLACE', 'MERGE', 'SKIP'), true))
			$dupControlType = 'NO_CONTROL';
		$rqImportMode = 'MERGE';
		switch ($dupControlType)
		{
			case 'REPLACE':
				$rqImportMode = $dupControlType;
				break;
		}

		if (!EntityRequisite::checkEntityType($entityTypeId))
		{
			$result->addError(
				new Main\Error(
					GetMessage('CRM_RQ_IMP_HLPR_ERR_INVALID_ENTITY_TYPE'),
					self::ERR_INVALID_ENTITY_TYPE
				)
			);
			return $result;
		}

		if ($entityId <= 0)
		{
			$result->addError(
				new Main\Error(
					GetMessage('CRM_RQ_IMP_HLPR_ERR_INVALID_ENTITY_ID'),
					self::ERR_INVALID_ENTITY_ID
				)
			);
			return $result;
		}

		$requisite = EntityRequisite::getSingleInstance();
		if (!$requisite->validateEntityExists($entityTypeId, $entityId))
		{
			$errMsg = '';
			$errCode = 0;
			switch ($entityTypeId)
			{
				case \CCrmOwnerType::Company:
					$errMsg = GetMessage('CRM_RQ_IMP_HLPR_ERR_COMPANY_NOT_EXISTS', array('#ID#' => $entityId));
					$errCode = self::ERR_COMPANY_NOT_EXISTS;
					break;
				case \CCrmOwnerType::Contact:
					$errMsg = GetMessage('CRM_RQ_IMP_HLPR_ERR_CONTACT_NOT_EXISTS', array('#ID#' => $entityId));
					$errCode = self::ERR_CONTACT_NOT_EXISTS;
					break;
			}
			$result->addError(new Main\Error($errMsg, $errCode));
			return $result;
		}

		if (!EntityRequisite::checkUpdatePermissionOwnerEntity($entityTypeId, $entityId))
		{
			$errMsg = '';
			$errCode = 0;
			switch ($entityTypeId)
			{
				case \CCrmOwnerType::Company:
					$errMsg = GetMessage(
						'CRM_RQ_IMP_HLPR_ERR_ACCESS_DENIED_COMPANY_UPDATE',
						array('#ID#' => $entityId)
					);
					$errCode = self::ERR_ACCESS_DENIED_COMPANY_UPDATE;
					break;
				case \CCrmOwnerType::Contact:
					$errMsg = GetMessage(
						'CRM_RQ_IMP_HLPR_ERR_ACCESS_DENIED_CONTACT_UPDATE',
						array('#ID#' => $entityId)
					);
					$errCode = self::ERR_ACCESS_DENIED_CONTACT_UPDATE;
					break;
			}
			$result->addError(new Main\Error($errMsg, $errCode));
			return $result;
		}

		$entityTypeName = \CCrmOwnerType::ResolveName($entityTypeId);
		if ($presetId === 0)
		{
			$presetId = EntityRequisite::getDefaultPresetId($entityTypeId);

			if ($presetId <= 0)
			{
				$result->addError(
					new Main\Error(
						GetMessage(
							'CRM_RQ_IMP_HLPR_ERR_DEF_IMP_PRESET_NOT_DEFINED',
							array('#ENTITY_TYPE_NAME_GENITIVE#' => $entityTypeName)
						),
						self::ERR_DEF_IMP_PRESET_NOT_DEFINED
					)
				);
				return $result;
			}
		}

		$presetId = (int)$presetId;
		if ($presetId <= 0)
		{
			$result->addError(
				new Main\Error(
					GetMessage('CRM_RQ_IMP_HLPR_ERR_INVALID_IMP_PRESET_ID'),
					self::ERR_INVALID_IMP_PRESET_ID
				)
			);
			return $result;
		}

		$preset = EntityPreset::getSingleInstance();
		$presetInfo = $preset->getById($presetId);
		$requisiteFieldMap = array(
			'ID' => true,
			'PRESET_ID' => true,
			'NAME' => true,
			'ACTIVE' => true,
			'SORT' => true
		);
		if (!is_array($presetInfo))
		{
			$result->addError(
				new Main\Error(
					GetMessage('CRM_RQ_IMP_HLPR_ERR_IMP_PRESET_NOT_EXISTS', array('#ID#' => $presetId)),
					self::ERR_IMP_PRESET_NOT_EXISTS
				)
			);
			return $result;
		}
		$presetName = EntityPreset::formatName($presetId, $presetInfo['NAME']);
		$countryId = (int)$presetInfo['COUNTRY_ID'];
		if (is_array($presetInfo['SETTINGS']))
		{
			$presetFieldsInfo = $preset->settingsGetFields($presetInfo['SETTINGS']);
			foreach ($presetFieldsInfo as $fieldInfo)
			{
				if (isset($fieldInfo['FIELD_NAME']) && !empty($fieldInfo['FIELD_NAME']))
					$requisiteFieldMap[$fieldInfo['FIELD_NAME']] = true;
			}
		}
		unset($preset, $presetHasAddress, $presetFieldsInfo, $fieldInfo);

		$rqRes = $requisite->getList(
			array(
				'select' => array_keys($requisiteFieldMap),
				'filter' => array(
					'=PRESET_ID' => $presetId,
					'=ENTITY_TYPE_ID' => $entityTypeId,
					'=ENTITY_ID' => $entityId
				)
			)
		);
		$rqFieldTypeInfoMap = null;
		$bankDetailFieldMap = null;
		$bdFieldTypeInfoMap = null;
		$rqComplianceFound = false;
		$bankDetail = EntityBankDetail::getSingleInstance();
		while($rqRow = $rqRes->fetch())
		{
			if($rqFieldTypeInfoMap === null)
			{
				$rqFieldTypeInfoMap = array();
				foreach ($requisite->getFormFieldsInfo($countryId) as $fieldName => $fieldInfo)
				{
					$rqFieldTypeInfoMap[$fieldName] = array(
						'type' => $fieldInfo['type'],
						'isUF' => $fieldInfo['isUF']
					);
				}
			}

			// load fields of existing requisite
			$exRequisiteFields = array();
			foreach (array_keys($requisiteFieldMap) as $fieldName)
			{
				if(isset($rqFieldTypeInfoMap[$fieldName]))
				{
					$fieldType = $rqFieldTypeInfoMap[$fieldName]['type'];
					$isUF = $rqFieldTypeInfoMap[$fieldName]['isUF'];

					if($fieldName === EntityRequisite::ADDRESS)
					{
						$value = array();
					}
					else
					{
						switch ($fieldType)
						{
							case 'integer':
								$value = isset($rqRow[$fieldName]) ? (int)$rqRow[$fieldName] : null;
								break;
							case 'boolean':
								$value = isset($rqRow[$fieldName]) ? (bool)$rqRow[$fieldName] : false;
								if($isUF)
									$value = (intval($value) > 0) ? 1 : 0;
								else
									$value = ($value === 'Y') ? 'Y' : 'N';
								break;
							case 'datetime':
								$value = isset($rqRow[$fieldName]) ? $rqRow[$fieldName] : '';
								if($value instanceof Main\Type\DateTime)
									$value = $value->toString();
								break;
							default:
								$value = isset($rqRow[$fieldName]) ? strval($rqRow[$fieldName]) : '';
						}
					}

					$exRequisiteFields[$fieldName] = $value;
				}
			}

			// check requisite compliance
			$dupCriterionFields = EntityRequisite::getDuplicateCriterionFieldsMap();
			$dupCriterionFields = isset($dupCriterionFields[$countryId]) ?
				$dupCriterionFields[$countryId] : array();
			$compKeyFields = array_merge(array('NAME'), $dupCriterionFields);
			unset($dupCriterionFields);
			$rqComplianceByKeyField = false;
			foreach ($compKeyFields as $fieldName)
			{
				if (isset($requisiteFields[$fieldName]) && isset($exRequisiteFields[$fieldName])
					&& $requisiteFields[$fieldName] === $exRequisiteFields[$fieldName])
				{
					$rqComplianceByKeyField = true;
					$rqComplianceFound = true;
					break;
				}
			}

			if ($rqComplianceByKeyField)
			{
				// load addresses of existing requisite
				$requisiteId = (int)$rqRow['ID'];
				$exRequisiteAddresses = EntityRequisite::getAddresses($requisiteId);

				// update requisite fields
				$requisiteFieldsToUpdate = array();
				foreach (array_keys($requisiteFieldMap) as $fieldName)
				{
					// $dupControlType may be only 'REPLACE' or 'MERGE'
					if ($dupControlType === 'REPLACE')
					{
						if (array_key_exists($fieldName, $requisiteFields))
						{
							if (!array_key_exists($fieldName, $exRequisiteFields) ||
								$exRequisiteFields[$fieldName] !== $requisiteFields[$fieldName])
							{
								$requisiteFieldsToUpdate[$fieldName] = $requisiteFields[$fieldName];
							}
						}
					}
					else if ($dupControlType === 'MERGE')
					{
						if (!array_key_exists($fieldName, $exRequisiteFields)
							|| $exRequisiteFields[$fieldName] === null
							|| (is_string($exRequisiteFields[$fieldName])
								&& $exRequisiteFields[$fieldName] == '')
							|| (!is_int($exRequisiteFields[$fieldName])
								&& empty($exRequisiteFields[$fieldName])))
						{
							if (isset($requisiteFields[$fieldName])
								&& (is_int($requisiteFields[$fieldName])
									|| (is_string($requisiteFields[$fieldName]
										&& mb_strlen(is_string($requisiteFields[$fieldName]) > 0)))
									|| !empty($requisiteFields[$fieldName])))
							{
								$requisiteFieldsToUpdate[$fieldName] = $requisiteFields[$fieldName];
							}
						}
					}
				}
				if (isset($requisiteFieldsToUpdate['ID']))
					unset($requisiteFieldsToUpdate['ID']);
				if (!empty($requisiteFieldsToUpdate))
				{
					$errorOccured = false;
					$errMsg = '';
					try
					{
						$rqUpdRes = $requisite->update($requisiteId, $requisiteFieldsToUpdate);
					}
					catch (Main\SystemException $e)
					{
						$errorOccured = true;
						$errMsg = $e->getMessage();
					}
					if (!$errorOccured && !$rqUpdRes->isSuccess())
					{
						$errorOccured = true;
						$errMsg = $this->getErrorMessage($rqUpdRes);
					}
					unset($rqUpdRes);
					if ($errorOccured)
					{
						$result->addError(
							new Main\Error(
								GetMessage(
									'CRM_RQ_IMP_HLPR_ERR_UPDATE_REQUISITE',
									array(
										'#ENTITY_TYPE_NAME_GENITIVE#' => GetMessage(
											'CRM_RQ_IMP_HLPR_ERR_'.$entityTypeName.'_GENITIVE'
										),
										'#ID#' => $entityId,
									).': '.$errMsg
								),
								self::ERR_UPDATE_REQUISITE
							)
						);
						return $result;
					}
					unset($errorOccured, $errMsg);
				}

				// update addresses
				$requisiteAddresses = array();
				$addressFields = array(
					'ADDRESS_1',
					'ADDRESS_2',
					'CITY',
					'POSTAL_CODE',
					'REGION',
					'PROVINCE',
					'COUNTRY',
					'COUNTRY_CODE'/*,
					'LOC_ADDR_ID'*/
				);
				if (is_array($requisiteFields)
					&& is_array($requisiteFields[EntityRequisite::ADDRESS])
					&& !empty($requisiteFields[EntityRequisite::ADDRESS]))
				{
					$rqAddrTypeMap = array_fill_keys(EntityAddressType::getAvailableIds(), true);
					foreach ($requisiteFields[EntityRequisite::ADDRESS] as $addrTypeId => $address)
					{
						if (isset($rqAddrTypeMap[$addrTypeId]) && !RequisiteAddress::isEmpty($address))
						{
							foreach ($addressFields as $fieldName)
							{
								$requisiteAddresses[$addrTypeId][$fieldName] =
									isset($address[$fieldName]) ? $address[$fieldName] : null;
							}
						}
					}
				}
				foreach($requisiteAddresses as $addrTypeId => $address)
				{
					// $rqImportMode may be only 'REPLACE' or 'MERGE'
					if(!isset($exRequisiteAddresses[$addrTypeId])
						|| RequisiteAddress::isEmpty($exRequisiteAddresses[$addrTypeId])
						|| ($rqImportMode === 'REPLACE'
							&&  !RequisiteAddress::areEquals(
								$requisiteAddresses[$addrTypeId], $exRequisiteAddresses[$addrTypeId]
							)))
					{
						RequisiteAddress::register(
							\CCrmOwnerType::Requisite,
							$requisiteId,
							$addrTypeId,
							$address
						);
					}
				}
				unset($requisiteAddresses);

				// update bank details
				if (is_array($requisiteFields['BANK_DETAILS']) && count($requisiteFields['BANK_DETAILS']) > 0)
				{
					foreach ($requisiteFields['BANK_DETAILS'] as $bankDetailFields)
					{
						// load bank details of existing requisite
						if ($bankDetailFieldMap === null)
						{
							$bankDetailFieldMap = array(
								'ID' => true,
								'NAME' => true,
								'COUNTRY_ID' => true,
								'ACTIVE' => true,
								'SORT' => true
							);
							$bankDetailRqFieldsByCountry = $bankDetail->getRqFieldByCountry();
							if (is_array($bankDetailRqFieldsByCountry[$countryId]))
							{
								foreach ($bankDetailRqFieldsByCountry[$countryId] as $fieldName)
									$bankDetailFieldMap[$fieldName] = true;
							}
							$bankDetailFieldMap['COMMENTS'] = true;
							unset($bankDetailRqFieldsByCountry);
						}
						$bdRes = $bankDetail->getList(
							array(
								'select' => array_keys($bankDetailFieldMap),
								'filter' => array(
									'=ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
									'=ENTITY_ID' => $requisiteId
								)
							)
						);
						$bdComplianceFound = false;
						while($bdRow = $bdRes->fetch())
						{
							$bankDetailId = (int)$bdRow['ID'];
							if($bdFieldTypeInfoMap === null)
							{
								$bdFieldTypeInfoMap = array();
								foreach ($bankDetail->getFormFieldsInfo($countryId) as $fieldName => $fieldInfo)
								{
									$bdFieldTypeInfoMap[$fieldName] = array(
										'type' => $fieldInfo['type'],
										'isUF' => $fieldInfo['isUF']
									);
								}
							}

							// load fields of existing bank details
							$exBankDetailFields = array();
							foreach (array_keys($bankDetailFieldMap) as $fieldName)
							{
								if(isset($bdFieldTypeInfoMap[$fieldName]))
								{
									$fieldType = $bdFieldTypeInfoMap[$fieldName]['type'];
									$isUF = $bdFieldTypeInfoMap[$fieldName]['isUF'];

									switch ($fieldType)
									{
										case 'integer':
											$value = isset($bdRow[$fieldName]) ? (int)$bdRow[$fieldName] : null;
											break;
										case 'boolean':
											$value = isset($bdRow[$fieldName]) ? (bool)$bdRow[$fieldName] : false;
											if($isUF)
												$value = (intval($value) > 0) ? 1 : 0;
											else
												$value = ($value === 'Y') ? 'Y' : 'N';
											break;
										case 'datetime':
											$value = isset($bdRow[$fieldName]) ? $bdRow[$fieldName] : '';
											if($value instanceof Main\Type\DateTime)
												$value = $value->toString();
											break;
										default:
											$value = isset($bdRow[$fieldName]) ? strval($bdRow[$fieldName]) : '';
									}

									$exBankDetailFields[$fieldName] = $value;
								}
							}

							// check bank detail compliance
							$dupCriterionFields = EntityBankDetail::getDuplicateCriterionFieldsMap();
							$dupCriterionFields = isset($dupCriterionFields[$countryId]) ?
								$dupCriterionFields[$countryId] : array();
							$compKeyFields = array_merge(array('NAME'), $dupCriterionFields);
							unset($dupCriterionFields);
							$bdComplianceByKeyField = false;
							foreach ($compKeyFields as $fieldName)
							{
								if (isset($bankDetailFields[$fieldName]) && isset($exBankDetailFields[$fieldName])
									&& $bankDetailFields[$fieldName] === $exBankDetailFields[$fieldName])
								{
									$bdComplianceByKeyField = true;
									$bdComplianceFound = true;
									break;
								}
							}

							if ($bdComplianceByKeyField)
							{
								// update bank detail fields
								$bankdetailFieldsToUpdate = array();
								foreach (array_keys($bankDetailFieldMap) as $fieldName)
								{
									// $dupControlType may be only 'REPLACE' or 'MERGE'
									if ($dupControlType === 'REPLACE')
									{
										if (array_key_exists($fieldName, $bankDetailFields))
										{
											if (!array_key_exists($fieldName, $exBankDetailFields) ||
												$exBankDetailFields[$fieldName] !== $bankDetailFields[$fieldName])
											{
												$bankdetailFieldsToUpdate[$fieldName]
													= $bankDetailFields[$fieldName];
											}
										}
									}
									else if ($dupControlType === 'MERGE')
									{
										if (!array_key_exists($fieldName, $exBankDetailFields)
											|| $exBankDetailFields[$fieldName] === null
											|| (is_string($exBankDetailFields[$fieldName])
												&& $exBankDetailFields[$fieldName] == '')
											|| (!is_int($exBankDetailFields[$fieldName])
												&& empty($exBankDetailFields[$fieldName])))
										{
											if (isset($bankDetailFields[$fieldName])
												&& (is_int($bankDetailFields[$fieldName])
													|| (is_string($bankDetailFields[$fieldName]
														&& mb_strlen(is_string($bankDetailFields[$fieldName]) > 0)))
													|| !empty($bankDetailFields[$fieldName])))
											{
												$bankdetailFieldsToUpdate[$fieldName] =
													$bankDetailFields[$fieldName];
											}
										}
									}
								}
								if (isset($bankdetailFieldsToUpdate['ID']))
									unset($bankdetailFieldsToUpdate['ID']);
								if (!empty($bankdetailFieldsToUpdate))
								{
									$errorOccured = false;
									$errMsg = '';
									try
									{
										$bdUpdRes = $bankDetail->update($bankDetailId, $bankdetailFieldsToUpdate);
									}
									catch (Main\SystemException $e)
									{
										$errorOccured = true;
										$errMsg = $e->getMessage();
									}
									if (!$errorOccured && !$bdUpdRes->isSuccess())
									{
										$errorOccured = true;
										$errMsg = $this->getErrorMessage($bdUpdRes);
									}
									unset($bdUpdRes);
									if ($errorOccured)
									{
										$result->addError(
											new Main\Error(
												GetMessage(
													'CRM_RQ_IMP_HLPR_ERR_UPDATE_BANK_DETAIL',
													array(
														'#ENTITY_TYPE_NAME_GENITIVE#' => GetMessage(
															'CRM_RQ_IMP_HLPR_ERR_'.$entityTypeName.'_GENITIVE'
														),
														'#ID#' => $entityId,
													).': '.$errMsg
												),
												self::ERR_UPDATE_BANK_DETAIL
											)
										);
										return $result;
									}
									unset($errorOccured, $errMsg);
								}
							}
						}
						if (!$bdComplianceFound)
						{
							$bankDetailFieldsToAdd = array(
								'ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
								'ENTITY_ID' => $requisiteId,
								'COUNTRY_ID' => $countryId,
								'ACTIVE' => 'Y',
								'SORT' => 500
							);
							foreach (array_keys($bankDetailFieldMap) as $fieldName)
							{
								if (isset($bankDetailFields[$fieldName]))
									$bankDetailFieldsToAdd[$fieldName] = $bankDetailFields[$fieldName];
							}
							if (isset($bankDetailFieldsToAdd['ID']))
								unset($bankDetailFieldsToAdd['ID']);
							$errorOccured = false;
							$errMsg = '';
							try
							{
								$bdAddRes = $bankDetail->add($bankDetailFieldsToAdd);
							}
							catch (Main\SystemException $e)
							{
								$errorOccured = true;
								$errMsg = $e->getMessage();
							}
							unset($bankDetailFieldsToAdd);
							if(!$errorOccured && !$bdAddRes->isSuccess())
							{
								$errorOccured = true;
								$errMsg = $this->getErrorMessage($bdAddRes);
							}
							unset($bdAddRes);
							if ($errorOccured)
							{
								$result->addError(
									new Main\Error(
										GetMessage(
											'CRM_RQ_IMP_HLPR_ERR_CREATE_BANK_DETAIL',
											array(
												'#ENTITY_TYPE_NAME_GENITIVE#' => GetMessage(
													'CRM_RQ_IMP_HLPR_ERR_'.$entityTypeName.'_GENITIVE'
												),
												'#ID#' => $entityId,
											)
										).': '.$errMsg,
										self::ERR_CREATE_BANK_DETAIL
									)
								);
								return $result;
							}
							unset($errorOccured, $errMsg);
						}
						unset($bdRes, $bdRow);
					}
				}
			}
		}
		if (!$rqComplianceFound)
		{
			$requisiteFieldsToAdd = array(
				'ENTITY_TYPE_ID' => $entityTypeId,
				'ENTITY_ID' => $entityId,
				'PRESET_ID' => $presetId,
				'NAME' => $presetName,
				'ACTIVE' => 'Y',
				'SORT' => 500
			);
			foreach (array_keys($requisiteFieldMap) as $fieldName)
			{
				if (isset($requisiteFields[$fieldName]))
					$requisiteFieldsToAdd[$fieldName] = $requisiteFields[$fieldName];
			}
			if (isset($requisiteFieldsToAdd['ID']))
				unset($requisiteFieldsToAdd['ID']);
			$errorOccured = false;
			$errMsg = '';
			try
			{
				$rqAddRes = $requisite->add($requisiteFieldsToAdd);
			}
			catch (Main\SystemException $e)
			{
				$errorOccured = true;
				$errMsg = $e->getMessage();
			}
			if(!$errorOccured && !$rqAddRes->isSuccess())
			{
				$errorOccured = true;
				$errMsg = $this->getErrorMessage($rqAddRes);
			}
			if ($errorOccured)
			{
				$result->addError(
					new Main\Error(
						GetMessage(
							'CRM_RQ_IMP_HLPR_ERR_CREATE_REQUISITE',
							array(
								'#ENTITY_TYPE_NAME_GENITIVE#' => GetMessage(
									'CRM_RQ_IMP_HLPR_ERR_'.$entityTypeName.'_GENITIVE'
								),
								'#ID#' => $entityId,
							)
						).': '.$errMsg,
						self::ERR_CREATE_REQUISITE
					)
				);
				return $result;
			}
			$requisiteId = $rqAddRes->getId();
			unset($rqAddRes, $errorOccured, $errMsg);

			if (is_array($requisiteFields['BANK_DETAILS']) && count($requisiteFields['BANK_DETAILS']) > 0)
			{
				foreach ($requisiteFields['BANK_DETAILS'] as $bankDetailFields)
				{
					if ($bankDetailFieldMap === null)
					{
						$bankDetailFieldMap = array(
							'ID' => true,
							'NAME' => true,
							'COUNTRY_ID' => true,
							'ACTIVE' => true,
							'SORT' => true
						);
						$bankDetailRqFieldsByCountry = $bankDetail->getRqFieldByCountry();
						if (is_array($bankDetailRqFieldsByCountry[$countryId]))
						{
							foreach ($bankDetailRqFieldsByCountry[$countryId] as $fieldName)
								$bankDetailFieldMap[$fieldName] = true;
						}
						$bankDetailFieldMap['COMMENTS'] = true;
						unset($bankDetailRqFieldsByCountry);
					}
					$bankDetailFieldsToAdd = array(
						'ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
						'ENTITY_ID' => $requisiteId,
						'COUNTRY_ID' => $countryId,
						'ACTIVE' => 'Y',
						'SORT' => 500
					);
					foreach (array_keys($bankDetailFieldMap) as $fieldName)
					{
						if (isset($bankDetailFields[$fieldName]))
							$bankDetailFieldsToAdd[$fieldName] = $bankDetailFields[$fieldName];
					}
					if (isset($bankDetailFieldsToAdd['ID']))
						unset($bankDetailFieldsToAdd['ID']);
					$errorOccured = false;
					$errMsg = '';
					try
					{
						$bdAddRes = $bankDetail->add($bankDetailFieldsToAdd);
					}
					catch (Main\SystemException $e)
					{
						$errorOccured = true;
						$errMsg = $e->getMessage();
					}
					unset($bankDetailFieldsToAdd);
					if(!$errorOccured && !$bdAddRes->isSuccess())
					{
						$errorOccured = true;
						$errMsg = $this->getErrorMessage($bdAddRes);
					}
					unset($bdAddRes);
					if ($errorOccured)
					{
						$result->addError(
							new Main\Error(
								GetMessage(
									'CRM_RQ_IMP_HLPR_ERR_CREATE_BANK_DETAIL',
									array(
										'#ENTITY_TYPE_NAME_GENITIVE#' => GetMessage(
											'CRM_RQ_IMP_HLPR_ERR_'.$entityTypeName.'_GENITIVE'
										),
										'#ID#' => $entityId,
									)
								).': '.$errMsg,
								self::ERR_CREATE_BANK_DETAIL
							)
						);
						return $result;
					}
					unset($errorOccured, $errMsg);
				}
			}
		}
		unset($rqRes, $rqRow);
	}

	return $result;
}