В процессе работы с базами данных на платформе 1С:Предприятие 7.7 пользователи и разработчики часто сталкиваются с необходимостью очистить ранее заполненное поле ссылочного типа, например, реквизит типа «Документ» в справочнике. Выясним, какими способами можно решить эту задачу быстро, корректно и без повреждения структуры данных.
Если вам требуется очистить значение в конкретном элементе справочника вручную непосредственно в интерфейсе программы, воспользуйтесь одним из следующих вариантов:
Важное ограничение: Описанные интерактивные действия не сработают, если для элемента формы (поля ввода) программно или в конфигураторе установлены свойства Доступность в значение 0 или ТолькоПросмотр в значение 1. Также редактирование будет заблокировано, если вся форма открыта в режиме «Только просмотр» через вызов метода Форма.ТолькоПросмотр(1).
Если необходимо очистить реквизиты сразу у множества элементов справочника, ручной ввод не подходит. В этом случае мы создаем внешнюю обработку и пишем код, выполняющий обход элементов в цикле. В 1С:Предприятие 7.7 существует два основных программных подхода для очистки ссылочного поля:
Вариант А. Присвоение пустой строки
В отличие от платформы 1С v8.х, в версии 7.7 для очистки ссылки достаточно присвоить реквизиту пустую строку. Платформа автоматически преобразует ее в пустое значение нужного типа:
Спр = СоздатьОбъект("Справочник.ИмяСправочника");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Спр.РеквизитДокумент = "";
Спр.Записать();
КонецЦикла;
Вариант Б. Использование функции ПолучитьПустоеЗначение()
Данный подход считается более строгим и правильным с точки зрения стандартов разработки. Мы явно инициализируем пустое значение нужного типа. Здесь важно учитывать, как именно задан тип реквизита в конфигураторе:
Спр.РеквизитДокумент = ПолучитьПустоеЗначение("Документ");
Спр.РеквизитДокумент = ПолучитьПустоеЗначение("Документ.Реализация");
После присвоения нового значения обязательно вызывайте метод Записать(), чтобы зафиксировать изменения в базе данных. Помните, что запись элемента может вызвать ошибку блокировки данных, если этот элемент в данный момент открыт и редактируется другим пользователем в сети.
Проанализируем ситуацию, когда реквизит справочника настроен как периодический (хранит историю изменений по датам). Простое присвоение пустого значения или интерактивное нажатие клавиш очистит значение только на текущую рабочую дату, но вся история изменений останется в базе. Для полной очистки истории такого реквизита необходимо программно использовать объект Периодический.
Разберем этот процесс по шагам:
ИспользоватьОбъект().Удалить().Рассмотрим пример программного кода для удаления истории значений периодического реквизита:
ПП = СоздатьОбъект("Периодический");
// Связываем с периодическим реквизитом конкретного элемента справочника "Спр"
ПП.ИспользоватьОбъект("РеквизитДокумент", Спр.ТекущийЭлемент());
// Перебираем и удаляем все записи в истории данного реквизита
Пока ПП.ВыбратьЗначения() = 1 Цикл
Если ПП.ПолучитьЗначение() = 1 Тогда
ПП.Удалить();
КонецЕсли;
КонецЦикла;
Если вы не хотите писать собственный программный код, можно воспользоваться готовыми административными инструментами. В большинстве типовых конфигураций 1С 7.7 (или на дисках ИТС) поставляется универсальная обработка «Групповая обработка справочников и документов». С ее помощью можно выполнить следующие действия: