К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как очистить колонку в 1С: рабочие способы для документа, таблицы значений и списка

Как очистить колонку в 1С: обнуление значений в табличной части документа, таблице значений в коде и настройка динамического списка. Примеры кода и проверка результата.

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

Важно сразу различать очистку значений и удаление колонки. Очистка значений оставляет структуру нетронутой: колонка остаётся, но в каждой строке её ячейка становится пустой или равной нулю. Удаление колонки — это изменение структуры таблицы, которое в типовом документе обычно требует доработки конфигурации и почти никогда не нужно для решения прикладной задачи.

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

Как очистить колонку в табличной части документа вручную

Самый простой случай — открытый документ, в котором нужно обнулить значения одной колонки, например «Скидка», «Цена» или «Количество». В большинстве типовых конфигураций (УТ, ERP, Бухгалтерия) табличная часть поддерживает групповое изменение: выделите все строки (Ctrl+A внутри таблицы), затем используйте кнопку «Ещё» или контекстное меню и найдите пункт вида «Изменить выделенные строки» или «Заполнить».

В форме группового изменения выберите нужную колонку и задайте новое значение — 0 для числовых полей или пустое значение для ссылочных и строковых. После применения проверьте несколько строк визуально: значения должны обновиться во всех выделенных позициях. Документ при этом ещё не записан — изменения вступят в силу только после нажатия «Записать» или «Провести».

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

Ручная очистка колонки в документе
  1. 1
    Откройте документ и перейдите на вкладку с нужной табличной частью
  2. 2
    Выделите все строки через Ctrl+A внутри таблицы
  3. 3
    Откройте «Ещё» → «Изменить выделенные строки» или команду «Заполнить»
  4. 4
    Выберите колонку и укажите новое значение: 0 или пустое
  5. 5
    Примените изменения, проверьте несколько строк и запишите документ

Программная очистка колонки через цикл по строкам

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

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

СтрокаТовары.Скидка = 0;

КонецЦикла;

Здесь Объект.Товары — табличная часть документа, Скидка — имя реквизита-колонки. Для числовых колонок присваивается 0, для строковых — пустая строка "", для ссылочных — пустая ссылка соответствующего типа, например Справочники.Номенклатура.ПустаяСсылка(). Присваивание Неопределено допустимо, но для типизированных реквизитов лучше использовать «правильное» пустое значение — это исключает ошибки при дальнейших расчётах и проверках заполнения.

Если код выполняется на форме (например, в команде кнопки «Очистить скидки»), после цикла полезно установить признак модифицированности: Модифицированность = Истина;. Тогда платформа предложит сохранить документ при закрытии, и изменения не потеряются молча.

&НаКлиенте

Процедура ОчиститьСкидки(Команда)

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

СтрокаТовары.Скидка = 0;

КонецЦикла;

Модифицированность = Истина;

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

Очистка колонки таблицы значений в коде

Таблица значений — объект в памяти, не привязанный к базе данных. Очистка колонки в ней выполняется тем же циклом, но есть и альтернативы. Если колонка не нужна вовсе, её можно удалить целиком: ТаблицаРезультат.Колонки.Удалить("Скидка");. После этого обращение к колонке в коде вызовет ошибку, поэтому удаляйте только те колонки, которые дальше нигде не используются.

Для массового обнуления числовой колонки иногда удобнее не цикл, а пересоздание данных: например, свернуть таблицу или выгрузить нужные колонки через ВыгрузитьКолонку() и собрать новую таблицу. Но в большинстве прикладных задач простой цикл читаемее и быстрее в сопровождении.

// Обнуление колонки в таблице значений

Для Каждого СтрокаТЗ Из ТаблицаРезультат Цикл

СтрокаТЗ.СуммаНДС = 0;

КонецЦикла;

// Полное удаление колонки, если она больше не нужна

ТаблицаРезультат.Колонки.Удалить("ВременнаяКолонка");

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

bsl
Для Каждого СтрокаТЗ Из ТаблицаРезультат Цикл
    СтрокаТЗ.СуммаНДС = 0;
КонецЦикла;

Очистка колонки во всех документах сразу: групповая обработка

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

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг

|ГДЕ Дата МЕЖДУ &Начало И &Конец";

Запрос.УстановитьПараметр("Начало", НачалоГода(ТекущаяДата()));

Запрос.УстановитьПараметр("Конец", КонецГода(ТекущаяДата()));

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Док = Выборка.Ссылка.ПолучитьОбъект();

Для Каждого СтрокаТовары Из Док.Товары Цикл

СтрокаТовары.Скидка = 0;

