К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как вывести комментарии в 1С 8

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

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

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

Комментарии внутри программного кода

Комментарий в модуле 1С начинается с двух символов косой черты //. Всё, что следует после них до конца строки, платформа игнорирует при выполнении. Комментарий может занимать всю строку или дополнять строку с исполняемым кодом:

// Рассчитываем итоговую сумму с учётом скидки

ИтоговаяСумма = СуммаДокумента - СуммаСкидки; // скидка не может быть отрицательной

Многострочных комментариев вида / ... /, как в других языках, во встроенном языке 1С нет. Чтобы закомментировать блок, перед каждой строкой ставят //. В конфигураторе это делается быстро: выделите нужные строки и нажмите Ctrl + Num / (либо кнопку «Закомментировать» на панели «Текст»). Обратное действие — «Раскомментировать» — снимает слеши с выделенного блока.

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

Вывод комментария пользователю через Сообщить()

Самый простой способ показать текст пользователю — процедура Сообщить(). Она выводит строку в окно сообщений (в тонком клиенте — панель сообщений внизу окна):

Сообщить("Документ № " + НомерДокумента + " успешно проведён");

У процедуры есть второй необязательный параметр — статус сообщения: СтатусСообщения.Обычное, Важное, Информация, Внимание и ОченьВажное. Статус влияет на пиктограмму рядом с текстом и помогает пользователю отличать информационные заметки от предупреждений:

Сообщить("Остаток на складе меньше резерва!", СтатусСообщения.Внимание);

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

Объект СообщениеПользователю: привязка к данным и полям формы

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

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Не заполнен склад отгрузки";

Сообщение.КлючДанных = Объект.Ссылка;

Сообщение.Поле = "Склад";

Сообщение.УстановитьДанные(Объект);

Сообщение.Сообщить();

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

Вывод комментариев в отчёт и табличный документ

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

ТабДокумент = Новый ТабличныйДокумент;

Макет = ПолучитьМакет("МакетОтчета");

ОбластьКомментарий = Макет.ПолучитьОбласть("Комментарий");

ОбластьКомментарий.Параметры.ТекстКомментария = Комментарий;

ТабДокумент.Вывести(ОбластьКомментарий);

В отчётах на СКД (системе компоновки данных) вывести примечание можно через ресурс или вычисляемое поле, а также через макет оформления. Для простых случаев достаточно добавить поле «Комментарий» в запрос набора данных — оно появится в списке доступных полей и его можно перетащить в настройки отчёта без доработки кода.

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

Вывод комментария в печатную форму
  1. 1
    Откройте макет печатной формы и добавьте область с параметром, например ТекстКомментария
  2. 2
    В модуле менеджера объекта получите область через ПолучитьОбласть()
  3. 3
    Присвойте параметру значение реквизита Комментарий объекта
  4. 4
    Выведите область в табличный документ методом Вывести()
  5. 5
    Сформируйте печатную форму и проверьте, что текст отображается и переносится по строкам

Вывод текста на управляемую форму

Для постоянного отображения примечания на форме не нужны сообщения — достаточно декоративного элемента. В конфигураторе добавьте на форму элемент «Декорация» с видом «Надпись» и свяжите её заголовок с реквизитом формы, либо программно задайте текст:

Элементы.НадписьКомментарий.Заголовок = "Согласовано: " + КомментарийСогласования;

Альтернатива — реквизит формы типа «Строка» с полем ввода в режиме «только просмотр» или полем надписи. Такой вариант удобен, когда текст комментария длинный и должен переноситься по строкам: у поля надписи включите свойство «Автоперенос» либо задайте высоту в несколько строк.

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

Сравнение способов вывода

Сообщить()

Быстрый вывод в панель сообщений. Подходит для отладки и простых уведомлений, но нет привязки к полям формы.

СообщениеПользователю

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

Табличный документ

Комментарий попадает в отчёт или печатную форму и сохраняется при выводе на печать.

