1C-Code → Основы 1С → БСП: зачем она и что в ней искать
Библиотека стандартных подсистем есть почти в каждой типовой конфигурации. Не знать её — значит писать заново то, что уже написано и отлажено.
Глава 30 из 36 · чтение примерно 22 минут
Откройте любую типовую конфигурацию — «Бухгалтерию», «Управление торговлей», «ЗУП» — и увидите сотни объектов, которые не имеют отношения ни к бухгалтерии, ни к торговле: пользователи, права, почта, файлы, версионирование, обмен, печать, регламентные задания.
Это БСП — библиотека стандартных подсистем. Фирма «1С» написала её один раз и вставляет во все конфигурации, чтобы не писать в каждой заново.
Для вас это значит простую вещь: прежде чем писать, посмотрите, нет ли уже готового. Почти всегда есть.
| Подсистема | Что делает |
|---|---|
| Пользователи | кто вошёл, права, группы доступа |
| Работа с файлами | присоединённые файлы к любому объекту |
| Электронная почта | отправка писем из программы |
| Версионирование объектов | кто и что менял в документе |
| Печать | печатные формы, комплекты, отправка на печать |
| Дополнительные обработки | внешние обработки без снятия с поддержки |
| Регламентные задания | обёртка над фоновыми: расписание, журнал |
| Обмен данными | планы обмена, правила, узлы |
| Контактная информация | адреса и телефоны в едином виде |
| Свойства (доп. реквизиты) | поля, которые заводит пользователь |
Почему её спрашивают на собеседовании
Не ради знания имён функций — их можно посмотреть. Спрашивают, чтобы понять, писали вы под типовую или только учебные конфигурации.
Человек, работавший с типовой, знает: у «доп. реквизитов» есть своя подсистема, файлы не хранят в реквизите, а печатные формы делают через механизм печати. Человек, не работавший, пишет всё это сам — и получается хуже, дольше и ломается при обновлении.
По имени общего модуля. Модули БСП называются понятно: ОбщегоНазначения, ОбщегоНазначенияКлиент, РаботаСФайлами, УправлениеПечатью, Пользователи.
По документации. У БСП есть подробное описание, и оно поставляется вместе с ней — в конфигурации есть раздел с документацией.
По похожему месту в типовой. Самый быстрый способ: найти, где типовая делает то же самое, и посмотреть, чем.
Открыв общий модуль библиотеки, вы увидите, что он разделён на области, и деление это не оформление, а договор.
Программный интерфейс — то, что написано для вас. Эти процедуры описаны, у них стабильные параметры, и авторы библиотеки стараются их не ломать между версиями.
Служебный программный интерфейс — то, чем подсистемы библиотеки пользуются между собой. Работать будет, но при следующем обновлении может исчезнуть без предупреждения.
Служебные процедуры и функции — внутренности. Звать оттуда нельзя вообще, даже если очень подходит.
Правило одно: если процедура лежит не в «Программном интерфейсе», считайте, что её нет. Написать своё на десять строк дешевле, чем через год искать, почему обновление сломало то, что не должно было.
// Один реквизит объекта — без ПолучитьОбъект и без запроса
Артикул = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Товар, "Артикул");
// Сразу несколько — одним обращением к базе
Рекв = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Товар, "Артикул,ЕдиницаИзмерения");
// Сообщение, привязанное к полю формы
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
"Заполните склад", , "Объект.Склад");
| Часть | Что означает |
|---|---|
ЗначениеРеквизитаОбъекта | заменяет «Товар.Артикул» в цикле: один запрос вместо чтения объекта целиком |
ЗначенияРеквизитовОбъекта | несколько реквизитов за одно обращение — возвращает структуру |
СообщитьПользователю | не просто текст: третий параметр привязывает сообщение к полю, и человек видит, ГДЕ ошибка |
КлиентСервер в имени | модуль доступен с обеих сторон — такие в БСП помечены прямо в названии |
Библиотека стандартных подсистем — это готовые ответы на задачи, которые возникают в любой конфигурации и не относятся к учёту.
Пользователи и права доступа. Почта и рассылки. Файлы и версии объектов. Печать и дополнительные обработки. Обмен данными. Обновление конфигурации. Длительные операции. Даты и производственный календарь.
Ничего из этого не про товары и деньги — и всё это нужно каждому. Написать своё можно; проблема в том, что своё придётся поддерживать, а БСП обновляет 1С.
Правка БСП — это снятие с поддержки
Подсистемы БСП лежат в конфигурации как обычные общие модули, и править их технически можно. Делать этого нельзя по той же причине, что и с типовой: при обновлении библиотеки правки затрутся или придётся сравнивать вручную каждую процедуру.
Правильный путь — переопределяемые модули. В БСП для этого есть специальные модули с «Переопределяемый» в имени: в них предусмотрены пустые процедуры, которые библиотека вызывает сама, и туда кладут своё.
Это ровно тот приём, что и аннотации расширений: встроиться, не трогая чужое.
Правку библиотеки запрещать легко, а работать как-то надо: своё поведение в её механизмы добавлять приходится постоянно. Для этого в БСП есть переопределяемые модули.
Их видно по имени: ОбщегоНазначенияПереопределяемый, ПользователиПереопределяемый и так далее. Внутри пусто — одни заготовки процедур с описанием параметров. Библиотека зовёт их сама в нужный момент, а что там написано — ваше дело.
Это и есть место для вашего кода. Поставщик такие модули при обновлении не трогает: он знает, что они ваши.
Порядок работы получается такой: нашли нужный механизм библиотеки — ищите к нему переопределяемый модуль или подписку, а не строку, которую хочется поправить.
Как понять, какая версия БСП стоит
Библиотека развивается, и процедура, которую вы нашли в документации, может не существовать в вашей конфигурации. Поэтому первый вопрос перед чтением статьи из интернета — «а версия какая».
Посмотреть можно в самой базе: раздел «О программе» показывает версии подсистем, а в базе они хранятся в регистре сведений с версиями — его заполняет механизм обновления информационной базы.
И проще всего — открыть нужный общий модуль в конфигураторе и посмотреть, есть ли там эта процедура. Документация врёт про версию, конфигуратор не врёт никогда.
Отдельный механизм БСП, о котором новичок узнаёт поздно, а нужен он рано.
Задача звучит так: «при переходе на новую версию заполнить новый реквизит у всех существующих документов». Сделать это кодом в модуле формы нельзя — форму никто не откроет. В регламентном задании — выполнится много раз.
Для этого есть обработчики обновления информационной базы: процедура привязана к номеру версии и выполняется ровно один раз, при первом запуске после обновления. Библиотека сама помнит, какие обработчики уже отработали.
Оттуда же растёт и «первое заполнение» — начальные данные новой базы: предопределённые элементы, настройки, справочники-классификаторы.
Правило для такого кода одно: он обязан переживать повторный запуск. Обновление может упасть посередине, и его перезапустят.
БСП — это тысячи процедур, и открывать её «посмотреть, что там есть» бесполезно. Ищут иначе.
По имени модуля. Имена говорящие: ОбщегоНазначения, ОбщегоНазначенияКлиентСервер, РаботаСФайлами, ЭлектроннаяПочта, КалендарныеГрафики. Половина поиска — угадать слово.
По комментарию. У каждой экспортной процедуры БСП есть описание с параметрами и примером. Читать его быстрее, чем разбирать код.
По суффиксу. …Клиент — только клиент, …КлиентСервер — обе стороны, …Вызов — то, что клиент зовёт на сервере. Суффикс сразу говорит, откуда функцию можно вызвать.
| Задача | Что в БСП |
|---|---|
| свернуть массив до уникальных | ОбщегоНазначенияКлиентСервер.СвернутьМассив |
| разделить строку по разделителю с очисткой | СтроковыеФункцииКлиентСервер |
| посчитать рабочие дни | КалендарныеГрафики |
| отправить письмо | ОтправкаПочтовыхСообщений |
| показать длительную операцию с прогрессом | ДлительныеОперации |
| сообщить пользователю с привязкой к полю | ОбщегоНазначения.СообщитьПользователю |
| получить значения реквизитов пачкой ссылок | ОбщегоНазначения.ЗначенияРеквизитовОбъектов |
ЗначенияРеквизитовОбъектов — ответ на «точка в цикле»
Одна функция стоит отдельного упоминания, потому что она чинит самую частую ошибку производительности.
ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Массив, "Наименование,Артикул") берёт МАССИВ ссылок и одним запросом возвращает соответствие «ссылка → структура реквизитов».
Это замена цикла с Ссылка.Наименование внутри: было сто обращений к базе, стало одно. И не надо писать запрос руками — что и есть смысл библиотеки.
На чём спотыкаются
Пишут своё вместо готового. Своя отправка почты, своё хранение файлов, свой механизм печати. Работает, пока не придёт обновление БСП и не окажется, что типовая ждёт стандартного поведения.
Правят модули БСП напрямую. Они на поддержке, и при обновлении правки придётся переносить руками — каждый раз. Для своего кода в БСП предусмотрены точки расширения: переопределяемые модули с именами на «Переопределяемый».
Зовут серверные функции БСП с клиента. У многих подсистем два модуля — обычный и «Клиент». Звать надо тот, который доступен в этом контексте.
Упражнение 1. Своё или готовое
Функция ПисатьСамому(Задача) отвечает, надо ли писать своё решение. Верните Ложь, если задача есть в БСП: в описании встречается "файл", "почт" или "печат". Иначе Истина.
Решается в тренажёре: код запускается и проверяется сразу.
Упражнение 2. Можно ли это звать
Функция МожноЗвать(Область) получает имя области общего модуля БСП, в которой лежит процедура: "ПрограммныйИнтерфейс", "СлужебныйПрограммныйИнтерфейс" или "СлужебныеПроцедурыИФункции". Вернуть Истина только там, где вызов из своего кода допустим.
Решается в тренажёре: код запускается и проверяется сразу.
БСП — общая библиотека, вставленная почти в каждую типовую. Прежде чем писать — искать готовое: файлы, почта, печать, версионирование, доп. реквизиты уже сделаны. Модули БСП не правят: для своего кода есть переопределяемые модули. Знание БСП на собеседовании спрашивают не ради имён функций, а чтобы понять, работали вы с типовой или нет.
Читать про код и писать код — разные умения. В тренажёре к этой главе идут упражнения: вы пишете решение, оно запускается на настоящем интерпретаторе 1С и проверяется сразу, без установки платформы.
← СКД: схема, настройки, ресурсы
→ Поддержка, обновление и расширения