Есть несколько мест, на которых необходимо обратить внимание:
1. Алгоритм опирается на нерекомендуемую ИТС функцию "ЗначениеВСтрокуВнутр";
2. Работоспособность зависит от начальных действий - необходимо "для начала" руками изменить настройки формы;
3. В самом общем случае - когда используются пользовательские поля и синонимы - шаг "разбираем их" существенно усложняется;
4. Если имена колонок содержат "." или "_", шаг "разбираем их" усложняется еще больше.
&НаКлиенте
Процедура СдвинутьКолонку(Команда)
ТекущаяКолонка = ЭтаФорма.ТекущийЭлемент.ТекущийЭлемент.Имя;
КлючОбъекта = ЭтотОбъект.ИмяФормы + "/НастройкиФормы";
Пользователь = Строка(ПользователиКлиент.ТекущийПользователь());
СдвинутьКолонкуНаСервере(ТекущаяКолонка, КлючОбъекта, Пользователь);
КонецПроцедуры
&НаСервере
Процедура СдвинутьКолонкуНаСервере(Знач ТекущаяКолонка, Знач КлючОбъекта, Знач Пользователь)
НастройкиФормы = ПолучитьНастройкиФормы(КлючОбъекта, Пользователь);
Если НастройкиФормы = "" Тогда
ОбщегоНазначения.СообщитьПользователю("Перед началом иллюстрации работы механизма необходимо
|зайти в настройки формы и передвинуть одну из колонок.");
Возврат;
КонецЕсли;
ОригинальнаяСекцияПорядкаКолонок = СекцияПорядкаПолей(НастройкиФормы);
СтараяСекцияИзменений = ЭлементыСекцииПорядкаПолей(ОригинальнаяСекцияПорядкаКолонок)[8];
НоваяСекцияИзменений = ПереместитьКолонку(ОригинальнаяСекцияПорядкаКолонок, ТекущаяКолонка, -1);
НовыеНастройкиФормы = СтрЗаменить(НастройкиФормы, СтараяСекцияИзменений, НоваяСекцияИзменений);
СохранитьНастройкиФормы(КлючОбъекта, Пользователь, НовыеНастройкиФормы);
ИзменитьРеквизиты();
КонецПроцедуры
Разложим текущие настройки формы в строку "скобочного формата". Порядок колонок динамического списка хранится в последней секций описания. (Еще раз - описываем простой случай).
Описание порядка делится на две части - "изменения" и "порядок по умолчанию". Секция изменений содержит пары "имя поля + новое положение".
{"Список",
{
{0,0,1,1,
{1,0},
{1,0},0,1,0,0,60,0,1,0,0,2,0,0,1,0,
{0}
},
{
{3,"ОбъектУчета",1,"Поле6",7,"Поле8",9},
{11,"Картинка","ОбъектУчета","Поле1","Поле2","Поле3","Поле4","Поле5","Поле6","Поле7","Поле8","Поле9"}
}
}
}
Готовим "виртуальный обновленный порядок" и сверяем с порядком по умолчанию. Для построения списка изменений применяется следующая эвристика:
"если индекс поля не соответствует позиции по умолчанию, то поле заносится в список перемещенных колонок".
Пример реализации в приложенной обработке.
Проверено на следующих конфигурациях и релизах:
- 1С:Зарплата и кадры бюджетного учреждения, релизы 1.0.121.2
Вступайте в нашу телеграмм-группу Инфостарт