Просмотр содержимого таблицы значений: от точки останова до табличного документа

· 9 мин

Содержание

Быстрее всего посмотреть таблицу значений в 1С через отладчик: поставьте точку останова (F9) на строке после заполнения таблицы, запустите отладку (F5), выделите имя переменной и нажмите Shift+F9. Откроется окно «Вычислить выражение», где таблицу можно развернуть до строк и колонок или открыть её содержимое в отдельном окне в виде сетки.

Если отладчик недоступен, например ошибка воспроизводится только у пользователя в рабочей базе, таблицу выводят в табличный документ, сохраняют в файл или передают в консоль запросов. Ниже каждый способ разобран для платформы 8.3 с интерфейсом «Такси». Всё описанное относится к платформе, а не к конкретной конфигурации: работает одинаково в БП, ЗУП, УТ и самописных базах.

Какой способ просмотра выбрать

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

СпособКогда подходитЧто нужноОграничения
Отладчик, Shift+F9Вы разработчик и есть доступ к КонфигураторуПрава на отладку, точка остановаНа сервере нужна включённая отладка
Табло отладчикаНужно следить за таблицей при пошаговом проходеТо жеДля больших таблиц неудобно
Консоль запросовТаблица — результат запроса или её надо отфильтроватьВнешняя обработка консолиКолонки должны иметь тип
Табличный документПоказать результат пользователю или себе без отладчикаПара строк кодаНужно править код или обработку
Файл через ЗначениеВФайлТаблицу надо перенести из рабочей базы в тестовуюДоступ к каталогу на сервереФайл читается только средствами 1С

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

Как посмотреть таблицу значений в отладчике

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

Остановить код в нужном месте

  1. Откройте модуль в Конфигураторе и поставьте курсор на строку после заполнения таблицы. Например, сразу после ТЗ = Запрос.Выполнить().Выгрузить();.
  2. Нажмите F9, слева появится красная точка.
  3. Запустите отладку: Отладка → Начать отладку или F5.
  4. Выполните в пользовательском режиме действие, которое запускает этот код.

Если точка останова стоит на самой строке присваивания, таблица ещё пустая: строка выполнится только после шага F10. Это частая причина фразы «отладчик показывает Неопределено».

Окно «Вычислить выражение»

Выделите имя переменной в модуле и нажмите Shift+F9. В окне появится выражение и его значение с типом «Таблица значений».

Разверните узел. Внутри будут служебные свойства таблицы (колонки, индексы) и сами строки, пронумерованные с нуля. Каждую строку можно развернуть дальше и увидеть значения по колонкам.

Для таблицы больше десятка строк такой режим неудобен. Используйте просмотр в отдельном окне: в окне вычисления выражения есть команда, которая открывает значение коллекции сеткой, как обычный список. Найдите её в командной панели окна или в контекстном меню по правой кнопке на значении. Там видно все колонки сразу, а строки прокручиваются.

Вычисление выражений по таблице

В поле выражения можно писать не только имя переменной, но и любое выражение на встроенном языке. Несколько полезных:

ТЗ.Количество()
ТЗ[0].Сумма
ТЗ.Итог("Сумма")
ТЗ.Найти(Справочники.Номенклатура.НайтиПоКоду("00-000123"), "Номенклатура")
ТЗ.НайтиСтроки(Новый Структура("Склад", Склад))

Последнее выражение вернёт массив подходящих строк. Это удобно, когда в таблице 5000 строк, а нужны три по конкретному складу.

Табло

Если надо видеть таблицу на каждом шаге цикла, добавьте переменную в табло: Отладка → Табло, затем перетащите туда выражение или введите его вручную. Значение будет пересчитываться при каждом шаге F10/F11.

На клиент-серверной базе остановка на серверном коде срабатывает, только если на сервере включена отладка: служба агента сервера должна быть запущена с ключом -debug. Изменение параметров службы требует её перезапуска, а перезапуск обрывает сеансы всех пользователей. Делайте это на тестовом сервере или в согласованное окно, не посреди рабочего дня.

