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

Быстрый старт · 10 мин

Как вставить строку в таблицу в 1С

Как вставить строку в табличную часть документа в 1С клавишами и кнопками, а также программно через Добавить() и Вставить(). Примеры кода, ошибки и FAQ.

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

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

Важный нюанс: вставить строку «в середину» списка в пользовательском режиме типовых конфигураций можно далеко не всегда. Обычно строка добавляется в конец, а порядок затем меняется кнопками перемещения. Как обойти это ограничение — в отдельном разделе.

Как добавить строку в табличную часть документа в пользовательском режиме

Откройте документ, например «Поступление товаров и услуг», и перейдите на вкладку с табличной частью («Товары», «Услуги»). Поставьте курсор в любую строку таблицы и нажмите клавишу Insert (Ins) — в конец списка добавится пустая строка, готовая к заполнению. Это самый быстрый способ, он работает практически во всех конфигурациях: «Бухгалтерия предприятия», «Управление торговлей», «ERP», «Зарплата и управление персоналом».

Альтернатива — кнопка «Добавить» на командной панели таблицы (обычно значок с зелёным плюсом) или пункт «Добавить» в контекстном меню по правой кнопке мыши. В управляемых формах также доступна кнопка «Ещё» → «Добавить». Если нужно добавить строку, похожую на существующую, используйте копирование: клавиша F9 или команда «Скопировать» — новая строка создастся с уже заполненными полями, останется поправить количество и цену.

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

Порядок действий в пользовательском режиме
  1. 1
    Откройте документ и перейдите на вкладку с табличной частью
  2. 2
    Установите курсор в таблицу и нажмите Insert или кнопку «Добавить»
  3. 3
    Заполните обязательные поля новой строки: номенклатуру, количество, цену
  4. 4
    Запишите и проведите документ, убедитесь в отсутствии сообщений об ошибках

Как вставить строку в середину списка, а не в конец

В типовых формах новая строка почти всегда попадает в конец табличной части — кнопки «вставить выше текущей» в стандартном интерфейсе нет. Чтобы расположить строку в нужном месте, добавьте её в конец, а затем переместите кнопками со стрелками «Переместить вверх» / «Переместить вниз» на командной панели таблицы или сочетаниями Ctrl+Shift+стрелка вверх/вниз.

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

Программное добавление строки: метод Добавить()

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

НоваяСтрока = ДокументОбъект.Товары.Добавить();

НоваяСтрока.Номенклатура = НоменклатураСсылка;

НоваяСтрока.Количество = 5;

НоваяСтрока.Цена = 1200;

НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;

ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

Тот же метод работает для таблицы значений: ТаблицаЗначений.Добавить() создаёт строку с пустыми значениями колонок, описанных в коллекции Колонки. Если колонка не добавлена в таблицу значений явно, обращение к ней вызовет ошибку «Поле объекта не обнаружено» — это одна из самых частых проблем у начинающих разработчиков.

Для табличного поля на форме добавление через Элементы.Товары.ДобавитьСтроку() (управляемые формы) инициирует интерактивное добавление с отработкой событий «ПриНачалеРедактирования». Если нужно добавить строку без интерактива, работайте с данными формы — реквизитом типа «ДанныеФормыКоллекция», а не с элементом формы.

Вставка строки в нужную позицию: метод Вставить()

Метод Вставить(Индекс) вставляет строку в произвольную позицию коллекции. Индексация в 1С начинается с нуля: Товары.Вставить(0) вставит строку первой, сдвинув остальные вниз. Если передать индекс, равный количеству строк, поведение будет аналогично Добавить().

// Вставить строку второй в табличной части

НоваяСтрока = ДокументОбъект.Товары.Вставить(1);

НоваяСтрока.Номенклатура = НоменклатураСсылка;

НоваяСтрока.Количество = 1;

Для перемещения уже существующей строки используйте метод Сдвинуть(Строка, Смещение): Товары.Сдвинуть(Товары[5], -2) поднимет шестую строку на две позиции вверх. Отрицательное смещение двигает строку к началу, положительное — к концу.

Добавить() или Вставить()

Добавить()

Строка попадает в конец коллекции. Подходит для большинства обработок загрузки данных, когда порядок не важен или задаётся сортировкой.

Вставить(Индекс)

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

Сдвинуть()