КонецЦикла;

Док.Записать(РежимЗаписиДокумента.Запись);

КонецЦикла;

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

Колонка в динамическом списке и на форме: что можно и чего нельзя

Динамический список (список документов, справочника) показывает данные из базы, и «очистить колонку» в нём нельзя — ячейки списка недоступны для редактирования значений напрямую. Если в списке отображается нежелательная колонка, её можно скрыть через настройку списка: «Ещё» → «Настроить список» или «Изменить форму», где у колонки снимается видимость. Это влияет только на отображение, данные в базе остаются нетронутыми.

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

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

Сравнение способов

Ручное изменение в форме

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

Цикл в коде (кнопка, процедура)

Оптимально для повторяющейся очистки внутри одного объекта. Требует доработки формы или внешней обработки.

Групповая обработка по запросу

Для массовой очистки по многим документам. Требует резервной копии и решения вопроса о перепроведении.

Удаление колонки через Колонки.Удалить()

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

Типичные ошибки и ограничения

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

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

Третья ошибка — очистка колонки в запросе через конструкцию ВЫБРАТЬ ... ГДЕ с последующей записью «в обход» объектной модели. Прямая правка данных запросом на изменение невозможна в 1С: запросы только читают данные. Любое изменение идёт через получение объекта и его запись, что гарантирует срабатывание проверок и подписок на события.

Типичные ошибки
01
Обнуление количества без пересчёта суммы — документ становится противоречивым, итоги не сходятся
02
Запись документа без перепроведения — данные табличной части и регистров расходятся, отчёты врут
03
Присваивание Неопределено ссылочной колонке — последующие проверки заполнения и запросы ведут себя непредсказуемо
04
Удаление строк внутри цикла Для Каждого — часть строк пропускается, колонка очищается не везде
05
Попытка очистить колонку в закрытом периоде — ошибка записи и потеря времени на диагностику

Как проверить результат очистки

После ручной очистки достаточно визуального контроля: пролистайте табличную часть и убедитесь, что колонка пуста во всех строках, а итог по колонке (если он выводится в подвале таблицы) равен нулю. Затем запишите и перепроведите документ, если он проводится.

После массовой обработки проверку лучше делать запросом: выберите документы из обработанного диапазона с условием «колонка не равна нулю/пустому значению» — результат должен быть пустым. Дополнительно сверьте отчёты по регистрам до и после, если обработка включала перепроведение.

Контрольные точки

Как проверить результат

Значения колонки в строках
Норма

Во всех строках 0 или пустое значение

Тревожный признак

Часть строк сохранила старые значения — цикл не отработал полностью

Итог по колонке в подвале таблицы
Норма

Итог равен нулю

Тревожный признак

Итог ненулевой — есть необработанные строки

Движения документа по регистрам
Норма

Соответствуют новым данным табличной части

Тревожный признак

Регистры содержат старые суммы — документ не перепроведён

Запрос с фильтром «колонка <> 0»
Норма

Пустой результат по обработанному диапазону

Тревожный признак

Найдены документы — обработка охватила не всё

FAQ

Можно ли очистить колонку запросом, без цикла?

Нет. Запросы в 1С только читают данные. Изменение выполняется через объектную модель: получить объект документа, изменить табличную часть в цикле, записать. Для таблицы значений в памяти тоже нужен цикл или удаление колонки целиком.

Чем отличается очистка колонки от её удаления?

Очистка обнуляет значения в строках, структура сохраняется. Удаление убирает саму колонку и возможно только для таблиц значений в коде (Колонки.Удалить). Колонку табличной части документа удалить нельзя без изменения конфигурации в конфигураторе.

Нужно ли перепроводить документы после очистки колонки?

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

Почему после очистки на форме изменения пропали?

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

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

Напрямую — никак: сработает запрет изменения данных. Варианты: временно сдвинуть дату запрета (требует прав администратора и понимания рисков для отчётности) или отразить корректировку новым документом текущим периодом вместо правки истории.

Что присваивать ячейке: 0, пустую строку или Неопределено?

Значение должно соответствовать типу колонки: числовой — 0, строковой — пустая строка, ссылочной — пустая ссылка нужного типа. Неопределено используйте только если тип колонки составной и логика программы это допускает.

Итог

Что важно запомнить

Очистка колонки в 1С — это присваивание пустого значения или нуля в цикле по строкам, а не удаление структуры. Для одного документа достаточно ручного группового изменения, для массовой задачи — обработки с записью объектов. Перед массовой правкой делайте резервную копию, после — проверяйте результат запросом и согласованность с регистрами.