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