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

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

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

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

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

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

Как определить, с какой таблицей вы работаете

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

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

Добавление строки в табличную часть документа через интерфейс

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

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

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

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

Если кнопка «Добавить» неактивна

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

Добавление строки в табличную часть программно

Разработчику для добавления строки в табличную часть объекта достаточно вызвать метод Добавить() у коллекции строк. Метод возвращает ссылку на новую строку, через которую заполняются реквизиты.

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

НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000001");

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

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

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

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

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

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

СтрокаТовара = Док.Товары.Добавить();

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

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

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

Добавление строки в таблицу значений

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

ТЗ = Новый ТаблицаЗначений;

ТЗ.Колонки.Добавить("Товар");

ТЗ.Колонки.Добавить("Количество");

НоваяСтрока = ТЗ.Добавить();

НоваяСтрока.Товар = "Кабель ВВГ 3х2,5";

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

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

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

Маршрут решения

Как выбрать действие

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

Отдельный случай — загрузка строк из Excel или другого документа. Многие конфигурации имеют встроенную загрузку из буфера обмена: скопируйте строки в Excel, в табличной части документа нажмите кнопку загрузки (или сочетание Ctrl+Shift+V в некоторых решениях) и сопоставьте колонки. Это надёжнее, чем вбивать десятки позиций вручную, и исключает опечатки в количестве и ценах.

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

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

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

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

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

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

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

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

Сумма документа увеличилась на сумму новой строки

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

Итоги не изменились — возможно, не заполнены количество или цена

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

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

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

Ошибка «Не заполнена номенклатура» или подобная — строка добавлена пустой

Нумерация строк
Норма

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

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

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

После программного добавления полезно вывести контрольное сообщение: Сообщить("Строк добавлено: " + Объект.Товары.Количество());. Так вы сразу увидите, отработал ли цикл добавления. Если количество равно нулю, значит, метод Добавить() не выполнился — например, из-за того, что обработка прервалась раньше или условие в коде не сработало.

Типичные ошибки при добавлении строк

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

Самая частая пользовательская ошибка — добавить строку и закрыть документ без записи. 1С спросит «Записать изменения?», но если ответить «Нет», строка исчезнет. Вторая по частоте — попытка редактировать проведённый документ, который заблокирован от изменений настройками конфигурации.

Итог

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

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

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

Какая горячая клавиша добавляет строку в таблицу 1С?

Insert — добавить новую строку, F9 — скопировать текущую строку, Shift+F2 — открыть содержимое ячейки для редактирования. Клавиши работают, когда фокус находится внутри табличной части.

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

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

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

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

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

Нет. Журнал документов — это динамический список, он только отображает данные из базы. Чтобы появилась новая строка, нажмите «Создать» и заполните новый документ — после записи он появится в списке автоматически.

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

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

Что делать, если метод Добавить() выдаёт ошибку?

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