Шпаргалка по БСП: Топ функций, которые спасут вас от изобретения велосипедов

30.07.26

Разработка - БСП (Библиотека стандартных подсистем)

Все мы когда-то писали свои функции для получения реквизита через точку или парсинга строк. В этой статье собрана выжимка самых полезных и ежедневно необходимых процедур и функций БСП. Никакой сухой документации ИТС — только жизненные кейсы, чистый код и разбор ситуаций, когда стандартные подсистемы делают работу за нас.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Шпаргалка по БСП: Топ функций, которые спасут вас от изобретения велосипедов
.epf 7,95Kb
12 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Каждый раз, когда я сажусь писать код, я задаю себе один и тот же вопрос: «А не написал ли это кто-то до меня?». Есть ли уже готовая, полностью оттестированная и оптимизированная великими умами 1С процедура под мою задачу? Грубо говоря, я стараюсь никогда не изобретать велосипед, ведь в Библиотеке стандартных подсистем (БСП) всё это уже лежит на блюдечке.bБолее того, если мы откроем стандарты разработки на сайте ИТС, мы увидим прямое требование: 1С жестко предписывает использовать методы БСП вместо написания собственного кода. Это не просто рекомендация, а правило хорошего тона. В этой статье я собрала свой личный топ-лист из функций БСП, разбитый по задачам. Это те инструменты, которые нужны в разработке каждый день, чтобы писать чистый, поддерживаемый код по стандартам 1С.

 

Блок 1. Работа со ссылками, объектами и реквизитами

Самая частая боль — получение данных объекта без его полного считывания.

1. Точечное получение реквизитов

Проблема: Нужно получить ИНН контрагента. Обращаться в серверном коде через точку (Контрагент.ИНН) — плохая практика. Платформа неявно вытягивает всю запись объекта целиком.

Как надо по стандартам:

// Вытягивает ровно одно поле динамическим микро-запросом

ИНН = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаКонтрагента, "ИНН");

2. Получение нескольких реквизитов сразу

Если нужно несколько полей, один вызов функции вернет вам готовую структуру. Идеально для компактного кода.

Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаКонтрагента, "ИНН, КПП, НаименованиеПолное");

3. Поиск предопределенного элемента

Избавляемся от конструкций Справочники.ВидыНоменклатуры.Услуга, которые могут вызвать ошибку при обновлении или отсутствии элемента.

СсылкаНаУслугу = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыНоменклатуры.Услуга");

4. Проверка наличия реквизита у объекта

Вместо того чтобы лезть в метаданные и писать сложные обходы коллекций, используем готовое:

ЕстьСумма = ОбщегоНазначения.ЕстьРеквизитОбъекта("Сумма", МетаданныеДокумента);

// Или еще круче, для любых свойств - она проверяет, есть ли у конкретного экземпляра объекта (который может быть чем угодно: формой, структурой, строкой табличной части) реквизит, либо иное свойство с заданным именем:

ЕстьСвойство = ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ДанныеОбъекта, "Комментарий");

5. Получение описания типов

Быстро генерируем описание типа для создания колонок таблиц значений или типизации реквизитов без громоздких конструкторов Новый ОписаниеТипов(...).

ОТ_Число = ОбщегоНазначения. ОписаниеТипаЧисло (15, 2);

ОТ_Строка = ОбщегоНазначения. ОписаниеТипаСтрока (100);

6. Глубокое сравнение данных

Как быстро понять, изменились ли данные, не перебирая все поля циклом?

Решение: Функция ДанныеСовпадают умеет рекурсивно сравнивать вообще всё: структуры внутри массивов, таблицы значений, примитивные типы.

Если Не ОбщегоНазначения.ДанныеСовпадают(СтарыеДанные, НовыеДанные) Тогда

    // Данные различаются, запускаем логику

КонецЕсли;

7. Проверка ссылок на удаляемый объект

Перед распроведением или удалением нужно проверить ссылочную целостность, не выписывая тяжелые соединения со всеми таблицами базы.

МассивПроверки = Новый Массив;

МассивПроверки.Добавить(СсылкаНаСклад);

Если ОбщегоНазначения.ЕстьСсылкиНаОбъект(МассивПроверки) Тогда

    // Склад используется, запрещаем удаление

