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