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

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

Как посмотреть массив в отладчике 1С

Как посмотреть массив в отладчике 1С: табло, окно «Вычислить выражение», просмотр вложенных структур, поиск элемента, типичные ошибки и практические приёмы.

Массив — один из самых частых типов данных в коде 1С: результаты запросов, списки отобранных документов, параметры обработчиков. При отладке почти всегда возникает задача быстро увидеть, сколько элементов в массиве и что в них лежит. Отладчик 1С даёт для этого несколько инструментов, и выбор зависит от того, нужен беглый взгляд на одно значение или детальный разбор вложенных структур.

Основные способы — табло (окно мгновенного просмотра по наведению или Shift+F9), окно «Вычислить выражение» и подстановка промежуточных значений через «Включить в табло». Каждый способ показывает массив как коллекцию с индексами, раскрываемую по щелчку. Ниже разобраны все варианты с конкретными шагами, ограничениями и типичными ошибками.

Как открыть просмотр значения переменной в отладчике

Перед просмотром массива нужно, чтобы отладка была запущена и выполнение остановилось в точке, где переменная уже заполнена. Убедитесь, что в конфигураторе включён режим отладки (Отладка → Начать отладку или F5), а точка останова стоит после строки, где массив получает значение. Если остановиться раньше, переменная будет либо неопределена, либо содержать пустой массив.

Самый быстрый способ увидеть содержимое — установить курсор на имя переменной (или выделить выражение целиком) и нажать Shift+F9. Откроется окно «Выражение» с текущим значением. Альтернатива — просто навести указатель мыши на переменную в коде: появится всплывающая подсказка со значением, но для массива она показывает только тип и количество элементов, без содержимого.

Для длительного наблюдения за переменной при пошаговом выполнении используется табло: Отладка → Табло или сочетание Ctrl+Alt+W. В табло можно добавить несколько выражений, и их значения будут обновляться на каждом шаге отладки — это удобно, когда массив меняется внутри цикла.

Порядок действий для просмотра массива
  1. 1
    Запустите отладку (F5) и дождитесь остановки на точке после заполнения массива
  2. 2
    Выделите имя переменной с массивом в коде модуля
  3. 3
    Нажмите Shift+F9 — откроется окно «Выражение»
  4. 4
    Раскройте массив щелчком по плюсу: появятся элементы с индексами от 0
  5. 5
    Проверьте количество элементов выражением Массив.Количество() в этом же окне

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

Окно «Выражение» (Shift+F9) — основной инструмент детального просмотра. Массив отображается в нём как узел дерева со значком типа «Массив» и количеством элементов. Щелчок по плюсу раскрывает список элементов с индексами: [0], [1], [2] и так далее. Напротив каждого индекса видны значение и тип элемента.

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

В поле ввода окна можно менять выражение, не закрывая окно. Это позволяет обращаться к конкретным элементам и методам: Массив[0] — первый элемент, Массив.Количество() — размер, Массив.ВГраница() — индекс последнего элемента. Для массива структур работают и составные выражения вида Массив[0].Номенклатура.

bsl
// Примеры выражений для окна «Вычислить выражение»
Массив.Количество()      // число элементов
Массив.ВГраница()        // индекс последнего элемента
Массив[0]                // первый элемент
Массив[2].Наименование   // свойство третьего элемента, если это структура
ТипЗнч(Массив[0])        // тип первого элемента

Табло: наблюдение за массивом при пошаговом выполнении

Табло отличается от окна «Выражение» тем, что сохраняет список выражений между шагами отладки. Откройте его через Ctrl+Alt+W и добавьте переменную: либо перетащите имя из кода, либо введите выражение вручную в колонку «Выражение». Значение в табло обновляется автоматически после каждого шага F10/F11.

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

Учтите ограничение: если выражение в табло перестаёт быть доступным в текущем контексте (например, вы вышли из процедуры, где объявлена локальная переменная), в колонке значения появится сообщение о невозможности вычисления. Это нормально — после возврата в контекст значение снова вычислится.

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

На практике массив редко лежит в отдельной переменной — чаще он вложен в другие объекты. Для структуры раскройте её в окне «Выражение», найдите нужный ключ и раскройте его — массив внутри откроется по индексам. Либо сразу введите полный путь: Параметры.СписокТоваров.

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

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

Просмотр больших массивов и поиск нужного элемента

Когда в массиве сотни или тысячи элементов, раскрывать дерево и листать глазами неудобно. В этом случае эффективнее вычислять адресные выражения. Чтобы проверить конкретный элемент, введите Массив[150]. Чтобы найти индекс значения, используйте метод Массив.Найти(ИскомоеЗначение) — он вернёт индекс или Неопределено, если элемента нет.

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

Ещё один приём для больших коллекций — оценка границ: Массив.ВГраница() покажет индекс последнего элемента, и вы сразу поймёте масштаб. Для проверки крайних значений достаточно посмотреть Массив[0] и Массив[Массив.ВГраница()] — часто этого хватает, чтобы убедиться в правильности заполнения.

Маршрут решения

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

Нужно один раз быстро увидеть содержимоеВыделите переменную и нажмите Shift+F9
Массив меняется в цикле и нужно следить за нимДобавьте массив и Массив.Количество() в табло (Ctrl+Alt+W)
Нужен один элемент из большого массиваВведите выражение с индексом: Массив[N] или Массив.Найти(значение)
Массив вложен в структуру или результат запросаВведите полный путь одним выражением, например Параметры.Товары[0].Цена

Типичные ошибки и ограничения при отладке массивов

Самая частая проблема — попытка посмотреть массив до его заполнения. Если точка останова стоит на строке создания массива (Массив = Новый Массив;), значение ещё не присвоено — переменная будет Неопределено. Сделайте шаг F10 и только потом открывайте просмотр.

Вторая ошибка — обращение по несуществующему индексу. Выражение Массив[10] при длине массива 5 вызовет ошибку, которая прервёт отладку или выдаст исключение прямо в окне вычисления. Перед обращением по индексу всегда проверяйте Массив.Количество().

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

Типичные ошибки
01
Остановка на строке создания массива до присваивания — переменная ещё Неопределено, сделайте шаг F10
02
Обращение Массив[N] без проверки Количество() — ошибка индекса прерывает отладку
03
Вычисление выражения с вызовом функции, изменяющей данные — побочные эффекты в базе
04
Поиск массива в чужом контексте — локальная переменная недоступна после выхода из процедуры

Альтернативные способы: сообщения и внешние инструменты

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

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

Как проверить, что массив просмотрен корректно

После просмотра сверьте фактическое содержимое с ожидаемым. Минимальный набор проверок: количество элементов совпадает с логикой заполнения, типы элементов соответствуют ожиданиям (например, все элементы — ссылки, а не строки), первый и последний элементы содержат осмысленные значения.

Если массив заполняется из запроса, полезно сравнить Массив.Количество() с количеством строк результата запроса. Расхождение — признак того, что часть данных потерялась при обработке. Для массивов структур проверьте наличие обязательных ключей у первого элемента: Массив[0].Свойство("Ключ") вернёт Истина, если ключ есть.

Контрольные точки

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

Количество элементов
Норма

Массив.Количество() совпадает с ожидаемым числом записей

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

Меньше или больше ожидаемого — данные теряются или дублируются

Типы элементов
Норма

ТипЗнч(Массив[0]) соответствует логике кода

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

Неожиданный тип, например строка вместо ссылки

Крайние элементы
Норма

Массив[0] и последний элемент содержат корректные значения

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

Пустые значения или Неопределено на краях массива

Итог

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

Массив в отладчике 1С смотрят через Shift+F9 (разовый просмотр) или табло Ctrl+Alt+W (наблюдение по шагам); элементы раскрываются по индексам с нуля. Для больших массивов используйте адресные выражения: Количество(), ВГраница(), обращение по индексу и Найти(). Проверяйте контекст и момент заполнения массива, не вычисляйте выражения с побочными эффектами и удаляйте временный отладочный код.

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

Почему вместо содержимого массива я вижу только «Массив» и число?

Это свёрнутое представление: число рядом — количество элементов. Щёлкните по значку плюса слева от значения в окне «Выражение» или табло — массив раскроется в список элементов с индексами [0], [1] и далее. Во всплывающей подсказке при наведении мыши содержимое не раскрывается, там всегда только тип и размер.

Можно ли изменить элемент массива прямо в отладчике?

Да, в табло и в окне «Выражение» значение можно редактировать: встаньте на строку элемента и введите новое значение в колонку значения. Это удобно для проверки гипотез без перезапуска отладки. Учтите, что изменение влияет на дальнейшее выполнение кода, поэтому применяйте его осознанно и только в тестовой базе.

Как посмотреть массив, если точка останова не срабатывает?

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

Как быстро найти элемент в массиве из тысячи значений?

Не листайте дерево — вычислите выражение. Для примитивных значений подойдёт Массив.Найти(Значение): он вернёт индекс или Неопределено. Для массива структур прямого поиска нет — добавьте в код временный цикл с условием и точкой останова внутри, либо проверяйте отдельные элементы по индексам через выражения вида Массив[N].Поле.

Почему выражение с массивом выдаёт ошибку «Переменная не определена»?

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

Чем отличается просмотр массива на тонком клиенте и в файловой базе?

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