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

Разработка и Конфигурация · 10 мин

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

Ручной ввод, подбор, заполнение по кнопке и программное добавление строк в табличную часть документа 1С. Примеры кода, ошибки и проверка результата.

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

Есть четыре рабочих способа заполнения: ручной ввод по кнопке «Добавить», подбор из справочника, автоматическое заполнение штатной кнопкой «Заполнить» и программное добавление строк через встроенный язык. Выбор зависит от задачи: разовый документ проще заполнить вручную, а массовую загрузку логично автоматизировать.

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

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

Ту же операцию выполняет клавиша Insert, а комбинация Ctrl+Enter часто завершает редактирование строки и сразу создаёт следующую. Если кнопка «Добавить» неактивна, проверьте два момента: документ не проведён в закрытом периоде и у пользователя есть права на изменение этого вида документов.

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

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

Заполнение через подбор и штатные кнопки

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

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

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

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

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

ДокОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

ДокОбъект.Дата = ТекущаяДата();

ДокОбъект.Организация = Организация;

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

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

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

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

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

ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);

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

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

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

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

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

ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект();

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

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

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

ДокОбъект.Записать(РежимЗаписиДокумента.Запись);

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

Изменение чужих проведённых документов из внешних обработок — частый источник расхождений в учёте. Перед массовой доработкой документов сделайте резервную копию базы и сначала выполните обработку на одном тестовом документе с проверкой движений.

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

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

&НаКлиенте

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

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

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

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

Заполнение реквизитов, требующее серверных вызовов (поиск цены, остатка, счетов учёта), выносите в серверные процедуры с директивой &НаСервере или &НаСервереБезКонтекста. Вызов запросов напрямую в клиентском коде управляемой формы невозможен и приведёт к ошибке компиляции.

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

Сравнение способов добавления

Кнопка «Добавить» в форме

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

Подбор из справочника

Удобен при вводе 10–100 позиций из номенклатуры; не работает для произвольных данных

Кнопка «Заполнить»

Быстро заполняет по данным базы; может перезаписать существующие строки

Программное добавление

Единственный вариант для загрузки из файлов и интеграций; требует навыков разработки и резервной копии

Загрузка табличной части из файла

Для массового заполнения из Excel или CSV применяются внешние обработки загрузки. Логика типовой обработки: прочитать файл построчно, для каждой строки найти номенклатуру по коду или наименованию, добавить строку в табличную часть и заполнить количество с ценой.

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

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

Типичные ошибки
01
Вызов Добавить() у документа, а не у табличной части — ошибка «Метод не обнаружен»
02
Забытый Записать() после добавления строк — данные теряются без сообщения
03
Запись проведённого документа без перепроведения — движения не соответствуют строкам
04
Поиск номенклатуры по наименованию при загрузке — дубли и пропущенные строки
05
Добавление строк в закрытом периоде — отказ при записи или искажение закрытого учёта

Проверка результата после добавления

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

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

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

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

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

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

Совпадает с количеством введённых или загруженных позиций

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

Строк меньше — часть не записалась или не найдена номенклатура

Итоговая сумма документа
Норма

Сходится с расчётной суммой по источнику

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

Расхождение — не заполнены цены или количество в части строк

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

После перепроведения отражают новые строки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Итог

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

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