Разработка и Конфигурация · 12 мин
Как очистить колонку в 1С: рабочие способы для документа, таблицы значений и списка
Как очистить колонку в 1С: обнуление значений в табличной части документа, таблице значений в коде и настройка динамического списка. Примеры кода и проверка результата.
Под «очисткой колонки» в 1С обычно понимают три разные задачи: обнулить значения колонки в табличной части документа, очистить колонку таблицы значений в программном коде или убрать/очистить колонку в динамическом списке на форме. Способ действий зависит от того, где находятся данные и нужно ли сохранить изменения в базе.
Важно сразу различать очистку значений и удаление колонки. Очистка значений оставляет структуру нетронутой: колонка остаётся, но в каждой строке её ячейка становится пустой или равной нулю. Удаление колонки — это изменение структуры таблицы, которое в типовом документе обычно требует доработки конфигурации и почти никогда не нужно для решения прикладной задачи.
Ниже разобраны основные сценарии: ручная очистка в открытом документе, программная очистка через цикл и заполнение значений, работа с таблицей значений и ситуации, когда очистка запрещена или опасна. Все примеры кода приведены для встроенного языка 1С и работают как в управляемых, так и в обычных формах с минимальными отличиями.
Как очистить колонку в табличной части документа вручную
Самый простой случай — открытый документ, в котором нужно обнулить значения одной колонки, например «Скидка», «Цена» или «Количество». В большинстве типовых конфигураций (УТ, ERP, Бухгалтерия) табличная часть поддерживает групповое изменение: выделите все строки (Ctrl+A внутри таблицы), затем используйте кнопку «Ещё» или контекстное меню и найдите пункт вида «Изменить выделенные строки» или «Заполнить».
В форме группового изменения выберите нужную колонку и задайте новое значение — 0 для числовых полей или пустое значение для ссылочных и строковых. После применения проверьте несколько строк визуально: значения должны обновиться во всех выделенных позициях. Документ при этом ещё не записан — изменения вступят в силу только после нажатия «Записать» или «Провести».
Если команды группового изменения в форме нет, очистить колонку вручную можно только построчно. При большом числе строк это нерационально — переходите к программному способу или к универсальной обработке группового изменения реквизитов.
- 1Откройте документ и перейдите на вкладку с нужной табличной частью
- 2Выделите все строки через Ctrl+A внутри таблицы
- 3Откройте «Ещё» → «Изменить выделенные строки» или команду «Заполнить»
- 4Выберите колонку и укажите новое значение: 0 или пустое
- 5Примените изменения, проверьте несколько строк и запишите документ
Программная очистка колонки через цикл по строкам
Универсальный способ, работающий в любом модуле, — перебор строк табличной части с присваиванием пустого значения. Код выглядит так:
Для Каждого СтрокаТовары Из Объект.Товары Цикл
СтрокаТовары.Скидка = 0;
КонецЦикла;
Здесь Объект.Товары — табличная часть документа, Скидка — имя реквизита-колонки. Для числовых колонок присваивается 0, для строковых — пустая строка "", для ссылочных — пустая ссылка соответствующего типа, например Справочники.Номенклатура.ПустаяСсылка(). Присваивание Неопределено допустимо, но для типизированных реквизитов лучше использовать «правильное» пустое значение — это исключает ошибки при дальнейших расчётах и проверках заполнения.
Если код выполняется на форме (например, в команде кнопки «Очистить скидки»), после цикла полезно установить признак модифицированности: Модифицированность = Истина;. Тогда платформа предложит сохранить документ при закрытии, и изменения не потеряются молча.
&НаКлиенте
Процедура ОчиститьСкидки(Команда)
Для Каждого СтрокаТовары Из Объект.Товары Цикл
СтрокаТовары.Скидка = 0;
КонецЦикла;
Модифицированность = Истина;
КонецПроцедуры
Очистка колонки таблицы значений в коде
Таблица значений — объект в памяти, не привязанный к базе данных. Очистка колонки в ней выполняется тем же циклом, но есть и альтернативы. Если колонка не нужна вовсе, её можно удалить целиком: ТаблицаРезультат.Колонки.Удалить("Скидка");. После этого обращение к колонке в коде вызовет ошибку, поэтому удаляйте только те колонки, которые дальше нигде не используются.
Для массового обнуления числовой колонки иногда удобнее не цикл, а пересоздание данных: например, свернуть таблицу или выгрузить нужные колонки через ВыгрузитьКолонку() и собрать новую таблицу. Но в большинстве прикладных задач простой цикл читаемее и быстрее в сопровождении.
// Обнуление колонки в таблице значений
Для Каждого СтрокаТЗ Из ТаблицаРезультат Цикл
СтрокаТЗ.СуммаНДС = 0;
КонецЦикла;
// Полное удаление колонки, если она больше не нужна
ТаблицаРезультат.Колонки.Удалить("ВременнаяКолонка");
Отдельный случай — таблица значений, выступающая реквизитом формы и отображаемая пользователю. После изменения данных в коде форма обновится автоматически, если вы работаете с реквизитом формы, а не с его копией. Если таблица получена через РеквизитФормыВЗначение(), после правок её нужно вернуть обратно через ЗначениеВРеквизитФормы(), иначе пользователь изменений не увидит.
Для Каждого СтрокаТЗ Из ТаблицаРезультат Цикл
СтрокаТЗ.СуммаНДС = 0;
КонецЦикла;Очистка колонки во всех документах сразу: групповая обработка
Когда очистить колонку нужно не в одном документе, а в сотнях, ручная работа невозможна. Для файловых баз и тестовых задач используют внешнюю обработку с запросом или выборкой документов и циклом записи. Типовой шаблон выглядит так:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Дата МЕЖДУ &Начало И &Конец";
Запрос.УстановитьПараметр("Начало", НачалоГода(ТекущаяДата()));
Запрос.УстановитьПараметр("Конец", КонецГода(ТекущаяДата()));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Док = Выборка.Ссылка.ПолучитьОбъект();
Для Каждого СтрокаТовары Из Док.Товары Цикл
СтрокаТовары.Скидка = 0;
КонецЦикла;
Док.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
Обратите внимание на режим записи. РежимЗаписиДокумента.Запись сохраняет документ без перепроведения — движения по регистрам не изменятся. Если очистка колонки влияет на проведение (например, обнуляется количество или сумма), документы нужно перепроводить через РежимЗаписиДокумента.Проведение, иначе данные документа и регистров разойдутся, а отчёты покажут противоречия.
Колонка в динамическом списке и на форме: что можно и чего нельзя
Динамический список (список документов, справочника) показывает данные из базы, и «очистить колонку» в нём нельзя — ячейки списка недоступны для редактирования значений напрямую. Если в списке отображается нежелательная колонка, её можно скрыть через настройку списка: «Ещё» → «Настроить список» или «Изменить форму», где у колонки снимается видимость. Это влияет только на отображение, данные в базе остаются нетронутыми.
Если задача — чтобы колонка в списке показывала пустые значения, это означает изменение самих данных или запроса динамического списка. Правка запроса динамического списка — уже доработка конфигурации: в модуле формы списка можно программно изменить текст запроса или настройки компоновки, но делать это стоит только при понимании, какие отчёты и подборы используют тот же механизм.
В управляемой форме с таблицей (не динамическим списком) очистка колонки сводится к уже описанному циклу по данным реквизита формы. Пользовательская настройка «Изменить форму» позволяет только скрыть колонку, но не очистить её значения — не путайте эти действия.
Сравнение способов
Подходит для одного документа и небольшого числа строк. Не требует прав доступа разработчика, но медленно при большом объёме.
Оптимально для повторяющейся очистки внутри одного объекта. Требует доработки формы или внешней обработки.
Для массовой очистки по многим документам. Требует резервной копии и решения вопроса о перепроведении.
Только для таблиц значений в памяти. Неприменимо к табличным частям документов — их структура задана в конфигураторе.
Типичные ошибки и ограничения
Частая ошибка — попытка очистить колонку в проведённом документе, который находится в закрытом периоде. Платформа выдаст ошибку о запрете изменения данных, и это корректное поведение: либо откройте период (что требует прав и понимания последствий для отчётности), либо откажитесь от правки исторических документов.
Вторая ошибка — обнуление колонки, участвующей в пересчётах. Например, если обнулить количество, но не сумму, документ станет внутренне противоречивым: итоги не сойдутся, контроль при проведении может выдать ошибку. Очищайте связанные колонки согласованно или вызывайте штатные процедуры пересчёта строки после изменения.
Третья ошибка — очистка колонки в запросе через конструкцию ВЫБРАТЬ ... ГДЕ с последующей записью «в обход» объектной модели. Прямая правка данных запросом на изменение невозможна в 1С: запросы только читают данные. Любое изменение идёт через получение объекта и его запись, что гарантирует срабатывание проверок и подписок на события.
Как проверить результат очистки
После ручной очистки достаточно визуального контроля: пролистайте табличную часть и убедитесь, что колонка пуста во всех строках, а итог по колонке (если он выводится в подвале таблицы) равен нулю. Затем запишите и перепроведите документ, если он проводится.
После массовой обработки проверку лучше делать запросом: выберите документы из обработанного диапазона с условием «колонка не равна нулю/пустому значению» — результат должен быть пустым. Дополнительно сверьте отчёты по регистрам до и после, если обработка включала перепроведение.
Как проверить результат
Во всех строках 0 или пустое значение
Часть строк сохранила старые значения — цикл не отработал полностью
Итог равен нулю
Итог ненулевой — есть необработанные строки
Соответствуют новым данным табличной части
Регистры содержат старые суммы — документ не перепроведён
Пустой результат по обработанному диапазону
Найдены документы — обработка охватила не всё
FAQ
Можно ли очистить колонку запросом, без цикла?
Нет. Запросы в 1С только читают данные. Изменение выполняется через объектную модель: получить объект документа, изменить табличную часть в цикле, записать. Для таблицы значений в памяти тоже нужен цикл или удаление колонки целиком.
Чем отличается очистка колонки от её удаления?
Очистка обнуляет значения в строках, структура сохраняется. Удаление убирает саму колонку и возможно только для таблиц значений в коде (Колонки.Удалить). Колонку табличной части документа удалить нельзя без изменения конфигурации в конфигураторе.
Нужно ли перепроводить документы после очистки колонки?
Если колонка влияет на движения по регистрам (суммы, количество, цены) — да, иначе данные документа и регистров разойдутся. Если колонка чисто информационная (комментарий, произвольный признак), достаточно записи без проведения.
Почему после очистки на форме изменения пропали?
Изменения в открытом документе живут до записи. Если закрыть форму без записи или если код менял копию данных, а не реквизит формы, результат потеряется. Всегда записывайте документ и при программной работе проверяйте, что меняете именно данные формы.
Как очистить колонку в закрытом периоде?
Напрямую — никак: сработает запрет изменения данных. Варианты: временно сдвинуть дату запрета (требует прав администратора и понимания рисков для отчётности) или отразить корректировку новым документом текущим периодом вместо правки истории.
Что присваивать ячейке: 0, пустую строку или Неопределено?
Значение должно соответствовать типу колонки: числовой — 0, строковой — пустая строка, ссылочной — пустая ссылка нужного типа. Неопределено используйте только если тип колонки составной и логика программы это допускает.
Что важно запомнить
Очистка колонки в 1С — это присваивание пустого значения или нуля в цикле по строкам, а не удаление структуры. Для одного документа достаточно ручного группового изменения, для массовой задачи — обработки с записью объектов. Перед массовой правкой делайте резервную копию, после — проверяйте результат запросом и согласованность с регистрами.