Декорация на форме

Постоянное отображение примечания на форме, без интерактива и без панели сообщений.

Журнал регистрации

Скрытое протоколирование для администратора, пользователь записи не видит.

Запись комментариев в журнал регистрации

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

ЗаписьЖурналаРегистрации("Обмен данными.Загрузка",

УровеньЖурналаРегистрации.Предупреждение, , ,

"Пропущен документ: не заполнен контрагент");

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

Типичные ошибки и как их избежать

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

Третья частая ошибка — попытка вывести длинный многострочный текст одной строкой в печатную форму: область макета обрезает содержимое, если у ячейки не включён автоперенос и не задана достаточная высота. Проверяйте результат на реальных длинных комментариях, а не на тестовой строке из трёх слов.

Типичные ошибки
01
Вызов Сообщить() в фоновом задании — текст никому не показывается; используйте журнал регистрации
02
Устаревшие модальные Предупреждение() в управляемом приложении — ошибка выполнения; замените на ПоказатьПредупреждение()
03
Неверное значение свойства Поле у СообщениеПользователю — переход к реквизиту не работает
04
Отсутствие автопереноса в области макета — длинный комментарий обрезается в печатной форме
05
Вывод служебных данных в панель сообщений — риск раскрытия конфиденциальной информации
Контрольные точки

Как проверить результат

Сообщение в панели сообщений
Норма

Текст виден после выполнения процедуры, статус соответствует важности

Тревожный признак

Панель пуста — проверьте контекст выполнения (клиент/сервер, фоновое задание)

Привязка к полю формы
Норма

Двойной щелчок по сообщению активирует нужный реквизит

Тревожный признак

Ничего не происходит или открывается не то поле — проверьте свойство Поле

Комментарий в печатной форме
Норма

Текст полностью отображается и переносится по строкам

Тревожный признак

Строка обрезана — включите автоперенос и увеличьте высоту области

Запись в журнале регистрации
Норма

Событие находится отбором по имени и уровню

Тревожный признак

Записей нет — проверьте, что код реально выполняется и не прерывается исключением

FAQ

Как закомментировать сразу много строк кода в 1С?

Выделите нужный фрагмент в модуле и нажмите Ctrl + Num / или используйте кнопку «Закомментировать» на панели инструментов «Текст» конфигуратора. Платформа добавит // в начало каждой строки. Снятие комментария выполняется аналогичной кнопкой «Раскомментировать».

Почему Сообщить() не выводит текст пользователю?

Наиболее вероятные причины: код выполняется в фоновом задании без пользовательского интерфейса, процедура завершается исключением до вызова Сообщить(), либо сообщение выводится на сервере, а клиентский сеанс уже завершён. Для диагностики добавьте запись в журнал регистрации рядом с вызовом — она покажет, выполняется ли код.

Чем Сообщить() отличается от СообщениеПользователю?

Сообщить() — простая процедура вывода строки в панель сообщений без дополнительных возможностей. СообщениеПользователю — объект с настраиваемыми свойствами: привязка к данным, указание поля формы, идентификатор сообщения. Для проверок заполнения в управляемых формах рекомендуется именно объект.

Как вывести комментарий в отчёт на СКД без доработки кода?

Добавьте поле «Комментарий» в текст запроса набора данных схемы компоновки, затем откройте настройки отчёта и перетащите это поле в выбранные поля или в группировку. Если реквизит есть в таблице документа, отчёт начнёт показывать его без программирования.

Можно ли вывести комментарий всплывающим окном?

Да, на клиенте используются асинхронные методы ПоказатьПредупреждение() для диалога и ПоказатьОповещениеПользователя() для ненавязчивого уведомления в углу экрана. Синхронные модальные вызовы в управляемом приложении по умолчанию запрещены.

Видны ли комментарии из кода пользователям программы?

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

Итог

Что важно запомнить

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