Вывод текста в 1С 8.3 для проверки и отладки кода
Содержание
Чтобы вывести строку в 1С, проще всего написать Сообщить("Текст"); — строка появится в окне сообщений внизу формы. Это работает и на клиенте, и на сервере. Если код менять нельзя, ставьте точку останова и смотрите значение в отладчике. Если код идёт без пользователя (регламентное задание), пишите строку в журнал регистрации.
Типичная ситуация: документ проводится, но сумма в движениях не та. Нужно увидеть, что лежит в переменной на третьей итерации цикла. Способ вывода текста в 1С 8.3 зависит от трёх вещей: где выполняется код, есть ли рядом пользователь и нужно ли сохранить результат.
Процедура Сообщить(): самый быстрый вывод строки
Сообщить() — глобальная процедура платформы. Первый параметр — текст, второй (статус сообщения) в интерфейсе «Такси» на вид окна почти не влияет, его можно не указывать.
Сообщить("Начали обработку");
Сообщить("Сумма документа: " + Формат(Сумма, "ЧДЦ=2; ЧГ=0"));
Сообщить(Контрагент); // выведется представление ссылки, то есть наименование
Что важно знать о поведении процедуры:
- 📌 Сообщить принимает не только строку. Число, дату и ссылку платформа сама приведёт к строке через представление.
- 📌 Для коллекций выводится только имя типа.
Сообщить(Структура)покажет слово «Структура», а не содержимое. - 📌 Сообщения копятся в окне сообщений активной формы. Если форма закрыта, текст уходит в окно основного окна приложения.
- 📌 Вызов в цикле на 10 000 строк заметно тормозит интерфейс. Выводите каждую сотую итерацию или итог.
Чтобы вывести содержимое таблицы значений, пройдите её циклом:
Для Каждого Стр Из ТаблицаТоваров Цикл
Сообщить(СтрШаблон("%1 | %2 шт. | %3 руб.",
Стр.Номенклатура, Стр.Количество, Формат(Стр.Сумма, "ЧДЦ=2; ЧГ=0")));
КонецЦикла;
Отладочные Сообщить легко забыть в коде. Помечайте их одинаковым комментарием, например // ОТЛАДКА, и перед сдачей ищите его через Правка → Найти по всей конфигурации (Ctrl+Shift+F).
СообщениеПользователю: строка с привязкой к полю формы
Когда текст адресован пользователю, а не разработчику, лучше объект СообщениеПользователю. Он умеет подсвечивать поле, к которому относится ошибка. Пользователь кликает по сообщению — и курсор встаёт в нужную ячейку.
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не заполнен склад";
Сообщение.Поле = "Объект.Склад";
Сообщение.Сообщить();
Для табличной части в Поле указывают путь к ячейке строки, например "Объект.Товары[0].Количество". Индекс строк начинается с нуля: первая строка — [0], пятая — [4].
В серверном модуле объекта, где формы нет, сообщение привязывают к данным:
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Дата документа раньше даты запрета";
Сообщение.Поле = "Дата";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) то же самое делает одна строка: ОбщегоНазначения.СообщитьПользователю(Текст, , Поле, ПутьКДанным, Отказ) на сервере и ОбщегоНазначенияКлиент.СообщитьПользователю(...) на клиенте. Если в типовой правите код — пользуйтесь этой функцией, так принято в БСП.
Другие способы показать строку на экране
Иногда окно сообщений не подходит: строку надо показать крупно, во всплывающем окне или целым текстом на несколько экранов. Все методы ниже работают только на клиенте.
| Метод | Что видит пользователь | Когда брать |
|---|---|---|
ПоказатьПредупреждение() | Окно с кнопкой «ОК» | Нужно, чтобы текст точно прочитали |
ПоказатьОповещениеПользователя() | Всплывающее уведомление в углу | Короткий итог: «Загружено 120 строк» |
Состояние() | Текст в строке состояния | Ход долгой операции |
ТекстовыйДокумент.Показать() | Отдельное окно с текстом | Длинный лог, XML, JSON, текст запроса |
Пример с немодальным предупреждением:
ПоказатьПредупреждение(, "Выгрузка завершена", 10, "Готово");
Первый параметр — описание оповещения о закрытии, его можно пропустить. Третий — таймаут в секундах.
Старое Предупреждение("Текст") модальное. Если в свойствах конфигурации режим использования модальности стоит «Не использовать», такой вызов выдаст ошибку. В новых конфигурациях пишите ПоказатьПредупреждение.
Длинную строку удобнее всего открыть текстовым документом. Его можно прокручивать, искать по нему и копировать:
ТД = Новый ТекстовыйДокумент;
ТД.УстановитьТекст(ТекстЗапроса);
ТД.Показать("Текст запроса");
Как посмотреть строку в отладчике, не меняя код
Отладчик выводит значение любой переменной без единой строки кода. Это главный инструмент, когда правки в базу вносить нельзя или лишний Сообщить попадёт к пользователям.
Точка останова и вычисление выражения
- Откройте модуль в Конфигураторе и поставьте курсор на нужную строку.
- Нажмите
F9— слева появится красная точка останова. - Запустите отладку:
F5(менюОтладка → Начать отладку). - В клиенте выполните действие, которое запускает код. Выполнение встанет на точке.
- Выделите переменную и нажмите
Shift+F9— откроется окно «Вычислить выражение» со значением. - Шагайте дальше:
F10— на следующую строку,F11— внутрь процедуры.
В окне вычисления можно ввести не только имя переменной, но и выражение: СтрДлина(Текст), Стр.Сумма * 1.2, ТаблицаТоваров.Количество(). Для длинной строки значение удобно открыть в отдельном окне просмотра — так видны переносы строк и пробелы в конце.
Табло и точка останова с условием
- 🔍 Табло — список выражений, которые пересчитываются на каждом шаге. Добавьте туда 3–4 переменные и шагайте по циклу: видно, на какой итерации значение «поехало».
- 🔍 Условная точка —
Ctrl+Shift+F9. Задайте условие, напримерСтр.НомерСтроки = 57, и отладчик остановится только на 57-й строке, а не на каждой. - 🔍 Остановка по ошибке — в меню
Отладкавключите остановку по ошибке. Выполнение встанет прямо на строке, где возникло исключение, со всеми переменными.
Отладка серверного кода
В файловой базе серверные процедуры отлаживаются сразу. В клиент-серверной сервер 1С должен быть запущен с ключом -debug, иначе точки в серверных модулях не сработают. Это настраивает администратор сервера; изменение параметров службы требует её перезапуска, а перезапуск оборвёт сеансы всех пользователей — делайте это вне рабочего времени.
Для фоновых и регламентных заданий откройте Отладка → Подключение и включите автоматическое подключение нужных предметов отладки (серверных и фоновых сеансов).
Вывод строк из серверного кода, фоновых заданий и «консоли»
Где выполняется код, определяет, увидите ли вы строку вообще.
Серверный вызов из формы. Сообщить на сервере работает: сообщения копятся и показываются на клиенте после возврата из серверной процедуры. Ничего дополнительно делать не надо.
Фоновое задание. Клиента у задания нет, сообщения складываются в буфер задания. Забрать их можно с клиента или сервера по ссылке на задание:
Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдЗадания);
Если Задание <> Неопределено Тогда
Сообщения = Задание.ПолучитьСообщенияПользователю(Истина);
Для Каждого Сообщ Из Сообщения Цикл
Сообщить(Сообщ.Текст);
КонецЦикла;
КонецЕсли;
Параметр Истина очищает буфер, чтобы при следующем опросе те же строки не вывелись повторно.
Регламентное задание. Пользователя нет, забирать сообщения некому — Сообщить уходит в пустоту. Здесь вывод строки делается только записью в журнал регистрации или в файл.
Консоль кода. Под «консолью» в 1С обычно понимают внешнюю обработку
, которая выполняет произвольный код в пользовательском режиме через Выполнить(). Её открывают через Файл → Открыть как обычную внешнюю обработку. Вывод в ней тот же — через Сообщить. Удобно, когда нужно проверить кусок кода на рабочих данных без Конфигуратора.
Консоль кода в рабочей базе может изменить и записать данные. Прогоняйте код, который что-то пишет, сначала на копии базы, а в рабочей — только чтение.
Запись строки в журнал регистрации и в файл
Журнал регистрации сохраняет строку надолго, с датой, пользователем и компьютером. Это лучший вариант для кода, который работает без человека, и для разбора сбоев «задним числом».
ЗаписьЖурналаРегистрации("Загрузка прайса",
УровеньЖурналаРегистрации.Информация, , ,
СтрШаблон("Загружено строк: %1", Формат(Счетчик, "ЧГ=0")));
Параметры по порядку: имя события, уровень, объект метаданных, данные (ссылка), комментарий. Строку для вывода кладите в комментарий. Имя события задавайте своё и постоянное — по нему потом фильтруют.
Уровни: Информация, Примечание, Предупреждение, Ошибка. Для отладочных строк берите Информация, для перехваченных исключений — Ошибка:
Попытка
ВыполнитьЗагрузку();
Исключение
ЗаписьЖурналаРегистрации("Загрузка прайса",
УровеньЖурналаРегистрации.Ошибка, , ,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
Где посмотреть записи:
- 📂 в Конфигураторе —
Администрирование → Журнал регистрации; - 📂 в пользовательском режиме —
Все функции → Стандартные → Журнал регистрации. Если пункта «Все функции» нет в главном меню, включите его:Сервис → Параметры(в главном меню ☰), флажок «Отображать команду “Все функции”».
В журнале поставьте отбор по имени события, иначе свою строку придётся искать среди тысяч записей.
Не пишите в журнал каждую итерацию цикла на большом объёме. Журнал растёт, и отбор по нему начинает тормозить. Одна запись с итогом лучше тысячи по строке.
Вывод в текстовый файл
Если строк много или их нужно отдать коллеге, пишите в файл. На сервере путь указывается на диске сервера, а не вашего компьютера:
Запись = Новый ЗаписьТекста("C:\Temp\debug.txt", КодировкаТекста.UTF8);
Запись.ЗаписатьСтроку("Старт: " + Формат(ТекущаяДата(), "ДФ='dd.MM.yyyy HH:mm:ss'"));
Запись.ЗаписатьСтроку("Строк к обработке: " + Формат(Количество, "ЧГ=0"));
Запись.Закрыть();
Не забывайте Закрыть(): до этого файл заблокирован, и часть текста может не записаться.
Как собрать строку для вывода: конкатенация, Формат и СтрШаблон
Половина «странных» сообщений — это не ошибка логики, а неудачно собранная строка.
Конкатенация через +. Склеивает строки. Число без форматирования выведется с разделителем разрядов: "Строк: " + 12500 даст «Строк: 12 500» с неразрывным пробелом. Для чисел, которые потом копируют или сравнивают, нужен Формат.
Функция Формат() — главный инструмент оформления:
| Задача | Пример | Результат |
|---|---|---|
| Число без пробелов | Формат(12500, "ЧГ=0") | 12500 |
| Два знака после запятой | Формат(1234.5, "ЧДЦ=2") | 1 234,50 |
| Ноль не пустой | Формат(0, "ЧН=0") | 0 |
| Дата | Формат(Дата, "ДФ=dd.MM.yyyy") | 07.10.2026 |
| Булево | Формат(Истина, "БЛ=Нет; БИ=Да") | Да |
Без ЧН нулевое число превращается в пустую строку — в отладочном выводе это сбивает с толку.
СтрШаблон() (платформа 8.3.6 и новее) подставляет значения в %1, %2 и так далее до %10. Код читается лучше, чем цепочка плюсов:
Текст = СтрШаблон("Документ %1 от %2: сумма %3",
Документ.Номер, Формат(Документ.Дата, "ДФ=dd.MM.yyyy"), Формат(Сумма, "ЧДЦ=2"));
Служебные символы и сборка из частей:
- ↩️
Символы.ПС— перенос строки,Символы.Таб— табуляция. - 🧩
СтрСоединить(Массив, ", ")склеивает массив строк с разделителем. - ✂️
СокрЛП(Строка)убирает пробелы по краям — полезно, когда сравнение «одинаковых» строк даёт Ложь. - 🔎 Чтобы увидеть невидимые пробелы, выводите строку в скобках:
Сообщить("[" + Код + "]"). Лишний пробел в конце сразу заметен.