Довольно часто в табличных частях документов с использованием элементов справочника Номенклатура задается реквизит ЕдиницаИзмерения. В свою очередь, эти единицы хранятся в двух справочниках:
1. Общем (без владельца) справочнике КлассификаторЕдиницЕзмерения для указания базовой единицы измерения номенклатуры;
2. Справочнике ЕдиницыИзмерения, владельцем которого является справочник Номенклатура, и в котором хранятся наименования дополнительных единиц измерения конкретной номенклатуры и коэффициенты пересчета относительно базовой единицы измерения.

В общем случае, для возможности отбора в табличной части документа всех доступных для конкретной номенклатуры единиц измерения, у реквизита табличной части ЕдиницаИзмерения указывается составной тип данных, состоящий из ссылок на оба этих справочника. Кроме того, полю табличной части формы или реквизиту задается свойство СвязиПараметровВыбора (Имя: Отбор.Владелец, Реквизит: ТЧ.Номенклатура, РежимИзмененияСвязанногоЗначения: Очищать) и у поля формы отключается флаг ВыбиратьТип. Это дает возможность пользователю выбрать из выпадающего списка ВСЕХ единиц измерения данной номенклатуры нужный, несмотря на то, что формально это работать не должно, так как справочник КлассификаторЕдиницЕзмерения не имеет владельца.

Тем не менее, именно так организована работа этого механизма в типовых конфигурациях, в частности в УНФ. И, как ни странно, механизм работает. Работает он и у меня, но только в первой табличной части документа. А во второй, которая организована совершенно аналогично первой с непринципиальными отличиями, все работать перестает, и я наблюдаю поле без кнопки выбора, как будто оно не типизировано. Если у поля табличной части формы установить флаг ВыбиратьТип, то видим окно выбора типа, после выбора которого имеем выпадающий список с единицами измерениями (всеми - из обоих справочников), но записать в поле можем только выбранный тип ссылок. Что тоже неприемлемо. Причем, как сам выбор типа, так и невозможность записать невыбранный. Так происходит вне зависимости от того, где заданы СвязиПараметровВыбора: в самом реквизите табличной части документа, или в поле табличной части формы.

Конечно же можно обработать ситуацию кодом. Но, если платформа дает возможность автоматической обработки, и эта возможность эксплуатируется в типовых решениях, то почему не воспользоваться этим?

Платформа 8.3.12.1595

Сталкивался ли кто-нибудь с подобным поведением платформы? Может есть решение? Может я что-то упускаю?
---
Сам себе в вопросе же и ответил: и я наблюдаю поле без кнопки выбора, как будто оно не типизировано

В первой ТЧ (БЦ) мной уже были прописаны обработки заполнения полей. В частности, ПриИзмененииНоменклатура, которая получала на сервере значение базовой единицы измерения для введенной номенклатуры и заполняла соответствующее поле ТЧ этим значением, тем самым определяя конкретный тип этого поля формы. Во второй ТЧ (ПС) таких обработок сформировано еще не было, и поле не имело конкретного типа, вследствие чего платформа не могла сгенерировать список выбора автоматически.

На вопрос, как платформа включает в этот список базовую единицу измерения, владельцем которой номенклатура не является, да еще и акцентирует ее жирным шрифтом, помещая в начало списка и дописывая постфикс (ед. хранения), тоже есть ответ. Такое поведение задается процедурой ОбработкаПолученияДанныхВыбора менеджера справочника Номенклатура конфигурации УНФ.

```1c
    // Процедура - обработчик события ОбработкаПолученияДанныхВыбора.
    //
    Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)

    Если НЕ Параметры.Свойство("Рекурсия")
    И Параметры.Отбор.Свойство("Владелец") И ТипЗнч(Параметры.Отбор.Владелец) = Тип("СправочникСсылка.Номенклатура") Тогда
    // При первом входе, если задана связь параметров выбора по значению номенклатуры,
    // то дополним параметры выбора отбором по владельцу - номенклатурным группам по иерархии.

    СтандартнаяОбработка = Ложь;

    Номенклатура = Параметры.Отбор.Владелец;
    КатегорияНоменклатуры = Параметры.Отбор.Владелец.КатегорияНоменклатуры;

    МассивОтбора = Новый Массив;
    МассивОтбора.Добавить(Номенклатура);
    МассивОтбора.Добавить(КатегорияНоменклатуры);

    Родитель = КатегорияНоменклатуры.Родитель;
    Пока ЗначениеЗаполнено(Родитель) Цикл
    МассивОтбора.Добавить(Родитель);
    Родитель = Родитель.Родитель;
    КонецЦикла;

    Параметры.Отбор.Вставить("Владелец", МассивОтбора);

    // Признак повторного входа.
    Параметры.Вставить("Рекурсия");

    // Получим стандартный список выбора с учетом дополненного отбора.
    СтандартныйСписок = ПолучитьДанныеВыбора(Параметры);

    Если НЕ (Параметры.Свойство("НеИспользоватьКлассификатор") И Параметры.НеИспользоватьКлассификатор = Истина) Тогда
    Если ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда
    // Дополним стандартный список базовой единицей измерения номенклатуры по классификатору.
    ПредставлениеЕдиницыИзмерения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (ед. хранения)'"),
    Номенклатура.ЕдиницаИзмерения.Наименование);
    СтандартныйСписок.Вставить(0, Номенклатура.ЕдиницаИзмерения,
    Новый ФорматированнаяСтрока(ПредставлениеЕдиницыИзмерения, Новый Шрифт(,,Истина)));
    Иначе
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнена номенклатура!'"));
    КонецЕсли;
    КонецЕсли;

    ДанныеВыбора = СтандартныйСписок;

    КонецЕсли;

    КонецПроцедуры
```

Имеется ли такой механизм в других типовых конфигурациях - я не проверял.
---
Сам себе в вопросе же и ответил: и я наблюдаю поле без кнопки выбора, как будто оно не типизировано

В первой ТЧ (БЦ) мной уже были прописаны обработки заполнения полей. В частности, ПриИзмененииНоменклатура, которая получала на сервере значение базовой единицы измерения для введенной номенклатуры и заполняла соответствующее поле ТЧ этим значением, тем самым определяя конкретный тип этого поля формы. Во второй ТЧ (ПС) таких обработок сформировано еще не было, и поле не имело конкретного типа, вследствие чего платформа не могла сгенерировать список выбора автоматически.

На вопрос, как платформа включает в этот список базовую единицу измерения, владельцем которой номенклатура не является, да еще и акцентирует ее жирным шрифтом, помещая в начало списка и дописывая постфикс (ед. хранения), тоже есть ответ. Такое поведение задается процедурой ОбработкаПолученияДанныхВыбора менеджера справочника Номенклатура конфигурации УНФ.

```1c
    // Процедура - обработчик события ОбработкаПолученияДанныхВыбора.
    //
    Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)

    Если НЕ Параметры.Свойство("Рекурсия")
    И Параметры.Отбор.Свойство("Владелец") И ТипЗнч(Параметры.Отбор.Владелец) = Тип("СправочникСсылка.Номенклатура") Тогда
    // При первом входе, если задана связь параметров выбора по значению номенклатуры,
    // то дополним параметры выбора отбором по владельцу - номенклатурным группам по иерархии.

    СтандартнаяОбработка = Ложь;

    Номенклатура = Параметры.Отбор.Владелец;
    КатегорияНоменклатуры = Параметры.Отбор.Владелец.КатегорияНоменклатуры;

    МассивОтбора = Новый Массив;
    МассивОтбора.Добавить(Номенклатура);
    МассивОтбора.Добавить(КатегорияНоменклатуры);

    Родитель = КатегорияНоменклатуры.Родитель;
    Пока ЗначениеЗаполнено(Родитель) Цикл
    МассивОтбора.Добавить(Родитель);
    Родитель = Родитель.Родитель;
    КонецЦикла;

    Параметры.Отбор.Вставить("Владелец", МассивОтбора);

    // Признак повторного входа.
    Параметры.Вставить("Рекурсия");

    // Получим стандартный список выбора с учетом дополненного отбора.
    СтандартныйСписок = ПолучитьДанныеВыбора(Параметры);

    Если НЕ (Параметры.Свойство("НеИспользоватьКлассификатор") И Параметры.НеИспользоватьКлассификатор = Истина) Тогда
    Если ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда
    // Дополним стандартный список базовой единицей измерения номенклатуры по классификатору.
    ПредставлениеЕдиницыИзмерения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (ед. хранения)'"),
    Номенклатура.ЕдиницаИзмерения.Наименование);
    СтандартныйСписок.Вставить(0, Номенклатура.ЕдиницаИзмерения,
    Новый ФорматированнаяСтрока(ПредставлениеЕдиницыИзмерения, Новый Шрифт(,,Истина)));
    Иначе
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнена номенклатура!'"));
    КонецЕсли;
    КонецЕсли;

    ДанныеВыбора = СтандартныйСписок;

    КонецЕсли;

    КонецПроцедуры
```

Имеется ли такой механизм в других типовых конфигурациях - я не проверял.
---
Обрати внимание, в частности в УНФ, на применение в том же ЗаказеПокупателя такой процедуры: Процедура ЗапасыЕдиницаИзмеренияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
---
Ну что, проверил?
---
Проверил. Процедура занимается только расчетом коэффициентов для пересчета цены, веса и объема. Я это делаю не в ОбработкаВыбора, а в ПриИзменении и немного проще:

```1c
    &НаСервереБезКонтекста
    Функция ПересчитатьЦенуПоЕдИзм(Номенклатура, Цена, СтараяЕдИзм, НоваяЕдИзм)

    //Если ведется учет в нескольких единицах измерения и единицы измерения не равны,
    Если Константы.ФункциональнаяОпцияУчетВРазличныхЕдиницахИзмерения.Получить()
    И НоваяЕдИзм <> СтараяЕдИзм Тогда

    //то приводим цену к базовой единице измерения.
    //Если СтараяЕдИзм не равна базовой единице измерения,
    //то цену делим на коэффициент единицы измерения из СтараяЕдИзм.
    Если СтараяЕдИзм <> Номенклатура.ЕдиницаИзмерения Тогда
    ЦенаБазовойЕдиницыИзмерения = Цена / СтараяЕдИзм.Коэффициент;
    Иначе
    ЦенаБазовойЕдиницыИзмерения = Цена;
    КонецЕсли;

    //Приводим цену к запрошенной единице измерения.
    //Если НоваяЕдИзм не равна базовой единице измерения,
    //то цену базовой единицы измерения умножаем на коэффициент из НоваяЕдИзм.
    Если НоваяЕдИзм <> Номенклатура.ЕдиницаИзмерения Тогда
    ПересчитаннаяЦена = ЦенаБазовойЕдиницыИзмерения * НоваяЕдИзм.Коэффициент;
    Иначе
    ПересчитаннаяЦена = ЦенаБазовойЕдиницыИзмерения;
    КонецЕсли;

    Возврат ПересчитаннаяЦена;

    Иначе

    Возврат Цена;

    КонецЕсли;

    КонецФункции
```

Вес и объем мне считать не нужно.

Также, приведенная вами процедура не имеет отношения к формированию списка выбора. При этом, в типовом варианте механизм формирования этого списка аналогичен моему, то есть задается не кодом обработки, а в палитре свойств соответствующего элемента, в частности, реквизита табличной части формы документа. Однако, в типовом решении этот механизм работает, а у меня только наполовину, то есть только в первой (БЦ) табличной части, а во второй (ПС) уже нет.