очистить все реквизиты формы 1с

Работа с метаданными объекта 1С или как очистить все реквизиты и табличные части

Не так давно пришлось приводить конфигурацию заказчика в соответствие с законом «О защите персональных данных», который гласит, что при отказе клиенту в одобрении заявки все личные данные о нем должны удаляться из информационной системы обработки персональных данных, которой является 1С. Реквизитов и таблиц с личными данными было достаточно много, поэтому вручную прописывать очистку было нецелесообразно. А удалять сам элемент справочника было нельзя, потому что к нему был привязан документ рассмотрения заявки, и удаление нарушило бы логическую целостность информационной базы.

Поэтому необходим был механизм, который позволил бы получить полный список реквизитов и табличных частей. Для этого у объектов 1С существует встроенная функция Метаданные().

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

В нашем случае потребуются Реквизиты и Табличные части. Эти компоненты метаданных содержат значение КоллекцияОбъектовМетаданных, которую можно обойти в цикле Для каждого.

У каждого из элементов коллекции тоже много свойств, в частности есть очень полезное свойство Тип, через которое можно получить тип того или иного реквизита. Полный список свойств можно узнать, например, в режиме отладки через команду Вычислить выражение. Мне же для обращения к реквизиту или табличной части потребуется свойство Имя.

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

Функция Метаданные() применяется как для самого объекта, так и для ссылки на него. В нашем случае необходимо было изменить значения реквизитов, поэтому объект нужно было получить. Данная функция работает не только для справочников, но и для других объектов конфигурации 1С, но состав свойств будет иным.

Приведенный в заметке пример — это только один из многочисленных способов применения функции Метаданные(). Другие варианты и проблемы с использованием метаданных готов обсудить в комментариях.

Работа с метаданными объекта 1С или как очистить все реквизиты и табличные части : 2 комментария

(1)>: Получение элемента по индексу для значения не определено

В какой строке возникает такая ошибка? Приведите весь код пожалуйста.

Источник

не могу программно удалить значения Дополнительных реквизитов справочника

Добрый день.
подскажите что делаю не так?

Создал дополнительные реквизиты справочника, заполнил их программно.
После этого выяснилось что заполнил их неверными значениями.
Встал вопрос как их теперь также программно удалить?
Покурил форумы, нашел, что нужно очистить эти значения в Справочнике.ЗначенияСвойствОбъектов.
Почистил, но в Дополнительных реквизитах Справочника поля все также заполнены и при обращении к ним запросам все значение выплывают.

Подскажите плиз, как их очистить?

спрСерии = Справочники.СерииНоменклатуры.Выбрать();
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить(«Свойство»,ДопРеквизитБуквКод);

Пока спрСерии.Следующий() Цикл
ОбъектСерия = спрСерии.ПолучитьОбъект();
Массив = ОбъектСерия.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Для Каждого ЭлементМассива из Массив Цикл
ОбъектСерия.ДополнительныеРеквизиты.Удалить(ЭлементМассива);
КонецЦикла;
КонецЦикла;

ДопРеквизитБуквКод = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Буквенный код»);

спрЗнСвв = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(БуквКод). ДопРеквизитБуквКод);

Если спрЗнСвв = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда
ЗначениеСвойства = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
ЗначениеСвойства.Владелец = ДопРеквизитБуквКод;
ЗначениеСвойства.Наименование = СокрЛП(БуквКод);
ЗначениеСвойства.ПолноеНаименование = БуквКод;
ЗначениеСвойства.записать();
КонецЕсли;

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *