Как создать управляемую форму для редактирования записей регистра сведений в табличном виде?

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

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

Реализация через Табличный документ

Одним из наиболее гибких методов для создания матричного представления данных является использование ТабличныйДокумент. Этот подход позволяет создавать структуры, похожие на шахматку или специализированные таблицы. Разберем шаги реализации:

  1. Разместите на форме элемент ТабличныйДокумент.
  2. Для ячеек таблицы необходимо настроить Расшифровка, в которой будет храниться структура с ключевыми измерениями регистра. Это позволит системе «понимать», какой именно записи регистра соответствует выбранная ячейка.
  3. Используйте обработчик события Выбор или ОбработкаРасшифровки элемента ТабличныйДокумент.
  4. Внутри обработчика проверяйте координаты ячейки. Если она находится в области редактирования, получите данные из Расшифровка.
  5. Вызовите серверную процедуру, которая выполнит чтение или запись данных в регистр сведений, используя метод Записать для набора записей.

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


// Пример логики серверной процедуры записи
Процедура ЗаписатьДанныеВРегистр(КлючиИзмерений, НовоеЗначение)
    НаборЗаписей = РегистрыСведений.ВашРегистр.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Измерение1.Установить(КлючиИзмерений.Измерение1);
    НаборЗаписей.Прочитать();
    
    Если НаборЗаписей.Количество() > 0 Тогда
        НаборЗаписей[0].Ресурс = НовоеЗначение;
    Иначе
        НоваяЗапись = НаборЗаписей.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяЗапись, КлючиИзмерений);
        НоваяЗапись.Ресурс = НовоеЗначение;
    КонецЕсли;
    
    НаборЗаписей.Записать();
    ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.ВашРегистр"));
КонецПроцедуры

Использование комбинации Динамического списка и таблицы

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

Сверху формы размещается ДинамическийСписок, источником данных которого является целевой регистр сведений. Снизу располагаются поля ввода для редактирования текущей строки.

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

Рекомендации по безопасности и производительности

При программной работе с данными помните о следующих нюансах:

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

← На главную