1С 8.3 Перемещение строк Таблицы значений на Клиенте
Данные > Примеры кода 1С > 1С 8.3 Таблица значений
Перейти в раздел примеры кода 1С 8.3:
Автор: Lega. Ссылка: https://fastcode.im
Програмное перемещение строк ДанныхФормКоллекции(Таблица значений) на Клиенте в 1С 8.3:
// Вместо ТаблицаСоСпискомСтрок подставьте свою таблицу, с колонкой ПорядковыйНомер
&НаКлиенте
Процедура ПереместитьСтрокуВверх(Команда)
ПереместитьСтроку(-1);
КонецПроцедуры
&НаКлиенте
Процедура ПереместитьСтрокуВниз(Команда)
ПереместитьСтроку(1);
КонецПроцедуры
&НаКлиенте
Процедура ПереместитьСтроку(ГраницаСмещения)
ТекущиеДанные = Элементы.ТаблицаСоСпискомСтрок.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущийПорядок = ТекущиеДанные.ПорядковыйНомер;
НовыйПорядок = ТекущийПорядок + ГраницаСмещения;
ОбновитьВсеСтроки = Истина;
Если НовыйПорядок < 1 Тогда
НовыйПорядок = ТаблицаСоСпискомСтрок.Количество();
ИначеЕсли НовыйПорядок > ТаблицаСоСпискомСтрок.Количество() Тогда
НовыйПорядок = 1;
Иначе
ОбновитьВсеСтроки = Ложь;
КонецЕсли;
ТекущийИндекс = ТекущийПорядок - 1;
НовыйИндекс = НовыйПорядок - 1;
Если ТекущийПорядок <> НовыйПорядок Тогда
ДельтаСмещения = НовыйИндекс - ТекущийИндекс;
ТаблицаСоСпискомСтрок.Сдвинуть(ТекущийИндекс, ДельтаСмещения);
ПеремещаемаяСтрока = ТаблицаСоСпискомСтрок.Получить(НовыйИндекс);
ПеремещаемаяСтрока.ПорядковыйНомер = НовыйПорядок;
ЗамещаемаяСтрока = ТаблицаСоСпискомСтрок.Получить(ТекущийИндекс);
ЗамещаемаяСтрока.ПорядковыйНомер = ТекущийПорядок;
КонецЕсли;
Если ОбновитьВсеСтроки Тогда
ОбновитьПорядокВсехСтрок();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПорядокВсехСтрок()
Для Каждого СтрокаСписка Из ТаблицаСоСпискомСтрок Цикл
СтрокаСписка.ПорядковыйНомер = ТаблицаСоСпискомСтрок.Индекс(СтрокаСписка) + 1;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПереместитьСтрокуВверх(Команда)
ПереместитьСтроку(-1);
КонецПроцедуры
&НаКлиенте
Процедура ПереместитьСтрокуВниз(Команда)
ПереместитьСтроку(1);
КонецПроцедуры
&НаКлиенте
Процедура ПереместитьСтроку(ГраницаСмещения)
ТекущиеДанные = Элементы.ТаблицаСоСпискомСтрок.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущийПорядок = ТекущиеДанные.ПорядковыйНомер;
НовыйПорядок = ТекущийПорядок + ГраницаСмещения;
ОбновитьВсеСтроки = Истина;
Если НовыйПорядок < 1 Тогда
НовыйПорядок = ТаблицаСоСпискомСтрок.Количество();
ИначеЕсли НовыйПорядок > ТаблицаСоСпискомСтрок.Количество() Тогда
НовыйПорядок = 1;
Иначе
ОбновитьВсеСтроки = Ложь;
КонецЕсли;
ТекущийИндекс = ТекущийПорядок - 1;
НовыйИндекс = НовыйПорядок - 1;
Если ТекущийПорядок <> НовыйПорядок Тогда
ДельтаСмещения = НовыйИндекс - ТекущийИндекс;
ТаблицаСоСпискомСтрок.Сдвинуть(ТекущийИндекс, ДельтаСмещения);
ПеремещаемаяСтрока = ТаблицаСоСпискомСтрок.Получить(НовыйИндекс);
ПеремещаемаяСтрока.ПорядковыйНомер = НовыйПорядок;
ЗамещаемаяСтрока = ТаблицаСоСпискомСтрок.Получить(ТекущийИндекс);
ЗамещаемаяСтрока.ПорядковыйНомер = ТекущийПорядок;
КонецЕсли;
Если ОбновитьВсеСтроки Тогда
ОбновитьПорядокВсехСтрок();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПорядокВсехСтрок()
Для Каждого СтрокаСписка Из ТаблицаСоСпискомСтрок Цикл
СтрокаСписка.ПорядковыйНомер = ТаблицаСоСпискомСтрок.Индекс(СтрокаСписка) + 1;
КонецЦикла;
КонецПроцедуры
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник