Тема не нова, но надеюсь, окажется полезной.
Задача: есть сущность специалист, специалист имеет квалификации. Для того, чтобы оценить квалификацию специалиста, к ней должна быть привязана дата её получения. В итоге, в одном поле должны храниться пары вида:
1С-Профессионал 15.01.2005
1С-Специалист 09.06.2011
и т.д.
На схеме данных это выглядит так:

Понятно, что хранить лишний инфоблок для такого пустяка избыточно, и был найден другой способ.
Некоторые типы свойств (строка, число, файл, дата, и т.д.) позволяют отдельно хранить поле для описания значения свойства. По умолчанию это просто текстовое поле, что не совсем подходит — вбивать руками дату пользователя не заставишь.
Задача свелась к следующему: создать такой тип свойства ИБ, который бы позволял в поле VALUE хранить ID элемента ИБ Квалификации, а в поле DESCRIPTION — дату её получения. При этом выводиться список Квалификаций должен в селекте, дату же будем выбирать с помощью стандартного bitrix:main.calendar.
К счастью, разработчики из Bitrix оставили некоторые указания на этот счёт[4].
Каждый тип свойства описывается набором методов:

Кроме того, в файле /bitrix/modules/main/classes/general/usertypestr.php достаточно комментариев, описывающих каждый метод.
Реализация
Детали реализаци

2. Обработчик
require_once($_SERVER['DOCUMENT_ROOT']."/bitrix/php_interface/classes/CCustomTypes/CCustomTypes.php");
AddEventHandler('iblock', 'OnIBlockPropertyBuildList', array('CCustomTypeElementDate', 'GetUserTypeDescription'));
Результат
Выбор нового свойства в настройках ИБ:

Как это выглядит в форме добавления элемента ИБ:

Полезные ссылки
Так и не смог забороть стандартное форматирование. Прилагаю скрин и ссылку на gist.
Задача: есть сущность специалист, специалист имеет квалификации. Для того, чтобы оценить квалификацию специалиста, к ней должна быть привязана дата её получения. В итоге, в одном поле должны храниться пары вида:
1С-Профессионал 15.01.2005
1С-Специалист 09.06.2011
и т.д.
На схеме данных это выглядит так:

Понятно, что хранить лишний инфоблок для такого пустяка избыточно, и был найден другой способ.
Некоторые типы свойств (строка, число, файл, дата, и т.д.) позволяют отдельно хранить поле для описания значения свойства. По умолчанию это просто текстовое поле, что не совсем подходит — вбивать руками дату пользователя не заставишь.
Задача свелась к следующему: создать такой тип свойства ИБ, который бы позволял в поле VALUE хранить ID элемента ИБ Квалификации, а в поле DESCRIPTION — дату её получения. При этом выводиться список Квалификаций должен в селекте, дату же будем выбирать с помощью стандартного bitrix:main.calendar.
К счастью, разработчики из Bitrix оставили некоторые указания на этот счёт[4].
Каждый тип свойства описывается набором методов:

Кроме того, в файле /bitrix/modules/main/classes/general/usertypestr.php достаточно комментариев, описывающих каждый метод.
Реализация
- Создаём класс, в котором описываем тип свойства. Методы, которые понадобились мне:
- GetUserTypeDescription
- GetPropertyFieldHtml
- ConvertToDB
- ConvertFromDB
Детали реализаци
- Описание класса

2. Обработчик
require_once($_SERVER['DOCUMENT_ROOT']."/bitrix/php_interface/classes/CCustomTypes/CCustomTypes.php");
AddEventHandler('iblock', 'OnIBlockPropertyBuildList', array('CCustomTypeElementDate', 'GetUserTypeDescription'));
Результат
Выбор нового свойства в настройках ИБ:

Как это выглядит в форме добавления элемента ИБ:

Полезные ссылки
Так и не смог забороть стандартное форматирование. Прилагаю скрин и ссылку на gist.