Очистка значений в колонке таблицы 1С: от ручного способа до кода и СУБД

· 9 мин

Содержание

Чтобы очистить колонку в 1С 8.3, выберите способ по объёму: пять–десять строк чистят вручную (Shift+F4 или крестик в ячейке), сотни элементов справочника или документов — через Ещё → Изменить выделенные (обработка «Групповое изменение реквизитов»), а регулярную или нестандартную очистку делают кодом во внешней обработке или расширении. Прямой UPDATE в базе SQL — крайний вариант, о его рисках ниже.

Под «колонкой» в 1С понимают разное: реквизит справочника в списке, колонку табличной части документа, колонку таблицы значений в коде или столбец табличного документа. Приёмы ниже работают в типовых конфигурациях на платформе 8.3 с интерфейсом «Такси»: Бухгалтерии 3.0, УТ 11, ЗУП 3.1.

СпособКогда выбиратьРиски
Вручную в формеДо 10–20 строкПочти нет, но долго
Групповое изменение реквизитовСотни объектов одного видаПерезапись проведённых документов
Код во внешней обработкеСложный отбор, табличные частиОшибка в коде затронет всю выборку
РасширениеКнопка для пользователейНужен разработчик и тест
Регламентное заданиеОчистка по расписаниюРаботает без присмотра
Прямой SQLТолько аварийноНарушение целостности данных

Подготовка: что сделать перед очисткой колонки

Очистка — операция без кнопки «Отменить». После записи объекта старое значение вернётся только из копии или из истории версий, если она включена.

Перед массовой очисткой выгрузите базу в .dt или сделайте резервную копию средствами СУБД. Выгрузка .dt идёт через Конфигуратор: Администрирование → Выгрузить информационную базу. Для неё нужен монопольный доступ, поэтому делайте её, когда пользователи вышли.

Ответьте себе на три вопроса:

  • 🎯 Что именно чистим — реквизит шапки, колонку табличной части или реквизит справочника. От этого зависит способ.
  • 📄 Проведены ли документы. Изменение колонки в проведённом документе само по себе не перестраивает движения. Если колонка влияет на суммы или учёт, документ придётся перепровести.
  • 🔒 Обязательна ли колонка. Если реквизит проверяется при записи («Поле не заполнено»), очищенный документ не запишется в проведённом виде.
Перед очисткой колонки
Выполнено: 0 / 5

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

Подходит, когда строк немного. Работает одинаково во всех конфигурациях, потому что это поведение платформы.

  1. Откройте документ или элемент справочника.
  2. Встаньте в ячейку нужной колонки табличной части.
  3. Нажмите Shift+F4 или кнопку очистки (крестик) справа в поле. Для числовой колонки можно ввести 0.
  4. Перейдите к следующей строке клавишей ↓ и повторите.
  5. Запишите объект кнопкой Записать или Провести и закрыть.

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

Для колонки в табличном документе (отчёт, печатная форма, файл Excel, открытый в 1С) выделите столбец щелчком по его заголовку и нажмите Delete. Текст ячеек удалится, сам столбец останется. Чтобы удалить столбец целиком, используйте команду удаления в контекстном меню.

Способ 2. Массовая очистка через групповое изменение реквизитов

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

Как запустить из списка

  1. Откройте список: справочник «Номенклатура», журнал документов «Реализация» и т. п.
  2. Установите отбор или выделите нужные строки (Ctrl+A — все, Ctrl+щелчок — по одной).
  3. Нажмите Ещё → Изменить выделенные.

Откроется форма группового изменения с уже переданными объектами.

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

КонфигурацияПуть
Бухгалтерия 3.0Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов
УТ 11НСИ и администрирование → Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов
ЗУП 3.1Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов

Здесь сначала выбирают вид объектов, затем настраивают отбор.

Как очистить значение

  1. В верхней части укажите, что меняем: реквизиты объекта или реквизиты конкретной табличной части.
  2. Найдите в списке нужный реквизит.
  3. Отметьте его к изменению и оставьте новое значение пустым (очистите поле Shift+F4). Для чисел — 0.
  4. Нажмите Изменить реквизиты. По окончании обработка покажет, сколько объектов изменено и где были ошибки.

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

Для табличной части можно задать отбор по строкам: например, очистить «Скидку» только в строках с определённой номенклатурой. Это удобнее, чем чистить всю колонку и потом восстанавливать нужное.

Способ 3. Очистка колонки кодом: запрос плюс запись объектов

Язык запросов 1С только читает данные. Команд UPDATE или DELETE в нём нет. Поэтому схема всегда такая: запросом находим объекты, затем в цикле получаем объект, меняем и записываем.

Код размещают в серверной процедуре внешней обработки (Файл → Открыть в режиме Предприятия; нужно право на открытие внешних обработок).

Очистка реквизита справочника

