Разработка и Конфигурация · 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 и больше — элементы существуют
-1 — массив пуст
Соответствует ожидаемому типу данных
Неопределено или неожиданный тип — проверьте логику заполнения массива
Типичные ошибки при обращении к первому элементу
Самая распространённая ошибка — обращение к Массив[0] без проверки заполненности. Вторая по частоте — путаница с нумерацией: разработчики, привыкшие к языкам с индексацией с единицы (или к нумерации строк табличных частей в пользовательском интерфейсе), пытаются получить первый элемент как Массив[1] и получают второй элемент либо ошибку, если в массиве всего один элемент.
Ещё одна проблема — предположение о типе первого элемента без проверки. Если массив заполняется из разных источников, первый элемент может оказаться значением Неопределено, и последующий вызов его свойств или методов завершится ошибкой.
FAQ
С какого индекса начинается массив в 1С?
С нуля. Первый элемент — Массив[0], последний — Массив[Массив.ВГраница()]. Нумерация с единицы в 1С встречается в других местах, например при обращении к символам строки функцией Сред(), что иногда вызывает путаницу.
Что будет, если обратиться к элементу пустого массива?
Возникнет исключение «Индекс находится за границами массива», и выполнение текущей процедуры прервётся. Если код работает в транзакции, транзакция будет отменена. Поэтому перед обращением проверяйте Количество() или ВГраница().
Чем Массив[0] отличается от Массив.Получить(0)?
По результату — ничем: оба варианта возвращают первый элемент и оба вызывают ошибку при выходе за границы. Разница в том, что квадратные скобки позволяют ещё и записывать значение, а Получить() предназначен только для чтения.
Как получить первый элемент, если массив может быть пустым, одной строкой?
Короткой встроенной конструкции нет. Обычно пишут проверку через Если, либо выделяют функцию-обёртку, которая возвращает первый элемент или Неопределено для пустого массива, и переиспользуют её в общем модуле.
Можно ли изменить первый элемент массива?
Да, для обычного массива: Массив[0] = НовоеЗначение или Массив.Установить(0, НовоеЗначение). Для фиксированного массива изменение элементов запрещено — потребуется создать новый массив на его основе.
Как узнать индекс последнего элемента массива?
Методом Массив.ВГраница(), который возвращает Количество() минус один. Для пустого массива результат равен -1, что также служит признаком отсутствия элементов.
Что важно запомнить
Первый элемент массива в 1С — это Массив[0]: индексация начинается с нуля. Перед обращением проверяйте заполненность через Количество() или ВГраница(), чтобы избежать ошибки выхода за границы. Для чтения также подходит метод Получить(0), а изменять элементы фиксированного массива нельзя.