Top.Mail.Ru

10 полезных функций БСП в 1С, которые должен знать разработчик

Библиотека стандартных подсистем (БСП) — это фундамент для создания современных конфигураций на платформе «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. Внутри - продвинутые статьи, видео, материалы для скачивания, закрытый чат для резидентов и возможность влиять на контент.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *