1. Свертка массива (удаление дублей)
Где искать: ОбщегоНазначенияКлиентСервер Метод: СвернутьМассив()
Классический «велосипед» при работе с массивами — использование вспомогательного объекта Соответствие, чтобы отсеять дублирующиеся элементы. БСП делает это одной элегантной строкой.
Было:
СоответствиеУникальных = Новый Соответствие;
Для Каждого Элемент Из ИсходныйМассив Цикл
СоответствиеУникальных.Вставить(Элемент, Истина);
КонецЦикла;
УникальныйМассив = Новый Массив;
Для Каждого КлючИЗначение Из СоответствиеУникальных Цикл
УникальныйМассив.Добавить(КлючИЗначение.Ключ);
КонецЦикла;
Стало:
УникальныйМассив = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ИсходныйМассив);
2. Чтение реквизитов без получения всего объекта
Где искать: ОбщегоНазначения Метод: ЗначенияРеквизитовОбъекта()
Обращение к реквизитам через точку от ссылки (Ссылка.Реквизит) неявно считывает из базы данных весь объект со всеми его табличными частями. Если вам нужно только пару полей, используйте точечный SELECT.
Было:
ИНН = СсылкаНаКонтрагента.ИНН;
КПП = СсылкаНаКонтрагента.КПП;
Стало:
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаКонтрагента, "ИНН, КПП");
ИНН = Реквизиты.ИНН;
КПП = Реквизиты.КПП;
3. Массовое чтение реквизитов
Где искать: ОбщегоНазначения Метод: ЗначенияРеквизитовОбъектов()
Старший брат предыдущего метода. Если у вас есть массив ссылок (например, нужно обработать 100 контрагентов) и из каждого нужно вытащить данные, этот метод сделает всего один оптимальный запрос к базе данных вместо десятков запросов в цикле.
Было:
Для Каждого Ссылка Из МассивКонтрагентов Цикл
// Неявный запрос к БД на каждой итерации цикла
МассивИНН.Добавить(Ссылка.ИНН);
КонецЦикла;
Стало:
// Возвращает Соответствие, где ключ - ссылка, значение - структура реквизитов
ДанныеКонтрагентов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивКонтрагентов, "ИНН");
4. Быстрая конвертация Таблицы Значений для клиента
Где искать: ОбщегоНазначения Метод: ТаблицаЗначенийВМассив()
Частая задача: сформировали на сервере ТаблицуЗначений и ее нужно вернуть на клиент. Но ТЗ на клиенте недоступна. Вместо того чтобы вручную перебирать строки и создавать структуры, используем готовый платформенный конвертер.
Было:
МассивДанных = Новый Массив;
Для Каждого СтрокаТЗ Из МояТаблицаЗначений Цикл
СтруктураСтроки = Новый Структура("Номенклатура, Количество", СтрокаТЗ.Номенклатура, СтрокаТЗ.Количество);
МассивДанных.Добавить(СтруктураСтроки);
КонецЦикла;
Стало:
// Преобразует ТЗ в массив структур, где ключи - имена колонок
МассивДанных = ОбщегоНазначения.ТаблицаЗначенийВМассив(МояТаблицаЗначений);
5. Встроенная транслитерация
Где искать: СтроковыеФункцииКлиент Метод: СтрокаЛатиницей()
Незаменимая вещь при интеграциях. Когда нужно русское наименование превратить в валидный URL (slug) или безопасное имя файла, разработчики часто пишут гигантские функции с маппингом алфавитов.
Было:
// Полотно кода на 50 строк с соответствием русских и английских букв
Стало:
ИмяДляURL = СтроковыеФункцииКлиент.СтрокаЛатиницей("Кресло офисное");
// Результат: "Kreslo ofisnoe"
6. Проверка существования реквизита без исключений
Где искать: ОбщегоНазначения Метод: ЕстьРеквизитОбъекта()
При написании универсальных обработок нужно проверить, есть ли у объекта конкретный реквизит. Использование Попытка / Исключение — плохой тон, который замедляет работу и может засорять журнал регистрации.
Было:
ЕстьИНН = Истина;
Попытка
Проверка = ОбъектДокумента.ИНН;
Исключение
ЕстьИНН = Ложь;
КонецПопытки;
Стало:
ЕстьИНН = ОбщегоНазначения.ЕстьРеквизитОбъекта("ИНН", Метаданные.Справочники.Контрагенты);
7. Умное разделение строки на слова
Где искать: СтроковыеФункцииКлиентСервер Метод: РазложитьСтрокуВМассивСлов()
В платформе есть отличная функция СтрРазделить(), но она принимает только один жесткий разделитель. Если к вам пришла «грязная» строка, где слова разделены вперемешку пробелами, запятыми и точками с запятой, метод БСП отработает интеллектуально: по умолчанию он режет строку по любым символам, не являющимся буквами и цифрами.
Было:
ВременнаяСтрока = СтрЗаменить(ИсходнаяСтрока, ",", " ");
ВременнаяСтрока = СтрЗаменить(ВременнаяСтрока, ";", " ");
МассивСлов = СтрРазделить(ВременнаяСтрока, " ", Ложь);
Стало:
// Идеально для реализации нечеткого поиска и парсинга
МассивСлов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов(ИсходнаяСтрока);
8. Запуск фоновых заданий без боли
Где искать: ДлительныеОперации Метод: ЗапуститьВыполнениеВФоне()
Перевод тяжелой процедуры на фоновое задание пугает рутиной: нужно работать с менеджером, прописывать ключи, следить за хранилищем. БСП сводит запуск к минимуму и сразу дает структуру для красивого вывода индикатора прогресса на форме.
Стало:
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеЗадания = "СинхронизацияСМаркетплейсом";
// БСП сама создаст задание и вернет его структуру управления
Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
УникальныйИдентификатор,
"ИнтеграцияAPI.ВыгрузитьДанные",
СтруктураПараметров,
ПараметрыВыполнения
);
Заключение
Использование стандартных библиотек — это показатель зрелости разработчика. Ваш код становится компактнее, его легче читать коллегам, а общая стабильность системы растет. Прежде чем садиться за написание очередной функции обработки строк или массивов, сделайте глобальный поиск по конфигурации — скорее всего, в БСП это уже написали за вас.
А какие малоизвестные, но полезные методы БСП чаще всего используете вы в своих проектах? Поделитесь в комментариях!
Вступайте в нашу телеграмм-группу Инфостарт