Разработка и Конфигурация · 11 мин
Как ввести строку в 1С: способы ввода для пользователя и разработчика
Как ввести строку в 1С: ввод с клавиатуры в форме, функция ВвестиСтроку в коде, обработка введённых данных, типичные ошибки и примеры для разработчика.
Ввод строки в 1С встречается в двух разных ситуациях: пользователь заполняет текстовое поле в форме документа или справочника, а разработчик программно запрашивает у пользователя текстовое значение через команды встроенного языка. Оба сценария просты, но у каждого есть ограничения: длина строки, режим работы (тонкий клиент, веб-клиент, сервер), права доступа и контекст выполнения кода.
Для пользователя ввод строки — это обычная работа с полем ввода: щёлкнуть в поле, набрать текст, подтвердить ввод клавишей Enter или переходом к следующему элементу. Для программиста 1С ввод строки означает вызов диалога ввода значения, обработку результата и валидацию полученных данных перед записью в базу.
Ниже разобраны оба сценария: как ввести строку в интерфейсе программы, как запросить строку из кода с помощью ВвестиСтроку и современных асинхронных методов, какие ограничения существуют в разных клиентах и как проверить корректность введённого значения.
Ввод строки в интерфейсе программы
В типовых конфигурациях 1С текстовые поля встречаются повсюду: наименование контрагента, комментарий к документу, адрес доставки, артикул. Чтобы ввести строку, установите курсор в поле ввода (одинарный щелчок мыши или переход клавишей Tab), наберите текст и подтвердите ввод клавишей Enter либо переходом к другому полю. Пока фокус остаётся в поле, значение считается редактируемым и ещё не зафиксировано в объекте.
Если поле отображает серую подсказку вроде «Укажите наименование», это не значение, а подсказка ввода — она исчезнет при первом нажатии клавиши. Если поле недоступно (затемнено), значит, оно заблокировано настройками формы, правами доступа или логикой конфигурации: например, реквизит заполняется автоматически и редактирование запрещено.
Многострочные поля (комментарии, описания) позволяют переносить строки. Перевод строки внутри такого поля обычно выполняется сочетанием Ctrl+Enter или просто Enter — зависит от настроек поля. Если Enter завершает редактирование вместо переноса строки, используйте Ctrl+Enter.
Программный запрос строки: метод ВвестиСтроку
Во встроенном языке 1С для запроса строки у пользователя существует метод ВвестиСтроку. Он открывает модальное окно с полем ввода и возвращает Истина, если пользователь подтвердил ввод, или Ложь при отмене. Введённое значение помещается в переменную, переданную первым параметром.
Строка = "";
Если ВвестиСтроку(Строка, "Введите комментарий", 200, Ложь) Тогда
Сообщить("Введено: " + Строка);
Иначе
Сообщить("Ввод отменён");
КонецЕсли;
Параметры метода: переменная для результата, текст подсказки в заголовке диалога, максимальная длина строки и признак многострочности. Если четвёртый параметр установить в Истина, пользователь сможет вводить текст в несколько строк. Метод выполняется только на клиенте — вызов на сервере приведёт к ошибке, потому что у серверного кода нет пользовательского интерфейса.
Модальный вызов ВвестиСтроку блокирует интерфейс до ответа пользователя. В управляемых формах и веб-клиенте модальные окна ограничены или запрещены настройками конфигурации (свойство «Режим использования модальности»), поэтому в современных разработках применяют асинхронный вариант.
Если ВвестиСтроку(Строка, "Введите значение", 100, Ложь) Тогда
// обработка строки
КонецЕсли;Асинхронный ввод: ПоказатьВводСтроки
Метод ПоказатьВводСтроки выполняет ту же задачу, но не останавливает выполнение программы: результат приходит в описание оповещения — отдельную процедуру, которая сработает после закрытия диалога. Это рекомендуемый способ для управляемых форм, тонкого и веб-клиента.
&НаКлиенте
Процедура КомандаВвестиСтроку(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВводаСтроки", ЭтотОбъект);
ПоказатьВводСтроки(Оповещение, "", "Введите наименование", 150, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВводаСтроки(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено Тогда
Объект.Наименование = Результат;
КонецЕсли;
КонецПроцедуры
Если пользователь нажал «Отмена», в обработчик приходит Неопределено, а не пустая строка — это важное отличие, которое нужно учитывать при проверке результата. Сравнение с пустой строкой в этом случае даст ложное срабатывание логики, поэтому всегда проверяйте именно на Неопределено.
- 1Создайте описание оповещения с именем процедуры-обработчика
- 2Вызовите ПоказатьВводСтроки с подсказкой и ограничением длины
- 3В обработчике проверьте результат на Неопределено
- 4Проверьте строку на пустоту функцией ПустаяСтрока
- 5Присвойте значение реквизиту объекта и при необходимости установите признак модифицированности
Ввод других типов значений через строку
Иногда требуется получить от пользователя число или дату, но ввод организован строкой. В этом случае используют ВвестиЗначение или ПоказатьВводЗначения с указанием типа — платформа сама проверит соответствие введённого текста нужному типу и не даст подтвердить некорректное значение. Это надёжнее, чем принимать строку и преобразовывать её вручную.
Оповещение = Новый ОписаниеОповещения("ПослеВводаЧисла", ЭтотОбъект);
ПоказатьВводЗначения(Оповещение, 0, "Введите количество", "Число");
Если всё же приходится преобразовывать строку в число вручную, используйте конструкцию Число() внутри попытки: при невозможности преобразования возникает исключение, которое нужно перехватить и сообщить пользователю о неверном формате. Не оставляйте преобразование без обработки ошибок — необработанное исключение прервёт выполнение всей процедуры.
Сравнение способов ввода
Простой синхронный вызов. Подходит для обычных форм и отладки, но блокирует интерфейс и может быть запрещён настройками модальности.
Асинхронный вариант для управляемых форм, тонкого и веб-клиента. Требует отдельной процедуры-обработчика, но не блокирует интерфейс.
Когда нужен конкретный тип (число, дата, ссылка). Платформа сама контролирует формат ввода.
Проверка и обработка введённой строки
Любое значение, полученное от пользователя, нужно проверить перед использованием. Минимальный набор проверок: строка не пуста (ПустаяСтрока), длина не превышает длину целевого реквизита (СтрДлина), при необходимости — отсутствие недопустимых символов. Для удаления лишних пробелов по краям применяйте СокрЛП — пользователи часто вводят пробелы случайно, и «Иванов » с пробелом будет отличаться от «Иванов» при поиске.
Значение = СокрЛП(Результат);
Если ПустаяСтрока(Значение) Тогда
ПоказатьПредупреждение(, "Строка не может быть пустой");
Возврат;
КонецЕсли;
При записи строки в реквизит объекта учитывайте, что изменение реквизита в форме не сохраняется автоматически — объект нужно записать. Если строка используется как ключ поиска (например, поиск элемента справочника по наименованию), приводите оба сравниваемых значения к одному регистру и обрезайте пробелы, иначе поиск будет неточным.
Ограничения в разных клиентах и режимах
В толстом клиенте обычного приложения модальный ВвестиСтроку работает без ограничений. В управляемом приложении поведение зависит от свойства конфигурации «Режим использования модальности»: если выбрано «Не использовать», модальный вызов вызовет ошибку, и остаётся только асинхронный вариант. В веб-клиенте асинхронные методы — единственный рабочий путь, потому что браузерная модель не допускает блокирующих диалогов платформы.
Внешняя компонента или расширение формы могут переопределять поведение полей ввода, но в типовых сценариях это не требуется. Если диалог ввода не появляется вовсе, проверьте, в каком контексте выполняется код: директива &НаСервере исключает любые интерактивные вызовы. Перенесите запрос строки в клиентскую процедуру, а результат передайте на сервер параметром.
Как выбрать способ ввода
Как проверить, что ввод сработал правильно
После ввода строки в интерфейсе убедитесь, что значение отображается в поле полностью, без обрезки, и сохраняется после записи объекта: закройте и заново откройте форму — значение должно остаться. Если после перезаписи строка исчезла или обрезалась, проверьте длину реквизита в конфигураторе и права на его изменение.
При программном вводе проверьте логику по шагам: диалог открылся, в обработчик пришло значение (не Неопределено), после СокрЛП строка не пуста, реквизит объекта изменился, объект записан без ошибок. Временный вывод через Сообщить или точку останова в отладчике помогает локализовать, на каком шаге значение теряется.
Как проверить результат
Строка отображается полностью и сохраняется после записи
Текст обрезан или пропадает после переоткрытия формы
Приходит введённая строка или Неопределено при отмене
Обработчик не вызывается — ошибка в имени процедуры оповещения
Элемент находится после СокрЛП и единого регистра
Поиск не находит очевидно существующее значение
Что важно запомнить
В интерфейсе строка вводится в поле ввода и подтверждается Enter. В коде для управляемых форм используйте ПоказатьВводСтроки с проверкой результата на Неопределено, а модальный ВвестиСтроку оставьте для обычных форм. Всегда очищайте строку через СокрЛП и проверяйте длину целевого реквизита.
Частые вопросы
Почему ВвестиСтроку выдаёт ошибку «Интерактивные операции недоступны»?
Код выполняется в контексте, где нет пользовательского интерфейса: на сервере, в фоновом задании или при отключённой модальности. Перенесите вызов в клиентскую процедуру формы и используйте асинхронный ПоказатьВводСтроки.
Как ограничить длину вводимой строки?
Третьим параметром методов ВвестиСтроку и ПоказатьВводСтроки передаётся максимальная длина — платформа не даст ввести больше символов. Дополнительно убедитесь, что длина реквизита в конфигураторе не меньше этого значения, иначе строка обрежется при записи.
Как отличить отмену ввода от пустой строки?
При асинхронном вводе отмена возвращает Неопределено, а пустой ввод с подтверждением — пустую строку. Проверяйте сначала «Результат = Неопределено» для отмены, затем ПустаяСтрока(Результат) для пустого значения.
Можно ли ввести многострочный текст через диалог ввода?
Да: установите последний параметр ВвестиСтроку или ПоказатьВводСтроки в Истина, и диалог откроется с многострочным полем. Переводы строк сохранятся в значении как символы переноса строки.
Почему введённая строка не находится при поиске в справочнике?
Чаще всего причина в пробелах по краям или разном регистре символов. Применяйте СокрЛП к обеим сравниваемым строкам и приводите их к одному регистру через ВРег или НРег перед сравнением.
Как ввести строку в мобильном клиенте 1С?
Логика та же, что и в веб-клиенте: только асинхронные методы ПоказатьВводСтроки и ПоказатьВводЗначения. Модальные вызовы в мобильной платформе не поддерживаются, поэтому весь интерактивный ввод оформляйте через описания оповещений.