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