1C-CodeОсновы 1С → БСП: зачем она и что в ней искать

БСП: зачем она и что в ней искать

Библиотека стандартных подсистем есть почти в каждой типовой конфигурации. Не знать её — значит писать заново то, что уже написано и отлажено.

Глава 30 из 36 · чтение примерно 22 минут

Откройте любую типовую конфигурацию — «Бухгалтерию», «Управление торговлей», «ЗУП» — и увидите сотни объектов, которые не имеют отношения ни к бухгалтерии, ни к торговле: пользователи, права, почта, файлы, версионирование, обмен, печать, регламентные задания.

Это БСП — библиотека стандартных подсистем. Фирма «1С» написала её один раз и вставляет во все конфигурации, чтобы не писать в каждой заново.

Для вас это значит простую вещь: прежде чем писать, посмотрите, нет ли уже готового. Почти всегда есть.

Что в ней есть чаще всего нужного

ПодсистемаЧто делает
Пользователикто вошёл, права, группы доступа
Работа с файламиприсоединённые файлы к любому объекту
Электронная почтаотправка писем из программы
Версионирование объектовкто и что менял в документе
Печатьпечатные формы, комплекты, отправка на печать
Дополнительные обработкивнешние обработки без снятия с поддержки
Регламентные заданияобёртка над фоновыми: расписание, журнал
Обмен даннымипланы обмена, правила, узлы
Контактная информацияадреса и телефоны в едином виде
Свойства (доп. реквизиты)поля, которые заводит пользователь

Почему её спрашивают на собеседовании

Не ради знания имён функций — их можно посмотреть. Спрашивают, чтобы понять, писали вы под типовую или только учебные конфигурации.

Человек, работавший с типовой, знает: у «доп. реквизитов» есть своя подсистема, файлы не хранят в реквизите, а печатные формы делают через механизм печати. Человек, не работавший, пишет всё это сам — и получается хуже, дольше и ломается при обновлении.

Как искать нужное

По имени общего модуля. Модули БСП называются понятно: ОбщегоНазначения, ОбщегоНазначенияКлиент, РаботаСФайлами, УправлениеПечатью, Пользователи.

По документации. У БСП есть подробное описание, и оно поставляется вместе с ней — в конфигурации есть раздел с документацией.

По похожему месту в типовой. Самый быстрый способ: найти, где типовая делает то же самое, и посмотреть, чем.

Что в модуле БСП можно звать, а что нельзя

Открыв общий модуль библиотеки, вы увидите, что он разделён на области, и деление это не оформление, а договор.

Программный интерфейс — то, что написано для вас. Эти процедуры описаны, у них стабильные параметры, и авторы библиотеки стараются их не ломать между версиями.

Служебный программный интерфейс — то, чем подсистемы библиотеки пользуются между собой. Работать будет, но при следующем обновлении может исчезнуть без предупреждения.

Служебные процедуры и функции — внутренности. Звать оттуда нельзя вообще, даже если очень подходит.

Правило одно: если процедура лежит не в «Программном интерфейсе», считайте, что её нет. Написать своё на десять строк дешевле, чем через год искать, почему обновление сломало то, что не должно было.

Три вызова, которые встретятся в первый же месяц

// Один реквизит объекта — без ПолучитьОбъект и без запроса
Артикул = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Товар, "Артикул");

// Сразу несколько — одним обращением к базе
Рекв = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Товар, "Артикул,ЕдиницаИзмерения");

// Сообщение, привязанное к полю формы
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
	"Заполните склад", , "Объект.Склад");
ЧастьЧто означает
ЗначениеРеквизитаОбъектазаменяет «Товар.Артикул» в цикле: один запрос вместо чтения объекта целиком
ЗначенияРеквизитовОбъектанесколько реквизитов за одно обращение — возвращает структуру
СообщитьПользователюне просто текст: третий параметр привязывает сообщение к полю, и человек видит, ГДЕ ошибка
КлиентСервер в именимодуль доступен с обеих сторон — такие в БСП помечены прямо в названии

Что даёт БСП, если сказать одним словом

Библиотека стандартных подсистем — это готовые ответы на задачи, которые возникают в любой конфигурации и не относятся к учёту.

Пользователи и права доступа. Почта и рассылки. Файлы и версии объектов. Печать и дополнительные обработки. Обмен данными. Обновление конфигурации. Длительные операции. Даты и производственный календарь.

Ничего из этого не про товары и деньги — и всё это нужно каждому. Написать своё можно; проблема в том, что своё придётся поддерживать, а БСП обновляет 1С.

Правка БСП — это снятие с поддержки

Подсистемы БСП лежат в конфигурации как обычные общие модули, и править их технически можно. Делать этого нельзя по той же причине, что и с типовой: при обновлении библиотеки правки затрутся или придётся сравнивать вручную каждую процедуру.

Правильный путь — переопределяемые модули. В БСП для этого есть специальные модули с «Переопределяемый» в имени: в них предусмотрены пустые процедуры, которые библиотека вызывает сама, и туда кладут своё.

Это ровно тот приём, что и аннотации расширений: встроиться, не трогая чужое.

Куда класть свой код, чтобы его не затёрло

Правку библиотеки запрещать легко, а работать как-то надо: своё поведение в её механизмы добавлять приходится постоянно. Для этого в БСП есть переопределяемые модули.

Их видно по имени: ОбщегоНазначенияПереопределяемый, ПользователиПереопределяемый и так далее. Внутри пусто — одни заготовки процедур с описанием параметров. Библиотека зовёт их сама в нужный момент, а что там написано — ваше дело.

