Удаление строк, документов и табличных частей в 1С 8.3 — от клавиши Del до обработки

· 10 мин

Содержание

Чтобы удалить строку в табличной части документа 1С 8.3, выделите её и нажмите Del или кнопку с красным крестиком над таблицей, затем запишите документ. Несколько строк выделяют с Ctrl или Shift, все строки сразу — Ctrl+A. Сами документы и элементы справочников по Del не исчезают, а только помечаются на удаление; физически их удаляет отдельная обработка «Удаление помеченных объектов».

Порядок одинаковый для Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других конфигураций на интерфейсе «Такси»: это поведение платформы, а не конкретной программы. Отличаются только путь к обработке удаления и права пользователей. Программисту пригодятся методы Удалить() и Очистить() и правило обратного цикла.

Удаление строки из таблицы документа: клавиши и кнопки

Табличная часть — это список товаров, услуг, сотрудников внутри документа. Строки в ней удаляются сразу, без пометки, но изменение сохраняется только после записи документа.

Порядок действий:

  1. Откройте документ и встаньте на нужную строку.
  2. Нажмите Del на клавиатуре или кнопку с красным крестиком в командной панели таблицы. Та же команда есть в контекстном меню по правой кнопке мыши и в меню Ещё.
  3. Проверьте итоги внизу документа — суммы пересчитаются.
  4. Нажмите Записать или Провести и закрыть.

Как выделить сразу несколько строк:

  • ⌨️ Ctrl + щелчок — отдельные строки вразбивку;
  • ⌨️ Shift + щелчок — диапазон от первой до последней;
  • ⌨️ Ctrl+A — все строки таблицы, если в ней разрешено множественное выделение (в типовых документах оно почти всегда включено);
  • 🖱️ протяжка мышью с зажатой левой кнопкой по номерам строк.

После выделения нажмите Del один раз — удалятся все выбранные строки.

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

Как очистить табличную часть целиком

Отдельной кнопки «Очистить таблицу» в большинстве форм нет. Работают два способа:

  • выделить все строки через Ctrl+A и нажать Del;
  • перезаполнить таблицу кнопкой Заполнить, если она есть в документе (например, в начислении зарплаты, в инвентаризации, в требовании-накладной). Перезаполнение стирает старые строки и строит таблицу заново по данным учёта.

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

Удаление строк в регистрах сведений и списках

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

Как удалить документ в 1С: пометка и полное удаление

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

Удаление идёт в два этапа:

ЭтапЧто делаетМожно отменить
Пометка на удалениеДокумент остаётся в базе, перечёркивается в списке, его движения по регистрам отменяютсяДа, снять пометку
Удаление помеченных объектовОбработка проверяет ссылки и физически стирает объекты из базыТолько из резервной копии

Шаг 1. Поставить пометку

  1. Откройте список документов (например, Продажи → Реализация (акты, накладные, УПД)).
  2. Выделите один или несколько документов.
  3. Нажмите Del или выберите в меню Ещё команду пометки на удаление.
  4. Подтвердите вопрос.

Проведённый документ после пометки становится непроведённым: проводки и записи в регистрах исчезают сразу. Суммы в отчётах изменятся ещё до физического удаления.

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

Шаг 2. Удалить помеченные объекты

Пути к обработке в типовых конфигурациях:

КонфигурацияПуть
Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА 2, ERPАдминистрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов
Любая конфигурация, если раздел не найденВсе функции → Обработки → Удаление помеченных объектов

Пункт Все функции включают в настройках: меню с тремя полосками (или шестерёнка) в правом верхнем углу → Настройки → Параметры → флажок «Отображать команду „Все функции"».

Как проходит удаление:

  1. Выберите режим: удалить все помеченные объекты или только отмеченные вручную. Второй режим надёжнее — вы видите список и снимаете лишнее.
  2. Нажмите кнопку удаления.
  3. Обработка проверит ссылки. Объекты, на которые ничто не ссылается, удалятся.
  4. Оставшиеся покажутся в отдельном списке с указанием, какие документы на них ссылаются.

