При разработке интерфейсов на платформе 1С:Предприятие 8.3 часто возникает задача информирования пользователя о завершении длительного процесса или получении важного уведомления. Метод ПоказатьОповещениеПользователя является стандартом для таких задач. Однако программисты часто сталкиваются с тем, что в веб-клиенте (при работе через браузер) текст, который должен был быть разделен на несколько строк, выводится «в одну строку», что сильно затрудняет чтение. Разберем подробно, почему так происходит и как добиться корректного многострочного отображения.
Для начала проанализируем синтаксис метода ПоказатьОповещениеПользователя. Он принимает несколько ключевых параметров:
Главная ошибка заключается в попытке вывести длинный текст с переносами строк через первый параметр (Заголовок). В веб-клиенте реализация этого метода сильно зависит от движка браузера (Chrome, Safari, Firefox) и того, как настроены системные уведомления в операционной системе. Большинство браузеров воспринимают первый параметр как краткий Title, который технически не поддерживает символы перевода строки Символы.ПС или |. Даже если вы укажете их, платформа или сам браузер «схлопнут» текст в одну строку для экономии места в области уведомлений ОС.
Как показывает практика и обсуждения опытных разработчиков, единственным надежным способом вывести многострочный текст в веб-клиенте является использование третьего параметра метода — Пояснения. Именно это поле предназначено для развернутой информации и корректно интерпретирует символы переноса строки.
Рассмотрим правильный пример реализации кода:
&НаКлиенте
Процедура ВывестиМногострочноеОповещение()
Заголовок = "Уведомление системы";
ТекстПояснения = "Спасибо! " + Символы.ПС +
"Ваша информация принята." + Символы.ПС +
"На протяжении 4 дней ожидайте ответ." + Символы.ПС +
"Хорошего дня!";
ПоказатьОповещениеПользователя(
Заголовок,
ПолучитьНавигационнуюСсылку(Объект.Ссылка),
ТекстПояснения,
БиблиотекаКартинок.Информация32
);
КонецПроцедуры
В данном примере мы четко разделяем краткую суть (заголовок) и подробности (пояснение). В веб-клиенте 1С отрендерит это в специальном блоке, где Символы.ПС будут заменены на HTML-тег переноса строки автоматически.
Если вы используете локализацию или просто хотите, чтобы код выглядел чище, можно использовать вертикальную черту | для оформления многострочного текста внутри НСтр. Посмотрим, как это выглядит на практике:
ПоказатьОповещениеПользователя(
"Статус заявки",
,
НСтр("ru = 'Ваша информация принята.
|На протяжении 4 дней ожидайте ответ.
|Хорошего дня!'"),
БиблиотекаКартинок.Информация32
);
Важный момент: Обратите внимание, что многострочная строка должна передаваться именно в третий аргумент функции. Если передать такой НСтр в первый аргумент, результат в веб-клиенте останется прежним — текст вытянется в одну длинную нечитаемую линию.
Выясним причину, по которой поведение оповещений может отличаться у разных пользователей. В современных версиях платформы (8.3.15 и выше) 1С умеет интегрироваться с системными Push-уведомлениями браузера. При необходимости можно воспользоваться инструментом для вывода кастомных уведомлений напрямую в центр уведомлений Windows.
Разберем два сценария:
Для гарантированного результата в веб-клиенте на ОС Windows рекомендуется использовать комбинацию символов возврата каретки и перевода строки: Символы.ВК + Символы.ПС. Это повышает вероятность того, что текстовый движок браузера корректно распознает конец строки.
Иногда у разработчиков возникает соблазн вставить тег <br> напрямую в строку. Проанализируем, почему это плохая идея. Платформа 1С в целях безопасности (защита от XSS-атак) автоматически экранирует все спецсимволы, передаваемые в стандартные методы интерфейса. Если вы напишете "Строка 1 <br> Строка 2", пользователь увидит на экране именно эти символы вместе с угловыми скобками. Использовать HTML-разметку в ПоказатьОповещениеПользователя невозможно.
Если ограничений стандартного оповещения слишком много (например, нужно вывести 10–15 строк текста), проанализируем альтернативы:
ПоказатьВопрос. Там многострочность поддерживается гораздо стабильнее во всех клиентах.Сообщить) в веб-клиенте выводятся в специальной панели, которая отлично поддерживает многострочный текст.Подводя итог, можно сказать: для веб-клиента всегда придерживайтесь правила «Краткий заголовок — подробное пояснение». Это обеспечит предсказуемое поведение интерфейса вне зависимости от того, какой браузер использует ваш клиент.