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

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

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

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

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

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

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

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

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

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

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

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

Как добавить запись программно: базовый код

Программное добавление выполняется через коллекцию табличной части объекта. Сначала получают объект документа (не ссылку, а именно объект), затем вызывают метод Добавить() у табличной части, заполняют реквизиты новой строки и записывают объект. Работа со ссылкой напрямую невозможна — ссылка предназначена только для чтения данных.

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

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

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

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

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

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

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

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

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

Метод Добавить() возвращает новую строку коллекции, через которую доступны все реквизиты табличной части. Имена реквизитов («Номенклатура», «Количество», «Цена») зависят от конкретной конфигурации — уточните их в конфигураторе, открыв структуру табличной части нужного объекта.

Если документ уже существует, объект получают методом ПолучитьОбъект() от ссылки: ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();. После изменений обязательно вызывается Записать(), иначе добавленные строки не сохранятся в базе данных.

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

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

&НаКлиенте

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

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

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

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

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

Директива &НаКлиенте означает, что код выполняется на клиенте без обращения к серверу. Установка текущей строки через ПолучитьИдентификатор() удобна, когда после добавления пользователь должен сразу начать редактирование новой позиции.

Если при добавлении нужно выполнить серверные вызовы — например, подставить цены из регистра сведений или проверить остатки — используют серверную процедуру с директивой &НаСервере и передают туда данные строки. Частые серверные вызовы в цикле добавления множества строк замедляют работу, поэтому массовое заполнение лучше выполнять целиком на сервере.

Массовое заполнение табличной части

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

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Номенклатура, Остаток ИЗ РегистрНакопления.ОстаткиТоваров.Остатки";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

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

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

НоваяСтрока.Количество = Выборка.Остаток;

КонецЦикла;

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

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

Типичные ошибки и как их избежать

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

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

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

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

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

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

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

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

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

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

Строка видна, реквизиты заполнены корректно

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

Строки нет — вероятно, не выполнен Записать()

Проведение документа
Норма

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

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

Сообщения о незаполненных реквизитах строк

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

Совпадает с количеством строк в источнике данных

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

Меньше ожидаемого — проверьте условия в цикле

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

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

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

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

Используйте метод Вставить(Индекс) вместо Добавить(): НоваяСтрока = Объект.Товары.Вставить(0) вставит строку первой. Индексация строк начинается с нуля.

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

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

Как скопировать строку табличной части программно?

Добавьте новую строку и заполните её методом ЗаполнитьЗначенияСвойств: ЗаполнитьЗначенияСвойств(НоваяСтрока, ИсходнаяСтрока). Это скопирует все совпадающие по именам реквизиты.

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

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

Итог

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

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