Очистка ячеек в табличном документе и формах 1С

· 9 мин

Содержание

Выделите нужные ячейки и нажмите Delete — содержимое уберётся, а оформление (заливка, рамки, шрифт) останется. Это самый частый случай, когда речь идёт о табличном документе 1С. Если нужно убрать ещё и формат или очистить формулы, действия немного отличаются — разберём каждый вариант.

«Ячейка» в 1С — понятие более широкое, чем в Excel. Так называют и клетки табличного документа, и поля ввода на форме, и строки табличных частей. Поэтому и способ очистить их зависит от того, где именно вы работаете. Ниже — все сценарии: ручная очистка, работа с Excel, программные методы и массовое удаление данных .

Очистка содержимого и оформления в табличном документе

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

Чтобы убрать только значения:

  1. Выделите одну ячейку или протяните мышью диапазон.
  2. Нажмите Delete.

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

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

Сложнее с оформлением. Отдельной кнопки «очистить формат» в табличном документе нет. Чтобы снять заливку и рамки:

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

Формулы в табличном документе начинаются со знака = и живут прямо в ячейке. Нажатие Delete удаляет и формулу, и её результат. Если нужно оставить вычисленное значение, а формулу убрать, скопируйте область и вставьте обратно только значения через контекстное меню вставки.

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

Важно не путать два действия:

  • Очистить ячейки — значения уходят, но сетка строк и колонок остаётся прежней.
  • Удалить строки или колонки — исчезает сам ряд, а то, что было ниже или правее, сдвигается на его место.

Удаление строк и колонок меняет геометрию документа и может сломать вёрстку печатной формы (съедут объединённые ячейки, рисунки, именованные области). Когда задача — просто обнулить данные, выбирайте именно очистку, а не удаление рядов.

Как очистить поля ввода на форме документа или справочника

На форме элемента справочника, документа или обработки «ячейки» — это поля ввода. Их очищают иначе.

Для ссылочного поля (контрагент, номенклатура, склад) наведите курсор — справа внутри поля появится кнопка с крестиком. Щелчок по ней очищает значение. Клавиша Delete в активном поле тоже стирает введённый текст.

В табличной части документа (строки товаров, проводок) работают так:

  • выделите строку целиком и удалите её кнопкой удаления строки в командной панели таблицы (значок с красным минусом) либо клавишей Delete;
  • чтобы очистить одну ячейку в строке, встаньте в неё и удалите значение, как в обычном поле.

Удаление строки табличной части и очистка значения в ячейке — разные вещи. В первом случае строка исчезает совсем, во втором остаётся пустой. Для сумм и количеств пустая ячейка обычно трактуется как ноль.

Отдельная ловушка — списки. В форме списка справочника или документа клавиша Delete не очищает ячейку, а помечает выделенную строку на удаление. Это касается всей записи, а не одного поля. Если нужно поправить значение в списке, откройте элемент на редактирование и чистите поле уже в его форме.

Если документ уже проведён, правка полей потребует перепроведения — иначе движения по регистрам останутся старыми.

Очистка данных при обмене с Excel и внешними файлами

Когда данные грузятся из Excel или выгружаются туда, «очистка ячеек» означает одно из двух: подготовить пустой диапазон в самом Excel или очистить область перед повторной записью в 1С.

Для работы с файлами Excel в 1С используют два подхода:

СпособКогда применятьОграничение
Встроенное чтение/запись табличного документа (Прочитать/Записать)Разовый импорт и экспорт, печатные формыЧувствителен к структуре листа
COM-объект Excel.ApplicationТонкая работа с книгой: листы, диапазоны, стилиНужен установленный Excel, только Windows

Через COM диапазон Excel очищают его же методами:

Эксель = Новый COMОбъект("Excel.Application");
Книга = Эксель.Workbooks.Open(ПутьКФайлу);
Лист = Книга.Sheets(1);
// Убрать только значения, формат оставить:
Лист.Range("A1:D100").ClearContents();
// Убрать значения и формат целиком:
Лист.Range("A1:D100").Clear();
Книга.Save();
Эксель.Quit();

ClearContents стирает содержимое, Clear — содержимое вместе с оформлением. Это методы самого Excel, поэтому их имена латиницей.

COM-объект Excel.Application работает только там, где установлен Microsoft Excel и запущен толстый или тонкий клиент на Windows. В веб-клиенте и на сервере под Linux он недоступен — для таких сред читайте файл встроенными средствами платформы.

При загрузке данных в 1С из файла (например, через типовую обработку загрузки из табличного документа) очищать ячейки Excel обычно не нужно: пустые строки просто пропускаются. А вот область табличного документа, куда вы собираете данные перед записью, стоит очистить, чтобы не осталось значений от прошлой выгрузки.

Частая проблема при импорте — «пустые» на вид ячейки, которые на деле содержат пробелы или невидимые символы. Из-за них 1С считает строку заполненной и пытается загрузить её. Такие ячейки в исходном файле надёжнее очистить методом ClearContents по всему лишнему диапазону, а не удалять значения поштучно.

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

В коде области табличного документа адресуют методом Область, а чистят методом Очистить:

ТабДок = Новый ТабличныйДокумент;
// ... заполнили документ ...

