Удаление строк, документов и табличных частей в 1С 8.3 — от клавиши Del до обработки
Содержание
Чтобы удалить строку
в табличной части документа 1С 8.3, выделите её и нажмите Del или кнопку с красным крестиком над таблицей, затем запишите документ. Несколько строк выделяют с Ctrl или Shift, все строки сразу — Ctrl+A. Сами документы и элементы справочников по Del не исчезают, а только помечаются на удаление; физически их удаляет отдельная обработка «Удаление помеченных объектов».
Порядок одинаковый для Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других конфигураций на интерфейсе «Такси»: это поведение платформы, а не конкретной программы. Отличаются только путь к обработке удаления и права пользователей. Программисту пригодятся методы Удалить() и Очистить() и правило обратного цикла.
Удаление строки из таблицы документа: клавиши и кнопки
Табличная часть — это список товаров, услуг, сотрудников внутри документа. Строки в ней удаляются сразу, без пометки, но изменение сохраняется только после записи документа.
Порядок действий:
- Откройте документ и встаньте на нужную строку.
- Нажмите
Delна клавиатуре или кнопку с красным крестиком в командной панели таблицы. Та же команда есть в контекстном меню по правой кнопке мыши и в менюЕщё. - Проверьте итоги внизу документа — суммы пересчитаются.
- Нажмите
ЗаписатьилиПровести и закрыть.
Как выделить сразу несколько строк:
- ⌨️
Ctrl+ щелчок — отдельные строки вразбивку; - ⌨️
Shift+ щелчок — диапазон от первой до последней; - ⌨️
Ctrl+A— все строки таблицы, если в ней разрешено множественное выделение (в типовых документах оно почти всегда включено); - 🖱️ протяжка мышью с зажатой левой кнопкой по номерам строк.
После выделения нажмите Del один раз — удалятся все выбранные строки.
Строку случайно удалили, но документ ещё не записан? Закройте его крестиком и на вопрос «Данные были изменены. Сохранить изменения?» ответьте «Нет». Документ вернётся к последнему сохранённому состоянию.
Как очистить табличную часть целиком
Отдельной кнопки «Очистить таблицу» в большинстве форм нет. Работают два способа:
- выделить все строки через
Ctrl+Aи нажатьDel; - перезаполнить таблицу кнопкой
Заполнить, если она есть в документе (например, в начислении зарплаты, в инвентаризации, в требовании-накладной). Перезаполнение стирает старые строки и строит таблицу заново по данным учёта.
Перед перезаполнением проверьте, нет ли в таблице строк, добавленных вручную: кнопка Заполнить их тоже удалит.
Удаление строк в регистрах сведений и списках
Записи регистров сведений — курсы валют, цены номенклатуры, сведения о сотрудниках — ведут себя иначе, чем документы. В списке регистра Del удаляет запись сразу, без пометки и без возможности снять её. Платформа спросит подтверждение — внимательно читайте, что именно выделено.
Как удалить документ в 1С: пометка и полное удаление
Документ, элемент справочника или счёт плана счетов нельзя стереть одной клавишей. Так задумано: на документ могут ссылаться другие объекты, и мгновенное удаление разрушило бы связи.
Удаление идёт в два этапа:
| Этап | Что делает | Можно отменить |
|---|---|---|
| Пометка на удаление | Документ остаётся в базе, перечёркивается в списке, его движения по регистрам отменяются | Да, снять пометку |
| Удаление помеченных объектов | Обработка проверяет ссылки и физически стирает объекты из базы | Только из резервной копии |
Шаг 1. Поставить пометку
- Откройте список документов (например,
Продажи → Реализация (акты, накладные, УПД)). - Выделите один или несколько документов.
- Нажмите
Delили выберите в менюЕщёкоманду пометки на удаление. - Подтвердите вопрос.
Проведённый документ после пометки становится непроведённым: проводки и записи в регистрах исчезают сразу. Суммы в отчётах изменятся ещё до физического удаления.
Чтобы снять пометку, встаньте на перечёркнутый документ и снова нажмите Del — программа предложит снять пометку. Проведение при этом не восстанавливается, документ нужно провести заново.
Шаг 2. Удалить помеченные объекты
Пути к обработке в типовых конфигурациях:
| Конфигурация | Путь |
|---|---|
| Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА 2, ERP | Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов |
| Любая конфигурация, если раздел не найден | Все функции → Обработки → Удаление помеченных объектов |
Пункт Все функции включают в настройках: меню с тремя полосками (или шестерёнка) в правом верхнем углу → Настройки → Параметры → флажок «Отображать команду „Все функции"».
Как проходит удаление:
- Выберите режим: удалить все помеченные объекты или только отмеченные вручную. Второй режим надёжнее — вы видите список и снимаете лишнее.
- Нажмите кнопку удаления.
- Обработка проверит ссылки. Объекты, на которые ничто не ссылается, удалятся.
- Оставшиеся покажутся в отдельном списке с указанием, какие документы на них ссылаются.
Что делать с неудалёнными объектами:
- 🔗 откройте ссылающийся документ и замените в нём удаляемый элемент на нужный;
- 🔗 если ссылающийся документ тоже лишний — пометьте его и запустите обработку ещё раз;
- 🔗 если ссылка есть в закрытом периоде — сначала разберитесь с датой запрета (см. раздел про ограничения ниже).
В файловой базе удаление тысяч объектов может занять часы. Запускайте его вечером или в выходной, когда в базе мало пользователей. Работа других сотрудников не прерывается, но обработка идёт медленнее, а новые ссылки на помеченные объекты могут появиться прямо во время проверки.
Программное удаление строк табличной части во встроенном языке
Для разработчика у табличной части документа есть три основных инструмента:
| Метод | Что делает |
|---|---|
ТабличнаяЧасть.Удалить(Строка) | Удаляет одну строку; принимает саму строку или её индекс |
ТабличнаяЧасть.Очистить() | Удаляет все строки сразу |
ТабличнаяЧасть.НайтиСтроки(Структура) | Возвращает массив строк по условию — удобно перед удалением |
Очистить таблицу целиком
ДокОбъект = Ссылка.ПолучитьОбъект();
ДокОбъект.Товары.Очистить();
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
Удалить строки по условию
Главная ловушка — удалять строки в прямом цикле Для Каждого. После удаления текущей строки индексы сдвигаются, и цикл пропускает следующую. Правильный вариант — обратный цикл:
Товары = ДокОбъект.Товары;
Для Сч = 1 По Товары.Количество() Цикл
Строка = Товары[Товары.Количество() - Сч];
Если Строка.Количество = 0 Тогда
Товары.Удалить(Строка);
КонецЕсли;
КонецЦикла;
Граница цикла вычисляется один раз при входе. Внутри индекс считается от текущего размера таблицы, поэтому удаление не сбивает обход.
Второй способ — сначала собрать строки, потом удалить:
Отбор = Новый Структура("Номенклатура", УдаляемаяНоменклатура);
НайденныеСтроки = ДокОбъект.Товары.НайтиСтроки(Отбор);
Для Каждого Строка Из НайденныеСтроки Цикл
ДокОбъект.Товары.Удалить(Строка);
КонецЦикла;
Здесь цикл идёт по отдельному массиву, а не по самой таблице, поэтому пропусков нет.
Удаление строк в форме
В модуле формы табличная часть доступна как Объект.Товары. Те же методы работают и там, но изменения попадут в базу только после записи формы. Выделенные пользователем строки берут через свойство ВыделенныеСтроки элемента формы — это массив идентификаторов, строку получают методом Объект.Товары.НайтиПоИдентификатору(Идентификатор).
Удаление самого документа кодом
ДокОбъект.УстановитьПометкуУдаления(Истина)— ставит пометку, как клавишаDel;ДокОбъект.Удалить()— удаляет объект сразу, без проверки ссылок.
Второй метод опасен: если на документ ссылались другие объекты, в них останутся «битые ссылки» вида <Объект не найден>. В рабочих базах используйте пометку и типовую обработку удаления.
Массовая очистка табличных частей во многих документах
Когда строки нужно убрать не в одном документе, а в сотне — например, нулевые позиции после загрузки из Excel, — вручную это долго. Есть три пути.
Внешняя обработка. Программист пишет обработку на 20–30 строк: запрос выбирает нужные документы, затем для каждого получается объект, удаляются строки по условию из примера выше и документ записывается. Если документ был проведён, его записывают в режиме проведения, чтобы обновились движения.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Т.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК Т
|ГДЕ
| Т.Количество = 0
| И Т.Ссылка.Дата МЕЖДУ &Начало И &Конец";
Запрос.УстановитьПараметр("Начало", НачалоПериода);
Запрос.УстановитьПараметр("Конец", КонецПериода);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
НайденныеСтроки = ДокОбъект.Товары.НайтиСтроки(Новый Структура("Количество", 0));
Для Каждого Строка Из НайденныеСтроки Цикл
ДокОбъект.Товары.Удалить(Строка);
КонецЦикла;
Режим = ?(ДокОбъект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись);
ДокОбъект.Записать(Режим);
КонецЦикла;
Имя документа и табличной части подставьте свои: в другой конфигурации они называются иначе. Сначала прогоните обработку на копии базы.
Групповое изменение реквизитов. Типовая обработка Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов меняет значения в шапке и строках многих объектов сразу. Строки она не удаляет, но помогает, если задача на самом деле — заменить значение, а не стереть строку.
Перезаполнение документов. Если документ умеет заполняться автоматически, иногда проще открыть каждый и нажать Заполнить, чем писать код.
Почему 1С не даёт удалить строку или документ
Типовые причины отказа и что с ними делать:
Отдельно о монопольном режиме. Для обычного удаления строк и пометки документов он не нужен. Типовая обработка удаления помеченных объектов в 8.3 тоже работает без него, хотя при большом объёме данных её удобнее запускать, когда в базе никого нет.
Как вернуть удалённые строки и документы
Шансы зависят от того, на каком этапе произошло удаление.
| Что случилось | Как вернуть |
|---|---|
| Строка удалена, документ не записан | Закрыть документ без сохранения |
| Документ записан без строки | Восстановить версию из истории изменений, если она включена; иначе ввести строку заново |
| Документ помечен на удаление | Снять пометку клавишей Del и провести документ |
| Документ удалён обработкой | Только из резервной копии |
История изменений объекта
В типовых конфигурациях на базе БСП есть версионирование: программа хранит прежние версии документов. Включается оно в общих настройках администрирования, в группе «История изменений». Если оно включено, откройте документ, найдите в меню Ещё команду истории изменений, выберите версию до удаления строк и перейдите на неё. Табличная часть вернётся целиком.
Если версионирование не было включено к моменту удаления, задним числом историю не получить.
Кто и когда удалил
Журнал регистрации показывает, кто пометил или удалил объект и когда. Путь: Администрирование → Обслуживание → Журнал регистрации. Отберите события по пользователю, периоду и событию удаления или изменения данных. Это помогает понять масштаб: один документ или целая партия.
Восстановление из резервной копии
Если документ физически удалён, верните его так:
- Разверните резервную копию в отдельную информационную базу. Не загружайте её поверх рабочей — потеряете всё, что ввели после копии.
- Найдите в копии нужные документы.
- Перенесите их в рабочую базу через выгрузку и загрузку данных в XML (универсальная обработка выгрузки-загрузки) или введите вручную, если документов немного.
- Проведите восстановленные документы и сверьте остатки.
Загрузка файла .dt в Конфигураторе заменяет всю базу целиком. Для возврата нескольких документов этот способ не подходит.
Типичные ошибки при удалении
- ❌ Удаляют документ вместо строки. Нажали
Delв списке документов, а хотели убрать позицию внутри накладной. Пометка снимается той же клавишей. - ❌ Не проверяют итоги после удаления. Вместе со строкой товара уходит и её НДС, а в некоторых документах — распределённые суммы скидок или доставки. Сверьте итог документа с первичкой до проведения.
- ❌ Запускают «удалить все помеченные» не глядя. В базе могут оказаться помеченные годы назад объекты, о которых никто не помнит. Режим выборочного удаления безопаснее.
- ❌ Удаляют строки в прямом цикле в коде. Часть строк остаётся — нужен обратный цикл или предварительный поиск.
- ❌ Используют
Удалить()у объекта в рабочей базе. После этого в отчётах всплывают<Объект не найден>.
Частые вопросы об удалении строк
Можно ли удалить строку в проведённом документе?
Почему удалённый документ всё ещё виден в списке?
Удалятся ли проводки, если пометить документ на удаление?
Можно ли удалять помеченные объекты автоматически по расписанию?
Как удалить пустые строки после загрузки из Excel?
Shift и нажмите Del.