Прошу совета у людей с опытом. Как МЕТОДИЧЕСКИ правильно реализовать следующую задачу?

Имеется 8.2, тонкий клиент, самописная конфигурация

1. Есть справочник "Задания"

2. В нём есть поле "Канал" типа "СправочникСсылка.КаналыРаспространения" и некоторые другие поля, назовём их "Поле1" и "Поле2"

3. В самом справочнике "КаналыРаспространения" есть значения по умолчанию для полей "Поле1" и "Поле2". Имена этих полей совпадают.

ТРЕБУЕТСЯ "как в лучших домах" реализовать 4 вещи:

1. При вводе НОВОГО элемента в справочник "Задания" в поле "Канал" подставляется значение канала, ИНДИВИДУАЛЬНОЕ для каждого пользователя. Потом он может его поменять, а может и нет. Пойдёт ли тут сохранение данных в настройках или обязательно нужно создать справочник пользователей и прописать индивидуальные настройки туда? И где они будут храниться в первом случае - в базе или на клиентской машине?

2. Если поле "Канал" не пустое, то значения полей "Поле1" и "Поле2" в справочник "Задания" подставляются из справочника "КаналыРаспространения". Как тут лучше сделать - через форму или через объект или всё равно?

3. Если в форме нового элемента или даже при повторном открытии уже СОХРАНЁННОГО элемента пользователь выбирает другой канал, то значения полей "Поле1" и "Поле2" в справочник "Задания" подставляются из справочника "КаналыРаспространения" для вновь выбранного канала.

4. Если элемент справочника "Задания" сохраняется, то происходит наоборот - значения полей "Поле1" и "Поле2" из формы элемента справочника "Задания" прописываются в справочник "КаналыРаспространения". Надеюсь, можно при сохранении элемента одного справочника прописать что-то в другой?
---
Разобрался -ПриУстановкеНовогоКода() работает не при создании элемента, а при его записи.

Без кода делаю так:

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    Если Объект.Ссылка.Пустая() Тогда
    // форма нового элемента
    НаСервере.ВосстановитьТВ_КаналВместеСПараметрамиССервера(Объект.Канал, Объект.Поле1, Объект.Поле2);
    КонецЕсли;
    КонецПроцедуры
```

Я прав или надо как-то по-другому?
---
Для полноты картины серверный модуль "НаСервере". Может, кому пригодится

```1c
    &НаСервере
    Процедура ВосстановитьПараметрыКаналаССервера(Канал, Поле1, Поле2) Экспорт

    Если ЗначениеЗаполнено(Канал.Поле1) Тогда
    Поле1=Канал.Поле1;
    КонецЕсли;

    Если ЗначениеЗаполнено(Канал.Поле2) Тогда
    Поле2=Канал.Поле2;
    КонецЕсли;

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

    &НаСервере
    Процедура СохранитьПараметрыКаналаНаСервере(Канал, Поле1, Поле2) Экспорт
    ласОбъектСправочникаКанал=Канал.ПолучитьОбъект();

    ласОбъектСправочникаКанал.Поле1=Поле1;
    ласОбъектСправочникаКанал.Поле2=Поле2;

    ласОбъектСправочникаКанал.Записать();
    КонецПроцедуры

    &НаСервере
    Процедура ВосстановитьКаналВместеСПараметрамиССервера(Канал, Поле1, Поле2) Экспорт

    Канал=Константы.КаналПоУмолчанию.Получить();

    Если Канал.Пустая() Тогда
    Возврат;
    КонецЕсли;

    ВосстановитьПараметрыКаналаССервера(Канал, Поле1, Поле2);
    КонецПроцедуры
```
---
1. Справочник пользователя и индивидуальные настройки
2. Если планируется добавление только интерактивно, то форма. Да и идеалогически вернее
3. Связанные поля или событие формы при изменение
4. Можно.
---
1. Справочник пользователя и индивидуальные настройки

В смысле: хочу - могу через справочник, а хочу - могу через настройки? А что идеологически правильнее? И, если у меня будут настройки, а Иванов сядет на рабочее место Петрова (под своим именем "Иванов"), не "полетят" ли настройки при этом?

2. Если планируется добавление только интерактивно, то форма. Да и идеалогически вернее

Форма элемента? А событие какое - ПриОткрытии()? И как отловить НОВЫЙ элемент?

3. Связанные поля или событие формы при изменение

То есть событие ПриИзменении() реквизита "Канал" в форме элемента справочника "Задания"?

```1c
    &НаКлиенте
    Процедура КаналПриИзменении(Элемент)
    НаСервере.ВосстановитьПараметры_КаналаССервера(Канал, Поле1, Поле2);
    КонецПроцедуры

    // серверный модуль "НаСервере"
    &НаСервере
    Процедура ВосстановитьПараметры_КаналаССервера(Канал, Поле1, Поле2) Экспорт
    Поле1=Канал.Поле1;
    Поле2=Канал.Поле2;
    КонецПроцедуры
