К статье
Практический материал

Разработка и Конфигурация · 12 мин

Методы глобального контекста 1С: что это и как ими пользоваться

Методы глобального контекста 1С: что это такое, какие функции доступны без объекта, примеры кода, типичные ошибки и отличия от методов объектов.

Методы глобального контекста — это встроенные функции и процедуры платформы 1С, которые доступны в любом месте программного кода без обращения к какому-либо объекту. Их можно вызывать напрямую по имени: ТекущаяДата(), Сообщить(), СтрДлина() — всё это методы глобального контекста. Они реализованы самой платформой, а не конфигурацией, поэтому работают одинаково в любой базе.

Глобальный контекст формируется автоматически при запуске системы и содержит системные перечисления, свойства и методы общего назначения: работа со строками, датами, числами, файлами, вывод сообщений, диалоги, преобразование типов. Разработчику не нужно ничего подключать или объявлять — достаточно написать имя метода в модуле.

Понимание того, какие методы относятся к глобальному контексту, важно по двум причинам. Во-первых, это экономит время: многие задачи (форматирование, поиск подстроки, округление) уже решены платформой. Во-вторых, в синтакс-помощнике методы глобального контекста собраны в отдельной ветке, и умение в ней ориентироваться — базовый навык разработчика 1С.

Что такое глобальный контекст и из чего он состоит

Глобальный контекст — это набор свойств, методов и системных перечислений, которые платформа 1С предоставляет во всех модулях конфигурации. Он существует всегда: и на клиенте, и на сервере, хотя состав доступных методов в этих режимах различается. Например, интерактивные диалоги (Вопрос(), Предупреждение()) недоступны на сервере, а часть методов работы с базой данных недоступна на клиенте.

В состав глобального контекста входят:

  • методы общего назначения — работа со строками, числами, датами, коллекциями;
  • системные перечисления — например, ВидДвиженияНакопления, РежимПроведенияДокумента;
  • свойства — глобальные значения вроде Метаданные;
  • методы интерактивной работы — диалоги, вопросы, оповещения;
  • методы доступа к прикладным объектам — менеджеры справочников, документов, регистров (Справочники, Документы и т.д.).

Отличие методов глобального контекста от методов объектов принципиально. Метод объекта вызывается через точку: Запрос.Выполнить() — здесь Выполнить() принадлежит конкретному объекту «Запрос». Метод глобального контекста вызывается сам по себе: ТекущаяДата() не требует никакого объекта слева.

Какие группы методов глобального контекста используют чаще всего

Практически в каждом модуле встречаются методы нескольких стандартных групп. Знание этих групп позволяет быстро вспомнить нужную функцию, не листая документацию.

Работа со строками

Самая востребованная группа: СтрДлина(), Лев(), Прав(), Сред(), Найти(), СтрЗаменить(), СокрЛП(), ВРег(), НРег(), СтрРазделить(), СтрСоединить(). Этими методами обрабатывают наименования, номера документов, данные из файлов и форм.

Даты и числа

Для дат: ТекущаяДата(), НачалоДня(), КонецДня(), НачалоМесяца(), ДобавитьМесяц(), Формат(). Для чисел: Окр(), Цел(), Мин(), Макс(). Функция Формат() универсальна — она преобразует и даты, и числа в строку по заданному шаблону.

Сообщения, диалоги и типы

Вывод информации пользователю: Сообщить(), Предупреждение(), ПоказатьОповещениеПользователя(). Проверка и преобразование типов: ТипЗнч(), Тип(), ЗначениеЗаполнено(), XMLСтрока(). Метод ЗначениеЗаполнено() особенно важен — он корректно проверяет «пустоту» для любых типов, включая пустые ссылки и неопределённые даты.

bsl
// Примеры методов глобального контекста
ДатаОтчета = ТекущаяДата();                 // текущая дата и время
КраткоеИмя = СокрЛП(Лев(Наименование, 50)); // обрезка строки
СуммаОкругл = Окр(Сумма, 2);                // округление до копеек
Если Не ЗначениеЗаполнено(Контрагент) Тогда
    Сообщить("Не выбран контрагент");
КонецЕсли;

Как найти нужный метод в синтакс-помощнике

