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

Документы и Печать · 8 мин

1С 8: как добавить строку в табличную часть

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

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

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

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

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

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

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

После добавления строка существует только в открытой форме. Чтобы она сохранилась в базе данных, документ нужно записать кнопкой «Записать» или «Провести». Если закрыть форму без записи, добавленные строки будут потеряны.

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

Копирование и дублирование существующих строк

Когда нужно добавить строку, похожую на уже существующую, быстрее её скопировать, чем заполнять заново. Выделите строку и нажмите кнопку «Скопировать» на панели табличной части или клавишу F9. Программа создаст новую строку с теми же значениями колонок.

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

Учтите, что копируются все редактируемые реквизиты строки, включая те, которые могли быть заполнены автоматически (склад, счёт учёта, ставка НДС). Проверьте эти поля в новой строке, особенно если копируете строку из другого документа через буфер обмена.

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

Во встроенном языке 1С табличная часть объекта представляет собой коллекцию строк. Новая строка создаётся методом Добавить(), который возвращает ссылку на созданную строку. Дальше реквизиты строки заполняются присваиванием значений.

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

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

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

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

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

Если код выполняется вне формы — например, в модуле объекта или во внешней обработке, — сначала получают объект документа через ПолучитьОбъект(), изменяют табличную часть и вызывают Записать(). Без записи изменения в базе не сохранятся.

bsl
ДокОбъект = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("00001", ТекущаяДата()).ПолучитьОбъект();
Строка = ДокОбъект.Товары.Добавить();
Строка.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000123");
Строка.Количество = 2;
ДокОбъект.Записать();

Вставка строки в нужную позицию и другие методы коллекции

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

Для массового заполнения полезны смежные методы: Загрузить(ТаблицаЗначений) полностью заменяет содержимое табличной части данными из таблицы значений, а Очистить() удаляет все строки. Перед загрузкой убедитесь, что имена колонок таблицы значений совпадают с именами реквизитов табличной части.

Заполнение реквизитов новой строки и автоподстановка

Интерактивно добавленная строка часто заполняется автоматически: в типовых конфигурациях после выбора номенклатуры подставляются цена, ставка НДС, единица измерения, счета учёта. Эта логика прописана в обработчиках событий формы, например в ТоварыНоменклатураПриИзменении.

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

Типичная ситуация: строка добавлена программно, номенклатура указана, но сумма и НДС пустые. Решение — после заполнения основных реквизитов явно рассчитать сумму либо вызвать штатную процедуру пересчёта строки, если она вынесена в общий модуль конфигурации.

Проверка результата и типичные ошибки

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

Частая ошибка разработчика — обращение к табличной части по неверному имени. Имя в коде должно точно совпадать с именем в конфигураторе, включая регистр не важен, но важны все символы. При ошибке платформа сообщит, что поле объекта не обнаружено.

Вторая распространённая проблема — попытка добавить строку в документ, открытый только для чтения, или в документ, по которому у пользователя нет прав. В этом случае запись завершится ошибкой нарушения прав доступа. Проверяйте права и статус документа до начала изменений.

Типичные ошибки
01
Добавили строку, но не записали документ — данные потеряны после закрытия формы
02
Программно заполнили только номенклатуру, забыв про суммы и НДС — итоги документа неверны
03
Изменили табличную часть проведённого документа без перепроведения — регистры не соответствуют данным
04
Использовали Вставить() с индексом больше количества строк — ошибка выполнения
Контрольные точки

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

Строка в форме
Норма

Строка видна, колонки заполнены, итоги пересчитаны

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

Строка пустая или итоги не изменились

Сохранение
Норма

После записи и повторного открытия строка на месте

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

После переоткрытия строки нет — документ не был записан

Проведение
Норма

Документ проводится без ошибок, движения корректны

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

Ошибки проведения или расхождения с регистрами

Частые вопросы

Почему кнопка «Добавить» неактивна в табличной части?

Чаще всего документ открыт в режиме просмотра, у пользователя нет прав на изменение, либо документ проведён и конфигурация запрещает редактирование. Также табличная часть может быть заблокирована настройками формы. Проверьте статус документа и права доступа.

Как добавить несколько строк сразу?

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

Чем отличается Добавить() от Вставить()?

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

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

Да. Получите объект документа методом ПолучитьОбъект(), добавьте строки в табличную часть, заполните реквизиты и вызовите Записать(). Для проведённого документа используйте Записать(РежимЗаписиДокумента.Проведение), чтобы обновить движения по регистрам.

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

Автоматический пересчёт в типовых конфигурациях выполняется обработчиками событий формы, которые при программном изменении данных не срабатывают. Рассчитайте сумму и НДС в коде самостоятельно или вызовите штатные процедуры пересчёта из общих модулей конфигурации.

Итог

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

Пользователь добавляет строку кнопкой «Добавить», клавишей Insert или копированием (F9) и обязательно записывает документ. Разработчик использует метод Добавить() коллекции табличной части, заполняет реквизиты в коде и вызывает Записать() объекта, помня, что обработчики формы при этом не срабатывают.