Как в 1С сделать поле комментария многострочным и обеспечить сохранение данных?

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

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

Настройка многострочного режима в свойствах элемента формы

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

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

Обеспечение сохранности данных в отчетах

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

Наиболее простой и эффективный способ в управляемом приложении — это использование стандартного механизма автосохранения данных формы. Разберем по шагам, как это реализовать:

  1. Перейдем в свойства самой формы отчета (выделим корень в дереве элементов формы).
  2. Найдем раздел Использование и установим флаг Автосохранение в значение Истина.
  3. В свойстве Сохраняемые реквизиты нажмем на гиперссылку и в открывшемся окне выберем галочкой наш реквизит комментария.

Теперь при закрытии отчета 1С автоматически запишет значение комментария в системное хранилище настроек для текущего пользователя, а при следующем открытии — восстановит его.

Программное управление сохранением через Хранилище настроек

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

Для этого мы можем использовать события формы ПриЗагрузкеДанныхИзНастроекНаСервере и ПриСохраненииДанныхВНастройкахНаСервере. Посмотрим на пример кода, который позволяет гибко управлять данными:


&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
    // Сохраняем наш комментарий в структуру настроек
    Настройки.Вставить("МойКомментарий", Объект.Комментарий);
КонецПроцедуры

&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
    // Извлекаем сохраненное значение
    Если Настройки.Свойство("МойКомментарий") Тогда
        Объект.Комментарий = Настройки.МойКомментарий;
    КонецЕсли;
КонецПроцедуры

Этот подход дает полный контроль над процессом. Мы можем проверять условия, модифицировать текст перед сохранением или записывать дополнительные метаданные.

Особенности работы с многострочным текстом в макетах

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

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

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


&НаСервере
Процедура СохранитьКомментарийВБазу(ТекстКомментария, ОбъектСсылка)
    Менеджер = РегистрыСведений.ДополнительныеКомментарии.СоздатьМенеджерЗаписи();
    Менеджер.Объект = ОбъектСсылка;
    Менеджер.Комментарий = ТекстКомментария;
    Менеджер.Период = ТекущаяДата();
    Менеджер.Записать();
КонецПроцедуры

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

Дополнительные советы по юзабилити

Для того чтобы работа пользователя с многострочным полем была максимально приятной, рекомендуем использовать свойство Подсказка ввода. Впишите туда фразу: "Введите здесь ваше примечание...". Этот текст будет отображаться серым цветом в пустом поле, помогая сориентироваться в интерфейсе.

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

← На главную