Отраслевое решение на БСП, УФ, платформа 8.3.26.1540 (режим совместимости 8.3.21). Доработка идет в расширениях, насколько возможно.

Требуется хранить настраиваемое значение по умолчанию для заполнения новых документов.
(В данном конкретном случае: документ -- инвентарная опись, значение -- председатель и состав комиссии. Предполагается отражать только описи, проводимые в связи с определенным типом мероприятий, их (мероприятия) проводит только одно подразделение -- т.е. состав комиссии один и меняется редко.)

Согласно Общие сведения об организации хранения данных :: Организация хранения данных :: Система стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8, наиболее подходящей сущностью выглядит константа. А поскольку хранимые данные -- структура (ссылка + массив ссылок), единственный подходящий тип -- ХранилищеЗначения.

Чтобы редактировать такое значение, задал константе свою форму (см. вл.), создалась общая форма константы.

Предполагалось, что переводить значение константы в компоненты-реквизиты формы и обратно я буду в обработчиках ПриЧтенииНаСервере и ПередЗаписьюНаСервере. Однако, как выяснилось, для констант типа ХранилищеЗначения эти обработчики не вызываются! (Убедился, что дело не в отладчике. Если сменить тип константы на Строка, обработчики вызываются.)

Где тогда предполагается делать вышеуказанные операции? Есть ли какие-то рекомендации со стороны 1С? (Собственный поиск уже провел.) Насколько мне известно, например, при стандартной команде "обновить" ничего, кроме "ПриЧтенииНаСервере", не вызывается -- т.е. код в любом другом месте будет неадекватным решением.
---
При создании на сервере вызывается? - вот там получай значение и заполняй форму.
Добавь свою кнопку для записи значения в константу.
Либо в ПередЗаписью/ПослеЗаписи добавь свою процедуру для записи значения в константу.
---
ТЧ - реквизит формы можно передавать как параметр в серверную функцию без контекста, только надо написать Знач.
Если ТЧ не будет редактироваться на сервере, это решает задачу.
---
При создании на сервере вызывается? - вот там получай значение и заполняй форму.
Добавь свою кнопку для записи значения в константу.
Либо в ПередЗаписью/ПослеЗаписи добавь свою процедуру для записи значения в константу.
---
Меня смущало, что стандартная команда УФ "Обновить" вызывает только "ПриЧтенииНаСервере".

Но оказывается, в форме константы этой команды нет!
Тогда все в порядке!
---
Пытаясь реализовать предложенное, выяснил, что в ПередЗаписью/ПослеЗаписи формы константы нельзя делать контекстные серверные вызовы. А вызвать метод "Выгрузить()" табличного реквизита формы можно только там.

Можно, конечно, выгрузить ТЧ в массив структур и передать его в неконтекстный вызов как параметр (так сделал сейчас, точнее, выгрузил в просто массив, т.к. у меня (пока) только одна колонка) либо сделать собственную кнопку записи -- но это явно костыли.
---
выяснил, что в ПередЗаписью/ПослеЗаписи формы константы нельзя делать контекстные серверные вызовы.

Кто запрещает?
Замени стандартную кнопку записи на свою и делай любые вызовы.
---
Кто запрещает?
СП )
Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере, а также изменять свойства, которые могут привести к серверному вызову.
---
Действительно, спасибо)
---
создать обработку для работы с константой.
Или на форме константы использовать свою команду сохранения.
---
Да, по прикидкам, написание обработки будет ненамного более трудоемким.
Главный минус -- нельзя будет выдавать форму для работы с константой по ПоказатьЗначение() или ОткрытьФорму("Константа.<...>.ФормаКонстант").

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

модуль формы:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Перем Значение;
    // Для константы типа ХранилищеЗначения не вызывается ПриЧтенииНаСервере()
    Значение = Константы.Акр_СоставИнвентаризационнойКомиссииПоАккредитации.Распаковать();
    ЭтотОбъект.ПредседательКомиссии = Значение.ПредседательКомиссии;
    ЭтотОбъект.ЧленыКомиссии.Загрузить(Значение.ЧленыКомиссии);
    КонецПроцедуры

    &НаСервереБезКонтекста
    Процедура ПередЗаписьюНаСервере(Знач ПредседательКомиссии, Знач ЧленыКомиссии)
    Перем Значение;
    Значение = Константы.Акр_СоставИнвентаризационнойКомиссииПоАккредитации.ЗначениеПоУмолчанию();
    Значение.ПредседательКомиссии = ПредседательКомиссии;
    Значение.ЧленыКомиссии = ЧленыКомиссии.Выгрузить();

    Константы.Акр_СоставИнвентаризационнойКомиссииПоАккредитации.Упаковать(Значение);
    КонецПроцедуры

    &НаКлиенте
    Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    // Для константы типа ХранилищеЗначения не вызывается ПередЗаписьюНаСервере()
    // В ПередЗаписью нельзя делать контекстные серверные вызовы
    ПередЗаписьюНаСервере(ЭтотОбъект.ПредседательКомиссии,
    ЭтотОбъект.ЧленыКомиссии);
    КонецПроцедуры
```

модуль менеджера:

```1c
    // Распаковать в структуру
    //
    // Возвращаемое значение:
    // Структура - см. ЗначениеПоУмолчанию
    //
    Функция Распаковать() Экспорт
    Значение = Константы.Акр_СоставИнвентаризационнойКомиссииПоАккредитации.Получить().Получить();
    Если Не ЗначениеЗаполнено(Значение) Тогда
    Значение = ЗначениеПоУмолчанию();
    КонецЕсли;
    Возврат Значение;
    КонецФункции

    // Упаковать из структуры
    //
    // Параметры:
    // Значение - см. ЗначениеПоУмолчанию
    //
    Процедура Упаковать(Знач Значение) Экспорт
    Константы.Акр_СоставИнвентаризационнойКомиссииПоАккредитации.Установить(
    Новый ХранилищеЗначения(Значение));
    КонецПроцедуры

    Функция ЗначениеПоУмолчанию() Экспорт
    Перем ЧленыКомиссии;
    ЧленыКомиссии = Новый ТаблицаЗначений;
    ЧленыКомиссии.Колонки.Добавить("ЧленКомиссии",Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
    Возврат Новый Структура("ПредседательКомиссии,ЧленыКомиссии",
    Справочники.Сотрудники.ПустаяСсылка(),
    ЧленыКомиссии);
    КонецФункции
```

модуль менеджера значения:

```1c
    Процедура ПередЗаписью(Отказ)
    Перем Значение_;
    Значение_ = ЭтотОбъект.Значение.Получить();
    Образец = Константы.Акр_СоставИнвентаризационнойКомиссииПоАккредитации.ЗначениеПоУмолчанию();

    Если ТипЗнч(Значение_) <> ТипЗнч(Образец)
    Или Значение_.Количество() <> Образец.Количество()
    Или ТипЗнч(Значение_.ПредседательКомиссии) <> ТипЗнч(Образец.ПредседательКомиссии)
    Или ТипЗнч(Значение_.ЧленыКомиссии) <> ТипЗнч(Образец.ЧленыКомиссии)
    Или Не ОбщегоНазначения.КоллекцииИдентичны(Значение_.ЧленыКомиссии.Колонки, Образец.ЧленыКомиссии.Колонки, "Имя,ТипЗначения")
    Тогда
    Отказ = Истина;
    // передача неверного типа, скорее всего -- ошибка программиста, а не пользователя
    ВызватьИсключение(НСтр("ru = 'Неверный тип или структура значения'"));
    КонецЕсли;
    КонецПроцедуры
```