Почему не вводятся значения в список значений на управляемой форме 1С и как это исправить

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

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

Анализ причин некорректного поведения

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

  1. Произвольный тип значения у реквизита. По умолчанию у реквизита формы с типом СписокЗначений свойство Тип значения является составным (включает все доступные в конфигурации типы) либо неопределенным. В этом случае платформа 1С не знает, какое именно поле ввода (строку, число, дату или ссылку на справочник) нужно предоставить пользователю. Прямой ввод текста блокируется, и платформа ожидает предварительного выбора конкретного типа данных.
  2. Конфликт режима выбора и режима редактирования. Если таблица формы или сама форма открыта для выбора (установлен режим выбора), нажатие клавиш Enter, Insert или двойной клик мыши расцениваются платформой как завершение подбора. В результате форма закрывается, пытаясь вернуть текущую пустую строку, так и не дав пользователю отредактировать ячейку.

Способ 1. Указание конкретного типа данных для списка значений

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

  1. Откроем редактор управляемой формы в конфигураторе.
  2. В правом верхнем окне на вкладке Реквизиты выделим реквизит с типом СписокЗначений.
  3. В окне Свойства найдем пункт Тип значения и нажмем кнопку выбора (с тремя точками).
  4. В открывшемся окне снимем все лишние флаги и установим точный тип данных — например, Строка (при необходимости укажем фиксированную или переменную длину).
  5. Убедимся, что для колонки таблицы на форме в качестве элемента управления используется ПолеВвода, а свойство ТолькоПросмотр отключено.

После явного задания типа данных ячейка колонки «Значение» превращается в стандартное поле ввода, и пользователь может вводить текст напрямую с клавиатуры без вызова дополнительных диалогов.

Способ 2. Корректная настройка режима редактирования таблицы

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

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

Посмотрим на пример программного возврата заполненного списка из формы выбора:


&НаКлиенте
Процедура КомандаВыбрать(Команда)
    ОповеститьОВыборе(СписокЗначенийРеквизит);
КонецПроцедуры

Способ 3. Использование штатного диалога редактирования списка

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

Рассмотрим пример использования стандартного асинхронного окна редактирования списка значений:


&НаКлиенте
Процедура РедактироватьСписок(Команда)
    
    Оповещение = Новый ОписаниеОповещения("ПослеРедактированияСписка", ЭтотОбъект);
    ПоказатьРедактированиеСпискаЗначений(Оповещение, МойСписокЗначений, "Заполните список значений");
    
КонецПроцедуры

&НаКлиенте
Процедура ПослеРедактированияСписка(Результат, ДополнительныеПараметры) Экспорт
    
    Если Результат <> Неопределено Тогда
        // Обработка отредактированного списка значений
        МойСписокЗначений = Результат;
    КонецЕсли;
    
КонецПроцедуры

Способ 4. Использование таблицы значений вместо списка значений

Если для бизнес-логики требуется создание сложной табличной формы с ручным вводом нескольких реквизитов, рекомендуется использовать реквизит формы с типом ТаблицаЗначений вместо типа СписокЗначений. Элемент управления, связанный со списком значений, имеет жестко предопределенный набор системных полей (Значение, Представление, Пометка, Картинка), что ограничивает возможности кастомизации интерфейса.

Создание таблицы значений с явно типизированной строковой колонкой позволяет избежать любых системных блокировок и обеспечивает привычный пользователю табличный ввод.

← На главную