```

А что правильнее передавать в серверную процедуру, устанавливающие реквизиты:
- реквизиты "Канал", "Поле1", "Поле2" ФОРМЫ?
- реквизиты "Канал", "Поле1", "Поле2" ОБЪЕКТА?
- всю форму?
- весь объект?
- или надо как-то по-другому?

А через связанные поля как?

4. Можно.

Код сохранения умолчанки нужно вставлять в обработчик события ПриЗаписи() в форме элемента? Иди куда?
---
все уже ответил
---
Запоминаем, где остановились, в разрезе канала. В следующий раз пойдём дальше с этого места. Заданий по каналу может быть несколько, их могут вводить разные люди. Надо, чтобы они не запутались.
---
1. Справочник пользователя, в котором будут хранится настройки. В событии "При установке нового кода" запрос к справочнику с передачей текущего пользователя, получаем настройки и заполняем поля. Соответственно от рабочего места не зависит, только от текущего пользователя
2. Все правильно . Поле Канал формы. Через связанные поля не помню, и не уверен, что на УФ можно
4. При записи, все правильно
---
В событии "При установке нового кода"

А где это событие такое? У меня для формы элемента такого нет.

Зато есть "При создании на сервере" - оно пойдёт?
---
Нет, в модуле объекта. При создании на сервере - оно в контексте формы. Каждый раз будет вызываться при открытии формы справочника
---
Большое спасибо!

Ещё вопрос. В форме элемента в процедуре

```1c
    &НаКлиенте
    Процедура КаналПриИзменении(Элемент)
    НаСервере.ВосстановитьПараметры_КаналаССервера(Канал, Поле1, Поле2);
    КонецПроцедуры
```

у меня ругается на имена реквизитов

Переменная не определена (Канал)
Переменная не определена (Поле1)
Переменная не определена (Поле2)

Что ПРАВИЛЬНЕЕ подставить перед "Канал", "Поле1", "Поле2" :
- Объект?
- ЭтаФорма?
- ЭлементыФормы?
- что-то другое?

Или надо передавать в процедуру на сервер всю форму или весь объект или все варианты неправильные и надо как-то по-другому?
---
У меня ПриУстановкеНовогоКода() не отрабатывает :(. Код есть, признак автонумерации есть, код числовой, что ещё нужно?

И, кстати, как поступить, если в справочнике *НЕТ* кода?
---
Разобрался -ПриУстановкеНовогоКода() работает не при создании элемента, а при его записи.

Без кода делаю так:

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    Если Объект.Ссылка.Пустая() Тогда
    // форма нового элемента
    НаСервере.ВосстановитьТВ_КаналВместеСПараметрамиССервера(Объект.Канал, Объект.Поле1, Объект.Поле2);
    КонецЕсли;
    КонецПроцедуры
```

Я прав или надо как-то по-другому?
---
Для полноты картины серверный модуль "НаСервере". Может, кому пригодится

```1c
    &НаСервере
    Процедура ВосстановитьПараметрыКаналаССервера(Канал, Поле1, Поле2) Экспорт

    Если ЗначениеЗаполнено(Канал.Поле1) Тогда
    Поле1=Канал.Поле1;
    КонецЕсли;

    Если ЗначениеЗаполнено(Канал.Поле2) Тогда
    Поле2=Канал.Поле2;
    КонецЕсли;

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

    &НаСервере
    Процедура СохранитьПараметрыКаналаНаСервере(Канал, Поле1, Поле2) Экспорт
    ласОбъектСправочникаКанал=Канал.ПолучитьОбъект();

    ласОбъектСправочникаКанал.Поле1=Поле1;
    ласОбъектСправочникаКанал.Поле2=Поле2;

    ласОбъектСправочникаКанал.Записать();
    КонецПроцедуры

    &НаСервере
    Процедура ВосстановитьКаналВместеСПараметрамиССервера(Канал, Поле1, Поле2) Экспорт

    Канал=Константы.КаналПоУмолчанию.Получить();

    Если Канал.Пустая() Тогда
    Возврат;
    КонецЕсли;

    ВосстановитьПараметрыКаналаССервера(Канал, Поле1, Поле2);
    КонецПроцедуры
```
---
ЭлементыФормы.
Прав, да, я забыл, что код устанавливается только при записи
---
ЭлементыФормы

У меня на "ЭлементыФормы" ругается, сделал через "Объект"