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

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

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

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

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

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

Добавление строки в режиме пользователя

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

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

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

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

Почему кнопка «Добавить» может быть недоступна

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

Третья причина — документ открыт в режиме просмотра либо заблокирован другим пользователем в клиент-серверной базе. Также в некоторых формах табличная часть заполняется только автоматически (например, кнопкой «Заполнить» по данным другого документа), и ручное добавление разработчики намеренно отключили.

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

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

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

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

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

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

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

Обратите внимание: добавление строки в объект не сохраняет данные в базу автоматически. Чтобы изменения зафиксировались, после заполнения строки вызовите ДокументОбъект.Записать(), а для проведения — ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение). Без записи новая строка существует только в памяти и пропадёт при закрытии сеанса.

Автоматический пересчёт суммы, скидок и НДС при программном добавлении не срабатывает: обработчики «ПриИзменении» выполняются только при интерактивном вводе в форме. Поэтому суммы нужно рассчитывать в коде самостоятельно либо вызывать соответствующие процедуры пересчёта из модуля объекта, если они вынесены в экспортные методы.

Добавление строки в форме документа

Когда код выполняется в модуле формы, а не в модуле объекта, обращение к табличной части идёт через данные формы. В управляемой форме типовой код выглядит так:

&НаКлиенте

Процедура ДобавитьСтроку(Команда)

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

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

КонецПроцедуры

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

Элементы.Товары.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();

В обычных формах (толстый клиент старых конфигураций) синтаксис аналогичен, но работа с текущей строкой выполняется через ЭлементыФормы.Товары.ТекущаяСтрока. Перед написанием кода уточните, на какой версии платформы и в каком режиме работает ваша конфигурация.

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

Копирование, вставка и массовое заполнение строк

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

Программно массовое добавление делается в цикле. Пример заполнения из таблицы значений:

Для Каждого СтрокаИсточника Из ТаблицаЗагрузки Цикл

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

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

КонецЦикла;

Метод ЗаполнитьЗначенияСвойств копирует значения по совпадающим именам колонок. Учтите: если имена колонок источника и реквизитов табличной части различаются, такие поля останутся пустыми — проверяйте соответствие имён заранее.

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

Проверка результата и ограничения

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

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

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

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

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

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

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

Строка пустая или документ не записывается с ошибкой

Итоги документа
Норма

Итоговая сумма увеличилась на сумму новой строки

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

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

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

Количество() выросло на ожидаемое число, документ записан

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

Количество строк прежнее — забыт вызов Записать() или цикл не выполнился

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

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

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

Стандартно — клавиша Insert при установленном фокусе на табличной части. Для копирования текущей строки используется F9. В некоторых формах сочетания могут быть переопределены разработчиком конфигурации.

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

Обработчики событий формы «ПриИзменении» не вызываются при программном заполнении. Рассчитайте сумму в коде вручную (количество × цена) и при необходимости отдельно посчитайте НДС и итоги.

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

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

Кнопка «Добавить» неактивна — что проверить в первую очередь?

Проверьте, не проведён ли документ (отмените проведение), есть ли у вас права на изменение, не открыт ли документ другим пользователем и не установлена ли дата запрета редактирования для этого периода.

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

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

Как добавить много строк сразу из Excel?

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

Итог

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

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