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

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

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

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

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

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

Ниже разобраны все способы: от простого нажатия клавиши до программного заполнения с проверками. Отдельно рассмотрены ограничения, типичные ошибки и способы проверить, что строка действительно добавлена и сохранена.

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

Откройте документ или элемент справочника, содержащий табличную часть, и установите курсор в область таблицы. Самый быстрый способ — нажать клавишу Insert: 1С создаст новую пустую строку и переведёт курсор в её первую редактируемую колонку.

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

Для копирования существующей строки вместо создания пустой используйте клавишу F9 или пункт «Скопировать» контекстного меню. Это удобно, когда строки отличаются одним-двумя значениями: например, тот же товар с другим количеством.

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

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

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

Типовой пример для документа с табличной частью «Товары»:

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

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

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

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

Метод доступен и на клиенте (в управляемых формах), и на сервере. На клиенте добавленная строка сразу появляется в форме; на сервере изменения станут видны после возврата данных в форму. В обычных формах (режим обычного приложения) синтаксис идентичен.

bsl
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000001");
НоваяСтрока.Количество = 2;
Объект.Записать();

Добавление строки на клиенте и на сервере: различия

В управляемом приложении форма работает в связке клиент–сервер. Если строка добавляется в клиентской процедуре (например, по нажатию кнопки), вызов Объект.Товары.Добавить() выполняется на клиенте, и строка мгновенно отображается в таблице формы.

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

Частая ситуация: разработчик добавляет строку в серверной процедуре с директивой &НаСервере, но работает с реквизитом формы типа «ДанныеФормыСтруктура», а не с объектом. В этом случае нужно сначала получить объект методом РеквизитФормыВЗначение("Объект"), добавить строку и вернуть данные через ЗначениеВРеквизитФормы(), либо добавлять строку напрямую в коллекцию данных формы.

Заполнение строки значениями по умолчанию

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

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

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

Ограничения и частые ошибки

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

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

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

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

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

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

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

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

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

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

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

Увеличилось на число добавленных строк

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

Не изменилось — строка не добавлена или объект не записан

Заполнение обязательных колонок
Норма

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

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

Ошибки о незаполненных полях при записи

Движения по регистрам
Норма

По новой строке есть проводки и записи регистров

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

Строка есть, а движений по ней нет

Альтернативные способы заполнения табличной части

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

Ещё варианты: загрузка из табличного документа (Excel) через стандартную обработку загрузки данных, копирование табличной части из другого документа через буфер обмена (Ctrl+Shift+C / Ctrl+Shift+V в таблице) и ввод на основании, когда строки переносятся из документа-основания.

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

Сравнение вариантов

Клавиша Insert / кнопка «Добавить»

Подходит для ручного ввода нескольких строк; не подходит для массового заполнения

Подбор номенклатуры

Удобен при выборе товаров из справочника; работает только там, где предусмотрен конфигурацией

Программный Добавить()

Для автоматизации и интеграций; требует аккуратности с правами, записями и обязательными полями

Загрузка из файла

Для десятков и сотен строк из Excel; требует сопоставления колонок и проверки данных

Часто задаваемые вопросы

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

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

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

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

Можно ли добавить строку сразу с копией данных из предыдущей?

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

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

Скорее всего, добавление выполнено в серверной процедуре через объект, полученный РеквизитФормыВЗначение(), без обратного переноса в форму. Добавляйте строку напрямую в коллекцию данных формы (Объект.Товары.Добавить() в клиентском контексте) или возвращайте изменённый объект через ЗначениеВРеквизитФормы().

Нужно ли перепроводить документ после добавления строки?

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

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

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

Итог

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

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