Синтакс-помощник — основной справочник по глобальному контексту. Он встроен в конфигуратор и вызывается через меню «Справка — Синтакс-помощник» или клавишей F1, когда курсор стоит на имени метода в коде.

В дереве синтакс-помощника глобальный контекст представлен отдельным узлом «Глобальный контекст», внутри которого методы сгруппированы по назначению: «Работа со значениями типа Строка», «Работа со значениями типа Дата», «Интерактивная работа» и так далее. Для каждого метода указаны синтаксис, параметры, возвращаемое значение и доступность (тонкий клиент, веб-клиент, сервер).

Полезный приём: в редакторе модуля нажмите Ctrl+Shift+F1 (контекстная подсказка) — конфигуратор покажет сигнатуру метода, который вы редактируете. Контекстный поиск по Ctrl+F1 внутри синтакс-помощника позволяет искать метод по части имени.

Порядок действий
  1. 1
    Откройте конфигуратор и перейдите в меню «Справка — Синтакс-помощник».
  2. 2
    Разверните узел «Глобальный контекст» и выберите группу по назначению (строки, даты, диалоги).
  3. 3
    Откройте описание метода и проверьте блок «Доступность» — где метод работает.
  4. 4
    Скопируйте синтаксис в модуль, подставьте свои параметры и проверьте результат в отладке.

Доступность методов: клиент, сервер, внешнее соединение

Не каждый метод глобального контекста работает везде. Платформа явно ограничивает доступность, и попытка вызвать недоступный метод приведёт к ошибке компиляции модуля или выполнения. Основные правила таковы.

Интерактивные методы — Вопрос(), Предупреждение(), ВвестиЗначение(), ОткрытьЗначение() — работают только на клиенте. На сервере их вызов запрещён, потому что у сервера нет пользовательского интерфейса. Если логика должна работать и на сервере, диалоги выносят в клиентскую часть обработчика.

Методы работы с прикладными данными и транзакциями (НачатьТранзакцию(), УстановитьМонопольныйРежим()) доступны на сервере и в толстом клиенте, но не в тонком и веб-клиенте. Универсальные методы вроде СокрЛП(), Формат(), ЗначениеЗаполнено() доступны везде.

Директивы компиляции помогают управлять контекстом: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Процедура с директивой &НаСервере может использовать серверные методы глобального контекста, а клиентская процедура — только клиентские и универсальные.

Глобальный контекст и общие модули: в чём разница

Частую путаницу вызывает сходство между методами глобального контекста и методами общих модулей конфигурации. И те и другие вызываются без создания объекта, но природа у них разная.

Методы глобального контекста реализованы в платформе и одинаковы во всех конфигурациях. Методы общих модулей пишет разработчик конкретной конфигурации; вызываются они через имя модуля: ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ИНН"). Если общий модуль объявлен глобальным, его методы вызываются без имени модуля — внешне это похоже на глобальный контекст, но по сути остаётся кодом конфигурации.

Сравнение вариантов

Методы глобального контекста

Встроены в платформу, доступны всегда, нельзя изменить. Подходят для универсальных операций: строки, даты, диалоги, типы.

Общие модули конфигурации

Пишутся разработчиком под задачи прикладного решения. Подходят для бизнес-логики: расчёты, проверки, работа с данными конкретной конфигурации.

Методы объектов

Вызываются через точку у конкретного объекта (запрос, табличный документ, элемент формы). Подходят, когда действие относится к состоянию конкретного экземпляра.

Практическое правило: прежде чем писать собственную функцию в общий модуль, проверьте, нет ли готового метода в глобальном контексте. Дублирование платформенной функциональности — распространённая ошибка начинающих разработчиков: вручную пишут округление, обрезку пробелов или проверку пустой строки, хотя всё это уже есть в платформе.

Типичные ошибки при работе с методами глобального контекста

Большинство проблем возникает не из-за сложности методов, а из-за невнимательности к контексту выполнения и типам параметров.

Типичные ошибки
01
Вызов интерактивного метода (Предупреждение, Вопрос) в серверной процедуре — ошибка компиляции или выполнения; диалоги выносят в клиентский код.
02
Сравнение строки с пустой строкой вместо ЗначениеЗаполнено() — проверка не срабатывает для пустых ссылок, Неопределено и пустых дат.
03
Использование Найти() без проверки результата — если подстрока не найдена, метод возвращает 0, и последующий Сред() даёт неожиданный результат.
04
Ожидание, что ТекущаяДата() на сервере вернёт время клиента — сервер возвращает своё серверное время, которое может отличаться от времени пользователя.
05
Написание собственных функций округления и форматирования вместо Окр() и Формат() — лишний код, который ещё и надо поддерживать.

