Каталог решений - Программное перемещение колонки динамического списка

Программное перемещение колонки динамического списка

Программное перемещение колонки динамического списка

В наличии

Базовый алгоритм прост — на клиенте определяем, у кого (пользователя и форму) и что (имя колонки) двигать; на сервере получаем настройки, разбираем их, формируем новое значение порядка колонок, заменяем «новое» на «старое», собираем настройки; на сервере без контекста сохраняем настройки; на сервере обновляем реквизиты формы.

Категория:

Описание

Есть несколько мест, на которых необходимо обратить внимание:

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"}
}
}
}

 

Готовим "виртуальный обновленный порядок" и сверяем с порядком по умолчанию. Для построения списка изменений применяется следующая эвристика:

"если индекс поля не соответствует позиции по умолчанию, то поле заносится в список перемещенных колонок".

Пример реализации в приложенной обработке.

has been added to your cart:
Оформление заказа