КонецЕсли;

 

Блок 2. Магия строк и форматов

8. Вставить параметры в строку (красивая обертка СтрШаблон)

ТекстШаблона = "Документ [Номер] [Дата]";

ГотовыйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстШаблона, "123", ТекущаяДата());

Важное ограничение: как и у СтрШаблон, здесь тоже максимум 9 параметров.

Нюанс обработки: в отличие от СтрШаблон, эта функция не бросает исключение при несоответствии количества параметров. Она может вернуть строку с недозаполненными местами или пустую строку - ошибку придётся ловить отдельно.

9. Безопасное приведение строки к числу

Защищает от ошибок конвертации, очищая неразрывные пробелы и некорректные символы (частая боль при загрузке из Excel).

Сумма = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(" 15 000,50 ");

10. Парсинг строки в дату

ДатаДок = СтроковыеФункцииКлиентСервер.СтрокаВДату("31.12.2023");

11. Фамилия и Инициалы

Хватит писать велосипеды с функциями СтрНайти и Лев, чтобы получить «Иванов И. И.».

ФИО_Кратко = ФизическиеЛицаКлиентСервер.ФамилияИнициалы("Иванов Иван Иванович");

12. Склонение ФИО и должностей

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

// Получаем структуру со всеми вариантами склонения

ПадежиДолжности = СклонениеПредставленийОбъектов.ДанныеСклонения("Генеральный директор");

// Теперь просто берем нужный падеж через точку:

Кому = ПадежиДолжности.Дательный;     // Вернет: Генеральному директору

Кого = ПадежиДолжности.Родительный;   // Вернет: Генерального директора

Кем  = ПадежиДолжности.Творительный;  // Вернет: Генеральным директором

// Аналогично работает с ФИО:

ПадежиФИО = СклонениеПредставленийОбъектов.ДанныеСклонения("Иванов Иван Иванович");

ФИО_В_Дательном = ПадежиФИО.Дательный; // Вернет: Иванову Ивану Ивановичу

 

Блок 3. Работа с коллекциями (Массивы, Структуры, ТЗ)

Манипуляции с коллекциями при подготовке данных для запросов — рутина, которую БСП сводит к одной строке.

13. Выгрузка колонки из ТЗ в массив (без циклов!)

Частая задача: передать колонку ТЗ как параметр в условие запроса В (&МассивДокументов).

// Третий параметр "Истина" сразу оставит только уникальные значения!

МассивНоменклатуры = ОбщегоНазначения.ВыгрузитьКолонку(ТЗ_Товары, "Номенклатура", Истина);

14. Слияние массивов

Избавляемся от цикла обхода первого массива ради добавления во второй.

// Дополняет первый массив элементами второго (с проверкой на уникальность, если Истина)

ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивИтоговый, МассивНовыхДанных, Истина);

15. Свернуть массив

Удаляем дубли из любого массива одной строкой.

ОбщегоНазначенияКлиентСервер.СвернутьМассив(МассивСДублями);

16. Строка таблицы значений в Структуру

Часто нужно передать строку ТЗ в процедуру, которая принимает структуру (так как передавать саму строку ТЗ между клиентом и сервером тяжело или невозможно).

СтруктураДанных = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаТЗ);

17. Таблица значений в Массив структур

Самая частая задача при клиент-серверном взаимодействии (ведь ТЗ на клиент передавать нельзя, а массив структур — можно).

МассивСтруктурНаКлиент = ОбщегоНазначения. ТаблицаЗначенийВМассив (ТЗ);

18. Массив структур в Таблицу значений (Бонус, не БСП)

А вот обратной функции в БСП нет! Поэтому дарю вам эталонный сниппет, который должен быть в вашем шаблоне (идеально для преобразования данных с клиента обратно в серверную ТЗ):

Функция МассивСтруктурВТаблицуЗначений(МассивСтруктур) Экспорт

    ТЗ = Новый ТаблицаЗначений;

    Если МассивСтруктур.Количество() = 0 Тогда

        Возврат ТЗ;

    КонецЕсли;

    Для Каждого КлючИЗначение Из МассивСтруктур[0] Цикл

        ТЗ.Колонки.Добавить(КлючИЗначение.Ключ);

    КонецЦикла;

    Для Каждого Структура Из МассивСтруктур Цикл

        НоваяСтрока = ТЗ.Добавить();

        ЗаполнитьЗначенияСвойств(НоваяСтрока, Структура);

    КонецЦикла;

    Возврат ТЗ;