Что делать с неудалёнными объектами:

  • 🔗 откройте ссылающийся документ и замените в нём удаляемый элемент на нужный;
  • 🔗 если ссылающийся документ тоже лишний — пометьте его и запустите обработку ещё раз;
  • 🔗 если ссылка есть в закрытом периоде — сначала разберитесь с датой запрета (см. раздел про ограничения ниже).

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

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

Для разработчика у табличной части документа есть три основных инструмента:

МетодЧто делает
ТабличнаяЧасть.Удалить(Строка)Удаляет одну строку; принимает саму строку или её индекс
ТабличнаяЧасть.Очистить()Удаляет все строки сразу
ТабличнаяЧасть.НайтиСтроки(Структура)Возвращает массив строк по условию — удобно перед удалением

Очистить таблицу целиком

ДокОбъект = Ссылка.ПолучитьОбъект();
ДокОбъект.Товары.Очистить();
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);

Удалить строки по условию

Главная ловушка — удалять строки в прямом цикле Для Каждого. После удаления текущей строки индексы сдвигаются, и цикл пропускает следующую. Правильный вариант — обратный цикл:

Товары = ДокОбъект.Товары;
Для Сч = 1 По Товары.Количество() Цикл
    Строка = Товары[Товары.Количество() - Сч];
    Если Строка.Количество = 0 Тогда
        Товары.Удалить(Строка);
    КонецЕсли;
КонецЦикла;

Граница цикла вычисляется один раз при входе. Внутри индекс считается от текущего размера таблицы, поэтому удаление не сбивает обход.

Второй способ — сначала собрать строки, потом удалить:

Отбор = Новый Структура("Номенклатура", УдаляемаяНоменклатура);
НайденныеСтроки = ДокОбъект.Товары.НайтиСтроки(Отбор);
Для Каждого Строка Из НайденныеСтроки Цикл
    ДокОбъект.Товары.Удалить(Строка);
КонецЦикла;

Здесь цикл идёт по отдельному массиву, а не по самой таблице, поэтому пропусков нет.

Удаление строк в форме

В модуле формы табличная часть доступна как Объект.Товары. Те же методы работают и там, но изменения попадут в базу только после записи формы. Выделенные пользователем строки берут через свойство ВыделенныеСтроки элемента формы — это массив идентификаторов, строку получают методом Объект.Товары.НайтиПоИдентификатору(Идентификатор).

Удаление самого документа кодом

  • ДокОбъект.УстановитьПометкуУдаления(Истина) — ставит пометку, как клавиша Del;
  • ДокОбъект.Удалить() — удаляет объект сразу, без проверки ссылок.

Второй метод опасен: если на документ ссылались другие объекты, в них останутся «битые ссылки» вида <Объект не найден>. В рабочих базах используйте пометку и типовую обработку удаления.

Массовая очистка табличных частей во многих документах

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

Внешняя обработка. Программист пишет обработку на 20–30 строк: запрос выбирает нужные документы, затем для каждого получается объект, удаляются строки по условию из примера выше и документ записывается. Если документ был проведён, его записывают в режиме проведения, чтобы обновились движения.

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|    Т.Ссылка КАК Ссылка
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары КАК Т
|ГДЕ
|    Т.Количество = 0
|    И Т.Ссылка.Дата МЕЖДУ &Начало И &Конец";
Запрос.УстановитьПараметр("Начало", НачалоПериода);
Запрос.УстановитьПараметр("Конец", КонецПериода);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
    НайденныеСтроки = ДокОбъект.Товары.НайтиСтроки(Новый Структура("Количество", 0));
    Для Каждого Строка Из НайденныеСтроки Цикл
        ДокОбъект.Товары.Удалить(Строка);
    КонецЦикла;
    Режим = ?(ДокОбъект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись);
    ДокОбъект.Записать(Режим);
КонецЦикла;

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

Групповое изменение реквизитов. Типовая обработка Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов меняет значения в шапке и строках многих объектов сразу. Строки она не удаляет, но помогает, если задача на самом деле — заменить значение, а не стереть строку.

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

Почему 1С не даёт удалить строку или документ

Типовые причины отказа и что с ними делать:

Диагностика: выберите симптом

Отдельно о монопольном режиме. Для обычного удаления строк и пометки документов он не нужен. Типовая обработка удаления помеченных объектов в 8.3 тоже работает без него, хотя при большом объёме данных её удобнее запускать, когда в базе никого нет.

Как вернуть удалённые строки и документы

Шансы зависят от того, на каком этапе произошло удаление.

Что случилосьКак вернуть
Строка удалена, документ не записанЗакрыть документ без сохранения
Документ записан без строкиВосстановить версию из истории изменений, если она включена; иначе ввести строку заново
Документ помечен на удалениеСнять пометку клавишей Del и провести документ
Документ удалён обработкойТолько из резервной копии

История изменений объекта

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

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

Кто и когда удалил

Журнал регистрации показывает, кто пометил или удалил объект и когда. Путь: Администрирование → Обслуживание → Журнал регистрации. Отберите события по пользователю, периоду и событию удаления или изменения данных. Это помогает понять масштаб: один документ или целая партия.

Восстановление из резервной копии

Если документ физически удалён, верните его так:

  1. Разверните резервную копию в отдельную информационную базу. Не загружайте её поверх рабочей — потеряете всё, что ввели после копии.
  2. Найдите в копии нужные документы.
  3. Перенесите их в рабочую базу через выгрузку и загрузку данных в XML (универсальная обработка выгрузки-загрузки) или введите вручную, если документов немного.
  4. Проведите восстановленные документы и сверьте остатки.

Загрузка файла .dt в Конфигураторе заменяет всю базу целиком. Для возврата нескольких документов этот способ не подходит.

Типичные ошибки при удалении

  • ❌ Удаляют документ вместо строки. Нажали Del в списке документов, а хотели убрать позицию внутри накладной. Пометка снимается той же клавишей.
  • ❌ Не проверяют итоги после удаления. Вместе со строкой товара уходит и её НДС, а в некоторых документах — распределённые суммы скидок или доставки. Сверьте итог документа с первичкой до проведения.
  • ❌ Запускают «удалить все помеченные» не глядя. В базе могут оказаться помеченные годы назад объекты, о которых никто не помнит. Режим выборочного удаления безопаснее.
  • ❌ Удаляют строки в прямом цикле в коде. Часть строк остаётся — нужен обратный цикл или предварительный поиск.
  • ❌ Используют Удалить() у объекта в рабочей базе. После этого в отчётах всплывают <Объект не найден>.

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

Можно ли удалить строку в проведённом документе?
Да. Удалите строку и перепроведите документ — движения пересчитаются. Если период закрыт датой запрета, сначала нужно разрешение администратора.
Почему удалённый документ всё ещё виден в списке?
Он только помечен на удаление и показывается перечёркнутым. Чтобы убрать его совсем, запустите обработку удаления помеченных объектов.
Удалятся ли проводки, если пометить документ на удаление?
Да, при пометке проведённого документа его движения отменяются сразу. В отчётах сумм этого документа уже не будет.
Можно ли удалять помеченные объекты автоматически по расписанию?
В новых релизах типовых конфигураций в обработке удаления есть настройка автоматического удаления по расписанию. Включайте её, только если в базе дисциплинированно пользуются пометкой.
Как удалить пустые строки после загрузки из Excel?
Отсортируйте таблицу по количеству или сумме щелчком по заголовку колонки — пустые строки соберутся вместе. Выделите их с Shift и нажмите Del.