Почему в поле ввода 1С мигает курсор, но не вводится текст с клавиатуры, и как это исправить?

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

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

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

1. Главная причина: Отсутствие права «Ввод по строке» в ролях пользователя

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

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

Если у пользователя есть права на Чтение и Просмотр объекта, но галочка Ввод по строке в конфигураторе для его роли снята, платформа ведет себя следующим образом:

  1. Она разрешает пользователю активизировать поле ввода и установить туда фокус (курсор начинает мигать).
  2. Она полностью блокирует любые сигналы от клавиатуры внутри этого поля, чтобы предотвратить запуск процедуры автоподбора, так как этот поиск запрещен правами безопасности.
  3. При этом интерактивный выбор через кнопку выбора или выпадающий список остается доступным, поскольку эти механизмы задействуют стандартную форму выбора и не требуют выполнения текстового поиска «на лету».

Решение проблемы в конфигураторе:

Для устранения этой проблемы нам необходимо выдать пользователю соответствующее право. Разберем этот процесс по шагам:

  1. Откройте конфигуратор вашей информационной базы.
  2. В дереве метаданных перейдите в ветку Общие -> Роли.
  3. Найдите и откройте ту роль (или роли), которая назначена проблемному пользователю и отвечает за доступ к связанному справочнику (например, роль ЧтениеКонтрагентов или аналогичную).
  4. В открывшемся окне настройки роли перейдите к нужному объекту метаданных (например, справочнику Номенклатура).
  5. В списке прав на этот объект найдите право «Ввод по строке» и установите напротив него флажок (галочку).
  6. Сохраните изменения и обновите конфигурацию базы данных.

2. Некорректные свойства элемента формы: «Режим выбора из списка» и «Редактирование текста»

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

У любого поля ввода на управляемой форме существуют свойства РежимВыбораИзСписка (Режим выбора из списка) и РедактироватьТекст (Редактирование текста). Давайте проанализируем, как они взаимосвязаны:

Чтобы исправить это поведение программно или интерактивно, убедитесь, что свойство РедактироватьТекст установлено в значение Истина, либо отключите режим выбора из списка, если он вам не требуется.

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


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

3. Использование составного типа данных реквизита

Еще одна классическая ситуация, ставящая в тупик начинающих разработчиков — это работа с полями ввода, имеющими составной тип данных. Например, реквизит табличной части может принимать значения типов СправочникСсылка.Контрагенты и СправочникСсылка.ФизическиеЛица одновременно.

Когда такое поле является абсолютно пустым, платформа 1С изначально не знает, по какому именно объекту метаданных пользователь планирует осуществлять поиск при вводе текста с клавиатуры. В этот момент поле переходит в так называемый режим выбора типа, а рядом с ним появляется кнопка с буквой «Т».

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

Как решить эту проблему:

Рассмотрим пример кода, реализующий автоматическое заполнение типа при начале редактирования:


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

4. Влияние свойства «Быстрый выбор» на уровне метаданных

Давайте посмотрим на ситуацию глубже — на уровне свойств самих объектов конфигурации. У каждого справочника в конфигураторе на вкладке «Формы» есть свойство «Быстрый выбор» (возможные значения: Истина, Ложь, Авто).

Если для справочника включен быстрый выбор, то при нажатии на кнопку выбора в поле ввода на форме вместо открытия стандартной формы выбора открывается компактный выпадающий список. Если при этом у пользователя урезаны права или наложены сложные ограничения доступа на уровне записей (RLS), платформа 1С может некорректно обрабатывать фоновые запросы автоподбора при попытке ручного ввода текста. Это приводит к блокировке ввода символов с клавиатуры, оставляя доступным только выбор мышью из списка.

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

5. Ограничения доступа на уровне записей (RLS)

Бывают случаи, когда право Ввод по строке физически установлено в ролях пользователя, но проблема все равно сохраняется. Виновником здесь могут выступать некорректно настроенные шаблоны RLS (Row-Level Security).

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

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

6. Проблема с кэшем метаданных на рабочем месте пользователя

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

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

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

  1. Удалите информационную базу из списка запуска 1С и добавьте ее заново под тем же именем и путем. Это самый простой и надежный способ для конечного пользователя.
  2. Удалите файлы кэша вручную, очистив содержимое следующих директорий на диске пользователя (предварительно завершив работу 1С):
    • %userprofile%\AppData\Local\1C\1Cv8
    • %userprofile%\AppData\Roaming\1C\1Cv8

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

← На главную