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