Это и есть место для вашего кода. Поставщик такие модули при обновлении не трогает: он знает, что они ваши.

Порядок работы получается такой: нашли нужный механизм библиотеки — ищите к нему переопределяемый модуль или подписку, а не строку, которую хочется поправить.

Как понять, какая версия БСП стоит

Библиотека развивается, и процедура, которую вы нашли в документации, может не существовать в вашей конфигурации. Поэтому первый вопрос перед чтением статьи из интернета — «а версия какая».

Посмотреть можно в самой базе: раздел «О программе» показывает версии подсистем, а в базе они хранятся в регистре сведений с версиями — его заполняет механизм обновления информационной базы.

И проще всего — открыть нужный общий модуль в конфигураторе и посмотреть, есть ли там эта процедура. Документация врёт про версию, конфигуратор не врёт никогда.

Обработчики обновления: код, который выполняется один раз

Отдельный механизм БСП, о котором новичок узнаёт поздно, а нужен он рано.

Задача звучит так: «при переходе на новую версию заполнить новый реквизит у всех существующих документов». Сделать это кодом в модуле формы нельзя — форму никто не откроет. В регламентном задании — выполнится много раз.

Для этого есть обработчики обновления информационной базы: процедура привязана к номеру версии и выполняется ровно один раз, при первом запуске после обновления. Библиотека сама помнит, какие обработчики уже отработали.

Оттуда же растёт и «первое заполнение» — начальные данные новой базы: предопределённые элементы, настройки, справочники-классификаторы.

Правило для такого кода одно: он обязан переживать повторный запуск. Обновление может упасть посередине, и его перезапустят.

Как искать в чужой библиотеке

БСП — это тысячи процедур, и открывать её «посмотреть, что там есть» бесполезно. Ищут иначе.

По имени модуля. Имена говорящие: ОбщегоНазначения, ОбщегоНазначенияКлиентСервер, РаботаСФайлами, ЭлектроннаяПочта, КалендарныеГрафики. Половина поиска — угадать слово.

По комментарию. У каждой экспортной процедуры БСП есть описание с параметрами и примером. Читать его быстрее, чем разбирать код.

По суффиксу. …Клиент — только клиент, …КлиентСервер — обе стороны, …ВызовСервера — то, что клиент зовёт на сервере. Суффикс сразу говорит, откуда функцию можно вызвать.

Функции, которые пишут своими руками зря

ЗадачаЧто в БСП
свернуть массив до уникальныхОбщегоНазначенияКлиентСервер.СвернутьМассив
разделить строку по разделителю с очисткойСтроковыеФункцииКлиентСервер
посчитать рабочие дниКалендарныеГрафики
отправить письмоОтправкаПочтовыхСообщений
показать длительную операцию с прогрессомДлительныеОперации
сообщить пользователю с привязкой к полюОбщегоНазначения.СообщитьПользователю
получить значения реквизитов пачкой ссылокОбщегоНазначения.ЗначенияРеквизитовОбъектов

ЗначенияРеквизитовОбъектов — ответ на «точка в цикле»

Одна функция стоит отдельного упоминания, потому что она чинит самую частую ошибку производительности.

ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Массив, "Наименование,Артикул") берёт МАССИВ ссылок и одним запросом возвращает соответствие «ссылка → структура реквизитов».

Это замена цикла с Ссылка.Наименование внутри: было сто обращений к базе, стало одно. И не надо писать запрос руками — что и есть смысл библиотеки.

На чём спотыкаются

Пишут своё вместо готового. Своя отправка почты, своё хранение файлов, свой механизм печати. Работает, пока не придёт обновление БСП и не окажется, что типовая ждёт стандартного поведения.

Правят модули БСП напрямую. Они на поддержке, и при обновлении правки придётся переносить руками — каждый раз. Для своего кода в БСП предусмотрены точки расширения: переопределяемые модули с именами на «Переопределяемый».

Зовут серверные функции БСП с клиента. У многих подсистем два модуля — обычный и «Клиент». Звать надо тот, который доступен в этом контексте.

Упражнение 1. Своё или готовое

Функция ПисатьСамому(Задача) отвечает, надо ли писать своё решение. Верните Ложь, если задача есть в БСП: в описании встречается "файл", "почт" или "печат". Иначе Истина.

Решается в тренажёре: код запускается и проверяется сразу.

Упражнение 2. Можно ли это звать

Функция МожноЗвать(Область) получает имя области общего модуля БСП, в которой лежит процедура: "ПрограммныйИнтерфейс", "СлужебныйПрограммныйИнтерфейс" или "СлужебныеПроцедурыИФункции". Вернуть Истина только там, где вызов из своего кода допустим.

Решается в тренажёре: код запускается и проверяется сразу.

Короткий свод

БСП — общая библиотека, вставленная почти в каждую типовую. Прежде чем писать — искать готовое: файлы, почта, печать, версионирование, доп. реквизиты уже сделаны. Модули БСП не правят: для своего кода есть переопределяемые модули. Знание БСП на собеседовании спрашивают не ради имён функций, а чтобы понять, работали вы с типовой или нет.

Как закрепить

Читать про код и писать код — разные умения. В тренажёре к этой главе идут упражнения: вы пишете решение, оно запускается на настоящем интерпретаторе 1С и проверяется сразу, без установки платформы.

Открыть эту главу в тренажёре

СКД: схема, настройки, ресурсы
Поддержка, обновление и расширения