Разработка и Конфигурация · 12 мин
Как посмотреть массив в отладчике 1С
Как посмотреть массив в отладчике 1С: табло, окно «Вычислить выражение», просмотр вложенных структур, поиск элемента, типичные ошибки и практические приёмы.
Массив — один из самых частых типов данных в коде 1С: результаты запросов, списки отобранных документов, параметры обработчиков. При отладке почти всегда возникает задача быстро увидеть, сколько элементов в массиве и что в них лежит. Отладчик 1С даёт для этого несколько инструментов, и выбор зависит от того, нужен беглый взгляд на одно значение или детальный разбор вложенных структур.
Основные способы — табло (окно мгновенного просмотра по наведению или Shift+F9), окно «Вычислить выражение» и подстановка промежуточных значений через «Включить в табло». Каждый способ показывает массив как коллекцию с индексами, раскрываемую по щелчку. Ниже разобраны все варианты с конкретными шагами, ограничениями и типичными ошибками.
Как открыть просмотр значения переменной в отладчике
Перед просмотром массива нужно, чтобы отладка была запущена и выполнение остановилось в точке, где переменная уже заполнена. Убедитесь, что в конфигураторе включён режим отладки (Отладка → Начать отладку или F5), а точка останова стоит после строки, где массив получает значение. Если остановиться раньше, переменная будет либо неопределена, либо содержать пустой массив.
Самый быстрый способ увидеть содержимое — установить курсор на имя переменной (или выделить выражение целиком) и нажать Shift+F9. Откроется окно «Выражение» с текущим значением. Альтернатива — просто навести указатель мыши на переменную в коде: появится всплывающая подсказка со значением, но для массива она показывает только тип и количество элементов, без содержимого.
Для длительного наблюдения за переменной при пошаговом выполнении используется табло: Отладка → Табло или сочетание Ctrl+Alt+W. В табло можно добавить несколько выражений, и их значения будут обновляться на каждом шаге отладки — это удобно, когда массив меняется внутри цикла.
- 1Запустите отладку (F5) и дождитесь остановки на точке после заполнения массива
- 2Выделите имя переменной с массивом в коде модуля
- 3Нажмите Shift+F9 — откроется окно «Выражение»
- 4Раскройте массив щелчком по плюсу: появятся элементы с индексами от 0
- 5Проверьте количество элементов выражением Массив.Количество() в этом же окне
Просмотр массива через окно «Вычислить выражение»
Окно «Выражение» (Shift+F9) — основной инструмент детального просмотра. Массив отображается в нём как узел дерева со значком типа «Массив» и количеством элементов. Щелчок по плюсу раскрывает список элементов с индексами: [0], [1], [2] и так далее. Напротив каждого индекса видны значение и тип элемента.
Если элементом массива является сложный объект — структура, строка таблицы значений, ссылка на документ — его тоже можно раскрыть. Структура раскроется по ключам, ссылка покажет представление объекта. Так можно спускаться по вложенности на любую глубину, например: массив → структура → вложенный массив → значение.
В поле ввода окна можно менять выражение, не закрывая окно. Это позволяет обращаться к конкретным элементам и методам: Массив[0] — первый элемент, Массив.Количество() — размер, Массив.ВГраница() — индекс последнего элемента. Для массива структур работают и составные выражения вида Массив[0].Номенклатура.
// Примеры выражений для окна «Вычислить выражение»
Массив.Количество() // число элементов
Массив.ВГраница() // индекс последнего элемента
Массив[0] // первый элемент
Массив[2].Наименование // свойство третьего элемента, если это структура
ТипЗнч(Массив[0]) // тип первого элементаТабло: наблюдение за массивом при пошаговом выполнении
Табло отличается от окна «Выражение» тем, что сохраняет список выражений между шагами отладки. Откройте его через Ctrl+Alt+W и добавьте переменную: либо перетащите имя из кода, либо введите выражение вручную в колонку «Выражение». Значение в табло обновляется автоматически после каждого шага F10/F11.
Массив в табло раскрывается так же, как в окне «Выражение», — по плюсу со списком индексов. Практический приём: добавьте в табло два выражения — сам массив и Массив.Количество(). Тогда вы будете видеть и содержимое, и момент, когда размер массива меняется при проходе цикла или вызове процедуры.
Учтите ограничение: если выражение в табло перестаёт быть доступным в текущем контексте (например, вы вышли из процедуры, где объявлена локальная переменная), в колонке значения появится сообщение о невозможности вычисления. Это нормально — после возврата в контекст значение снова вычислится.
Как посмотреть массив внутри структуры, запроса и таблицы значений
На практике массив редко лежит в отдельной переменной — чаще он вложен в другие объекты. Для структуры раскройте её в окне «Выражение», найдите нужный ключ и раскройте его — массив внутри откроется по индексам. Либо сразу введите полный путь: Параметры.СписокТоваров.
Результат запроса — частый источник массивов. Выражение РезультатЗапроса.Выгрузить() вернёт таблицу значений, которую можно раскрыть по строкам и колонкам прямо в отладчике. Если нужен именно массив, используйте РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Номенклатура") — получите массив значений одной колонки и увидите его содержимое.
Для таблиц значений, переданных в массиве, действует то же правило раскрытия: массив → строка таблицы → колонки. Если вложенность глубокая и раскрывать дерево долго, быстрее ввести в окне «Выражение» полный путь к нужному значению одной строкой.
Просмотр больших массивов и поиск нужного элемента
Когда в массиве сотни или тысячи элементов, раскрывать дерево и листать глазами неудобно. В этом случае эффективнее вычислять адресные выражения. Чтобы проверить конкретный элемент, введите Массив[150]. Чтобы найти индекс значения, используйте метод Массив.Найти(ИскомоеЗначение) — он вернёт индекс или Неопределено, если элемента нет.
Для массива структур метод Найти не подходит — потребуется цикл. В отладчике такой цикл можно выполнить через временную вставку кода: поставьте точку останова, добавьте в модуль временный фрагмент с циклом поиска и выводом результата в переменную, а после отладки удалите его. Это безопасно, если не делать запись в базу.
Ещё один приём для больших коллекций — оценка границ: Массив.ВГраница() покажет индекс последнего элемента, и вы сразу поймёте масштаб. Для проверки крайних значений достаточно посмотреть Массив[0] и Массив[Массив.ВГраница()] — часто этого хватает, чтобы убедиться в правильности заполнения.
Как выбрать способ просмотра
Типичные ошибки и ограничения при отладке массивов
Самая частая проблема — попытка посмотреть массив до его заполнения. Если точка останова стоит на строке создания массива (Массив = Новый Массив;), значение ещё не присвоено — переменная будет Неопределено. Сделайте шаг F10 и только потом открывайте просмотр.
Вторая ошибка — обращение по несуществующему индексу. Выражение Массив[10] при длине массива 5 вызовет ошибку, которая прервёт отладку или выдаст исключение прямо в окне вычисления. Перед обращением по индексу всегда проверяйте Массив.Количество().
Третья группа ошибок связана с контекстом. В клиент-серверном режиме отладчик показывает значения того контекста, где остановлено выполнение: переменная, доступная на клиенте, может быть недоступна в серверной процедуре. Также помните, что на тонком клиенте массивы с данными, полученными с сервера, отображаются только если включена отладка соответствующего соединения.
Альтернативные способы: сообщения и внешние инструменты
Когда интерактивная отладка недоступна (фоновое задание, регламентная операция на сервере без подключения отладчика), содержимое массива выводят через Сообщить() или запись в журнал регистрации. Для этого массив преобразуют в строку: пробегают циклом и склеивают представления элементов. Способ грубый, но работает везде, где недоступен интерактивный просмотр.
Для фоновых заданий всё же сначала попробуйте штатную отладку: в настройках отладки включите автоматическое подключение к фоновым заданиям (Отладка → Подключение → настройка автоматического подключения). Тогда массив внутри фонового задания можно смотреть тем же Shift+F9, без вставки отладочных сообщений в код.
Как проверить, что массив просмотрен корректно
После просмотра сверьте фактическое содержимое с ожидаемым. Минимальный набор проверок: количество элементов совпадает с логикой заполнения, типы элементов соответствуют ожиданиям (например, все элементы — ссылки, а не строки), первый и последний элементы содержат осмысленные значения.
Если массив заполняется из запроса, полезно сравнить Массив.Количество() с количеством строк результата запроса. Расхождение — признак того, что часть данных потерялась при обработке. Для массивов структур проверьте наличие обязательных ключей у первого элемента: Массив[0].Свойство("Ключ") вернёт Истина, если ключ есть.
Как проверить результат
Массив.Количество() совпадает с ожидаемым числом записей
Меньше или больше ожидаемого — данные теряются или дублируются
ТипЗнч(Массив[0]) соответствует логике кода
Неожиданный тип, например строка вместо ссылки
Массив[0] и последний элемент содержат корректные значения
Пустые значения или Неопределено на краях массива
Что важно запомнить
Массив в отладчике 1С смотрят через Shift+F9 (разовый просмотр) или табло Ctrl+Alt+W (наблюдение по шагам); элементы раскрываются по индексам с нуля. Для больших массивов используйте адресные выражения: Количество(), ВГраница(), обращение по индексу и Найти(). Проверяйте контекст и момент заполнения массива, не вычисляйте выражения с побочными эффектами и удаляйте временный отладочный код.
Частые вопросы
Почему вместо содержимого массива я вижу только «Массив» и число?
Это свёрнутое представление: число рядом — количество элементов. Щёлкните по значку плюса слева от значения в окне «Выражение» или табло — массив раскроется в список элементов с индексами [0], [1] и далее. Во всплывающей подсказке при наведении мыши содержимое не раскрывается, там всегда только тип и размер.
Можно ли изменить элемент массива прямо в отладчике?
Да, в табло и в окне «Выражение» значение можно редактировать: встаньте на строку элемента и введите новое значение в колонку значения. Это удобно для проверки гипотез без перезапуска отладки. Учтите, что изменение влияет на дальнейшее выполнение кода, поэтому применяйте его осознанно и только в тестовой базе.
Как посмотреть массив, если точка останова не срабатывает?
Проверьте, что отладка запущена и предмет отладки подключён (Отладка → Подключение). Для серверного кода убедитесь, что сервер 1С запущен в отладочном режиме, для фоновых заданий — что включено автоматическое подключение. Если код выполняется в другом сеансе, подключите этот сеанс в списке предметов отладки.
Как быстро найти элемент в массиве из тысячи значений?
Не листайте дерево — вычислите выражение. Для примитивных значений подойдёт Массив.Найти(Значение): он вернёт индекс или Неопределено. Для массива структур прямого поиска нет — добавьте в код временный цикл с условием и точкой останова внутри, либо проверяйте отдельные элементы по индексам через выражения вида Массив[N].Поле.
Почему выражение с массивом выдаёт ошибку «Переменная не определена»?
Вычисление выполняется в текущем контексте остановки. Если вы вышли из процедуры, где объявлен массив, локальная переменная недоступна. Также ошибка возникает, если имя введено с опечаткой или переменная относится к другому модулю. Вернитесь в нужный контекст по стеку вызовов (Окно «Стек вызовов») и повторите вычисление.
Чем отличается просмотр массива на тонком клиенте и в файловой базе?
Приёмы одинаковые, но в клиент-серверном режиме важно, какой контекст отлаживается: клиентский или серверный. Массив, сформированный на сервере, виден только при остановке в серверном коде. В файловой базе вся отладка идёт в одном процессе, поэтому таких ограничений нет — любой массив доступен из любой точки останова.