// Очистить прямоугольную область по номерам строк и колонок:
Область = ТабДок.Область(1, 1, 10, 5);
Область.Очистить();

Метод Очистить у области принимает параметр, которым задают, что именно убрать: всё, только данные или только оформление. Если параметр не указать, очищается всё. Когда не уверены в точном наборе значений перечисления — посмотрите подсказку синтакс-помощника по методу Очистить.

Область можно задавать и по имени именованной области макета, если она объявлена:

Область = ТабДок.Область("ШапкаТаблицы");
Область.Очистить();

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

Если документ выводится на форму и его нужно обнулить целиком, проще пересоздать объект — ТабДок = Новый ТабличныйДокумент; — и заново вывести области из макета. Для частичного обновления используйте Очистить по именованной или координатной области: так сохранятся заголовки и шапка, а перестроится только тело отчёта.

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

Удаление движений документа и очистка регистров

Если под «ячейками» понимают строки регистров (накопления, сведений, бухгалтерии), то очищают их через движения документа.

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

В коде набор движений очищают в обработчике проведения:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Движения.ВзаиморасчетыСКонтрагентами.Записывать = Истина;
    Движения.ВзаиморасчетыСКонтрагентами.Очистить();
    // ... заполнение движений заново ...
КонецПроцедуры

Свойство Записывать = Истина говорит платформе сохранить набор, а Очистить убирает прежние записи перед формированием новых.

Для регистра сведений записи стирают через набор записей с отбором:

Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
Набор.Отбор.Валюта.Установить(СсылкаНаВалюту);
Набор.Очистить();
Набор.Записать();

Отбор здесь обязателен. Без него Очистить и Записать сотрут все записи регистра, а не только нужные. Для независимого регистра сведений, который разрешено редактировать вручную, записи можно добавлять и удалять прямо в его списке — но у большинства типовых регистров записи формируются документами, и править их напрямую нельзя.

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

Массовая очистка значений реквизитов и данных

Когда нужно очистить одно поле сразу у сотен элементов (например, обнулить устаревший реквизит номенклатуры), ручная правка не годится. В типовых конфигурациях на БСП для этого есть инструмент групповой обработки.

Откройте Администрирование → Обслуживание → Групповое изменение реквизитов (название пункта в вашей конфигурации может немного отличаться). Дальше:

  1. Выберите тип объектов — справочник или документ.
  2. Задайте отбор, чтобы попали только нужные элементы.
  3. Укажите реквизит и оставьте новое значение пустым.
  4. Запустите изменение.

Так реквизит очистится у всех отобранных объектов разом.

Перед массовой очисткой данных
Выполнено: 0 / 4

Групповое изменение обрабатывает данные пакетами, поэтому на больших справочниках запускайте его в нерабочее время. Если по реквизиту настроены проверки заполнения или он участвует в формулах подстановки, очистка может вызвать предупреждения при последующей записи объектов — это нормально, но проверьте логику заранее на паре элементов.

Помеченные на удаление объекты убирают другим инструментом — Администрирование → Обслуживание → Удаление помеченных объектов. Он не очищает отдельные ячейки, а удаляет записи целиком, проверяя ссылки на них из других объектов. Если на объект ещё ссылаются документы, система не даст его удалить и покажет список мест использования — сначала разберитесь с этими ссылками.

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

Особенности очистки в тонком и веб-клиенте

Поведение зависит от клиента, через который работают.

  • Толстый и тонкий клиент (Windows). Доступны все приёмы: редактирование табличного документа, клавиша Delete, COM-обмен с Excel.
  • Веб-клиент. Редактирование табличного документа и очистка ячеек клавишей Delete работают. А вот COM-объект Excel.Application в браузере недоступен — файлы Excel обрабатывайте встроенными средствами платформы на сервере.
  • Работа на сервере под Linux. COM тоже недоступен, поэтому обмен с Excel строят только на внутренних механизмах чтения и записи табличного документа.

Если один и тот же механизм очистки должен работать и в тонком, и в веб-клиенте, откажитесь от COM и используйте методы платформы — тогда код не придётся переписывать под среду.

Частые ошибки при очистке ячеек

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

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

Чем отличается очистка ячейки от удаления строки в табличной части?
Очистка оставляет строку на месте с пустым значением, а удаление убирает строку целиком. Для числовых полей пустая ячейка обычно считается нулём.
Можно ли очистить только формат, оставив данные?
В табличном документе отдельной команды для этого нет. Сбросьте оформление в свойствах области вручную или скопируйте формат пустой ячейки поверх диапазона — значения при этом сохранятся.
Как убрать сразу все значения с листа табличного документа?
Выделите весь лист щелчком по углу слева вверху от первой строки и колонки, затем нажмите Delete. Оформление останется.
Вернутся ли движения, если я по ошибке отменил проведение документа?
Нет, отмена проведения удаляет движения. Чтобы восстановить, нужно снова провести документ — движения сформируются заново по текущим данным.
Почему метод ClearContents не работает в 1С под Linux?
Это метод COM-объекта Excel, а COM доступен только на Windows с установленным Excel. На сервере под Linux и в веб-клиенте используйте встроенное чтение и запись табличного документа.