Отдельно стоит упомянуть локализацию. Многие методы имеют английские синонимы (CurrentDate() для ТекущаяДата(), StrLen() для СтрДлина()). Смешивать русский и английский синтаксис в одном модуле платформа позволяет, но это ухудшает читаемость и усложняет сопровождение. В командной разработке обычно закрепляют один вариант в стандартах кодирования.

Контрольные точки

Как проверить результат

Компиляция модуля
Норма

Модуль сохраняется без ошибок, конфигурация обновляется

Тревожный признак

Ошибка «Процедура или функция не определена» или «Метод недоступен»

Доступность метода
Норма

В синтакс-помощнике в блоке «Доступность» указан нужный режим (сервер, тонкий клиент)

Тревожный признак

Метод помечен как доступный только на толстом клиенте, а решение работает в тонком

Поведение в отладке
Норма

Метод возвращает значение ожидаемого типа и формата

Тревожный признак

Возвращается Неопределено, 0 или значение в неожиданном часовом поясе

Как быстро освоить глобальный контекст на практике

Эффективный способ выучить основные методы — не читать список целиком, а решать задачи и каждый раз проверять, нет ли готового решения в платформе. Нужно вывести дату в документе — найдите Формат(). Нужно разбить строку по запятой — найдите СтрРазделить(). Через несколько недель такой практики основная сотня методов запоминается естественно.

Второй приём — чтение чужого кода типовых конфигураций. Общие модули вроде «ОбщегоНазначения» демонстрируют канонические приёмы: как комбинируют методы глобального контекста, как обрабатывают граничные случаи, как оформляют проверки. Это быстрее формирует правильные привычки, чем эксперименты с нуля.

Итог

Что важно запомнить

Методы глобального контекста — встроенные функции платформы, доступные в любом модуле без объектов. Их полный список с описанием и доступностью находится в синтакс-помощнике. Главные правила: проверяйте доступность метода в нужном режиме (клиент/сервер), используйте ЗначениеЗаполнено() для проверок и не дублируйте платформенную функциональность собственным кодом.

Частые вопросы о методах глобального контекста

Чем метод глобального контекста отличается от процедуры общего модуля?

Метод глобального контекста встроен в платформу и работает одинаково во всех конфигурациях, изменить его нельзя. Процедура общего модуля — код конкретной конфигурации, который пишет и меняет разработчик. Внешне вызов похож, но общий модуль указывается в имени вызова (если модуль не глобальный).

Почему Сообщить() не выводит текст при вызове на сервере?

Метод Сообщить() доступен на сервере, но сообщения накапливаются и показываются пользователю только после завершения серверного вызова. Если нужен немедленный вывод или интерактивный диалог, используйте клиентские методы в клиентской процедуре.

Можно ли расширить глобальный контекст собственными функциями?

Напрямую — нет, платформенный глобальный контекст изменить нельзя. Но можно создать общий модуль с флажком «Глобальный»: его экспортные процедуры и функции станут доступны по имени без указания модуля, что внешне выглядит как расширение глобального контекста.

Как узнать, работает ли метод в веб-клиенте?

Откройте описание метода в синтакс-помощнике — в нём есть блок «Доступность» с перечислением режимов: тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Если нужный режим не указан, вызов метода в нём приведёт к ошибке.

Почему ТекущаяДата() возвращает не то время, которое у пользователя?

На сервере метод возвращает время сервера 1С, а на клиенте — время компьютера пользователя. При разных часовых поясах или неверных настройках времени сервера значения различаются. Для единообразия время обычно берут на сервере, а для отображения учитывают часовой пояс сеанса.

Где посмотреть полный список методов глобального контекста?

В конфигураторе: меню «Справка — Синтакс-помощник», узел «Глобальный контекст». Методы там сгруппированы по назначению, для каждого приведены синтаксис, параметры, пример и доступность. Контекстный вызов по F1 на имени метода в коде открывает его описание сразу.