Библиотека стандартных подсистем (БСП) — это фундамент для создания современных конфигураций на платформе «1С:Предприятие 8». Использование стандартных модулей БСП позволяет разработчику избежать «изобретения велосипеда», сокращает объем исходного кода и помогает соблюдать стандарты разработки фирмы «1С».
В этой статье собраны 10 востребованных и удобных функций БСП, которые значительно упрощают решение повседневных задач программирования.
1. Вывод стандартизированных сообщений пользователю
В БСП реализованы специальные методы для вывода системных сообщений. Они автоматически учитывают контекст выполнения и выводят информацию корректно как на стороне клиента, так и на стороне сервера.
Вызов на сервере:
ТекстСообщения = "Выведем сообщение на клиенте"; ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
Вызов на клиенте:
ТекстСообщения = "Выведем сообщение на сервере"; ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
Применение данных методов помогает связывать сообщения с конкретными реквизитами форм, сохраняя чистоту кода.
2. Безопасное преобразование строки в число
При импорте данных или обработке внешних файлов числа часто считываются в текстовом формате (например, с пробелами в качестве разделителей разрядов). Метод БСП позволяет корректно преобразовать такую строку в числовой тип данных.
СтрокаСуммы = "1 490,01"; ЧисловойРезультат = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтрокаСуммы); // Результат вывода: 1490.01 ОбщегоНазначенияКлиент.СообщитьПользователю(ЧисловойРезультат);
3. Чтение реквизитов одиночного объекта без транзакций и блокировок
Обращение к реквизитам через стандартную объектную модель (например, Ссылка.НаименованиеПолное) создает избыточную нагрузку на базу данных. Функции БСП позволяют прочитать значения точечно, используя динамически собираемый запрос под капотом.
КонтрагентСсылка = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "7701000000"); Если ЗначениеЗаполнено(КонтрагентСсылка Тогда // Получение значения одного реквизита ТекущийИНН = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КонтрагентСсылка, "ИНН"); // Получение сразу нескольких реквизитов в виде структуры ДанныеКонтрагента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(КонтрагентСсылка, "НаименованиеПолное, ИНН, КПП"); Сообщение = СтрШаблон("Компания: %1 (ИНН: %2, КПП: %3)", ДанныеКонтрагента.НаименованиеПолное, ДанныеКонтрагента.ИНН, ДанныеКонтрагента.КПП); ОбщегоНазначения.СообщитьПользователю(Сообщение); КонецЕсли;
4. Быстрое конструирование описания типов
Для программного создания реквизитов формы или колонок в таблице значений требуется указывать объект ОписаниеТипов. С помощью БСП можно генерировать часто используемые типы в одну строчку.
ТипКоличество = ОбщегоНазначения.ОписаниеТипаЧисло(15, 3); ТипКомментарий = ОбщегоНазначения.ОписаниеТипаСтрока(250); ТипВремя = ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Время); ТипСсылка = ОбщегоНазначения.ОписаниеТипаВсеСсылки(); // Применение при добавлении колонок в Таблицу Значений ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Товар", ТипСсылка); ТЗ.Колонки.Добавить("Количество", ТипКоличество); ТЗ.Колонки.Добавить("Примечание", ТипКомментарий); ТЗ.Колонки.Добавить("ВремяЗаписи", ТипВремя);
5. Удаление дубликатов из одномерного массива
Стандартный объект Массив в платформе 1С не имеет метода, аналогичного Свернуть() у таблиц значений. Для быстрой очистки массива от дублирующихся значений применяется специальный метод БСП.
СписокГородов = Новый Массив; СписокГородов.Добавить("Москва"); СписокГородов.Добавить("Казань"); СписокГородов.Добавить("Москва"); СписокГородов.Добавить("Новосибирск"); // Оставляем только уникальные элементы УникальныеГорода = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СписокГородов);
6. Получение реквизитов для списка объектов (групповая обработка)
Если вам нужно узнать реквизиты сразу нескольких объектов (например, элементов справочника или документов в цикле), использование ЗначениеРеквизитаОбъекта создаст избыточную нагрузку из-за множества одиночных запросов. Метод для работы с массивом объектов решает эту проблему.
МассивДоговоров = Новый Массив; МассивДоговоров.Добавить(СсылкаДоговор1); МассивДоговоров.Добавить(СсылкаДоговор2); // 1. Чтение одного реквизита для списка (возвращает Соответствие) ДатыДоговоров = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивДоговоров, "Дата"); Для Каждого СсылкаДоговор Из МассивДоговоров Цикл ДатаДоговора = ДатыДоговоров[СсылкаДоговор]; КонецЦикла; // 2. Чтение нескольких реквизитов для списка (возвращает Соответствие структур) ДанныеДоговоров = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивДоговоров, "Дата, Организация"); Для Каждого СсылкаДоговор Из МассивДоговоров Цикл Реквизиты = ДанныеДоговоров[СсылкаДоговор]; // Доступ через: Реквизиты.Дата, Реквизиты.Организация КонецЦикла;
7. Преобразование таблицы значений в массив структур
Передать Таблицу Значений напрямую с сервера на клиент невозможно из-за ограничений типов платформы. Наиболее частый способ обойти это — конвертировать ее в массив структур. И чтобы не городить велосипеды из вложенных циклов, можно воспользоваться методом БСП ТаблицаЗначенийВМассив
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Сотрудники.Ссылка КАК Сотрудник, | Сотрудники.Код КАК ТабельныйНомер, | Сотрудники.ДатаПриема КАК ДатаПриема |ИЗ | Справочники.Сотрудники КАК Сотрудники |ГДЕ | НЕ Сотрудники.ПометкаУдаления"; ТаблицаСотрудников = Запрос.Выполнить().Выгрузить(); // Быстрое преобразование таблицы в массив структур МассивСтруктур = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаСотрудников);
8. Преобразование строки в дату
Приведение строковых значений к типу Дата в 1С облегчается использованием функции БСП, которая поддерживает различные варианты разделителей (точки, слэши, дефисы).
СтрокаСДатой = "15-05-2026 09:15:00"; // Возможные форматы: ДД.ММ.ГГГГ, ДД-ММ-ГГ ЧЧ:ММ:СС и др. РезультатДаты = СтроковыеФункцииКлиентСервер.СтрокаВДату(СтрокаСДатой, ЧастиДаты.ДатаВремя);
9. Склонение ФИО и должностей по падежам
Для формирования текстов печатных форм (договоров, приказов, актов) часто требуется изменять падеж имени сотрудника или наименования его должности.
ФИОСотрудника = "Кузнецова Ольга Павловна"; Профессия = "Главный бухгалтер"; ВыбранныйПадеж = 3; // Дательный падеж (кому/чему) ПолСотрудника = 2; // 1 — Мужской, 2 — Женский ФИОДательный = СклонениеПредставленийОбъектов.ПросклонятьФИО(ФИОСотрудника, ВыбранныйПадеж, ПолСотрудника); ПрофессияДательный = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Профессия, ВыбранныйПадеж); ТекстДокумента = СтрШаблон("Выдать %1 (%2)", ФИОДательный, ПрофессияДательный); // Результат: "Выдать Кузнецовой Ольге Павловне (Главному бухгалтеру)"
10. Фамилия и инициалы из полного ФИО
Когда в печатных формах или отчетах нужно вывести сокращенный вариант имени физического лица, можно использовать готовый метод для получения фамилии и инициалов.
ПолноеИмя = "Алексеев Дмитрий Васильевич"; Инициалы = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ПолноеИмя); // Результат: "Алексеев Д. В."
Резюме
Использование стандартных общих модулей БСП сокращает объем ручной работы при написании кода и минимизирует количество ошибок. Перед созданием собственных вспомогательных функций рекомендуется ознакомиться с содержимым модулей ОбщегоНазначения, ОбщегоНазначенияКлиентСервер и СтроковыеФункцииКлиентСервер в вашей конфигурации.
Как вы уже наверняка догадались, различных полезных процедур и функций в БСП сильно больше 10, но нет необходимости их все зубрить - главное знать, что они есть, и знать, где их искать!
Чувствуете, что застряли в основах 1С?
Информация в интернете кажется обрывочной, а на решение простых задач уходят часы? Вы не одиноки. Я запустил Клуб для 1С разработчиков Alexcode.PRO. Внутри - продвинутые статьи, видео, материалы для скачивания, закрытый чат для резидентов и возможность влиять на контент.
