При первом знакомстве с «Библиотекой стандартных подсистем» (БСП) многие разработчики сталкиваются с классической трудностью. Успешно внедрив базовый функционал БСП в чистую конфигурацию с помощью обработки ПервоеВнедрениеБСП.epf, они пытаются перенести демонстрационные справочники (например, контрагентов, номенклатуру, физических лиц с префиксом _Демо...) простым копированием или объединением через cf-файл. Однако этот процесс мгновенно оборачивается лавиной ошибок при сохранении базы данных: возникают десятки неразрешимых ссылок, ругается проверка метаданных, а конфигуратор отказывается обновлять базу.
В этой статье мы подробно разберем, почему так происходит, изучим архитектурную суть демонстрационных объектов БСП и рассмотрим правильную методику переноса необходимого функционала в вашу рабочую конфигурацию.
Для начала проанализируем ситуацию и поймем, какую роль играют демонстрационные справочники и документы в дистрибутиве БСП. Объекты с префиксом _Демо... (такие как _ДемоКонтрагенты, _ДемоНоменклатура, _ДемоФизическиеЛица) не являются частью рабочего ядра БСП. Сама библиотека — это не готовое прикладное решение, а лишь набор инфраструктурных «кирпичиков» (подсистем контактной информации, присоединенных файлов, версионирования, дополнительных реквизитов и т. д.). Демо-объекты созданы исключительно для демонстрации того, как эти «кирпичики» внедрять в реальные бизнес-справочники.
Попытка скопировать такой справочник «в лоб» обречена на неудачу по следующим причинам:
ОпределяемыеТипы): Почти каждый демо-объект жестко зашит в определяемые типы БСП, которые поставляются вместе с демонстрационной базой. Например, ВладелецКонтактнойИнформации, ВладелецПрисоединенныхФайлов или ВерсионируемыеДанныеОбъект. В чистой конфигурации БСП эти определяемые типы либо пусты, либо содержат только базовые типы. При копировании демо-справочника связи рвутся._ДемоСтандартныеПодсистемы), которых просто нет в чистой конфигурации БСП.Таким образом, простое копирование объектов тянет за собой огромный «хвост» зависимостей, которые блокируют компиляцию всей конфигурации.
Вместо того чтобы пытаться очистить демо-объекты от связей, мы применим профессиональный подход «снизу вверх». Рассмотрим по шагам, как перенести нужные возможности (например, справочник контрагентов с хранением адресов, телефонов и возможностью прикрепления файлов) в свою чистую конфигурацию.
В своей конфигурации создаем чистый справочник, например Контрагенты. Мы не используем префиксы демо-базы. Настраиваем его базовые реквизиты (Наименование, ИНН, КПП) стандартными средствами платформы 1С.
Допустим, мы хотим, чтобы для нашего справочника Контрагенты работал механизм присоединенных файлов БСП. Для этого выполним следующие действия:
ВладелецПрисоединенныхФайлов.СправочникСсылка.Контрагенты.КонтрагентыПрисоединенныеФайлы) по аналогии с тем, как это сделано в демо-базе, и связываем его с определяемыми типами ПрисоединенныйФайл и ПрисоединенныйФайлОбъект.Чтобы подсистемы БСП «узнали» наш справочник и начали выводить на форму нужные элементы (например, адреса или файлы), необходимо прописать вызовы API БСП в модулях нашего справочника. Вот здесь нам и пригодится демонстрационная база в качестве интерактивного шаблона-шпаргалки.
Открываем модуль формы справочника _ДемоКонтрагенты в демонстрационной базе, находим процедуру ПриСозданииНаСервере, анализируем её и переносим аналогичные вызовы в свой справочник Контрагенты.
Посмотрим на пример того, как должен выглядеть обработчик события ПриСозданииНаСервере в модуле формы вашего справочника для интеграции работы с контактной информацией:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Инициализируем панель контактной информации на форме справочника
ПараметрыПанелиКИ = УправлениеКонтактнойИнформацией.ПараметрыПанелиКонтактнойИнформации();
УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыПанелиКИ, "ГруппаКонтактнаяИнформация");
КонецПроцедуры
Аналогично в модуле объекта нашего справочника настраиваем обработку событий перед записью или при записи для корректного сохранения связанных данных БСП:
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Интеграция с подсистемой контактной информации БСП
УправлениеКонтактнойИнформацией.ПередЗаписьюОбъекта(ЭтотОбъект);
КонецПроцедуры
Чтобы облегчить рутинный процесс привязки ваших справочников к подсистемам БСП, разработчики фирмы 1С включили в дистрибутив библиотеки крайне полезные инструменты автоматизации, о которых часто забывают начинающие специалисты.
Tools) содержатся внешние обработки для автоматического внедрения некоторых подсистем. Например, обработка ВстраиваниеПодсистемыРаботаСФайлами.epf способна в полуавтоматическом режиме сгенерировать подчиненный справочник присоединенных файлов для вашего справочника-владельца, прописать за вас необходимые типы в определяемых типах и внедрить нужный программный код.ПроверкаВнедренияБСП.erf. Этот инструмент просканирует метаданные вашей конфигурации и выявит незаполненные определяемые типы, отсутствующие подписки на события или некорректно настроенные роли, указав точные места, где закралась ошибка.Иногда разработчики идут по обратному пути: накатывают демонстрационный файл конфигурации 1Cv8_demo.cf целиком на пустую базу данных, а затем начинают методично удалять все ненужные демо-объекты и подсистемы.
Проанализируем этот подход. На первый взгляд он кажется более простым, ведь «все уже работает». Однако на практике вы столкнетесь со следующими серьезными минусами:
Самый быстрый, чистый и профессиональный способ интеграции БСП — держать демонстрационную базу БСП запущенной в режиме Конфигуратора и Предприятия как «живую шпаргалку» и интерактивную документацию. В своей же рабочей базе следует создавать чистые прикладные объекты и подключать их к механизмам библиотеки строго по техническому руководству БСП (раздел «Настройка и использование подсистем при разработке конфигурации»), используя встроенные инструменты автоматизации для сокращения рутины.