КонецФункции

 

Блок 4. Интерфейс и Взаимодействие с пользователем

19. Правильное сообщение об ошибке (По стандартам ИТС)

Проблема: Использование одиночного оператора Сообщить() прямо запрещено стандартами разработки 1С. Система должна четко позиционировать ошибку и подсказывать пользователю, в каком конкретно поле он ошибся.

Как надо: Используем универсальный метод. Платформа сама найдет поле на форме и подсветит его красным.

ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Укажите корректный договор для контрагента!",
                        ЭтотОбъект,
                        "ДоговорКонтрагента", // Имя реквизита для привязки сообщения
                        ,
                        Отказ);

20. Установить свойство элемента формы

Безопасная установка свойств (видимость, доступность), которая не роняет код, если элемента на форме вдруг не оказалось (например, он скрыт правами доступа).

ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КнопкаПровести", "Доступность", Ложь);

21. Показать форму редактирования комментария

Вызывает стандартное красивое окно для ввода длинного многострочного текста, которое пользователи привыкли видеть в типовых конфигурациях.

ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент, ТекстКомментария);

 

Итог:

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

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

Пишите в комментариях, какие функции БСП вы бы добавили в этот список. Сделаем вторую часть вместе!

Проверено на следующих конфигурациях и релизах:

  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.12.268

Вступайте в нашу телеграмм-группу Инфостарт

БСП Разработка Чистый код Стандарты разработки Шпаргалка 1С

См. также

Адаптация типовых решений БСП (Библиотека стандартных подсистем) Кадровый учет ЭДО и ОФД 1C:Бухгалтерия 1С:Зарплата и кадры 7.7 1C:ERP 1С:ЗУП 1С:УТ 1С:ДО Платные (руб)

Наше расширение 1С Госключ обеспечивает интеграцию любой конфигурации 1С на базе БСП с мобильным приложением «Госключ», позволяя сотрудникам подписывать кадровые документы (КЭДО) и документы материальной ответственности (МОЛ, ПБ) усиленной электронной подписью прямо со смартфона. Решение автоматизирует формирование и отправку документов на подпись, отслеживает статусы подписания и хранит подписанные файлы непосредственно в базе 1С

25000 руб.

06.03.2026    2185    4    0    

5

БСП (Библиотека стандартных подсистем) Разработчик Платные (руб)

Синтакс-помощник БСП - cправочник по библиотекам стандартных подсистем и электронных документов. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП и БЭД.

3254 руб.

21.11.2024    14275    51    30    

59

БСП (Библиотека стандартных подсистем) Разработчик Стажер 1С:Предприятие 8 1С:Библиотека стандартных подсистем Бесплатно (free)

Часто требуется вывести понятное пользователю сообщение, ткнув его в конкретный проблемный реквизит, что называется, "носом"... И вот тут довольно часто приходится перечитывать параметры функции ОбщегоНазначения[Клиент].СообщениеПользователю. Решила написать для себя шпаргалку и поделиться с сообществом.

24.07.2026    2573    check2    2    

10

БСП (Библиотека стандартных подсистем) Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Бесплатно (free)

Каждый раз, когда разработчик 1С пишет очередной цикл для свертки массива или использует конструкцию Попытка / Исключение для проверки наличия реквизита, где-то грустит один архитектор фирмы «1С». Мы привыкли изобретать велосипеды там, где в Библиотеке стандартных подсистем (БСП) уже давно лежат готовые, оптимизированные и протестированные на тысячах баз решения. Ниже — практическая подборка из 8 методов актуальных релизов БСП (3.X), которые сделают ваш код чище, быстрее и профессиональнее. Разберем на примерах «Было / Стало».

04.06.2026    12907    Kaliostr0    21    

36

БСП (Библиотека стандартных подсистем) Универсальные функции Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Бесплатно (free)

Когда появляется необходимость сделать подключаемую внешнюю обработку, будь это печатная форма или отчет - нам всегда приходится прописывать сведения о внешней обработке для подключения их в соответствующий справочник. И это занимает некоторое время, что не очень удобно. Как для себя, так и для вас - я подготовил ряд примеров использования этой функции, можете выбрать один из них, чтобы в дальнейшем использовать их в шаблонах текста. Комментарии по дополнению и исправлению статьи - приветствуются.

06.02.2026    22196    manul1c    7    

27

Рефакторинг и качество кода БСП (Библиотека стандартных подсистем) Механизмы платформы 1С Разработчик 1С:Предприятие 8 1С:Библиотека стандартных подсистем Бесплатно (free)

Использование Библиотеки стандартных подсистем позволяет разработчикам 1С значительно ускорить процесс создания решений за счет готового универсального кода, поддерживаемого и обновляемого официальным вендором. В статье рассказывается про роль и применение «Библиотеки стандартных подсистем» (БСП), примеры интеграции и подключения подсистем.

23.09.2025    18366    AlexeyPROSTO_1C    2    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RocKeR_13 1485 30.07.26 13:12 Сейчас в теме
https://infostart.ru/1c/articles/1398340/
И обновленный другим пользователем обзор - https://infostart.ru/1c/articles/2142549/
nagimo; EvgeniyOlxovskiy; rozer; +3 – Ответить
2. Константин С. 685 30.07.26 16:37 Сейчас в теме
Проблема, не где посмотреть. А знать, что смотреть и какая функция/процедура есть в наличие.
3. RustIG 1987 31.07.26 03:55 Сейчас в теме
Начинающие 1сники сегодня могут достаточно быстро начать писать "хороший код", следуя инструкции вначале статьи: проверять, что есть в БСП, а иишный поиск легко подскажет об этом... Тему с Бсп давно высоко оценили на Ис. Кроме Бсп есть еще много полезных ресурсов - даже простой яндекс-поиск теперь подсказывает про процедуры из Бсп...уже много лет...
Бсп хорош в локальном месте. То есть он не подскажет, как собрать несколько блоков и модулей в одну обработку или один механизм , написать сложносвязанный алгоритм с интерфейсом... Собрать игрушку из деталей. Бсп это набор деталек... Собирать игрушку будет программист...
Есть еще один аспект, иногда нужно точечно в одном месте локально что-то поправить, чтобы адаптировать код... Использование простых процедур из Бсп это вообще не касается...Например, адаптация алгоритма через расширения.
То есть в данной статье рассмотрен лишь малый процент среди всех задач 1сника. То есть Бсп хорош, но лишь в малых дозах опредеденных задачах. Типовые конфигурации уже созданы, большинство задач на сопровождении -это адаптация уже написанных механизмов....это другой спектр задач
4. ixijixi 2167 31.07.26 08:48 Сейчас в теме
18. Массив структур в Таблицу значений (Бонус, не БСП) А вот обратной функции в БСП нет! Поэтому дарю вам эталонный сниппет,

Такую ТЗ не передать в запрос из-за неназначенного типа значений колонок. Поэтому сниппет требует доработки
ТЗ.Колонки.Добавить(КлючИЗначение.Ключ, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТипЗнч(КлючИЗначение.Значение)));
Хотя и это не гарантирует правильности. По хорошему надо обойти все строки на выявление всех типов, что при больших объемах конечно не добавит быстродействия.

