каркас вот, а там уже ньюансы учесть просто надо (arraySize, отсутствие значений и др.)
X++:
void clicked()
{
FormStringControl ctrl;
SysDictField dictField;
SysDictType dictType;
;
super();
ctrl = element.control(Control::tutorial_Form_DynaLink1_ItemId);
print ctrl.dataSource();
print ctrl.dataField();
print fieldExt2Id(ctrl.dataField());
print element.form().dataSource(ctrl.dataSource()).table();
dictField = new SysDictField(element.form().dataSource(ctrl.dataSource()).table(), fieldExt2Id(ctrl.dataField()));
print dictField.extendedTypeId();
print typeId2ExtendedTypeId(dictField.extendedTypeId());
dictType = new SysDictType(typeId2ExtendedTypeId(dictField.extendedTypeId()));
print dictType.name();
pause;
}