Работа с табличными данными в 1С:Предприятие — одна из самых частых задач, с которыми сталкиваются пользователи и разработчики. Удаление строк может понадобиться при корректировке справочников, исправлении ошибок в документах или очистке устаревших записей. Однако не все знают, что в 1С существует несколько способов удаления строк — от простого нажатия клавиши Delete до программных методов с использованием встроенного языка.
В этой статье мы разберём 5 основных методов удаления строк в различных объектах 1С 8.3 и 8.2: через интерфейс пользователя, с помощью запросов, программно в модулях, а также нюансы работы с табличными частями документов и справочников. Особое внимание уделим типичным ошибкам, которые могут возникнуть при удалении, и способам их избежать. Если вы только начинаете осваивать 1С, рекомендуем сначала ознакомиться с базовыми принципами работы с табличными данными — это поможет лучше понять механизмы, описанные ниже.
1. Удаление строк через интерфейс пользователя
Самый простой способ удалить строку в 1С — использовать стандартные инструменты интерфейса. Этот метод подходит для большинства табличных частей документов, справочников и регистров. Рассмотрим пошаговую инструкцию:
- 📌 Выделите строку, которую нужно удалить, кликнув по ней левой кнопкой мыши. Для выделения нескольких строк удерживайте
CtrlилиShift. - 🗑️ Нажмите клавишу
Deleteна клавиатуре или выберите пунктУдалитьв контекстном меню (правый клик по строке). - ✅ Подтвердите удаление в появившемся диалоговом окне, если система запросит подтверждение.
Важно учитывать, что в некоторых конфигурациях 1С (например, в 1С:Бухгалтерия 3.0 или 1С:УТ 11) удаление строк может быть ограничено правами пользователя или бизнес-логикой. Например, в документе Реализация товаров и услуг нельзя удалить строку, если по ней уже проведена оплата или отгрузка. В таких случаях система выдаст ошибку с пояснением причины.
Если клавиша Delete не работает, проверьте, не включён ли режим редактирования (F2). В некоторых формах 1С удаление доступно только в режиме редактирования.
2. Программное удаление строк в модулях 1С
Для автоматизации процесса или удаления строк по сложным условиям используется встроенный язык 1С. Ниже приведены основные методы программного удаления для разных объектов.
2.1. Удаление строк в табличной части документа
Чтобы удалить строку в табличной части документа программно, используйте метод Удалить(). Пример кода для удаления текущей строки:
// Получаем текущий документ
Док = Документы.РеализацияТоваровУслуг.ТекущийДокумент();
// Удаляем текущую строку в табличной части "Товары"
ТекущаяСтрока = Док.Товары.ТекущаяСтрока();
Если ТекущаяСтрока <> Неопределено Тогда
Док.Товары.Удалить(ТекущаяСтрока);
КонецЕсли;
Для удаления всех строк, соответствующих определённому условию, можно использовать цикл:
Для Каждого Строка Из Док.Товары Цикл
Если Строка.Номенклатура.Наименование = "Устаревший товар" Тогда
Док.Товары.Удалить(Строка);
КонецЕсли;
КонецЦикла;
2.2. Удаление элементов справочника
Для удаления элементов справочника используется метод УстановитьПометкуУдаления(). ОчиститьИстекшие().
Справочник = Справочники.Номенклатура.НайтиПоНаименованию("Устаревший товар");
Если Справочник.Пустая() = Ложь Тогда
Справочник.УстановитьПометкуУдаления(Истина);
КонецЕсли;
Что такое "мягкое" удаление в 1С?
В 1С удаление элементов часто реализуется через пометку на удаление, а не физическое стирание. Это позволяет:
1. Восстановить элемент, если он был удалён ошибочно.
2. Сохранить ссылки на элемент в других объектах базы (например, в документах).
3. Контролировать процесс очистки через специальные обработки.
Физическое удаление происходит только после выполнения операции очистки истёкших пометок, которую обычно запускает администратор системы.
3. Удаление строк с помощью запросов 1С
Запросы в 1С позволяют массово удалять строки, соответствующие заданным критериям. Этот метод особенно полезен для очистки больших объёмов данных. Однако удаление через запрос необратимо и требует прав на прямую модификацию данных, поэтому использовать его следует с осторожностью.
Пример запроса для удаления строк из регистра накопления:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РегистрНакопления.ОстаткиТоваров.Ссылка КАК Ссылка
|ИЗ
| РегистрНакопления.ОстаткиТоваров КАК РегистрНакопления.ОстаткиТоваров
|ГДЕ
| РегистрНакопления.ОстаткиТоваров.Номенклатура.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование", "Устаревший товар");
Результат = Запрос.Выполнить();
Для Каждого Строка Из Результат Цикл
РегистрНакопления.ОстаткиТоваров.Очистить(Строка.Ссылка);
КонецЦикла;
⚠️ Внимание: Удаление данных через запросы может нарушить целостность базы, если строки связаны с другими объектами (например, документами или регистрами). Перед массовым удалением рекомендуется создать резервную копию базы или протестировать запрос на копии рабочей базы.
4. Особенности удаления строк в табличных частях документов
Табличные части документов в 1С имеют свои нюансы при удалении строк. Рассмотрим ключевые моменты:
- 📝 В некоторых конфигурациях (например, 1С:ERP) удаление строк может блокироваться, если документ проведён. В этом случае сначала нужно отменить проведение (
Документ.ОтменитьПроведение()). - 🔄 При удалении строки в табличной части автоматически пересчитываются итоги документа (суммы, количества). Если итоги не обновляются, проверьте обработчики событий
ПриИзменении. - 🔒 В документах с подчинёнными табличными частями (например,
Счета-фактурывРеализации) удаление строки в основной части может потребовать корректировки связанных данных.
Пример кода для удаления строки с предварительной отменой проведения:
Док = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру("000123");
Если Док.Проведен() Тогда
Док.ОтменитьПроведение();
КонецЕсли;
ТекущаяСтрока = Док.Товары.ТекущаяСтрока();
Если ТекущаяСтрока <> Неопределено Тогда
Док.Товары.Удалить(ТекущаяСтрока);
Док.Записать();
КонецЕсли;
5. Удаление строк в управляемых формах
В управляемых формах (используемых в 1С 8.3) процесс удаления строк отличается от обычных форм. Здесь часто применяется метод УдалитьСтроки() для табличного поля.
Пример кода для управляемой формы:
// Получаем табличное поле из формы
Таблица = ЭлементыФормы.Товары;
// Удаляем выделенные строки
ВыделенныеСтроки = Таблица.ВыделенныеСтроки;
Для Каждого Строка Из ВыделенныеСтроки Цикл
Таблица.Список.Удалить(Строка);
КонецЦикла;
В управляемых формах также можно использовать команду Удалить из командного интерфейса формы. Для этого нужно:
- Добавить команду
Удалитьв форму через конструктор. - Написать обработчик команды, который будет удалять выделенные строки.
- Связать команду с кнопкой или пунктом меню.
⚠️ Внимание: В управляемых формах после удаления строки может потребоваться явный вызов метода Обновить() для табличного поля, чтобы изменения отобразились на экране.
6. Типичные ошибки и способы их решения
При удалении строк в 1С пользователи и разработчики часто сталкиваются с типичными ошибками. Рассмотрим наиболее распространённые из них и способы их устранения.
| Ошибка | Причина | Решение |
|---|---|---|
Недостаточно прав для удаления |
У пользователя нет прав на модификацию объекта. | Обратитесь к администратору для настройки прав или используйте учётную запись с полными правами. |
Строка используется в другом объекте |
Строка связана с другими документами или регистрами. | Проверьте ссылки на строку в связанных объектах и удалите их перед удалением строки. |
Документ проведён, изменение невозможно |
Документ имеет статус Проведён. |
Отмените проведение документа перед удалением строки. |
Нельзя удалить последнюю строку |
В некоторых конфигурациях запрещено удаление последней строки табличной части. | Добавьте новую строку перед удалением или настройте параметры конфигурации. |
Если при удалении строки возникает ошибка, которую вы не можете идентифицировать, воспользуйтесь журналом регистрации (Администрирование → Журнал регистрации). Там можно найти подробное описание ошибки и стек вызовов, что поможет в диагностике проблемы.
Убедитесь, что документ не проведён|Проверьте права пользователя на удаление|Создайте резервную копию данных|Удалите зависимости в связанных объектах-->
7. Альтернативные способы: обнуление и архивирование
В некоторых случаях вместо удаления строк целесообразнее использовать альтернативные методы:
- 📉 Обнуление значений: Вместо удаления строки можно обнулить её реквизиты (например, количество или сумму). Это сохраняет структуру документа, но убирает влияние строки на итоги.
- 🗃️ Архивирование: Перенос строк в отдельный справочник или регистр с пометкой "Архив". Так данные остаются доступны для анализа, но не участвуют в текущих расчётах.
- 🔄 Перенос в другой документ: Например, устаревшие строки можно перенести в документ
Корректировка записейилиИнвентаризация.
Пример кода для обнуления строки вместо удаления:
Для Каждого Строка Из Док.Товары Цикл
Если Строка.Номенклатура.Наименование = "Устаревший товар" Тогда
Строка.Количество = 0;
Строка.Сумма = 0;
КонецЕсли;
КонецЦикла;
Такой подход особенно полезен в бухгалтерских конфигурациях, где важно сохранять историю изменений для отчётности.
Перед массовым удалением или изменением данных всегда тестируйте код на копии рабочей базы. Это поможет избежать потери критически важной информации.
Часто задаваемые вопросы
Можно ли восстановить удалённую строку в 1С?
Если строка была удалена через интерфейс (клавиша Delete), восстановить её можно только через резервную копию базы. Если использовалась пометка на удаление (УстановитьПометкуУдаления), элемент можно восстановить в списке помеченных объектов (Все функции → Стандартные → Помеченные на удаление).
Почему при удалении строки в документе не меняются итоги?
Это может происходить из-за отсутствия обработчика события ПриИзменении для табличной части. Проверьте модуль формы документа и добавьте код для пересчёта итогов:
Процедура ТоварыПриИзменении(Элемент)
ДокументОбъект.ПересчитатьИтоги();
КонецПроцедуры
Как удалить все строки в табличной части документа?
Для полной очистки табличной части используйте метод Очистить():
Док.Товары.Очистить();
Учтите, что это удалит все строки без возможности восстановления.
Можно ли удалить строку в печатной форме документа?
Нет, печатная форма — это представление данных для вывода на печать. Чтобы удалить строку, нужно редактировать сам документ или данные, на основе которых формируется печатная форма.
Как удалить строки в регистре сведений?
Для удаления записей из регистра сведений используйте метод Удалить() для конкретной записи или Очистить() для массового удаления:
Регистр = РегистрыСведений.ЦеныНоменклатуры;
Запись = Регистр.ПолучитьПоследнююЗапись(Номенклатура);
Если Запись <> Неопределено Тогда
Регистр.Удалить(Запись);
КонецЕсли;