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