При активной работе с многострочными документами в программах «1С:Предприятие 8.3» (например, в конфигурации «1С:Управление торговлей») пользователям нередко требуется вручную упорядочить строки — расположить номенклатурные позиции в определенной последовательности. Самым привычным и удобным способом для многих является обычное перетаскивание строк мышью (механизм Drag-and-Drop). Однако в типовых решениях по умолчанию эта возможность для табличных частей часто отключена.
Разберем, почему эту настройку нельзя просто включить в пользовательском режиме через стандартные настройки формы, какие свойства элемента формы отвечают за перемещение строк и как правильно реализовать эту возможность без снятия типовой конфигурации с поддержки.
По умолчанию в большинстве документов прикладных конфигураций интерактивное перетаскивание строк заблокировано. Выясним основные причины, которыми руководствуются разработчики типовых решений:
Из пользовательского режима (режима «1С:Предприятие») включить данный функционал невозможно — в штатном окне «Изменить форму» соответствующие флаги управления перетаскиванием отсутствуют. Настройка выполняется исключительно на уровне разработчика: в конфигураторе либо программно в коде формы.
Для того чтобы табличная часть документа поддерживала полноценное перетаскивание строк внутри себя, необходимо настроить несколько взаимосвязанных свойств элемента формы:
РазрешитьНачалоПеретаскивания — определяет, может ли пользователь захватить строку текущей таблицы для последующего перемещения. Устанавливается в значение Истина.РазрешитьПеретаскивание — определяет, может ли данная таблица выступать приемником перетаскиваемых данных. Устанавливается в значение Истина.ИзменятьПорядокСтрок — обязательное свойство, разрешающее интерактивное изменение очередности элементов в коллекции. Если этот флаг не установлен в Истина, перетаскивание внутри одной и той же таблицы работать не будет, даже если оба флага перетаскивания включены.Чтобы не снимать документ и конфигурацию с поддержки и не создавать сложностей при последующих обновлениях, решим задачу с помощью механизма расширений. Разберем порядок действий по шагам:
Товары).Включить возможность перемещения строк можно и программно. Этот подход также отлично подходит для использования в расширениях — например, в обработчике ПриСозданииНаСервере формы документа. Проанализируем пример кода:
&Вместо("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПродолжитьВызов(Отказ, СтандартнаяОбработка);
// Получаем элемент формы, представляющий табличную часть
ЭлементТаблицы = Элементы.Товары;
// Включаем необходимые свойства для механизма Drag-and-Drop
ЭлементТаблицы.РазрешитьНачалоПеретаскивания = Истина;
ЭлементТаблицы.РазрешитьПеретаскивание = Истина;
ЭлементТаблицы.ИзменятьПорядокСтрок = Истина;
КонецПроцедуры
После применения данного кода табличная часть начнет откликаться на захват строк курсором мыши, и пользователи смогут упорядочивать список так, как им удобно.
Рассмотрим ситуации, при которых перетаскивание строк может не срабатывать даже после выставления всех описанных свойств:
ТолькоПросмотр = Истина, перетаскивание строк будет недоступно.НачалоПеретаскивания, ПроверкаПеретаскивания или Перетаскивание, обратите внимание на параметр СтандартнаяОбработка. Если где-то в коде задано СтандартнаяОбработка = Ложь, платформенный алгоритм сдвига строк выполняться не будет.Если по каким-либо причинам перетаскивание мышью включать нежелательно, напомним пользователям о стандартных альтернативах платформы 1С:
Ctrl + Shift + Стрелка вверх и Ctrl + Shift + Стрелка вниз.
// Сдвигаем текущую строку таблицы вверх на одну позицию
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
Если ТекущаяСтрока <> Неопределено Тогда
Объект.Товары.Сдвинуть(ТекущаяСтрока, -1);
КонецЕсли;
Таким образом, для включения перетаскивания строк мышью достаточно активировать свойства РазрешитьНачалоПеретаскивания, РазрешитьПеретаскивание и ИзменятьПорядокСтрок у элемента таблицы через конфигуратор или расширение, не забывая о контроле сортировок в режиме «1С:Предприятие».