&НаСервере
Процедура ОчиститьАртикулНаСервере()

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.Артикул <> """"";

    Выборка = Запрос.Выполнить().Выбрать();
    Счетчик = 0;
    Пока Выборка.Следующий() Цикл
        Объект = Выборка.Ссылка.ПолучитьОбъект();
        Объект.Артикул = "";
        Объект.Записать();
        Счетчик = Счетчик + 1;
    КонецЦикла;

    Сообщить(СтрШаблон("Очищено элементов: %1", Счетчик));

КонецПроцедуры

Очистка колонки табличной части документа

У табличной части есть метод ЗаполнитьЗначения(Значение, Колонки). Он заполняет указанную колонку во всех строках одним значением — это и есть очистка колонки одной строкой кода.

&НаСервере
Процедура ОчиститьСкидкуНаСервере(НачалоПериода, КонецПериода)

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

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
        ДокОбъект.Товары.ЗаполнитьЗначения(0, "ПроцентСкидки");
        ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
    КонецЦикла;

КонецПроцедуры

Имена документа и колонок в примере условные: в вашей конфигурации посмотрите их в Конфигураторе или через Ещё → Изменить форму в документе.

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

Колонка таблицы значений и формы

Для таблицы значений в памяти — тот же метод:

ТЗ.ЗаполнитьЗначения(Неопределено, "Комментарий");

Если колонку нужно не очистить, а убрать из таблицы значений: ТЗ.Колонки.Удалить("Комментарий").

В управляемой форме табличная часть объекта — это коллекция данных формы, у неё метода ЗаполнитьЗначения нет. Там чистят циклом:

Для Каждого Строка Из Объект.Товары Цикл
    Строка.ПроцентСкидки = 0;
КонецЦикла;

Встречается совет ставить Объект.ОбменДанными.Загрузка = Истина, чтобы запись шла быстрее. Так отключаются проверки и подписки на события. Для разовой очистки служебного поля это допустимо, для учётных реквизитов — нет: можно получить несогласованные данные.

Способ 4. Внешняя обработка или расширение с кнопкой «Очистить колонку»

Когда очистка нужна пользователям регулярно, код из способа 3 оформляют как команду.

Внешняя обработка — быстрый вариант. Её подключают через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки как дополнительную обработку. Пользователь запускает её из раздела, задаёт период и нажимает кнопку.

Расширение конфигурации (появились в платформе 8.3.6) удобнее, если кнопка нужна прямо в документе:

  1. В Конфигураторе: Конфигурация → Расширения конфигурации → Добавить.
  2. Заимствуйте форму документа и добавьте в неё команду ОчиститьКолонку.
  3. Поместите кнопку в командную панель табличной части.
  4. В обработчике команды очистите колонку циклом по строкам (пример выше) и пересчитайте суммы, если колонка влияет на них.
  5. Сохраните расширение и проверьте на копии базы.

Типовая конфигурация при этом остаётся на поддержке и обновляется как обычно.

Способ 5. Очистка колонки напрямую в СУБД

Технически колонку можно обнулить SQL-запросом в MS SQL или PostgreSQL. Таблицы 1С называются служебно: _Reference123, _Document456_VT789, поля — _Fld1234. Соответствие имён находят методом ПолучитьСтруктуруХраненияБазыДанных() или сторонними утилитами.

-- Только для понимания механики. В рабочей базе не выполнять.
UPDATE _Document456_VT789
SET _Fld1234 = 0;

Почему это крайний вариант:

  • ❌ Не обновляются связанные данные. Регистры, итоги, версии объектов и история изменений останутся старыми.
  • ❌ Кэш сервера 1С может держать старые значения, пока не перезапустят рабочие процессы.
  • ❌ Пустое значение ссылки в 1С — это не NULL, а двоичные нули определённой длины. Ошибка в типе даст битые ссылки.
  • ❌ Поддержка и обмены. Изменения не попадут в планы обмена, другие узлы их не увидят.

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

Способ 6. Автоматическая очистка по расписанию

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

  1. В расширении добавьте общий модуль (серверный) с экспортной процедурой очистки — код из способа 3.
  2. Создайте регламентное задание, укажите эту процедуру как метод.
  3. Задайте расписание: например, ежедневно в 03:00, когда в базе никто не работает .
  4. Включите задание. В клиент-серверной базе оно выполняется на сервере 1С.

Проверить запуски можно через Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания: там видно, когда задание стартовало и завершилось ли ошибкой.

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

В процедуре предусмотрите запись в журнал регистрации (ЗаписьЖурналаРегистрации), сколько объектов очищено. Иначе через месяц никто не вспомнит, почему колонка пустая.

Ошибки при очистке колонок и как их обойти

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

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

Можно ли очистить колонку запросом без перебора объектов?
Нет. Язык запросов 1С не изменяет данные. Нужно получить объекты и записать их, либо использовать групповое изменение реквизитов.
Чем «очистить» отличается от «удалить колонку»?
Очистка стирает значения в строках, структура остаётся. Удаление колонки табличной части — это изменение конфигурации, его делает разработчик в Конфигураторе.
Сохранится ли старое значение где-нибудь?
Только в резервной копии или в истории версий объекта, если версионирование включено для этого вида документов или справочников.
Сколько времени займёт групповое изменение 10 000 документов?
Зависит от сервера и сложности документа. Ориентир — от нескольких минут до часа. Запускайте в нерабочее время и сначала проверьте на 50–100 документах.
Можно ли очистить колонку в нескольких базах сразу?
Если базы связаны обменом, достаточно изменить данные в одной — изменения уйдут по обмену. Независимые базы обрабатывают по отдельности.