• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/tasks_report_helper.php
  • Класс: CTasksReportHelper
  • Вызов: CTasksReportHelper::appendMoneyUserFieldsAsSeparated
static function appendMoneyUserFieldsAsSeparated(BitrixMainEntityBase $entity)
{
	/** @global CDatabase $DB */
	global $DB;

	// Advanced fields for datetime user fields
	$moneyFields = array();
	foreach($entity->getFields() as $field)
	{
		if (in_array($field->getName(), array('LEAD_BY', 'COMPANY_BY', 'CONTACT_BY'), true)
			&& $field instanceof BitrixMainEntityReferenceField)
		{
			self::appendMoneyUserFieldsAsSeparated($field->getRefEntity());
		}
		else if ($field instanceof BitrixMainEntityExpressionField)
		{
			$arUF = self::detectUserField($field);
			if ($arUF['isUF'])
			{
				$ufDataType = self::getUserFieldDataType($arUF);
				$fieldName = $arUF['ufInfo']['FIELD_NAME'];
				if ($ufDataType === 'money')
				{
					$moneyFields[] = array(
						'def' => array(
							'data_type' => 'float',
							'expression' => array(
								"(IFNULL(IF(".
								"LOCATE('|', %s) > 0, ".
								"CAST(SUBSTR(%s, 1, LOCATE('|', %s) - 1) AS DECIMAL(18,2)), ".
								"CAST(%s AS DECIMAL(18,2))".
								"), 0))", $fieldName, $fieldName, $fieldName, $fieldName
							)
						),
						'name' => $fieldName.self::UF_MONEY_NUMBER_POSTFIX
					);
					$moneyFields[] = array(
						'def' => array(
							'data_type' => 'string',
							'expression' => array(
								"(IFNULL(IF(LOCATE('|', %s) > 0, SUBSTR(%s, LOCATE('|', %s) + 1), NULL), ''))",
								$fieldName, $fieldName, $fieldName
							)
						),
						'name' => $fieldName.self::UF_MONEY_CURRENCY_POSTFIX
					);
				}
			}
		}
	}
	foreach ($moneyFields as $fieldInfo)
	{
		if (!$entity->hasField($fieldInfo['name']))
		{
			$entity->addField($fieldInfo['def'], $fieldInfo['name']);
		}
	}
}