Как включить перетаскивание строк в табличной части документа в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При активной работе с многострочными документами в программах «1С:Предприятие 8.3» (например, в конфигурации «1С:Управление торговлей») пользователям нередко требуется вручную упорядочить строки — расположить номенклатурные позиции в определенной последовательности. Самым привычным и удобным способом для многих является обычное перетаскивание строк мышью (механизм Drag-and-Drop). Однако в типовых решениях по умолчанию эта возможность для табличных частей часто отключена.

Разберем, почему эту настройку нельзя просто включить в пользовательском режиме через стандартные настройки формы, какие свойства элемента формы отвечают за перемещение строк и как правильно реализовать эту возможность без снятия типовой конфигурации с поддержки.

Почему перетаскивание не работает «из коробки»

По умолчанию в большинстве документов прикладных конфигураций интерактивное перетаскивание строк заблокировано. Выясним основные причины, которыми руководствуются разработчики типовых решений:

  1. Защита от случайных действий. Во время быстрого ввода данных или прокрутки таблицы пользователь может случайно зажать клавишу мыши и сместить строку, даже не заметив этого. Отключение свободного перетаскивания снижает риск непреднамеренных ошибок.
  2. Особенности бизнес-логики. В таких решениях, как «Управление торговлей» или ERP, порядок строк может влиять на проведение, распределение автоматических скидок, резервирование или списание партий, либо быть строго привязан к определенным группам строк.
  3. Ограничения веб-клиента. В веб-интерфейсе события захвата и перемещения элементов могут обрабатываться с задержками или специфическими нюансами браузеров, поэтому приоритет отдается стандартным кнопкам командной панели.

Из пользовательского режима (режима «1С:Предприятие») включить данный функционал невозможно — в штатном окне «Изменить форму» соответствующие флаги управления перетаскиванием отсутствуют. Настройка выполняется исключительно на уровне разработчика: в конфигураторе либо программно в коде формы.

Ключевые свойства таблицы формы для Drag-and-Drop

Для того чтобы табличная часть документа поддерживала полноценное перетаскивание строк внутри себя, необходимо настроить несколько взаимосвязанных свойств элемента формы:

  1. РазрешитьНачалоПеретаскивания — определяет, может ли пользователь захватить строку текущей таблицы для последующего перемещения. Устанавливается в значение Истина.
  2. РазрешитьПеретаскивание — определяет, может ли данная таблица выступать приемником перетаскиваемых данных. Устанавливается в значение Истина.
  3. ИзменятьПорядокСтрок — обязательное свойство, разрешающее интерактивное изменение очередности элементов в коллекции. Если этот флаг не установлен в Истина, перетаскивание внутри одной и той же таблицы работать не будет, даже если оба флага перетаскивания включены.

Способ 1. Визуальная настройка через расширение конфигурации

Чтобы не снимать документ и конфигурацию с поддержки и не создавать сложностей при последующих обновлениях, решим задачу с помощью механизма расширений. Разберем порядок действий по шагам:

  1. Откроем конфигуратор и перейдем в меню Конфигурация — Расширения конфигурации. При необходимости создадим новое расширение или выберем существующее.
  2. Найдем в основной конфигурации нужный документ и добавим его форму в расширение (контекстное меню формы — Добавить в расширение).
  3. В редакторе управляемой формы выделим элемент, представляющий собой табличную часть (например, Товары).
  4. В палитре свойств элемента найдем раздел, управляющий поведением таблицы, и установим флаги: Разрешить начало перетаскивания, Разрешить перетаскивание и Изменять порядок строк.
  5. Сохраним и применим изменения.

Способ 2. Программное включение свойств формы

Включить возможность перемещения строк можно и программно. Этот подход также отлично подходит для использования в расширениях — например, в обработчике ПриСозданииНаСервере формы документа. Проанализируем пример кода:


&Вместо("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ПродолжитьВызов(Отказ, СтандартнаяОбработка);
    
    // Получаем элемент формы, представляющий табличную часть
    ЭлементТаблицы = Элементы.Товары;
    
    // Включаем необходимые свойства для механизма Drag-and-Drop
    ЭлементТаблицы.РазрешитьНачалоПеретаскивания = Истина;
    ЭлементТаблицы.РазрешитьПеретаскивание        = Истина;
    ЭлементТаблицы.ИзменятьПорядокСтрок          = Истина;
КонецПроцедуры

После применения данного кода табличная часть начнет откликаться на захват строк курсором мыши, и пользователи смогут упорядочивать список так, как им удобно.

Важные нюансы и возможные проблемы при перетаскивании

Рассмотрим ситуации, при которых перетаскивание строк может не срабатывать даже после выставления всех описанных свойств:

  1. Установленная сортировка колонок. Если пользователь щелкнул по заголовку любой колонки (например, «Цена» или «Номенклатура»), таблица переходит в режим отображения с сортировкой. В этом состоянии платформа 1С автоматически блокирует интерактивное изменение порядка строк. Для восстановления работы перетаскивания необходимо сбросить пользовательскую сортировку через контекстное меню (пункт «Еще — Отключить сортировку»).
  2. Режим «Только просмотр». Если документ уже проведен, закрыт от редактирования правами доступа или сама таблица переведена в режим ТолькоПросмотр = Истина, перетаскивание строк будет недоступно.
  3. События перетаскивания с переопределенной логикой. Если в модуле формы назначены процедуры НачалоПеретаскивания, ПроверкаПеретаскивания или Перетаскивание, обратите внимание на параметр СтандартнаяОбработка. Если где-то в коде задано СтандартнаяОбработка = Ложь, платформенный алгоритм сдвига строк выполняться не будет.

Альтернативные способы изменения порядка строк

Если по каким-либо причинам перетаскивание мышью включать нежелательно, напомним пользователям о стандартных альтернативах платформы 1С:

  1. Кнопки командной панели. В свойствах командной панели таблицы можно вывести стандартные команды «Переместить вверх» и «Переместить вниз».
  2. Горячие клавиши. Перемещение активной строки вверх или вниз быстро выполняется с помощью стандартных сочетаний клавиш Ctrl + Shift + Стрелка вверх и Ctrl + Shift + Стрелка вниз.
  3. Программное перемещение через метод «Сдвинуть». Если порядок строк нужно изменить программно в ответ на определенные действия, используем встроенный метод коллекции табличной части:

// Сдвигаем текущую строку таблицы вверх на одну позицию
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
Если ТекущаяСтрока <> Неопределено Тогда
    Объект.Товары.Сдвинуть(ТекущаяСтрока, -1);
КонецЕсли;

Таким образом, для включения перетаскивания строк мышью достаточно активировать свойства РазрешитьНачалоПеретаскивания, РазрешитьПеретаскивание и ИзменятьПорядокСтрок у элемента таблицы через конфигуратор или расширение, не забывая о контроле сортировок в режиме «1С:Предприятие».

← На главную