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

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

Как добавить строку в табличной части 1С

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

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

В пользовательском режиме всё сводится к нажатию «Добавить» или Insert — система сама создаёт пустую строку, подставляет номер и активирует первую ячейку для ввода. В коде используются методы Добавить() и Вставить(), которые возвращают объект новой строки и позволяют сразу заполнить реквизиты.

Ниже разобраны оба сценария: ручное добавление в типовых конфигурациях и программная работа с табличной частью в модуле объекта, формы и внешней обработки. Отдельно рассмотрены подбор, копирование строк и типичные ошибки, из-за которых строка «не добавляется».

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

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

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

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

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

Добавление через подбор и копирование

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

Копирование строки (F9 или «Ещё» → «Скопировать») создаёт дубликат со всеми заполненными колонками. Это удобно, когда строки отличаются одним-двумя значениями: скопировали, поменяли количество или характеристику — готово. Помните, что копируются и скидки, цены, счета учёта — проверьте их в новой строке.

Ещё один массовый способ — загрузка из внешнего файла через «Ещё» → «Загрузить данные из файла» (в конфигурациях на БСП) или вставка из буфера обмена: скопированный в Excel диапазон вставляется в табличную часть сочетанием Ctrl+V, если форма это поддерживает.

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

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

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

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

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

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

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

После программного добавления строки на клиенте или в форме полезно установить текущую строку, чтобы пользователь увидел результат: Элементы.Товары.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(). Без этого новая строка добавится, но фокус останется на прежнем месте.

bsl
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = НоменклатураСсылка;
НоваяСтрока.Количество = 1;
Элементы.Товары.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();

Вставка строки в нужную позицию и заполнение по образцу

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

Для копирования существующей строки программно используют ЗаполнитьЗначенияСвойств: добавляете новую строку и переносите в неё значения колонок из строки-образца. Идентификаторы и служебные поля при этом не копируются — только реквизиты табличной части.

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

ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаОбразец);

НоваяСтрока.Количество = 1; // переопределяем нужные поля

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

Добавление строки через внешнюю обработку или расширение

Во внешней обработке работа идёт с объектом документа, полученным через ссылку: ДокОбъект = Ссылка.ПолучитьОбъект(). Дальше стандартно — ДокОбъект.Товары.Добавить(), заполнение полей, затем ДокОбъект.Записать(). Без вызова Записать() изменения останутся только в памяти и в базу не попадут.

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

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

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

Если кнопка «Добавить» неактивна, чаще всего документ проведён и закрыт от редактирования, либо у пользователя нет прав на изменение объекта. Проверьте состояние документа в заголовке формы и наличие признака «Только просмотр». Второй случай — табличная часть заблокирована условно: например, пока не выбрана организация или склад в шапке, таблица недоступна.

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

На управляемой форме добавление строки в обработчике на сервере не отобразится мгновенно, если код выполняется без контекста формы. Проверяйте, где выполняется код, и при необходимости обновляйте отображение через Элементы.Товары.Обновить().

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

Как проверить, что строка добавлена корректно

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

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

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

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

Номер последней строки в таблице
Норма

Увеличился на единицу после добавления

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

Номер не изменился — строка не создана или фокус вне таблицы

Итоги под табличной частью
Норма

Сумма и количество строк пересчитались

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

Итоги прежние — строка пустая или не записана

Документ после перезаписи
Норма

Строка на месте с заполненными колонками

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

Строка исчезла — не был вызван Записать() или документ не проведён

Движения документа
Норма

Новая позиция видна в регистрах

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

Движений нет — документ не перепроведён после изменения

Итог

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

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

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

Какая горячая клавиша добавляет строку в табличную часть?

Insert — при условии, что фокус находится в табличной части. Скопировать строку можно клавишей F9, удалить — Shift+Delete или через меню «Ещё». Набор сочетаний может отличаться в зависимости от версии платформы и конфигурации.

Как добавить строку, если кнопка «Добавить» неактивна?

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

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

Добавить() создаёт строку в конце коллекции, Вставить(Индекс) — в указанной позиции с нулевой индексацией. Оба метода возвращают созданную строку для заполнения реквизитов.

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

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

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

Да, если конфигурация поддерживает загрузку из файла (команда «Загрузить данные из файла» в меню «Ещё») или вставку из буфера обмена через Ctrl+V. Структура колонок в файле должна соответствовать ожидаемой формой, иначе часть данных не распознается.

Изменятся ли движения документа после добавления строки программно?

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