Не создаёт строку, а меняет позицию существующей. Применяется для переупорядочивания без потери заполненных данных.

Вставка строки в табличный документ при формировании печатной формы

Отдельный случай — табличный документ (объект ТабличныйДокумент), из которого формируются печатные формы. Здесь «строка» — это область, и вставляется она методом ВставитьОбласть(). Это нужно, когда требуется встроить дополнительные строки в уже сформированную часть документа, например вставить итоговую строку между секциями.

ТабДок = Новый ТабличныйДокумент;

// ... вывод основных областей ...

ОбластьПриемник = ТабДок.Область(5, , 5, ); // строка 5

ТабДок.ВставитьОбласть(Макет.Область("СтрокаИтог"), ОбластьПриемник);

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

Типичные ошибки и как их избежать

Самая распространённая ошибка пользователей — попытка добавить строку в документ, который недоступен для редактирования: закрыт период, документ помечен на удаление или у пользователя нет прав. Признак — неактивные кнопки «Добавить» и Insert не срабатывает. Проверьте дату запрета редактирования и права доступа.

У разработчиков лидируют три проблемы: обращение к колонке, которой нет в таблице значений; забытый Записать() после программного добавления строки в объект (данные теряются при закрытии); и путаница между данными формы и элементом формы в управляемом приложении. Ещё одна ловушка — модификация коллекции внутри цикла обхода этой же коллекции: при вставке строк в цикле Для Каждого легко получить бесконечный цикл, поэтому вставляйте в отдельный проход или по индексам с конца.

Типичные ошибки
01
Добавление строки в цикле обхода той же коллекции — бесконечный цикл или пропуск строк
02
Отсутствие Записать() после программного добавления — строка не сохраняется в базе
03
Обращение к несуществующей колонке таблицы значений — ошибка «Поле объекта не обнаружено»
04
Попытка редактировать документ в закрытом периоде — кнопки добавления неактивны
Контрольные точки

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

Строка в табличной части документа
Норма

Строка видна в списке, документ проводится без сообщений

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

Сообщение о незаполненных полях или строка исчезает после записи

Программное добавление
Норма

После Записать() строка присутствует при повторном открытии объекта

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

Строка есть только до закрытия формы — значит, объект не записан

Позиция вставленной строки
Норма

Строка стоит на нужном месте, нумерация пересчитана

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

Строка в конце — вероятно, использован Добавить() вместо Вставить()

Ответы на частые вопросы

Почему клавиша Insert не добавляет строку в таблицу?

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

Можно ли вставить сразу несколько строк в табличную часть?

Интерактивно — через кнопку «Подбор», где в форме выбора отмечается несколько позиций номенклатуры, или копированием из буфера обмена, если конфигурация поддерживает вставку из Excel. Программно — циклом с вызовом Добавить() для каждой строки источника данных.

Как скопировать строку в табличной части, а не создавать пустую?

Выделите строку и нажмите F9 или выберите «Скопировать» в контекстном меню. Программно используйте методы ЗаполнитьЗначенияСвойств() для новой строки со ссылкой на строку-источник, либо Выгрузить()/Загрузить() для таблиц значений.

Чем отличается вставка строки в табличную часть от таблицы значений?

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

Почему программно добавленная строка исчезает после закрытия формы?

Потому что изменения выполнены только в данных формы или в объекте в памяти, но объект не записан. Добавьте вызов Записать() у объекта документа. Если работа идёт в форме, убедитесь, что изменяется реквизит формы с данными объекта, а не локальная копия коллекции.

Как вставить строку в таблицу на управляемой форме из кода?

Обращайтесь к реквизиту формы с данными коллекции: Объект.Товары.Добавить() в модуле формы. Для интерактивного добавления с отработкой событий используйте Элементы.Товары.ДобавитьСтроку(). Прямое создание строки через элемент формы без данных не сработает — элемент лишь отображает коллекцию.

Итог

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

В пользовательском режиме строка добавляется клавишей Insert, кнопкой «Добавить» или копированием (F9) и попадает в конец списка — позицию меняйте кнопками перемещения. Программно используйте Добавить() для конца коллекции, Вставить(Индекс) для конкретной позиции и ВставитьОбласть() для табличного документа. После программных изменений объекта обязательно вызывайте Записать(), а перед массовыми обработками делайте резервную копию базы.