Колонки, типы и размер: разбор структуры таблицы

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

У каждой колонки смотрите три свойства:

  • 🏷️ Имя — именно по нему идёт обращение Строка.ИмяКолонки. Пробелов и точек в имени быть не может.
  • 🧩 ТипЗначения — описание типов. Пустое описание значит «произвольный тип».
  • 📝 Заголовок — подпись для вывода, на код не влияет.

Быстрые выражения для проверки структуры:

ТЗ.Колонки.Количество()
ТЗ.Колонки[0].Имя
ТЗ.Колонки.Найти("Количество") <> Неопределено
ТЗ.Колонки.Сумма.ТипЗначения.Типы()

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

Когда таблица получена выгрузкой запроса, типы колонок проставляются автоматически. Когда её собрали вручную через Колонки.Добавить("Сумма") без второго параметра, тип будет произвольным. Это влияет на передачу таблицы в запрос (см. ниже).

Просмотр таблицы значений через консоль запросов

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

Результат запроса как таблица

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

Таблица значений как параметр запроса

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

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	Т.Номенклатура КАК Номенклатура,
|	Т.Количество КАК Количество
|ПОМЕСТИТЬ ВТ_Данные
|ИЗ
|	&ТаблицаДанных КАК Т
|;
|ВЫБРАТЬ
|	ВТ.Номенклатура,
|	СУММА(ВТ.Количество) КАК Количество
|ИЗ
|	ВТ_Данные КАК ВТ
|СГРУППИРОВАТЬ ПО
|	ВТ.Номенклатура";
Запрос.УстановитьПараметр("ТаблицаДанных", ТЗ);
Результат = Запрос.Выполнить().Выгрузить();

Таблицу значений нельзя использовать в запросе напрямую как источник. Сначала её помещают во временную таблицу (ПОМЕСТИТЬ), и уже из временной таблицы выбирают.

Перенос таблицы из рабочей базы в консоль

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

ЗначениеВФайл("C:\Temp\tz_ostatki.txt", ТЗ);

Затем в тестовой базе или в консоли с режимом выполнения кода прочитайте её:

ТЗ = ЗначениеИзФайла("C:\Temp\tz_ostatki.txt");

Путь указывается на той машине, где выполняется код. Для серверного модуля на клиент-серверной базе это каталог на сервере 1С, и у пользователя службы должны быть права на запись туда.

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

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

Когда нужно показать таблицу без отладчика, проще всего вывести её в табличный документ. Он открывается в отдельном окне, его можно сохранить в Excel.

Код ниже формирует документ на сервере и возвращает его на клиент. Шапка — имена колонок, дальше строки.

&НаСервере
Функция ТаблицаВТабличныйДокумент(ТЗ)

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

	НомерКолонки = 0;
	Для Каждого Колонка Из ТЗ.Колонки Цикл
		НомерКолонки = НомерКолонки + 1;
		Адрес = СтрШаблон("R1C%1", Формат(НомерКолонки, "ЧГ=0"));
		ТабДок.Область(Адрес).Текст = Колонка.Имя;
	КонецЦикла;

	НомерСтроки = 1;
	Для Каждого СтрокаТЗ Из ТЗ Цикл
		НомерСтроки = НомерСтроки + 1;
		НомерКолонки = 0;
		Для Каждого Колонка Из ТЗ.Колонки Цикл
			НомерКолонки = НомерКолонки + 1;
			Адрес = СтрШаблон("R%1C%2", Формат(НомерСтроки, "ЧГ=0"), Формат(НомерКолонки, "ЧГ=0"));
			ТабДок.Область(Адрес).Текст = Строка(СтрокаТЗ[Колонка.Имя]);
		КонецЦикла;
	КонецЦикла;

	Возврат ТабДок;