А еще можно создать ТЗ на клиенте и скопировать туда массив, хотя от проблемы с типами это не избавляет, конечно)
ТипТЗ = Новый ОписаниеТипов("ТаблицаЗначений");
Таблица = ТипТЗ.ПривестиЗначение();
Таблица.Колонки.Добавить(...
5. mas_kot 83 31.07.26 16:17 Сейчас в теме
<Душные мод on>

Обращаться в серверном коде через точку (Контрагент.ИНН) — плохая практика.

Если уж упоминать про ЗначениеРеквизитаОбъекта, то уж полезнее упомянуть про ЗначениеРеквизитаОбъектов - которая куда полезнее и не так примелькалась. Да и кейсы разные бывают: проблема часто не в том, что реквизит вытаскивается через точку у какого-нибудь справочника, а делается это в цикле для множества разных объектов. Или же при противоположной картине, когда ты через точку получала значение какого-то реквизита одного и того же объекта в цикле для каких-то своих целей (кто знает какой тебя бес попутал и ты не вынесла его за цикл) - то вот в этом случае использование ЗначениеРеквизитаОбъекта может наоборот затормозить твой код.

"Избавляемся от конструкций Справочники.ВидыНоменклатуры.Услуга, которые могут вызвать ошибку при обновлении или отсутствии элемента."

Так не в этом смысл изначальный. Как раз с такой конструкцией ты поймаешь ошибку ещё на этапе обновления и избежишь проблемы что у тебя в рантайме вдруг чего-то не оказалось. Проблема этой конструкции что она не работает на клиенте. Поэтому было сделано платформенное ПредопределённоеЗначение() которые можно использовать на клиенте и оно кэшируется. Но его проблема как раз таки, что при обновлении ты не отловишь что этого объекта уже нет и получишь блокирующую ошибку в рантайме. И тут уже сверху появляется обёртка в виде функции ОбщегоНазначения.


Лишнее напоминание о функциях БСП хуже не будет, но как будто бы может тогда стоило подсветить те вещи, которые действительно не упоминались в десятках предыдущих статей, а не описывать одни те же функции которые в БСП существуют уже с десяток лет? Тем более если

... ведь в Библиотеке стандартных подсистем (БСП) всё это уже лежит на блюдечке


<Душные мод off>
Трактор; dooD1iez; +2 – Ответить
6. ltfriend 31.07.26 22:03 Сейчас в теме
1. А почему нет описания функции получения нескольких реквизитов сразу нескольких объектов (ЗначенияРеквизитовОбъектов)?
2.ПодставитьПараметрыВСтроку - это не "обёртка" СтрШаблон, а самостоятельная реализация подобной функции. А появилась она, потому что СтрШаблон поправилась только в версии 8.3.6, а до этого выкручивались такими вот функциями.
7. aximo 2750 01.08.26 08:31 Сейчас в теме
(14) хайп по бсп был лет 5 назад
8. Трактор 1296 03.08.26 10:19 Сейчас в теме
10. Парсинг строки в дату

Х**рсинг!
Функция не понимает самый популярный формат даты.
Прикрепленные файлы:
12. RocKeR_13 1485 04.08.26 13:59 Сейчас в теме
(8) Может БСП у вас какая-то старая? Пардон, неверно изначально понял. Да, с разделителем "T" почему-то так и не сделали конвертацию)
13. Трактор 1296 04.08.26 14:10 Сейчас в теме
(12) Функция СтрокаВДату понимает только 1Сную запись дат. XMLную не понимает. А это очень не удобно. Другие системы часто форматируют даты как для XML.

Вот код для проверки.
ДатаСтрокой = "2026-06-03T00:00:00";
ДатаДатой = СтроковыеФункцииКлиентСервер.СтрокаВДату(ДатаСтрокой);
Сообщить("ДатаСтрокой: " + ДатаСтрокой + " ДатаДатой: " + Строка(ДатаДатой));
14. RocKeR_13 1485 04.08.26 14:42 Сейчас в теме
(13) Да не, это я знаю. Обычно всегда прописываю СтрЗаменить, чтобы подстраховаться и сразу заменить T на пробел. Давно бы уже подкорректировали...
9. Трактор 1296 03.08.26 10:31 Сейчас в теме
13. Выгрузка колонки из ТЗ в массив (без циклов!)

Во-первых с циклами! Перейдите в определение функции и посмотрите.

Во-вторых ТЗ туда добавлена только для пущей универсальности. Эта функция для других коллекций. Причём дерево значений обрабатывает нерекурсивно. Делаете обзор так делайте качественно, а не для почёсывания чувства собственного профессионализма.
Прикрепленные файлы:
10. Pavl0 91 03.08.26 16:18 Сейчас в теме
Нейропродукт
п8. ПодставитьПараметрыВСтроку не умеет подставлять параметры в [КакойтоПараметр]. Параметры должны быть вида '%1'
Трактор; +1 – Ответить
11. Automatik 1011 03.08.26 18:36 Сейчас в теме
Многое надо перенести в платформу как методы объектов. Будет проще и быстрее работать и писать. Уже давно надо...
Для отправки сообщения требуется регистрация/авторизация