При работе с крупными типовыми конфигурациями (такими как 1С:ERP Управление предприятием, Управление торговлей или Комплексная автоматизация) разработчики постоянно сталкиваются с проблемой "изобретения велосипедов". Библиотека стандартных подсистем (БСП) содержит тысячи экспортных функций на все случаи жизни: от форматирования строк до сложных математических расчетов и работы с файлами. Написание собственного кода для тривиальной задачи часто занимает гораздо больше времени, чем использование уже готового решения. Но как ориентироваться в этой огромной свалке кода? Разберем проверенные методики, инструменты автоматизации, современные возможности сред разработки и даже интеллектуальных помощников.
Прежде чем приступать к написанию собственного кода, пройдем по шагам классический алгоритм поиска, выработанный опытными разработчиками. Этот подход не требует сторонних инструментов и базируется на логике работы самой платформы 1С:
Ctrl + Shift + F) по предполагаемому действию. Важно искать не только точное совпадение, но и синонимы. Например, если нам нужно очистить строку от пробелов, попробуем поискать слова Сократить, Пробел, Очистить, Строка.СтроковыеФункцииКлиентСервер. Если с датами — на ФизическиеЛицаКлиентСервер или ОбщегоНазначенияКлиентСервер.Если стандартного поиска в Конфигураторе недостаточно, на помощь приходят специализированные утилиты автоматизации работы разработчика:
Если вы все еще работаете в классическом Конфигураторе, стоит рассмотреть переход на 1С:EDT (Enterprise Development Tools). В этой среде реализованы мощнейшие механизмы индексации кода, которые делают поиск функций максимально комфортным:
Современные технологии искусственного интеллекта кардинально меняют подход к поиску решений. Сегодня разработчикам 1С доступны специализированные нейросетевые инструменты:
Для крупных команд разработчиков отличным решением является развертывание собственной базы знаний на основе автоматического парсинга исходного кода. С помощью таких инструментов, как autodocgen от BIA Technologies или скриптов на платформе OneScript, можно настроить автоматическое извлечение описаний экспортных методов из комментариев кода конфигурации 1С. Полученная документация может публиковаться в локальном веб-портале или Confluence, что позволяет всей команде осуществлять мгновенный поиск по "живой" и актуальной базе функций.
Частая проблема при использовании готовых функций из БСП — это их переименование или удаление при очередном обновлении конфигурации вендором. Чтобы ваш код не "превратился в тыкву" и не вызывал критических ошибок при компиляции, рассмотрим приемы оборонительного программирования.
Во-первых, мы можем динамически проверять существование нужного модуля в метаданных перед его вызовом:
Если Метаданные.ОбщиеМодули.Найти("СтроковыеФункцииКлиСервер") <> Неопределено Тогда
// Модуль существует, можем безопасно вызывать его методы
КонецЕсли;
Во-вторых, если метод часто меняет свое местоположение или название в разных версиях БСП, мы можем применить динамическое выполнение кода с обработкой исключений:
Попытка
// Попытка вызова нового варианта функции
Выполнить("СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Параметры)");
Исключение
Попытка
// Альтернативный или устаревший вариант вызова
Выполнить("ОбщегоНазначенияКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Параметры)");
Исключение
// Резервный собственный алгоритм на случай отсутствия обоих вариантов
// Реализуем собственный простой велосипед
КонецПопытки;
КонецПопытки;
Такой подход гарантирует стабильную работу ваших внешних обработок и расширений на конфигурациях с самыми разными версиями БСП.
Для сокращения длины кода и упрощения его написания многие разработчики создают собственное расширение с короткими именами модулей, которые служат обертками для громоздких системных вызовов БСП. Проанализируем пример такого подхода:
// Вместо длинного системного вызова:
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Параметр1, Параметр2);
// Мы можем написать короткий вызов через наш модуль-обертку:
ЕХТ_Строка.сПараметрами(Шаблон, Параметр1, Параметр2);
Внутри общего модуля нашего расширения ЕХТ_Строка будет содержаться простой перенаправляющий вызов:
Функция сПараметрами(Шаблон, П1, П2) Экспорт
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, П1, П2);
КонецФункции
Этот подход значительно ускоряет написание кода и делает его более читаемым, однако требует поддержки собственной библиотеки оберток при обновлениях платформы.