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