Решал задачу в заявке на закупку дать возможность указывать источник финансирования из списка возможных. При этом часть источников можно выбирать одновременно, а оставшуюся часть — строго по одному.
Выбирая способ решения я исходил из следующих соображений:
Список источников финансирования будет меняться;
Для реализации задачи я не нашел решения с использованием одного единственного допреквизита;
Передавать между видами документов списки значений неудобно. Лучше передавать значения типа Строка.
Поэтому создал один допреквизит с перечислением значений, которые можно выбрать по одному, далее создал несколько допреквизитов-чекбоксов для значений, которые можно выбирать совместно с другими. И сделал допреквизит типа Строка для сохранения итогового списка выбранных источников.

Видимость и доступность реквизитов «Тема» на форме устанавливается с условием — зависимость от выбранного значения реквизита «Источник финансирования».


В расширение конфигурации РасширениеИсточникФинансирования добавил Справочники-ДокументыПредприятия-Формы-ФормаЭлемента и в модуле формы создал обработчик события изменения этих допреквизитов, который формирует строку итогового выбора.
Передача итоговой строки другим документам (Договор и Контракт) выполняется как и прежде обработчиком бизнес-событий, в котором реквизит «Тема ГЗ» заменен на «Источник финансирования подробно».
Привожу код модуля формы:
#Область ОбработчикиСобытийФормы
&НаСервере
Функция ПолучитьПолеДополнительногоРеквизитаКакСвойство (ИмяРеквизита) Экспорт
Возврат ПланыВидовхарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяРеквизита);
КонецФункции
&НаКлиенте
// Функция возвращает запись из коллекции ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов
// ИмяРеквизита - имя из поля Для разработчиков
// Запись из коллекции имеет свойства:
// .ИмяРеквизитаЗначение - Длинное внутреннее наименование поля допреквизита на форме. Используется для доступа к текущему значению поля
// .Свойство - имя допреквизита из поля Для разработчиков
// .Наименование - имя допреквизита из поля Наименование
Функция ПолучитьПолеДопреквизитаПоНазваниюДляРазработчиков ( ИмяРеквизита) Экспорт
Список = ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов;
Свойство = ПолучитьПолеДополнительногоРеквизитаКакСвойство(ИмяРеквизита);
Если ЗначениеЗаполнено(Свойство) Тогда
НайденныеСтроки = Список.НайтиСтроки(Новый Структура ("Свойство", Свойство));
Если НайденныеСтроки.Количество () > 0 Тогда
Возврат НайденныеСтроки[0];
КонецЕсли;
КонецЕсли;
Возврат Неопределено;
КонецФункции
&НаКлиенте
// Функция возвращает запись из коллекции ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов
// ИмяРеквизита - имя из поля Наименование
Функция ПолучитьПолеДопреквизитаПоНаименованию ( ИмяРеквизита) Экспорт
Список = ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов;
// Свойство = ПолучитьПолеДополнительногоРеквизитаКакСвойство(ИмяРеквизита);
Если ЗначениеЗаполнено(ИмяРеквизита) Тогда
НайденныеСтроки = Список.НайтиСтроки(Новый Структура ("Наименование", ИмяРеквизита));
Если НайденныеСтроки.Количество () > 0 Тогда
Возврат НайденныеСтроки[0];
КонецЕсли;
КонецЕсли;
Возврат Неопределено;
КонецФункции
&НаКлиенте
// Процедура, вызываемая при событии Изменение значения допреквизита Источник Финансирования
// Формирует и помещает в допреквизит ИсточникФинансированияПодробно выбранный источник
// (перечень отмеченных тем ГЗ из чекбоксов или значение из комбобокса)
// 1. Проверить наличие и запомнить поле ИсточникФинансированияПодробно. Завершить если отсутствует
// 2. Считать значение Источник финансирования из поля формы. Установить ИсточникФинансированияПодробно="" и завершить если отсутствует поле или значение не установлено
// 3.а Если значение поля Источник финансирования не равно "0. ГЗ (одна или несколько тем)" - ИсточникФинансированияПодробно заполнить значением из Источник финансирования
// 3.б Иначе - перебрать все допреквизиты формы, имя которых начинается с "Тема ГЗ ". В ИсточникФинансированияПодробно добавить имя такого допреквизита, значение которого = Истина
// 4. Сохранить значение ИсточникФинансированияПодробно в форме
Процедура ОбработатьИзменениеИсточникаФинансирования()
ТемыГЗ = "";
/// 1.
// ПолеРеквизитаИсточникФинансированияПодробно = ПолучитьПолеДопреквизитаПоНазваниюДляРазработчиков(
// "ИсточникФинансированияПодробно_d12cba0ab05148c4a43bc1876be639c0"); // куда записывать
ПолеРеквизитаИсточникФинансированияПодробно = ПолучитьПолеДопреквизитаПоНаименованию (
"Источник финансирования подробно"); // куда записывать
Если ПолеРеквизитаИсточникФинансированияПодробно = Неопределено Тогда
Возврат;
КонецЕсли;
/// 2.
ПолеРеквизитаИсточникФинансирования = ПолучитьПолеДопреквизитаПоНаименованию (
"Источник финансирования");
Если НЕ ПолеРеквизитаИсточникФинансирования = Неопределено Тогда
ВыбранноеЗначениеИФ = Строка(ЭтаФорма[ПолеРеквизитаИсточникФинансирования.ИмяРеквизитаЗначение]);
Иначе
ЭтаФорма[ПолеРеквизитаИсточникФинансированияПодробно.ИмяРеквизитаЗначение] = "";
Возврат;
КонецЕсли;
/// 3.
Если Не ВыбранноеЗначениеИФ = "0. ГЗ (одна или несколько тем)" Тогда
/// 3.а.
ЭтаФорма[ПолеРеквизитаИсточникФинансированияПодробно.ИмяРеквизитаЗначение] = ВыбранноеЗначениеИФ;
Иначе
/// 3.б.
Для Каждого ДопРеквизит Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
Если СтрНайти(ДопРеквизит.Наименование, " - Тема - ") > 0 Тогда
// Если СтрНачинаетсяС(ДопРеквизит.Наименование, "Тема ГЗ ") Тогда // вариант из тестовой базы
Если ТипЗнч(ЭтаФорма[ДопРеквизит.ИмяРеквизитаЗначение]) = Тип("Булево") Тогда
Если ЭтаФорма[ДопРеквизит.ИмяРеквизитаЗначение] Тогда
ТемыГЗ = ТемыГЗ + Строка(ДопРеквизит.Наименование) + Символы.ПС;
КонецЕсли;
КонецЕсли;
КонецЕсли; // "Тема ГЗ "
КонецЦикла;
/// 4.
ЭтаФорма[ПолеРеквизитаИсточникФинансированияПодробно.ИмяРеквизитаЗначение] = ТемыГЗ;
КонецЕсли;
Возврат;
// Сообщить("При открытии ИсточникФинансирования");
КонецПроцедуры
//////////////////// Ниже процедуры установки обработчиков изменения полей ////////////////////////
&НаСервере
Процедура УстановитьДействиеДляДопреквизита(Элемент, Действие, Обработчик)
ЭлементПолеРеквизитаИсточникФинансирования = ЭтаФорма.Элементы[Элемент];
ЭлементПолеРеквизитаИсточникФинансирования.УстановитьДействие(Действие, Обработчик);
КонецПроцедуры
&После ("ПриОткрытии")
&НаКлиенте
Процедура ПриОткрытииЗамененная(Отказ)
// ПолеРеквизитаИсточникФинансирования = ПолучитьПолеДопреквизитаПоНазваниюДляРазработчиков( "ИсточникФинансирования_4d1cf077224f45ac8941faeb47ab3676");
ПолеРеквизитаИсточникФинансирования = ПолучитьПолеДопреквизитаПоНаименованию ( "Источник финансирования");
Если НЕ ПолеРеквизитаИсточникФинансирования = Неопределено Тогда
УстановитьДействиеДляДопреквизита(ПолеРеквизитаИсточникФинансирования.ИмяРеквизитаЗначение, "ПриИзменении", "ОбработатьИзменениеИсточникаФинансирования");
КонецЕсли;
Для Каждого ДопРеквизит Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
Если СтрНайти(ДопРеквизит.Наименование, " - Тема - ") > 0 Тогда
// Если СтрНачинаетсяС(ДопРеквизит.Наименование, "Тема ГЗ ") Тогда
Если ТипЗнч(ЭтаФорма[ДопРеквизит.ИмяРеквизитаЗначение]) = Тип("Булево") Тогда
УстановитьДействиеДляДопреквизита(ДопРеквизит.ИмяРеквизитаЗначение, "ПриИзменении", "ОбработатьИзменениеИсточникаФинансирования");
КонецЕсли;
КонецЕсли; // "Тема ГЗ "
КонецЦикла;
КонецПроцедуры
#КонецОбласти