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