Разработка и Конфигурация · 11 мин
Общего назначения в 1С: что это за модуль и как им пользоваться
Общего назначения в 1С — это общий модуль БСП с сотнями готовых функций. Разбираем назначение, состав, приёмы вызова, типичные ошибки и отличия от переопределяемых модулей.
«Общего назначения» — это общий модуль, который входит в состав Библиотеки стандартных подсистем (БСП) и присутствует практически во всех типовых конфигурациях 1С: Бухгалтерия, Управление торговлей, ERP, Зарплата и управление персоналом. В нём собраны сотни готовых процедур и функций, которые разработчики используют каждый день: получение значения реквизита объекта, проверка ссылок, работа со строками, датами, коллекциями, сообщениями пользователю.
Смысл модуля — избавить разработчика от повторного написания однотипного кода. Вместо того чтобы в каждом месте программы писать запрос для получения реквизита справочника, вызывается одна функция ОбщегоНазначения.ЗначениеРеквизитаОбъекта(). Это сокращает объём кода, снижает количество ошибок и упрощает сопровождение конфигурации.
Модуль поставляется как часть БСП — набора стандартных подсистем, который фирма «1С» развивает и обновляет вместе с платформой. Поэтому состав и поведение функций «ОбщегоНазначения» одинаковы в разных типовых решениях, а разработчику не нужно изучать заново каждую конфигурацию.
Что такое БСП и какое место в ней занимает модуль
Библиотека стандартных подсистем — это набор готовых механизмов, которые «1С» встраивает в типовые конфигурации: управление пользователями, версионирование объектов, обмен данными, печать, работа с файлами и десятки других. Каждая подсистема оформлена как отдельный блок метаданных со своими модулями, ролями и подписками на события.
Подсистема «Стандартные подсистемы → Базовая функциональность» — фундамент БСП, и именно в неё входит общий модуль «ОбщегоНазначения». Он считается программным интерфейсом базовой функциональности: все его экспортные методы задокументированы в поставке БСП и гарантированно сохраняют обратную совместимость между версиями.
Важно понимать: «Общего назначения» — не отдельная программа и не конфигурация, а часть кода внутри конфигурации. Пользователь в режиме «Предприятие» его не видит; работать с ним имеет смысл только разработчику или внедренцу, который пишет доработки, расширения или внешние обработки.
Какие функции входят в состав модуля
Состав модуля условно делится на несколько групп. Ниже — категории, с которыми разработчик сталкивается чаще всего.
- Работа с данными объектов. Функции
ЗначениеРеквизитаОбъекта(),ЗначенияРеквизитовОбъекта(),ЗначениеРеквизитаОбъектов()позволяют получить реквизиты ссылки без вызова методаПолучитьОбъект(), что существенно быстрее и безопаснее для блокировок. - Проверки ссылок и типов.
СсылкаСуществует(),ЭтоСсылка(),ЭтоСправочник(),ЭтоДокумент()и другие — для анализа переданных значений. - Работа со строками. Разбор и сборка строк, поиск подстрок, формирование представлений — через модуль «СтроковыеФункцииКлиентСервер», тесно связанный с «ОбщегоНазначения».
- Сообщения пользователю.
СообщитьПользователю()выводит сообщение с привязкой к реквизиту формы и корректной обработкой в клиент-серверном режиме. - Окружение и режимы работы.
ИнформационнаяБазаФайловая(),РазделениеВключено(),РежимОтладки()— определение контекста выполнения кода. - Работа с XML, JSON, временными хранилищами. Сериализация значений, помещение данных во временное хранилище и извлечение оттуда.
Точный перечень зависит от версии БСП: новые функции добавляются, устаревшие помечаются как «Устарела» и со временем удаляются. Поэтому перед использованием незнакомой функции стоит заглянуть в её описание в самом модуле — каждый экспортный метод снабжён комментарием с параметрами и возвращаемым значением.
Можно вызывать ОбщегоНазначения.ИмяФункции() напрямую
Либо внедрить БСП, либо реализовать функции самостоятельно
Найти в комментарии рекомендуемую замену и перейти на неё
Как вызывать функции модуля в коде
Обращение к модулю выполняется по имени через точку, как к любому общему модулю. Пример получения реквизита без открытия объекта:
Организация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка, "Организация");
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПартнерСсылка, "ИНН,КПП,Комментарий");
Если ОбщегоНазначения.СсылкаСуществует(НоменклатураСсылка) Тогда
ОбщегоНазначения.СообщитьПользователю("Элемент найден");
КонецЕсли;Несколько правил корректного вызова. Во-первых, модуль «ОбщегоНазначения» серверный: его функции недоступны в клиентском контексте формы. Для клиентского кода существуют модули «ОбщегоНазначенияКлиент» и «ОбщегоНазначенияКлиентСервер» — выбирайте тот, который соответствует контексту исполнения. Попытка вызвать серверный модуль из клиентской процедуры с директивой &НаКлиенте приведёт к ошибке компиляции.
Во-вторых, передавайте в функции именно те типы, которые указаны в описании. Например, ЗначениеРеквизитаОбъекта() принимает ссылку, а не объект; если передать объект, результат будет непредсказуемым или вызовет исключение.
- 1Найдите функцию в модуле через глобальный поиск по имени
- 2Прочитайте комментарий: параметры, типы, возвращаемое значение, контекст выполнения
- 3Проверьте, не помечена ли функция как устаревшая
- 4Вызовите функцию на тестовой копии базы с реальными данными
- 5Проверьте поведение в клиент-серверном режиме, если база не файловая
Чем «ОбщегоНазначения» отличается от «ОбщегоНазначенияПереопределяемый»
Рядом с базовым модулем в типовых конфигурациях почти всегда есть пара модулей с суффиксами «Переопределяемый» и «КлиентПереопределяемый». Это осознанное архитектурное решение БСП, и путать их назначение — частая ошибка начинающих разработчиков.
Модуль «ОбщегоНазначения» — закрытая часть библиотеки: его код меняет только фирма «1С» при обновлении БСП. Вносить туда свои правки нельзя, потому что при следующем обновлении они будут перезаписаны, а конфигурация получит статус «изменена поставщиком» и усложнит поддержку.
Модуль «ОбщегоНазначенияПереопределяемый», наоборот, предназначен для встраивания библиотеки в конкретное прикладное решение. В нём находятся обработчики, которые библиотека вызывает, чтобы прикладной код мог сообщить ей сведения о конфигурации: имя, версию, состав планов обмена, обработчики обновления. Если вы внедряете БСП в собственную конфигурацию, заполнять нужно именно переопределяемые модули.
Сравнение модулей
Серверный программный интерфейс БСП. Вызываем, но не изменяем.
То же для клиентского контекста форм. Не содержит функций работы с БД.
Функции, доступные в обоих контекстах: строки, коллекции, проверки.
Заполняется разработчиком прикладного решения при внедрении БСП.
Прослойка для вызова серверных функций из клиентского кода.
Типичные ошибки при работе с модулем
Первая и самая распространённая ошибка — правка кода самого модуля «ОбщегоНазначения». Нужную функцию добавили прямо в библиотечный модуль, всё заработало, а после обновления конфигурации доработка исчезла. Правильный путь — создать собственный общий модуль (например, с префиксом организации) и размещать свои функции там, а библиотечные — только вызывать.
Вторая ошибка — вызов серверных функций из клиентского контекста. Код компилируется в толстом клиенте, но падает в тонком или веб-клиенте, где серверный модуль недоступен. Проверяйте директивы компиляции процедуры и используйте «ОбщегоНазначенияКлиентСервер» для кода, который должен работать везде.
Третья группа ошибок связана с производительностью: вызов ЗначениеРеквизитаОбъекта() в цикле по тысяче ссылок выполняет тысячу отдельных запросов. Для массового получения данных используйте пакетные варианты — ЗначенияРеквизитовОбъектов() с массивом ссылок — или обычный запрос.
Безопасные границы самостоятельной доработки
Работа с модулем «ОбщегоНазначения» безопасна, пока ограничивается вызовами его функций. Риски появляются, когда разработчик начинает менять типовой код или обновлять БСП без подготовки.
Любые эксперименты выполняйте на копии базы. Даже безобидная правка общего модуля затрагивает все места его вызова, а их в типовой конфигурации сотни. Перед обновлением конфигурации убедитесь, что ваша база не содержит изменённых библиотечных модулей: сравнение с конфигурацией поставщика покажет расхождения.
Если конфигурация находится на поддержке с запретом изменений, доработки выполняйте через расширения конфигурации. В расширении можно создавать собственные общие модули и вызывать из них функции «ОбщегоНазначения», не трогая типовой код.
Как проверить результат
Возвращается значение ожидаемого типа
Исключение или Неопределено там, где ожидались данные
Код работает в тонком и веб-клиенте
Ошибка «Переменная не определена (ОбщегоНазначения)»
Библиотечные модули не изменены
Модуль «ОбщегоНазначения» отмечен как изменённый
Пакетные функции для массивов ссылок
Заметные паузы из-за вызовов в цикле
Частые вопросы
Можно ли использовать «ОбщегоНазначения» в самописной конфигурации без БСП?
Нет, модуль — часть библиотеки и зависит от других её объектов. Чтобы получить его функциональность, нужно внедрить в конфигурацию базовую функциональность БСП целиком либо написать собственные аналогичные функции в своём общем модуле.
Чем отличаются ЗначениеРеквизитаОбъекта и обращение через точку?
Обращение «Ссылка.Реквизит» заставляет платформу считать все данные объекта. Функция БСП выполняет точечный запрос только нужных полей, что быстрее и снижает нагрузку на СУБД, особенно при массовых обращениях.
Почему функция работает в толстом клиенте, но падает в тонком?
Модуль «ОбщегоНазначения» серверный и недоступен в клиентском контексте. Перенесите вызов в серверную процедуру с директивой &НаСервере или используйте аналог из «ОбщегоНазначенияКлиентСервер».
Что делать, если нужной функции в модуле нет?
Создайте собственный общий модуль с уникальным префиксом и разместите функцию там. Внутри неё можно вызывать методы «ОбщегоНазначения», комбинируя библиотечные возможности с прикладной логикой.
Как узнать, какие функции устарели в моей версии БСП?
Откройте модуль и найдите комментарии со словом «Устарела» перед объявлением функций — там же указана рекомендуемая замена. Также список изменений публикуется в документации к каждой версии библиотеки.
Можно ли вызывать модуль из расширения конфигурации?
Да. Расширение имеет доступ к общим модулям основной конфигурации, поэтому функции «ОбщегоНазначения» вызываются из кода расширения обычным образом. Это предпочтительный способ доработок без снятия конфигурации с поддержки.
Что важно запомнить
«Общего назначения» — серверный общий модуль БСП с готовыми функциями для типовых задач разработки. Его функции вызывают, но не изменяют; свои доработки размещают в отдельных модулях или расширениях. Для клиентского кода используют «ОбщегоНазначенияКлиент» и «ОбщегоНазначенияКлиентСервер», для массовых операций — пакетные функции.