Очистка значений в колонке таблицы 1С: от ручного способа до кода и СУБД
Содержание
Чтобы очистить колонку в 1С 8.3, выберите способ по объёму: пять–десять строк чистят вручную (Shift+F4 или крестик в ячейке), сотни элементов справочника или документов — через Ещё → Изменить выделенные (обработка «Групповое изменение реквизитов»), а регулярную или нестандартную очистку делают кодом во внешней обработке или расширении. Прямой UPDATE в базе SQL — крайний вариант, о его рисках ниже.
Под «колонкой» в 1С понимают разное: реквизит справочника в списке, колонку табличной части документа, колонку таблицы значений в коде или столбец табличного документа. Приёмы ниже работают в типовых конфигурациях на платформе 8.3 с интерфейсом «Такси»: Бухгалтерии 3.0, УТ 11, ЗУП 3.1.
| Способ | Когда выбирать | Риски |
|---|---|---|
| Вручную в форме | До 10–20 строк | Почти нет, но долго |
| Групповое изменение реквизитов | Сотни объектов одного вида | Перезапись проведённых документов |
| Код во внешней обработке | Сложный отбор, табличные части | Ошибка в коде затронет всю выборку |
| Расширение | Кнопка для пользователей | Нужен разработчик и тест |
| Регламентное задание | Очистка по расписанию | Работает без присмотра |
| Прямой SQL | Только аварийно | Нарушение целостности данных |
Подготовка: что сделать перед очисткой колонки
Очистка — операция без кнопки «Отменить». После записи объекта старое значение вернётся только из копии или из истории версий, если она включена.
Перед массовой очисткой выгрузите базу в .dt или сделайте резервную копию средствами СУБД. Выгрузка .dt идёт через Конфигуратор: Администрирование → Выгрузить информационную базу. Для неё нужен монопольный доступ, поэтому делайте её, когда пользователи вышли.
Ответьте себе на три вопроса:
- 🎯 Что именно чистим — реквизит шапки, колонку табличной части или реквизит справочника. От этого зависит способ.
- 📄 Проведены ли документы. Изменение колонки в проведённом документе само по себе не перестраивает движения. Если колонка влияет на суммы или учёт, документ придётся перепровести.
- 🔒 Обязательна ли колонка. Если реквизит проверяется при записи («Поле не заполнено»), очищенный документ не запишется в проведённом виде.
Способ 1. Ручная очистка колонки в форме документа или справочника
Подходит, когда строк немного. Работает одинаково во всех конфигурациях, потому что это поведение платформы.
- Откройте документ или элемент справочника.
- Встаньте в ячейку нужной колонки табличной части.
- Нажмите
Shift+F4или кнопку очистки (крестик) справа в поле. Для числовой колонки можно ввести0. - Перейдите к следующей строке клавишей
↓и повторите. - Запишите объект кнопкой
ЗаписатьилиПровести и закрыть.
Если колонку нужно не очистить, а просто убрать с экрана, данные трогать не надо. Откройте Ещё → Изменить форму и снимите флажок у колонки. Значения в базе останутся.
Для колонки в табличном документе (отчёт, печатная форма, файл Excel, открытый в 1С) выделите столбец щелчком по его заголовку и нажмите Delete. Текст ячеек удалится, сам столбец останется. Чтобы удалить столбец целиком, используйте команду удаления в контекстном меню.
Способ 2. Массовая очистка через групповое изменение реквизитов
Главный инструмент без программирования. Обработка входит в типовые конфигурации на БСП и умеет менять как реквизиты шапки, так и реквизиты табличных частей.
Как запустить из списка
- Откройте список: справочник «Номенклатура», журнал документов «Реализация» и т. п.
- Установите отбор или выделите нужные строки (
Ctrl+A— все,Ctrl+щелчок— по одной). - Нажмите
Ещё → Изменить выделенные.
Откроется форма группового изменения с уже переданными объектами.
Как запустить из раздела администрирования
| Конфигурация | Путь |
|---|---|
| Бухгалтерия 3.0 | Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов |
| УТ 11 | НСИ и администрирование → Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов |
| ЗУП 3.1 | Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов |
Здесь сначала выбирают вид объектов, затем настраивают отбор.
Как очистить значение
- В верхней части укажите, что меняем: реквизиты объекта или реквизиты конкретной табличной части.
- Найдите в списке нужный реквизит.
- Отметьте его к изменению и оставьте новое значение пустым (очистите поле
Shift+F4). Для чисел —0. - Нажмите
Изменить реквизиты. По окончании обработка покажет, сколько объектов изменено и где были ошибки.
Для проведённых документов обработка перезаписывает их. Если документ не проходит проверку заполнения, он попадёт в список ошибок и не изменится. Просмотрите этот список, а не только итоговое число.
Для табличной части можно задать отбор по строкам: например, очистить «Скидку» только в строках с определённой номенклатурой. Это удобнее, чем чистить всю колонку и потом восстанавливать нужное.
Способ 3. Очистка колонки кодом: запрос плюс запись объектов
Язык запросов 1С только читает данные. Команд UPDATE или DELETE в нём нет. Поэтому схема всегда такая: запросом находим объекты, затем в цикле получаем объект, меняем и записываем.
Код размещают в серверной процедуре внешней обработки (Файл → Открыть в режиме Предприятия; нужно право на открытие внешних обработок).
Очистка реквизита справочника
&НаСервере
Процедура ОчиститьАртикулНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул <> """"";
Выборка = Запрос.Выполнить().Выбрать();
Счетчик = 0;
Пока Выборка.Следующий() Цикл
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Артикул = "";
Объект.Записать();
Счетчик = Счетчик + 1;
КонецЦикла;
Сообщить(СтрШаблон("Очищено элементов: %1", Счетчик));
КонецПроцедуры
Очистка колонки табличной части документа
У табличной части есть метод ЗаполнитьЗначения(Значение, Колонки). Он заполняет указанную колонку во всех строках одним значением — это и есть очистка колонки одной строкой кода.
&НаСервере
Процедура ОчиститьСкидкуНаСервере(НачалоПериода, КонецПериода)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Т.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК Т
|ГДЕ
| Т.Ссылка.Дата МЕЖДУ &Начало И &Конец
| И Т.ПроцентСкидки <> 0";
Запрос.УстановитьПараметр("Начало", НачалоПериода);
Запрос.УстановитьПараметр("Конец", КонецПериода);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокОбъект.Товары.ЗаполнитьЗначения(0, "ПроцентСкидки");
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
КонецПроцедуры
Имена документа и колонок в примере условные: в вашей конфигурации посмотрите их в Конфигураторе или через Ещё → Изменить форму в документе.
Запись РежимЗаписиДокумента.Запись у проведённого документа не обновляет движения. Если колонка участвует в суммах, используйте РежимЗаписиДокумента.Проведение или перепроведите документы потом через Групповое перепроведение документов.
Колонка таблицы значений и формы
Для таблицы значений в памяти — тот же метод:
ТЗ.ЗаполнитьЗначения(Неопределено, "Комментарий");
Если колонку нужно не очистить, а убрать из таблицы значений: ТЗ.Колонки.Удалить("Комментарий").
В управляемой форме табличная часть объекта — это коллекция данных формы, у неё метода ЗаполнитьЗначения нет. Там чистят циклом:
Для Каждого Строка Из Объект.Товары Цикл
Строка.ПроцентСкидки = 0;
КонецЦикла;
Встречается совет ставить Объект.ОбменДанными.Загрузка = Истина, чтобы запись шла быстрее. Так отключаются проверки и подписки на события. Для разовой очистки служебного поля это допустимо, для учётных реквизитов — нет: можно получить несогласованные данные.
Способ 4. Внешняя обработка или расширение с кнопкой «Очистить колонку»
Когда очистка нужна пользователям регулярно, код из способа 3 оформляют как команду.
Внешняя обработка — быстрый вариант. Её подключают через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки как дополнительную обработку. Пользователь запускает её из раздела, задаёт период и нажимает кнопку.
Расширение конфигурации (появились в платформе 8.3.6) удобнее, если кнопка нужна прямо в документе:
- В Конфигураторе:
Конфигурация → Расширения конфигурации → Добавить. - Заимствуйте форму документа и добавьте в неё команду
ОчиститьКолонку. - Поместите кнопку в командную панель табличной части.
- В обработчике команды очистите колонку циклом по строкам (пример выше) и пересчитайте суммы, если колонка влияет на них.
- Сохраните расширение и проверьте на копии базы.
Типовая конфигурация при этом остаётся на поддержке и обновляется как обычно.
Способ 5. Очистка колонки напрямую в СУБД
Технически колонку можно обнулить SQL-запросом в MS SQL или PostgreSQL. Таблицы 1С называются служебно: _Reference123, _Document456_VT789, поля — _Fld1234. Соответствие имён находят методом ПолучитьСтруктуруХраненияБазыДанных() или сторонними утилитами.
-- Только для понимания механики. В рабочей базе не выполнять.
UPDATE _Document456_VT789
SET _Fld1234 = 0;
Почему это крайний вариант:
- ❌ Не обновляются связанные данные. Регистры, итоги, версии объектов и история изменений останутся старыми.
- ❌ Кэш сервера 1С может держать старые значения, пока не перезапустят рабочие процессы.
- ❌ Пустое значение ссылки в 1С — это не
NULL, а двоичные нули определённой длины. Ошибка в типе даст битые ссылки. - ❌ Поддержка и обмены. Изменения не попадут в планы обмена, другие узлы их не увидят.
Прямую правку таблиц 1С делайте только по указанию разработчика, на копии и с последующим тестированием и исправлением базы. После неё запустите в Конфигураторе Администрирование → Тестирование и исправление. Для этого нужен монопольный доступ: пользователи должны выйти из базы, их сеансы будут прерваны.
Способ 6. Автоматическая очистка по расписанию
Если колонку надо чистить постоянно — например, служебный флаг «Выгружено» раз в сутки или временный комментарий после закрытия месяца — подойдёт регламентное задание.
- В расширении добавьте общий модуль (серверный) с экспортной процедурой очистки — код из способа 3.
- Создайте регламентное задание, укажите эту процедуру как метод.
- Задайте расписание: например, ежедневно в 03:00, когда в базе никто не работает .
- Включите задание. В клиент-серверной базе оно выполняется на сервере 1С.
Проверить запуски можно через Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания: там видно, когда задание стартовало и завершилось ли ошибкой.
В файловой базе регламентные задания выполняются, только пока открыт хотя бы один сеанс клиента. Если ночью базу никто не держит открытой, задание не отработает.
В процедуре предусмотрите запись в журнал регистрации (ЗаписьЖурналаРегистрации), сколько объектов очищено. Иначе через месяц никто не вспомнит, почему колонка пустая.