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

Программист 1С v8.3 (Обычные формы)
← На главную

При работе с конфигурациями на обычных формах (например, 1С:Управление производственным предприятием 1.3) разработчики часто сталкиваются с тем, что стандартное поведение платформы при добавлении новой строки в таблицу не всегда удобно для пользователя. Часто при нажатии на кнопку «Добавить» (синий плюс) система вместо создания пустой строки сразу открывает форму выбора справочника. Это замедляет ввод данных, особенно если пользователю нужно быстро заполнить несколько строк подряд. В этой статье мы подробно рассмотрим, как настроить табличное поле так, чтобы данные вводились непосредственно в строке.

Разбор основной причины: настройка режима редактирования

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

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

Чтобы изменить эту настройку, нам необходимо зайти в конфигуратор, открыть нужную форму, выделить элемент ТабличноеПоле и в палитре свойств найти пункт «Режим редактирования». Установка значения «В списке» чаще всего решает проблему мгновенного всплытия окна выбора.

Тонкая настройка: свойства «Быстрый выбор» и «Ввод по строке»

Иногда простого изменения режима редактирования недостаточно. Рассмотрим ситуацию подробнее: если колонка таблицы ссылается на справочник, 1С пытается помочь пользователю найти нужный элемент. Чтобы ввод в строке стал по-настоящему комфортным, проанализируем настройки самих объектов метаданных (справочников).

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

  1. Ввод по строке: в настройках справочника на вкладке «Данные» должны быть указаны поля, по которым осуществляется поиск (например, Наименование или Код). Если эти поля не заданы, 1С «не знает», как искать текст, введенный пользователем, и вынуждена открывать форму списка.
  2. Быстрый выбор (QuickChoice): это свойство можно установить как в самом справочнике, так и для конкретного элемента управления на форме. Если БыстрыйВыбор установлен в значение Да, то вместо полноэкранной формы выбора будет открываться компактный выпадающий список.

Устранение автоматического открытия формы при активации ячейки

Выясним причину, по которой форма может открываться сама собой, даже без нажатия кнопок. За это отвечает свойство РежимВыбораНезаполненного (ChoiceModeOfUnfilled). Посмотрим, какие значения оно может принимать:

Если у колонки или поля ввода установлено значение «При активизации», то, как только пользователь перейдет в пустую ячейку (например, клавишей Enter или Tab после создания строки), система мгновенно выбросит окно выбора. Чтобы этого избежать, мы должны убедиться, что установлено значение «Обычный». В этом случае форма выбора откроется только после нажатия на кнопку выбора (три точки) или специальную горячую клавишу.

Программное управление процессом добавления строки

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

Проанализируем пример кода, который позволяет программно добавить строку и запретить стандартную обработку, вызывающую форму выбора:


Процедура ТабличнаяЧастьПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
    // Отменяем стандартное добавление, которое может тянуть за собой форму
    Отказ = Истина;
    
    // Добавляем строку вручную в объект (например, в документ или справочник)
    НоваяСтрока = ЭтотОбъект.ИмяТабличнойЧасти.Добавить();
    
    // Устанавливаем текущую строку в элементе формы
    ЭлементыФормы.ИмяТабличногоПоля.ТекущаяСтрока = НоваяСтрока;
    
    // Передаем фокус в нужную колонку для начала ввода
    ЭлементыФормы.ИмяТабличногоПоля.ТекущаяКолонка = ЭлементыФормы.ИмяТабличногоПоля.Колонки.ИмяНужнойКолонки;
КонецПроцедуры

Также важно рассмотреть событие ПриНачалеРедактирования. Здесь мы можем явно указать платформе, нужно ли открывать форму выбора для конкретной ячейки:


Процедура ТабличнаяЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    // Если это новая строка, мы можем программно запретить открытие диалогов
    СтандартнаяОбработка = Ложь;
    // Теперь фокус останется в ячейке, и пользователь сможет вводить текст
КонецПроцедуры

Особенности работы с «Таблицей значений» в обычных формах

Разберем ситуацию, когда таблица на форме — это не часть объекта базы данных, а независимый объект ТаблицаЗначений. В этом случае крайне важно следить за типизацией колонок. Если тип колонки не определен (содержит ЛюбаяСсылка или составной тип), 1С почти всегда будет предлагать форму выбора, чтобы пользователь сначала уточнил тип данных, который он собирается вводить. Чтобы редактирование «в списке» работало стабильно, всегда жестко задавайте типы колонок при программном создании таблицы или в редакторе свойств формы.

Выводы и последовательность действий

Подводя итог, для решения проблемы с «выскакивающей» формой при добавлении строки, выполним следующие шаги вместе:

  1. Проверим свойства табличного поля: установим РежимРедактирования в значение В списке.
  2. Настроим колонки: убедимся, что для реквизитов-справочников не стоит режим выбора незаполненного При активизации.
  3. Проверим метаданные: удостоверимся, что у справочников включен Ввод по строке по наименованию или коду.
  4. Исключим программные вызовы: проверим, нет ли в модуле формы процедур ОткрытьФормуВыбора(), которые могут срабатывать при создании строки.

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

← На главную