• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/productrowtable.php
  • Класс: Bitrix\Crm\ProductRowTable
  • Вызов: ProductRowTable::getMap
static function getMap(): array
{
	$fieldRepository = ServiceLocator::getInstance()->get('crm.model.fieldRepository');

	return [
		(new IntegerField('ID'))
			->configurePrimary()
			->configureAutocomplete(),
		(new IntegerField('OWNER_ID'))
			->configureRequired(),
		(new StringField('OWNER_TYPE'))
			->configureRequired()
			->configureSize(3),
		(new Reference(
			'OWNER',
			DealTable::class,
			Join::on('this.OWNER_ID', 'ref.ID')
		)),
		(new Reference(
			'DEAL_OWNER',
			DealTable::class,
			Join::on('this.OWNER_ID', 'ref.ID')
				->where('this.OWNER_TYPE', \CCrmOwnerTypeAbbr::Deal)
		)),
		(new Reference(
			'LEAD_OWNER',
			LeadTable::class,
			Join::on('this.OWNER_ID', 'ref.ID')
				->where('this.OWNER_TYPE', \CCrmOwnerTypeAbbr::Lead)
		)),
		(new Reference(
			'QUOTE_OWNER',
			QuoteTable::class,
			Join::on('this.OWNER_ID', 'ref.ID')
				->where('this.OWNER_TYPE', \CCrmOwnerTypeAbbr::Quote)
		)),
		(new IntegerField('PRODUCT_ID'))
			->configureRequired()
			->configureDefaultValue(0),
		(new StringField('PRODUCT_NAME'))
			->configureSize(256)
			->configureDefaultValue(''),
		(new Reference(
			'IBLOCK_ELEMENT',
			IBlockElementProxyTable::class,
			Join::on('this.PRODUCT_ID', 'ref.ID')
		)),
		(new Reference(
			'IBLOCK_ELEMENT_GRC',
			IBlockElementGrcProxyTable::class,
			Join::on('this.PRODUCT_ID', 'ref.ID')
		)),
		(new ExpressionField(
			'CP_PRODUCT_NAME',
			'CASE WHEN %s IS NOT NULL AND %s != \'\' THEN %s ELSE %s END',
			['PRODUCT_NAME', 'PRODUCT_NAME', 'PRODUCT_NAME', 'IBLOCK_ELEMENT.NAME']
		))
			->configureValueType(StringField::class),
		(new FloatField('PRICE'))
			->configureRequired()
			->configureScale(2)
			->configureDefaultValue(0.00),
		(new FloatField('PRICE_ACCOUNT'))
			->configureRequired()
			->configureScale(2)
			->configureDefaultValue(0.00),
		(new FloatField('PRICE_EXCLUSIVE'))
			->configureScale(2)
			->configureDefaultValue(0.00),
		(new FloatField('PRICE_NETTO'))
			->configureScale(2)
			->configureDefaultValue(0.00),
		(new FloatField('PRICE_BRUTTO'))
			->configureScale(2)
			->configureDefaultValue(0.00),
		(new FloatField('QUANTITY'))
			->configureRequired()
			->configureScale(4)
			->configureDefaultValue(1),
		(new ExpressionField(
			'SUM_ACCOUNT',
			'%s * %s',
			['PRICE_ACCOUNT', 'QUANTITY']
		))
			->configureValueType(FloatField::class),
		(new IntegerField('DISCOUNT_TYPE_ID'))
			->configureDefaultValue(Discount::UNDEFINED),
		(new FloatField('DISCOUNT_RATE'))
			->configureScale(2)
			->configureDefaultValue(0.00),
		(new FloatField('DISCOUNT_SUM'))
			->configureScale(2)
			->configureDefaultValue(0.00),
		(new FloatField('TAX_RATE'))
			->configureScale(2)
			->configureNullable(),
		(new BooleanField('TAX_INCLUDED'))
			->configureStorageValues('N', 'Y')
			->configureDefaultValue(false),
		(new BooleanField('CUSTOMIZED'))
			->configureStorageValues('N', 'Y')
			->configureDefaultValue(true),
		(new IntegerField('MEASURE_CODE'))
			->configureDefaultValue(0),
		(new StringField('MEASURE_NAME'))
			->configureSize(50)
			->configureDefaultValue(''),
		(new IntegerField('SORT'))
			->configureDefaultValue(0),
		(new StringField('XML_ID'))
			->configureDefaultValue(''),
		(new IntegerField('TYPE'))
			->configureDefaultValue(ProductType::TYPE_PRODUCT)
			->configureRequired()
			->addValidator([static::class, 'validateSupportedProductType']),
		$fieldRepository->getProductRowReservation(),
	];
}