В процессе работы с современными конфигурациями 1С, такими как Управление торговлей (ред. 11), ERP Управление предприятием или Комплексная автоматизация, пользователи часто сталкиваются с необходимостью настройки дополнительных реквизитов. Однако иногда по неосторожности или из-за непонимания архитектуры системы реквизит удаляется из вида номенклатуры. В этот момент кажется, что данные потеряны безвозвратно, так как реквизит исчезает из карточки товара, а в списке доступных полей для этого вида номенклатуры его больше нет.
В данной статье мы подробно разберем, почему это происходит и какими способами можно восстановить связь реквизита с объектом, сохранив при этом все ранее введенные значения. Проанализируем механизмы работы Библиотеки стандартных подсистем (БСП) и рассмотрим пошаговые инструкции по спасению данных.
Для начала выясним причину, по которой реквизит «пропадает», но остается в базе. В системе 1С существует разделение между самим определением реквизита и его привязкой к конкретному типу объекта. Все дополнительные свойства хранятся в ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения. А вот связь этого свойства с, например, «Одеждой» или «Инструментами» фиксируется в справочнике НаборыДополнительныхРеквизитовИСведений.
Когда вы нажимаете кнопку «Удалить» в настройках вида номенклатуры, система просто удаляет строку из табличной части набора свойств. Сам объект в плане видов характеристик остается нетронутым, и записи в регистре сведений, где хранятся значения для каждого конкретного товара, также сохраняются. Наша задача — восстановить эту связь.
Это самый простой и рекомендуемый способ, который не требует навыков программирования. Рассмотрим его по шагам:
После завершения операции реквизит снова появится в карточке номенклатуры, а значения, которые были введены ранее, подтянутся автоматически, так как УникальныйИдентификатор (GUID) реквизита не изменился.
Иногда реквизит помечается как «общий», и стандартный поиск через «неиспользуемые» может не сработать. В таком случае воспользуемся сервисной обработкой.
Дополнительные реквизиты и сведения (это наш План видов характеристик).Набор свойств.Наборы дополнительных реквизитов и сведений.Проанализируем результат: данная операция принудительно пропишет владельца для «сиротского» реквизита, и он снова станет доступен в интерфейсе настройки.
Если вы обладаете правами администратора и имеете доступ к «Универсальному редактору объектов» или консоли кода, можно восстановить связь напрямую. Посмотрим, как это выглядит на уровне метаданных.
Объект Справочник.НаборыДополнительныхРеквизитовИСведений содержит табличную часть ДополнительныеРеквизиты. Нам нужно добавить туда строку, где в поле Свойство будет указана ссылка на наш потерянный реквизит из Плана видов характеристик.
Пример программного кода для восстановления (для программистов):
// Определяем набор и реквизит
НаборСсылка = Справочники.НаборыДополнительныхРеквизитовИСведений.НайтиПоНаименованию("Номенклатура (Обувь)");
РеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Размер (Обувь)");
Если Не НаборСсылка.Пустая() И Не РеквизитСсылка.Пустая() Тогда
НаборОбъект = НаборСсылка.ПолучитьОбъект();
// Проверяем, нет ли уже такой связи
СтрокаСуществует = Ложь;
Для Каждого Стр Из НаборОбъект.ДополнительныеРеквизиты Цикл
Если Стр.Свойство = РеквизитСсылка Тогда
СтрокаСуществует = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не СтрокаСуществует Тогда
НоваяСтр = НаборОбъект.ДополнительныеРеквизиты.Добавить();
НоваяСтр.Свойство = РеквизитСсылка;
НаборОбъект.Записать();
Сообщить("Реквизит успешно возвращен в набор!");
КонецЕсли;
КонецЕсли;
Выясним причину, по которой реквизиты могут «зачеркиваться» или пропадать после обновления (например, при переходе с УНФ 1.6 на 3.0). Часто это происходит из-за дублирования предопределенных элементов в справочнике НаборыДополнительныхРеквизитовИСведений. Система создает новый набор для номенклатуры, а старые реквизиты остаются привязаны к помеченному на удаление дублю.
В этой ситуации разберем алгоритм действий:
Наборы дополнительных реквизитов и сведений.Важно помнить: хотя сами значения реквизитов хранятся в базе отдельно, в 1С могут быть настроены регламентные задания по очистке неиспользуемых данных. Если реквизит долго не привязан ни к одному набору, система может посчитать его данные «мусорными» и удалить записи из регистра сведений ДополнительныеЗначения. Поэтому, как только вы обнаружили пропажу реквизита из карточки, приступайте к его восстановлению незамедлительно.
Также проверим состояние флага ПометкаУдаления у самого реквизита в Плане видов характеристик. Если он помечен на удаление, его нужно сначала «развоплотить» (снять пометку), иначе он не будет отображаться в списках подбора даже при включении режима показа неиспользуемых элементов.
Подводя итог, можно сказать, что архитектура 1С достаточно гибкая и защищенная от случайных действий пользователя. Благодаря тому, что данные и метаданные разнесены по разным таблицам, восстановление случайно удаленных свойств номенклатуры является решаемой задачей, не требующей восстановления всей базы из резервной копии.