Справочники и Данные · 11 мин
Как удалить найденную строку в 1С
Как удалить найденную строку в 1С: поиск в списке, удаление строки табличной части документа, программное удаление через НайтиСтроки и запрос. Пошаговые инструкции.
Задача «удалить найденную строку» возникает в 1С в трёх разных ситуациях: пользователь нашёл запись в списке справочника или документа и хочет её убрать; нужно удалить строку табличной части документа; либо разработчик программно ищет строку по условию и удаляет её в коде. Каждый сценарий решается своим способом, и путать их нельзя: интерактивное удаление из списка не равнозначно удалению строки табличной части, а программное удаление требует понимания, где именно находятся данные.
Важно различать и два механизма удаления в платформе 1С:Предприятие. Первый — пометка на удаление: объект остаётся в базе, но исключается из большинства отчётов и движений. Второй — непосредственное удаление, которое доступно не всегда и уничтожает данные без возможности отката, если нет резервной копии. Для ссылочных объектов (справочников, документов) стандартный и безопасный путь — именно пометка на удаление с последующей обработкой «Удаление помеченных объектов».
Ниже разобраны все основные сценарии: от простого удаления найденной строки в списке до программного удаления через метод НайтиСтроки и обработку результатов запроса.
Удаление найденной строки в списке справочника или документов
Самый частый случай — пользователь нашёл нужный элемент через поиск в списке и хочет его удалить. Порядок действий одинаков для справочников, документов и большинства регистров сведений с формой списка.
Откройте список, воспользуйтесь строкой поиска (обычно вызывается клавишами Ctrl+F или сразу активна в верхней части формы) либо отбором. Когда нужная строка найдена и выделена, нажмите клавишу Del, кнопку «Пометить на удаление / снять пометку» на панели инструментов или выберите соответствующую команду в контекстном меню по правой кнопке мыши. Программа запросит подтверждение, после чего объект будет помечен на удаление — в списке он отобразится с перечёркнутой пиктограммой.
- 1Откройте список справочника или документов
- 2Найдите строку через поиск (Ctrl+F) или отбор
- 3Выделите найденную строку
- 4Нажмите Del или команду «Пометить на удаление»
- 5Подтвердите установку пометки
- 6Для окончательного удаления запустите «Удаление помеченных объектов» в разделе Администрирование
Пометка на удаление — обратимая операция: повторное нажатие той же команды снимает пометку, и объект снова становится активным. Физически данные исчезают только после штатной обработки удаления помеченных объектов, которая проверяет ссылочную целостность: если на объект есть ссылки из других документов или регистров, платформа не даст его удалить, пока ссылки не будут устранены.
Удаление строки табличной части документа
Если найденная строка находится внутри документа — например, позиция товара в реализации или сотрудник в кадровом приказе, — действует другой механизм. Строки табличной части не являются самостоятельными объектами, поэтому пометка на удаление к ним не применяется: строка удаляется сразу и окончательно при сохранении документа.
Установите курсор на нужную строку табличной части и нажмите кнопку с крестиком на командной панели таблицы, сочетание Shift+Del или команду «Удалить» в контекстном меню. В управляемых формах также работает клавиша Del, если таблица находится в фокусе. После удаления строки документ нужно записать или провести — до записи изменения хранятся только в форме.
Если документ проведён, после удаления строки его необходимо перепровести, иначе данные в регистрах останутся старыми. Если дата документа попадает в закрытый период или запрещённую дату изменения, платформа откажет в записи — это штатная защита, а не ошибка.
Удаление нескольких строк сразу
Для массового удаления выделите несколько строк с зажатой клавишей Ctrl (произвольные строки) или Shift (диапазон), затем выполните команду удаления. В некоторых типовых конфигурациях есть сервисные команды вида «Очистить табличную часть» или подбор с возможностью снятия позиций — они удобнее при большом количестве строк.
Программное удаление найденной строки: метод НайтиСтроки
Разработчику строку табличной части или таблицы значений приходится искать и удалять в коде. Для этого используется связка методов НайтиСтроки() и Удалить(). Метод НайтиСтроки возвращает массив строк, удовлетворяющих отбору, а не одну строку — это частая причина ошибок.
// Поиск и удаление строк табличной части документа
ПараметрыОтбора = Новый Структура("Номенклатура", НоменклатураДляУдаления);
НайденныеСтроки = Объект.Товары.НайтиСтроки(ПараметрыОтбора);
Для Каждого Строка Из НайденныеСтроки Цикл
Объект.Товары.Удалить(Строка);
КонецЦикла;Обратите внимание: удалять строки безопасно именно обходом массива, полученного из НайтиСтроки. Если же удалять строки внутри цикла «Для Каждого» по самой коллекции, индексы сместятся и часть строк будет пропущена. Классическое решение при обходе коллекции — идти с конца: от КоличествоСтрок-1 до 0 с шагом -1.
Для таблиц значений логика идентична: ТЗ.НайтиСтроки(Отбор) возвращает массив, ТЗ.Удалить(Строка) удаляет конкретную строку, ТЗ.Очистить() удаляет все строки. Если нужно удалить только первую найденную строку, проверьте, что массив не пуст, и удалите элемент с индексом 0.
Удаление записи из регистра сведений
Найденная строка может оказаться записью независимого регистра сведений — например, курса валюты на дату или значения настройки. Интерактивно такая запись удаляется из формы списка регистра клавишей Del, причём удаление происходит сразу, без пометки: регистры сведений не поддерживают механизм пометки на удаление.
Программно запись удаляется через менеджер записи или набор записей: создаётся набор с отбором по измерениям (и периоду для периодических регистров), набор не заполняется и записывается пустым — это эквивалент удаления. Либо используется метод Удалить() менеджера записи после её чтения.
Окончательное удаление помеченных объектов
После того как нужные объекты найдены и помечены, для физического удаления используется штатная обработка «Удаление помеченных объектов». В типовых конфигурациях она находится в разделе «Администрирование» → «Обслуживание» либо «НСИ и администрирование» → «Поддержка и обслуживание», в зависимости от конфигурации. Обработка требует монопольного или хотя бы спокойного режима работы и прав администратора.
Обработка предлагает два режима: автоматическое удаление всех помеченных объектов или выборочное, с ручной отметкой нужных. После анализа программа покажет объекты, которые удалить нельзя из-за ссылок на них, — для каждого можно посмотреть список мест использования и решить, что делать: удалить ссылающиеся объекты, заменить ссылки или оставить объект в базе.
Как проверить результат
Объект отображается с перечёркнутой пиктограммой
Объект выглядит обычным — пометка не установилась или нет прав
Объект отсутствует в списке неудалённых, мест использования нет
Объект в списке проблемных с перечнем ссылающихся объектов
Строка отсутствует, документ проведён, движения пересчитаны
Строка вернулась после переоткрытия — документ не был записан
Ограничения и права доступа
Не каждая найденная строка может быть удалена конкретным пользователем. Если кнопка удаления недоступна или платформа выдаёт сообщение о нарушении прав, причины обычно такие: у роли пользователя нет права «Удаление» или «Интерактивное удаление» на объект; установлена дата запрета изменения данных; объект предопределённый (предопределённые элементы справочников типовые конфигурации часто защищают от удаления); либо объект участвует в обмене данными и удаление заблокировано настройками синхронизации.
Отдельный случай — регистры, подчинённые регистратору. Строки таких регистров (движения документов) нельзя удалить напрямую: они исчезают только при отмене проведения или удалении самого документа-регистратора. Попытка найти и удалить такую строку в форме списка регистра не увенчается успехом — команда удаления будет недоступна.
Как выбрать действие
Частые вопросы
Почему после удаления строки и записи документа она появилась снова?
Чаще всего документ не был перепроведён или запись была отклонена из-за даты запрета изменений, а пользователь не заметил сообщение об ошибке. Откройте журнал регистрации или повторно запишите документ и прочитайте текст отказа. Также строка может возвращаться, если табличная часть заполняется обработчиками при записи.
Можно ли восстановить удалённую строку табличной части?
Нет, штатной отмены для удаления строки нет — после записи документа строка утрачена. Варианты восстановления: резервная копия базы, копия документа, сделанная заранее, либо журнал регистрации, если в конфигурации ведётся версионирование объектов — тогда можно посмотреть прежнее содержимое и ввести строку заново вручную.
Чем пометка на удаление отличается от непосредственного удаления?
Пометка обратима и не нарушает ссылочную целостность: объект остаётся в базе, на него продолжают ссылаться другие данные. Непосредственное (интерактивное) удаление через Shift+Del уничтожает объект сразу и доступно не для всех типов; если на объект есть ссылки, в базе появятся «битые» ссылки. Поэтому рекомендуемый путь — пометка плюс обработка удаления помеченных объектов.
Как удалить все строки табличной части одним действием в коде?
Вызовите метод Очистить() у табличной части: Объект.Товары.Очистить(). Для таблицы значений аналогично — ТЗ.Очистить(). После этого не забудьте записать объект, иначе очистка останется только в памяти формы.
Почему обработка удаления помеченных объектов не удаляет мой элемент справочника?
На элемент есть ссылки из других объектов: документов, регистров, других справочников. Обработка показывает список мест использования — откройте его, удалите или измените ссылающиеся объекты и повторите удаление. Заменять ссылки вручную удобно через обработку поиска и замены значений, если она есть в конфигурации.
Можно ли удалить найденную строку в файловой базе без монопольного режима?
Пометку на удаление и удаление строк табличных частей можно выполнять в обычном многопользовательском режиме. А вот обработка удаления помеченных объектов в файловой базе обычно требует, чтобы другие пользователи вышли, — иначе часть объектов окажется заблокированной и не удалится.
Что важно запомнить
Способ удаления зависит от того, где найдена строка: объект списка помечается на удаление и стирается обработкой, строка табличной части удаляется сразу с последующей записью документа, программно строки удаляют через массив из НайтиСтроки. Перед удалением данных из проведённых документов и регистров оцените влияние на учёт и позаботьтесь о резервной копии.