Быстрый старт · 10 мин
Как добавить строку в табличной части 1С
Как добавить строку в табличной части 1С: кнопки, горячие клавиши, программные методы Добавить() и Вставить(), типичные ошибки и проверка результата.
Табличная часть — это список строк внутри документа или справочника: товары в накладной, сотрудники в ведомости, этапы в заказе. Строку в неё можно добавить тремя способами: кнопкой на форме, сочетанием клавиш или программно через встроенный язык. Выбор зависит от того, работаете вы в пользовательском режиме или пишете код.
В пользовательском режиме всё сводится к нажатию «Добавить» или Insert — система сама создаёт пустую строку, подставляет номер и активирует первую ячейку для ввода. В коде используются методы Добавить() и Вставить(), которые возвращают объект новой строки и позволяют сразу заполнить реквизиты.
Ниже разобраны оба сценария: ручное добавление в типовых конфигурациях и программная работа с табличной частью в модуле объекта, формы и внешней обработки. Отдельно рассмотрены подбор, копирование строк и типичные ошибки, из-за которых строка «не добавляется».
Как добавить строку в пользовательском режиме
Откройте документ или элемент справочника, перейдите на вкладку с табличной частью. Над таблицей расположена командная панель: кнопка «Добавить» (значок с плюсом) создаёт новую пустую строку в конце списка. Курсор сразу встаёт в первую редактируемую колонку — остаётся выбрать номенклатуру, контрагента или иное значение.
Быстрый способ — клавиша Insert. Она работает, когда фокус находится внутри табличной части: щёлкните мышью по любой существующей строке или по пустой области таблицы, затем нажмите Insert. Если табличная часть пуста, сначала кликните в её область, чтобы передать фокус.
Для вставки строки не в конец, а перед текущей позицией, используйте контекстное меню: правый клик по строке → «Вставить». В управляемых формах часть команд спрятана в кнопку «Ещё» — там же находятся «Скопировать» (F9), «Переместить вверх/вниз» и «Удалить».
- 1Откройте документ и перейдите на вкладку с табличной частью
- 2Нажмите «Добавить» на панели таблицы или клавишу Insert
- 3Заполните обязательные колонки — они обычно подсвечены или проверяются при записи
- 4Проверьте итоговые суммы и количество строк в подвале таблицы
- 5Запишите документ кнопкой «Записать» или «Провести»
Добавление через подбор и копирование
Когда нужно добавить много строк, по одной их вводить долго. Кнопка «Подбор» открывает форму справочника номенклатуры, где позиции переносятся в документ двойным щелчком или кнопкой «Перенести». При повторном выборе той же позиции типовая конфигурация обычно увеличивает количество в существующей строке, а не плодит дубли — поведение зависит от настроек конкретной конфигурации.
Копирование строки (F9 или «Ещё» → «Скопировать») создаёт дубликат со всеми заполненными колонками. Это удобно, когда строки отличаются одним-двумя значениями: скопировали, поменяли количество или характеристику — готово. Помните, что копируются и скидки, цены, счета учёта — проверьте их в новой строке.
Ещё один массовый способ — загрузка из внешнего файла через «Ещё» → «Загрузить данные из файла» (в конфигурациях на БСП) или вставка из буфера обмена: скопированный в Excel диапазон вставляется в табличную часть сочетанием Ctrl+V, если форма это поддерживает.
Программное добавление: метод Добавить()
Во встроенном языке табличная часть объекта представлена коллекцией строк. Метод Добавить() создаёт строку в конце коллекции и возвращает ссылку на неё, поэтому заполнение делается через точку:
НоваяСтрока = ДокументОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = НайденнаяНоменклатура;
НоваяСтрока.Количество = 5;
НоваяСтрока.Цена = 1200;
Если код выполняется в модуле объекта (например, в обработчике ОбработкаЗаполнения), обращение идёт напрямую к коллекции без указания владельца: Товары.Добавить(). В модуле формы объекта нет — данные лежат в реквизите формы, поэтому пишут Объект.Товары.Добавить().
После программного добавления строки на клиенте или в форме полезно установить текущую строку, чтобы пользователь увидел результат: Элементы.Товары.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(). Без этого новая строка добавится, но фокус останется на прежнем месте.
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = НоменклатураСсылка;
НоваяСтрока.Количество = 1;
Элементы.Товары.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();Вставка строки в нужную позицию и заполнение по образцу
Метод Вставить(Индекс) создаёт строку в произвольной позиции: Товары.Вставить(0) добавит строку первой. Индексация начинается с нуля. Метод полезен, когда порядок строк значим — например, в этапах производственного графика или разделах печатной формы.
Для копирования существующей строки программно используют ЗаполнитьЗначенияСвойств: добавляете новую строку и переносите в неё значения колонок из строки-образца. Идентификаторы и служебные поля при этом не копируются — только реквизиты табличной части.
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаОбразец);
НоваяСтрока.Количество = 1; // переопределяем нужные поля
Если строка должна заполняться по правилам типовой конфигурации (цены из соглашения, ставка НДС, счета учёта), недостаточно присвоить номенклатуру — нужно вызвать те же процедуры, что форма вызывает при изменении поля. Ищите в общих модулях обработчики вида НоменклатураПриИзменении и вызывайте их после заполнения строки.
Добавление строки через внешнюю обработку или расширение
Во внешней обработке работа идёт с объектом документа, полученным через ссылку: ДокОбъект = Ссылка.ПолучитьОбъект(). Дальше стандартно — ДокОбъект.Товары.Добавить(), заполнение полей, затем ДокОбъект.Записать(). Без вызова Записать() изменения останутся только в памяти и в базу не попадут.
Для проведённых документов запись с изменением табличной части требует режима Записать(РежимЗаписиДокумента.Проведение) — иначе движения по регистрам не пересчитаются. Учитывайте, что перепроведение меняет регистры и может затронуть последовательность документов.
В расширении конфигурации добавить строку на форме можно через обработчик команды: в объявлении &После или &Вместо типовой команды вызываете Объект.Товары.Добавить() и заполняете по своей логике. Так реализуют кнопки «добавить с параметрами по умолчанию» без изменения основной конфигурации.
Почему строка не добавляется: типичные причины
Если кнопка «Добавить» неактивна, чаще всего документ проведён и закрыт от редактирования, либо у пользователя нет прав на изменение объекта. Проверьте состояние документа в заголовке формы и наличие признака «Только просмотр». Второй случай — табличная часть заблокирована условно: например, пока не выбрана организация или склад в шапке, таблица недоступна.
В коде типичная ошибка — обращение к табличной части по неверному имени или через ссылку вместо объекта: Ссылка.Товары.Добавить() работать не будет, так как у ссылки нет редактируемой коллекции. Нужно сначала получить объект. Ещё одна частая ошибка — забыть Записать() после добавления строк.
На управляемой форме добавление строки в обработчике на сервере не отобразится мгновенно, если код выполняется без контекста формы. Проверяйте, где выполняется код, и при необходимости обновляйте отображение через Элементы.Товары.Обновить().
Как проверить, что строка добавлена корректно
В пользовательском режиме ориентируйтесь на номер строки в первой колонке и на итоги под таблицей: количество строк, сумма, сумма НДС должны измениться. После записи документа перечитайте его — строка должна сохраниться. Если документ проводится, откройте «Провести и закрыть» и затем отчёт по движениям, чтобы убедиться, что новая строка попала в регистры.
При программном добавлении проверку делают через Количество(): сравните Объект.Товары.Количество() до и после вызова Добавить(). Для контроля заполнения используйте отладчик: поставьте точку останова после заполнения строки и посмотрите значения её реквизитов в табло.
Как проверить результат
Увеличился на единицу после добавления
Номер не изменился — строка не создана или фокус вне таблицы
Сумма и количество строк пересчитались
Итоги прежние — строка пустая или не записана
Строка на месте с заполненными колонками
Строка исчезла — не был вызван Записать() или документ не проведён
Новая позиция видна в регистрах
Движений нет — документ не перепроведён после изменения
Что важно запомнить
В пользовательском режиме строку добавляют кнопкой «Добавить» или Insert, массово — через подбор, копирование и загрузку из файла. В коде используют Товары.Добавить() у объекта (не у ссылки) с обязательным Записать(), а цены и НДС заполняют через штатные обработчики изменения полей.
Частые вопросы
Какая горячая клавиша добавляет строку в табличную часть?
Insert — при условии, что фокус находится в табличной части. Скопировать строку можно клавишей F9, удалить — Shift+Delete или через меню «Ещё». Набор сочетаний может отличаться в зависимости от версии платформы и конфигурации.
Как добавить строку, если кнопка «Добавить» неактивна?
Проверьте, не проведён ли документ (тогда таблица доступна только на просмотр), есть ли у пользователя права на изменение и заполнены ли обязательные поля шапки — в некоторых конфигурациях табличная часть блокируется до выбора организации, склада или договора.
Чем Добавить() отличается от Вставить() в коде?
Добавить() создаёт строку в конце коллекции, Вставить(Индекс) — в указанной позиции с нулевой индексацией. Оба метода возвращают созданную строку для заполнения реквизитов.
Почему после программного добавления строки цена и НДС пустые?
Присвоение номенклатуры не запускает расчёт зависимых полей — это делают обработчики изменения, которые форма вызывает автоматически, а внешний код должен вызвать явно. Найдите в общих модулях конфигурации процедуры обработки изменения номенклатуры и выполните их для новой строки.
Можно ли добавить строки в табличную часть из Excel?
Да, если конфигурация поддерживает загрузку из файла (команда «Загрузить данные из файла» в меню «Ещё») или вставку из буфера обмена через Ctrl+V. Структура колонок в файле должна соответствовать ожидаемой формой, иначе часть данных не распознается.
Изменятся ли движения документа после добавления строки программно?
Нет, пока документ не перепроведён. Запись в режиме Записать() сохранит табличную часть, но регистры обновятся только при проведении. Поэтому для проведённых документов используйте Записать(РежимЗаписиДокумента.Проведение) и предварительно делайте резервную копию.