Просмотр содержимого таблицы значений: от точки останова до табличного документа
Содержание
Быстрее всего посмотреть таблицу значений в 1С через отладчик: поставьте точку останова (F9) на строке после заполнения таблицы, запустите отладку (F5), выделите имя переменной и нажмите Shift+F9. Откроется окно «Вычислить выражение», где таблицу можно развернуть до строк и колонок или открыть её содержимое в отдельном окне в виде сетки.
Если отладчик недоступен, например ошибка воспроизводится только у пользователя в рабочей базе, таблицу выводят в табличный документ, сохраняют в файл или передают в консоль запросов. Ниже каждый способ разобран для платформы 8.3 с интерфейсом «Такси». Всё описанное относится к платформе, а не к конкретной конфигурации: работает одинаково в БП, ЗУП, УТ и самописных базах.
Какой способ просмотра выбрать
Таблица значений живёт только в памяти, пока выполняется код. Сохранённого «объекта», который можно открыть из меню, у неё нет. Поэтому способ зависит от того, где и когда вы её ловите.
| Способ | Когда подходит | Что нужно | Ограничения |
|---|---|---|---|
Отладчик, Shift+F9 | Вы разработчик и есть доступ к Конфигуратору | Права на отладку, точка останова | На сервере нужна включённая отладка |
| Табло отладчика | Нужно следить за таблицей при пошаговом проходе | То же | Для больших таблиц неудобно |
| Консоль запросов | Таблица — результат запроса или её надо отфильтровать | Внешняя обработка консоли | Колонки должны иметь тип |
| Табличный документ | Показать результат пользователю или себе без отладчика | Пара строк кода | Нужно править код или обработку |
Файл через ЗначениеВФайл | Таблицу надо перенести из рабочей базы в тестовую | Доступ к каталогу на сервере | Файл читается только средствами 1С |
Для разовой проверки при разработке хватает отладчика. Если задача повторяется (смотреть выгрузки, остатки, результаты обработок), заведите внешнюю обработку один раз и пользуйтесь ей постоянно.
Как посмотреть таблицу значений в отладчике
Отладчик — основной инструмент. Он показывает не только значения, но и типы каждой ячейки, что часто важнее самих цифр.
Остановить код в нужном месте
- Откройте модуль в Конфигураторе и поставьте курсор на строку после заполнения таблицы. Например, сразу после
ТЗ = Запрос.Выполнить().Выгрузить();. - Нажмите
F9, слева появится красная точка. - Запустите отладку:
Отладка → Начать отладкуилиF5. - Выполните в пользовательском режиме действие, которое запускает этот код.
Если точка останова стоит на самой строке присваивания, таблица ещё пустая: строка выполнится только после шага 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", СтрокаТЗ.Номенклатура, СтрокаТЗ.Количество));
КонецЦикла;
Такой код удобно вставить временно и убрать после проверки. Для больших таблиц он не годится: окно сообщений переполняется и тормозит интерфейс.
Внешняя обработка для просмотра таблиц
Если смотреть таблицы приходится регулярно, сделайте небольшую внешнюю обработку . Минимальный вариант:
- В Конфигураторе:
Файл → Новый → Внешняя обработка. - Добавьте реквизит обработки
ПутьКФайлу(строка) и реквизит формыРезультатс типом «Табличный документ». - Выведите
Результатна форму полем табличного документа. - Добавьте команду «Показать». В её серверном обработчике прочитайте таблицу через
ЗначениеИзФайла(ПутьКФайлу)и заполнитеРезультатфункцией из предыдущего раздела. - Сохраните обработку в файл
.epfи открывайте черезФайл → Открыть.
Такая обработка закрывает связку с предыдущими разделами: в рабочей базе таблицу сохраняют в файл одной строкой, а смотрят в удобной форме.
Вариант сложнее — показывать таблицу не табличным документом, а полем таблицы формы с сортировкой и отбором. Тогда колонки реквизита формы создают программно методом ИзменитьРеквизиты(), а элементы формы — через Элементы.Добавить(). Это больше кода, зато пользователь сможет сортировать колонки щелчком и искать по Ctrl+F.
Запуск внешних обработок в базах с включённой защитой от опасных действий сопровождается предупреждением. Открывайте только свои проверенные файлы и не отключайте защиту для всех пользователей ради одной обработки.
Частые ошибки при просмотре таблицы
Отдельно про сравнение. Две таблицы с одинаковыми данными через = не сравниваются: это разные объекты, результат будет Ложь. Сравнивайте количество строк, итоги по числовым колонкам или выгружайте обе в табличные документы и сверяйте глазами.