Как реализовать редактирование данных регистра сведений в списке в управляемых формах 1С?

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

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

Почему нельзя просто включить редактирование в Динамическом списке?

Основная причина заключается в архитектуре Динамического списка. В отличие от Табличной части или Таблицы значений, которые целиком загружаются в память формы, Динамический список является лишь «окном» в базу данных. Он подгружает записи порциями по мере прокрутки, что значительно ускоряет работу с большими объемами данных, но делает невозможным простое транзакционное редактирование «на лету».

Представьте ситуацию: вы начинаете редактировать ячейку. Система должна заблокировать запись на сервере, оповестить другие открытые сеансы и отслеживать завершение ввода. Если редактирование происходит в каждой ячейке, возникает огромная нагрузка на сервер и сеть из-за постоянных запросов на блокировку и запись объектов. Поэтому платформа 1С сознательно ограничивает прямое редактирование Динамических списков, принудительно направляя пользователя в отдельную форму записи.

Вариант 1: Использование объекта «Набор записей»

Если вам необходимо организовать редактирование данных именно в виде таблицы на форме (аналог старого режима редактирования в списке), самым эффективным решением будет использование объекта Набор записей (например, РегистрСведенийНаборЗаписей). Этот метод позволяет обойти ограничения Динамического списка.

Пошаговая реализация:

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

// Пример кода для загрузки данных в набор
НаборЗаписей = РегистрыСведений.ВашРегистр.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ВашеИзмерение.Установить(ЗначениеОтбора);
НаборЗаписей.Прочитать();
ЭтотОбъект.ВашРеквизитНабораЗаписей = НаборЗаписей;

В этом случае данные считываются в память формы целиком. Пользователь может свободно редактировать строки в Таблице, а при нажатии кнопки «Записать» вы просто выполняете НаборЗаписей.Записать(). Это работает быстро и надежно, так как вся транзакция происходит в один момент.

Вариант 2: Использование Таблицы значений

Если данные регистра не являются критически объемными, можно реализовать классическую схему «обработки»:

  1. Создайте на форме Таблицу значений с колонками, повторяющими структуру вашего регистра.
  2. Заполните ее данными с помощью запроса при открытии формы. При необходимости разово загрузить сведения из внешней базы выполняется перенос данных между похожими конфигурациями 1С с сопоставлением объектов по произвольным полям поиска.
  3. Предоставьте пользователю возможность редактировать строки таблицы непосредственно на экране. Для автоматизации массового ввода или переноса данных между окнами используется платформа для создания программных роботов с визуальным конструктором сценариев.
  4. При закрытии или сохранении формы выполните программное преобразование Таблицы значений в Набор записей регистра и запишите его в базу данных.

Этот подход дает вам полный контроль над тем, когда и как данные попадают в базу. Вы можете реализовать сложные проверки ПередЗаписью или ПриЗаписи, не полагаясь на стандартные формы объектов.

Подведем итог

Итак, если вам нужно редактирование «в списке» в управляемом приложении, помните о следующих правилах:

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

← На главную