Внедрение Библиотеки стандартных подсистем (БСП) в собственную конфигурацию — задача, требующая внимательности. Часто на этом пути разработчики сталкиваются с серией ошибок, которые на первый взгляд кажутся не связанными между собой. Чтобы лучше ориентироваться в коде библиотеки, полезно иметь под рукой справочник по методам БСП с примерами использования. В этой статье мы разберем две типичные проблемы: ошибку, связанную со свойством НеВыполнятьКонтрольУдаляемых, и ошибку в универсальном отчете при вызове метода ЗаполнитьЗначенияСвойств. Проанализируем их причины и рассмотрим пошаговый план решения.
Первая и наиболее частая ошибка, с которой сталкиваются при внедрении БСП, проявляется при попытке записать или удалить объект. Текст ошибки выглядит примерно так:
Ошибка при получении значения атрибута контекста (ВыполняетсяУдалениеОбъектов)
{ОбщийМодуль.УдалениеПомеченныхОбъектовСлужебный.Модуль(1048)}: Если Источник.ДополнительныеСвойства.Свойство("НеВыполнятьКонтрольУдаляемых")
Давайте разберемся, что здесь происходит. Система пытается выполнить код в служебном модуле БСП, который проверяет два условия: либо в дополнительных свойствах передан флаг НеВыполнятьКонтрольУдаляемых, либо установлен параметр сеанса ВыполняетсяУдалениеОбъектов. Ошибка возникает потому, что система не может получить значение параметра сеанса.
Причина проста: при внедрении БСП не был корректно настроен модуль сеанса. БСП требует, чтобы при старте сеанса каждого пользователя инициализировались стандартные параметры. Если этого не сделать, многие механизмы библиотеки, включая контроль удаления, работать не будут.
Свойство НеВыполнятьКонтрольУдаляемых — это не предопределенный элемент, а флаг, который программно передается в структуре ДополнительныеСвойства при вызове методов записи или удаления объектов, чтобы временно отключить стандартные проверки. Ошибка может возникать и по второй причине: в подписку на событие попадает объект (Источник), у которого нет свойства ДополнительныеСвойства, что также свидетельствует о некорректной интеграции.
После "решения" первой проблемы путем комментирования кода (что является плохой практикой), часто возникает следующая ошибка, например, при открытии универсального отчета:
Ошибка при вызове метода контекста (ЗаполнитьЗначенияСвойств)
...
по причине:
Недопустимое значение параметра (параметр номер '2')
Эта ошибка говорит о том, что метод ЗаполнитьЗначенияСвойств получил некорректные данные. Он ожидает на вход два параметра: приемник и источник (чаще всего обе структуры). В данном контексте вторым параметром передается объект ВариантОтчета. Ошибка означает, что этот объект либо не был получен, либо имеет неверный тип, либо его внутренняя структура повреждена.
Причина: подсистема "Варианты отчетов" из БСП была внедрена не полностью. Возможно, не перенесены все зависимые объекты метаданных (справочники, перечисления), не созданы предопределенные варианты отчетов или нарушена логика их получения из хранилища настроек. Это прямое следствие неполной или некорректной интеграции БСП.
Комментирование строк кода БСП — это путь к накоплению скрытых ошибок. Правильный подход заключается в том, чтобы найти и устранить первопричину, а она почти всегда кроется в нарушении технологии внедрения. Рассмотрим шаги для исправления ситуации.
Это самый важный и основной шаг. Внедрение БСП "на лету" или по частям часто приводит к пропуску важных зависимостей. Лучше всего заново выполнить сравнение и объединение с файлом конфигурации (.cf) той версии БСП, которую вы внедряете.
Важный совет: используйте специальную обработку "Начальная настройка программы" (или аналогичную, поставляемую с БСП), чтобы отметить внедряемые подсистемы. Она автоматически определит и предложит включить все зависимые подсистемы. Это минимизирует риск что-то упустить.
Откройте модуль сеанса вашей конфигурации и убедитесь, что в процедуре УстановкаПараметровСеанса присутствует вызов процедур инициализации БСП. Без этого не будут работать параметры сеанса, что и вызывает первую ошибку.
Код должен выглядеть примерно так:
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
// Вызовы процедур инициализации из общих модулей БСП.
СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ТребуемыеПараметры);
// ... остальной код вашей конфигурации
КонецПроцедуры
Эта одна строка инициализирует десятки параметров, необходимых для корректной работы стандартных подсистем.
Еще одна частая ошибка — работа под пользователем без необходимых прав. Просто создать пользователя в конфигураторе недостаточно. БСП вводит собственную ролевую модель на основе профилей и групп доступа. Чтобы разобраться в них, можно использовать обработку для анализа прав и поиска подходящего профиля.
Для корректной работы новому пользователю необходимо назначить базовые роли. Как минимум, это роль Пользователь (или БазовыеПраваБСП в некоторых версиях). Быстрая проверка прав доступа на объект метаданных поможет вам убедиться, что у выбранной роли есть все необходимые доступы. В режиме "Предприятие" создайте профиль доступа с необходимыми ролями и включите в него пользователя через группу доступа. Если изменения не вступили в силу, может потребоваться точечный пересчет прав доступа для пользователя.
Если после выполнения предыдущих шагов ошибки все еще возникают, воспользуйтесь отладчиком. Это мощный инструмент для поиска первопричины.
НеВыполнятьКонтрольУдаляемых: поставьте точку останова на строке, где возникает ошибка. В момент остановки проанализируйте переменную Источник. Какой у нее тип? Это тот объект, который вы ожидали? Посмотрите стек вызовов, чтобы понять, какая подписка на событие вызвала этот код. Возможно, стандартная подписка БСП срабатывает на объект вашей конфигурации, который не подготовлен для работы с механизмами БСП.ЗаполнитьЗначенияСвойств: поставьте точку останова перед вызовом этого метода. Изучите параметры, которые в него передаются. В нашем случае это СвойстваВариантаОтчета и ВариантОтчета. Проверьте их типы и значения. Скорее всего, вы обнаружите, что переменная ВариантОтчета имеет значение Неопределено, что укажет на проблему с получением настроек отчета.Итог: ошибки при внедрении БСП почти всегда являются следствием неполной или некорректной интеграции. Не поддавайтесь соблазну закомментировать "лишний" код. Вместо этого вернитесь к процессу объединения конфигураций, проверьте настройки модуля сеанса и прав доступа. Такой системный подход не только решит текущие проблемы, но и предотвратит их появление в будущем.