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

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

Как обратиться к первому элементу массива в 1С

Как обратиться к первому элементу массива в 1С: индекс 0, проверка заполненности, методы Получить, ВГраница и Количество, типичные ошибки и примеры кода.

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

Чтобы обратиться к первому элементу массива, используется синтаксис с квадратными скобками: Массив[0]. Такая запись работает и для чтения значения, и для его изменения. Однако прямое обращение без проверки заполненности массива — частая причина ошибки «Индекс находится за границами массива», которая прерывает выполнение кода.

Ниже разобраны базовый синтаксис, безопасные способы обращения к первому элементу, работа с пустыми массивами, особенности методов Получить() и ВГраница(), а также типичные ошибки начинающих разработчиков.

Базовый синтаксис обращения к первому элементу

Для обращения к элементу массива после имени переменной указывают индекс в квадратных скобках. Индексация всегда начинается с нуля, поэтому первый элемент — это Массив[0].

Массив = Новый Массив;

Массив.Добавить("Январь");

Массив.Добавить("Февраль");

Массив.Добавить("Март");

ПервыйЭлемент = Массив[0]; // "Январь"

Сообщить(ПервыйЭлемент);

Тот же синтаксис используется для записи значения в первый элемент:

Массив[0] = "Декабрь"; // теперь первый элемент равен "Декабрь"

Обращение по индексу возвращает значение того типа, который был помещён в массив: строку, число, ссылку на объект, структуру или другой массив. Никакого преобразования типов при этом не происходит.

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

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

Стандартный приём — проверка количества элементов перед обращением:

Если Массив.Количество() > 0 Тогда

ПервыйЭлемент = Массив[0];

Иначе

ПервыйЭлемент = Неопределено;

КонецЕсли;

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

Метод Получить() и его отличие от квадратных скобок

У объекта «Массив» есть метод Получить(Индекс), который возвращает элемент по индексу. Для первого элемента вызов выглядит так:

ПервыйЭлемент = Массив.Получить(0);

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

Для записи значения существует парный метод Установить(Индекс, Значение):

Массив.Установить(0, "Новое значение");

На практике чаще встречается синтаксис с квадратными скобками — он короче и привычнее. Оба способа допустимы, выбор зависит от стандартов разработки, принятых в вашем проекте.

Метод ВГраница() и вычисление индексов

Метод ВГраница() возвращает индекс последнего элемента массива, то есть значение Количество() - 1. Для первого элемента он напрямую не нужен, но он полезен при проверках границ, когда индекс вычисляется динамически:

Индекс = 0;

Если Индекс >= 0 И Индекс <= Массив.ВГраница() Тогда

Значение = Массив[Индекс];

КонецЕсли;

Для пустого массива ВГраница() возвращает -1. Это удобный признак пустоты: если Массив.ВГраница() = -1, то обращаться даже к первому элементу нельзя. Такая проверка компактнее сравнения количества с нулём, хотя по смыслу эквивалентна.

Учтите, что при переборе массива циклом «Для Каждого … Из … Цикл» индексы вообще не используются, и переменная цикла сразу содержит значение элемента. Если задача — получить только первый элемент, полный перебор избыточен: прямое обращение по индексу 0 быстрее и нагляднее.

Способы обращения к первому элементу

Массив[0]

Краткий и наиболее распространённый вариант. Подходит для чтения и записи. Требует предварительной проверки заполненности.

Массив.Получить(0)

Только чтение. Удобен при вычисляемом индексе и когда нужно подчеркнуть отсутствие записи. Также требует проверки границ.

Цикл с Прервать

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

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

Первый элемент результата Выгрузить()

Метод Выгрузить() результата запроса и табличной части возвращает таблицу значений, а не массив, но метод ВыгрузитьКолонку() таблицы значений возвращает именно массив. К нему применимы все описанные правила:

МассивНоменклатуры = ТаблицаТоваров.ВыгрузитьКолонку("Номенклатура");

Если МассивНоменклатуры.Количество() > 0 Тогда

ПерваяПозиция = МассивНоменклатуры[0];

КонецЕсли;

Массив внутри структуры или другого массива

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

Если СтруктураДанных.Свойство("Список") Тогда

ВложенныйМассив = СтруктураДанных.Список;

Если ВложенныйМассив.Количество() > 0 Тогда

ПервыйЭлемент = ВложенныйМассив[0];

КонецЕсли;

КонецЕсли;

Фиксированный массив

Фиксированный массив (тип «ФиксированныйМассив») не позволяет добавлять и удалять элементы, но обращение по индексу работает так же: первый элемент — это ФиксМассив[0]. Изменять значения элементов фиксированного массива нельзя, попытка записи вызовет ошибку.

Проверка результата и отладка

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

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

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

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

Значение Массив.Количество()
Норма

Больше нуля — обращение к [0] безопасно

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

Равно 0 — обращение к [0] вызовет исключение

Значение Массив.ВГраница()
Норма

0 и больше — элементы существуют

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

-1 — массив пуст

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

Соответствует ожидаемому типу данных

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

Неопределено или неожиданный тип — проверьте логику заполнения массива

Типичные ошибки при обращении к первому элементу

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

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

Типичные ошибки
01
Обращение Массив[0] к пустому массиву — исключение «Индекс находится за границами массива» и прерывание кода
02
Использование индекса 1 для первого элемента — возвращается второй элемент или ошибка при массиве из одного элемента
03
Попытка записи в элемент фиксированного массива — ошибка, так как фиксированные коллекции доступны только для чтения
04
Вызов свойств первого элемента без проверки на Неопределено — ошибка «Значение не является значением объектного типа»

FAQ

С какого индекса начинается массив в 1С?

С нуля. Первый элемент — Массив[0], последний — Массив[Массив.ВГраница()]. Нумерация с единицы в 1С встречается в других местах, например при обращении к символам строки функцией Сред(), что иногда вызывает путаницу.

Что будет, если обратиться к элементу пустого массива?

Возникнет исключение «Индекс находится за границами массива», и выполнение текущей процедуры прервётся. Если код работает в транзакции, транзакция будет отменена. Поэтому перед обращением проверяйте Количество() или ВГраница().

Чем Массив[0] отличается от Массив.Получить(0)?

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

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

Короткой встроенной конструкции нет. Обычно пишут проверку через Если, либо выделяют функцию-обёртку, которая возвращает первый элемент или Неопределено для пустого массива, и переиспользуют её в общем модуле.

Можно ли изменить первый элемент массива?

Да, для обычного массива: Массив[0] = НовоеЗначение или Массив.Установить(0, НовоеЗначение). Для фиксированного массива изменение элементов запрещено — потребуется создать новый массив на его основе.

Как узнать индекс последнего элемента массива?

Методом Массив.ВГраница(), который возвращает Количество() минус один. Для пустого массива результат равен -1, что также служит признаком отсутствия элементов.

Итог

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

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