Вопрос о возможности «прямого» редактирования данных (как в электронных таблицах или в старых версиях платформы) в динамическом списке является одним из самых частых среди разработчиков на управляемых формах. Давайте подробно разберем, почему эта задача не решается «в лоб» и какие архитектурные подходы предлагают специалисты для достижения нужного пользователям функционала.
Прежде всего, важно уяснить архитектурное ограничение платформы. Динамический список в 1С спроектирован для работы с огромными объемами данных — сотнями тысяч или миллионами записей. Чтобы обеспечить высокую скорость работы, список не загружает все данные в оперативную память, а подгружает их порционно по мере прокрутки.
Редактирование «на месте» требует совершенно иного механизма работы с данными:
Динамический список по своей природе не обеспечивает, так как он ориентирован на отображение выборки, а не на манипуляцию объектами данных.Поэтому на текущий момент штатного режима редактирования ячеек прямо в Динамическом списке в платформе не существует.
Если задача заключается в массовом изменении значений (например, проставить «галочку» у группы элементов), не обязательно создавать велосипед. Рассмотрим опыт типовых конфигураций, таких как Управление торговлей.
В типовых решениях используется встроенная обработка Изменить выделенные. Мы можем реализовать аналогичный механизм для своих справочников:
Элементы.Список.ВыделенныеСтроки.Если пользователю критически важно видеть «сетку» данных и быстро менять значения, наиболее профессиональным подходом будет отказ от использования Динамического списка в качестве инструмента редактирования. Рассмотрим создание собственной формы с Таблицей значений:
Вместо динамического вывода мы используем полноценную таблицу, которая поддерживает интерактивное редактирование ячеек. Чтобы не перегружать систему при работе с 100 000+ элементов, реализуем:
Рассмотрим пример логики при записи данных из такой формы:
// Пример обработки изменения реквизита в собственной форме
&НаКлиенте
Процедура ТаблицаДанныхПриИзменении(Элемент)
ТекущиеДанные = Элементы.ТаблицаДанных.ТекущиеДанные;
ОбъектСсылка = ТекущиеДанные.Ссылка;
НовоеЗначение = ТекущиеДанные.НужныйРеквизит;
ЗаписатьИзменениеНаСервере(ОбъектСсылка, НовоеЗначение);
КонецПроцедуры
&НаСервере
Процедура ЗаписатьИзменениеНаСервере(Ссылка, Значение)
Объект = Ссылка.ПолучитьОбъект();
Объект.НужныйРеквизит = Значение;
Объект.Записать();
КонецПроцедуры
Если вас пугает открытие тяжелой формы элемента, разберем подход с созданием «быстрых» форм. Вы можете создать простую форму с ограниченным набором полей, которые нужно редактировать.
Такую форму можно вызывать в режиме РежимОткрытияОкнаФормы.БлокироватьОкноВладельца. Это позволит пользователю быстро вносить изменения, не перегружая интерфейс лишними элементами управления, и при этом оставаться в рамках стандартного объектного подхода 1С, что гарантирует соблюдение прав доступа и выполнение всех проверок при записи.
Проанализировав ситуацию, мы пришли к выводу, что попытки внедрить прямое редактирование в Динамический список противоречат архитектуре платформы. Для решения вашей задачи мы рекомендуем выбрать один из путей:
Изменить выделенные.Таблицей значений, где данные будут подгружаться порционно.Такой подход позволит сохранить производительность системы на больших справочниках и обеспечить удобство для конечного пользователя.