КонецФункции

На клиенте:

ТабДок = ТаблицаВТабличныйДокумент(ТЗ);
ТабДок.Показать("Содержимое таблицы");

Здесь ТЗ должна быть доступна на сервере: сама таблица значений на тонком клиенте не существует. Если таблица — реквизит формы, на сервере получите её через РеквизитФормыВЗначение("ИмяРеквизита").

Для таблиц на 10 000 строк и больше вывод по ячейкам медленный. Используйте построитель отчёта или схему компоновки с внешним источником данных: они выводят таблицу целиком и сразу дают отборы и итоги.

Быстрый вариант: сообщения

Для таблицы на 5–20 строк иногда хватает вывода в окно сообщений. Каждую строку собирают в текст и выводят через Сообщить():

Для Каждого СтрокаТЗ Из ТЗ Цикл
	Сообщить(СтрШаблон("%1 | %2", СтрокаТЗ.Номенклатура, СтрокаТЗ.Количество));
КонецЦикла;

Такой код удобно вставить временно и убрать после проверки. Для больших таблиц он не годится: окно сообщений переполняется и тормозит интерфейс.

Внешняя обработка для просмотра таблиц

Если смотреть таблицы приходится регулярно, сделайте небольшую внешнюю обработку . Минимальный вариант:

  1. В Конфигураторе: Файл → Новый → Внешняя обработка.
  2. Добавьте реквизит обработки ПутьКФайлу (строка) и реквизит формы Результат с типом «Табличный документ».
  3. Выведите Результат на форму полем табличного документа.
  4. Добавьте команду «Показать». В её серверном обработчике прочитайте таблицу через ЗначениеИзФайла(ПутьКФайлу) и заполните Результат функцией из предыдущего раздела.
  5. Сохраните обработку в файл .epf и открывайте через Файл → Открыть.

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

Вариант сложнее — показывать таблицу не табличным документом, а полем таблицы формы с сортировкой и отбором. Тогда колонки реквизита формы создают программно методом ИзменитьРеквизиты(), а элементы формы — через Элементы.Добавить(). Это больше кода, зато пользователь сможет сортировать колонки щелчком и искать по Ctrl+F.

Запуск внешних обработок в базах с включённой защитой от опасных действий сопровождается предупреждением. Открывайте только свои проверенные файлы и не отключайте защиту для всех пользователей ради одной обработки.

Частые ошибки при просмотре таблицы

Диагностика: выберите симптом

Отдельно про сравнение. Две таблицы с одинаковыми данными через = не сравниваются: это разные объекты, результат будет Ложь. Сравнивайте количество строк, итоги по числовым колонкам или выгружайте обе в табличные документы и сверяйте глазами.

Частые вопросы

Можно ли посмотреть таблицу значений без Конфигуратора?
Только если код сам выводит её: в табличный документ, в сообщение или в файл. Из пользовательского режима к переменной в памяти не добраться.
Как скопировать таблицу из отладчика в Excel?
Откройте значение в отдельном окне сеткой, выделите строки и скопируйте через Ctrl+C. Надёжнее вывести таблицу в табличный документ и сохранить его в формате xlsx.
Чем таблица значений отличается от дерева значений при просмотре?
У дерева у каждой строки есть подчинённые строки. В отладчике дерево разворачивают по уровням через свойство Строки, в табличный документ выводят рекурсивно.
Почему в отладчике значения ячеек показаны как ссылки, а не названия?
Отладчик показывает представление ссылки. Чтобы увидеть реквизит, вычислите выражение вида ТЗ[0].Номенклатура.Артикул.
Сколько строк можно спокойно смотреть в отладчике?
Жёсткого лимита нет, но таблицы на десятки тысяч строк открываются медленно. Для них сначала отберите строки через НайтиСтроки или скопируйте таблицу и сверните её методом Свернуть.