При работе с платформой "1С:Предприятие" версии 8.3.18 и выше, разработчики активно используют новые механизмы асинхронной работы, такие как модификатор Асинх, оператор Ждать и функции вроде ВопросАсинх. Эти нововведения значительно упрощают написание неблокирующего кода и повышают отзывчивость пользовательского интерфейса. Однако многие сталкиваются с ситуацией, когда, несмотря на активное использование этих конструкций в коде, найти информацию о них в стандартных разделах Синтакс-помощника — "Содержание" и "Индекс" — не удаётся. Единственным способом найти справочную информацию остаётся полнотекстовый "Поиск". Мы разберем причину такого поведения и предложим простое решение.
Прежде чем углубиться в проблему с Синтакс-помощником, давайте кратко рассмотрим, что представляют собой асинхронные функции в 1С. Начиная с версии платформы 8.3.18, фирма "1С" представила механизм асинхронности, вдохновленный паттерном async/await из JavaScript. Этот механизм позволяет выполнять длительные операции, не блокируя основной поток выполнения приложения, что критически важно для сохранения отзывчивости пользовательского интерфейса (особенно в тонком клиенте) и эффективного использования ресурсов.
Ключевые элементы асинхронности включают:
Асинх: Используется для объявления процедур и функций, которые могут содержать оператор Ждать. Такая процедура или функция всегда возвращает объект типа Обещание, даже если в её теле нет оператора Ждать.Ждать: Применяется к объекту типа Обещание (или к любому объекту, который может быть преобразован в Обещание). Выполнение процедуры приостанавливается до тех пор, пока Обещание не будет разрешено (успешно выполнено) или отклонено (завершено с ошибкой). При этом поток выполнения не блокируется, а передается системе для обработки других событий.ВопросАсинх: Асинхронная версия стандартной функции Вопрос, предназначенная для отображения диалоговых окон пользователю. Она также возвращает Обещание и должна вызываться с оператором Ждать.Обещание: Специальный объект, представляющий результат асинхронной операции, который может быть доступен в будущем.Эти механизмы особенно полезны при работе с файлами, сетевыми запросами, взаимодействии с внешними системами или выполнении длительных вычислений, которые потенциально могут привести к "зависанию" интерфейса.
Многие разработчики, активно использующие асинхронные конструкции в своих конфигурациях на платформе 8.3.18+, обнаруживают, что при попытке найти информацию о, например, ВопросАсинх или модификаторе Асинх в привычных разделах Синтакс-помощника — "Содержание" или "Индекс" — соответствующие записи отсутствуют. Это вызывает недоумение, поскольку эти функции являются частью встроенного языка и активно используются. Тем не менее, если ввести "ВопросАсинх" или "Асинх" в строку "Поиск" Синтакс-помощника, то необходимая информация успешно находится и отображается. Это явление указывает на то, что информация о функциях присутствует в базе знаний Синтакс-помощника, но по какой-то причине не индексируется или не отображается в структурированных разделах.
Разработчики платформы 1С предусмотрели механизм контекстного отбора информации в Синтакс-помощнике. Этот механизм позволяет отображать только ту часть справочной информации, которая релевантна для определенного контекста исполнения. Например, можно отфильтровать методы и свойства, чтобы видеть только те, которые доступны в тонком клиенте, или только на сервере, или только в веб-клиенте, или для обычных форм. Это сделано для удобства, чтобы разработчик не отвлекался на информацию, не применимую к текущей задаче или окружению.
Асинхронные функции, такие как ВопросАсинх, Асинх и Ждать, преимущественно используются в клиентском коде управляемых форм, а их реализация и особенности имеют специфический контекст. По умолчанию, или из-за ранее установленных настроек, Синтакс-помощник мог быть настроен таким образом, чтобы не отображать специфические элементы, которые не относятся к "универсальному" или "всеобъемлющему" контексту. Именно этот контекстный отбор и является причиной того, что асинхронные функции не попадают в стандартные разделы "Содержание" и "Индекс".
Для того чтобы Синтакс-помощник начал полноценно отображать все асинхронные конструкции встроенного языка в разделах "Содержание" и "Индекс", нам необходимо скорректировать его настройки фильтрации. Давайте разберем этот процесс по шагам:
Именно эта "галочка" или настройка фильтрации является тем самым решением, о котором говорилось в обсуждении. Её активация снимает ограничения на отображение справочной информации.
ВопросАсинх, Асинх и другие асинхронные конструкции в разделах "Содержание" и "Индекс".Как только вы примените эти настройки, вы заметите, что разделы "Содержание" и "Индекс" Синтакс-помощника теперь полноценно отображают информацию об асинхронных функциях и операторах, предоставляя вам полный доступ к документации по этим мощным возможностям платформы.
В ходе обсуждения поднимался вопрос о режиме совместимости конфигурации и его возможном влиянии на проблему. Мы хотим подчеркнуть, что режим совместимости конфигурации не оказывает прямого влияния на содержимое или отображение справочной информации в Синтакс-помощнике. Режим совместимости — это механизм, который определяет, какая версия платформы будет эмулироваться при работе конфигурации. Он используется для обеспечения корректной работы старых конфигураций на более новых версиях платформы без необходимости их полной адаптации.
Например, если ваша платформа имеет версию 8.3.19, а режим совместимости конфигурации установлен на 8.3.16, это означает, что в рантайме (во время выполнения) конфигурация будет вести себя так, будто она работает на платформе 8.3.16. Это влияет на доступность определенных функций, методов и свойств встроенного языка *в самой конфигурации*, а также на поведение некоторых объектов. Асинхронные функции, появившиеся в 8.3.18, при режиме совместимости 8.3.16 будут недоступны для использования в коде и не будут компилироваться.
Однако Синтакс-помощник всегда предоставляет документацию по всем возможностям той версии платформы, на которой запущен сам конфигуратор. То есть, если вы используете конфигуратор 8.3.19, Синтакс-помощник будет содержать информацию обо всех функциях до 8.3.19 включительно, независимо от режима совместимости открытой конфигурации. Проблема с отображением в "Содержании" и "Индексе" возникает исключительно из-за настроек фильтрации контекста в самом Синтакс-помощнике, а не из-за режима совместимости конфигурации.
Разница в поведении между полнотекстовым поиском и навигацией по "Содержанию" и "Индексу" объясняется их внутренними механизмами:
Понимание этой разницы позволяет нам четко отделить проблему фильтрации отображения от отсутствия самой информации.
Давайте рассмотрим несколько примеров использования асинхронных функций, чтобы лучше понять их синтаксис и назначение, а также убедиться, что вы сможете найти их описание в Синтакс-помощнике после применения вышеописанного решения.
ВопросАсинх для неблокирующего диалогаТрадиционная функция Вопрос блокирует выполнение клиентского кода до получения ответа от пользователя. ВопросАсинх позволяет избежать этого, возвращая Обещание, которое разрешается после выбора пользователя.
// В обработчике команды или другой клиентской процедуре, объявленной как Асинх
&НаКлиенте
Асинх Процедура ВыполнитьДействиеАсинх(Команда)
Сообщить("Начало выполнения действия...");
// Вызываем ВопросАсинх и ожидаем его завершения
ОтветПользователя = Ждать ВопросАсинх(
"Вы действительно хотите выполнить это действие?",
РежимДиалогаВопрос.ДаНет,
,,
СтандартнаяКартинка.Вопрос
);
Если ОтветПользователя = КодВозвратаДиалога.Да Тогда
Сообщить("Пользователь выбрал 'Да'. Продолжаем...");
// Здесь может быть вызов другой асинхронной или синхронной функции
// Например, Ждать МояДлительнаяОперацияАсинх();
Иначе
Сообщить("Пользователь выбрал 'Нет' или закрыл диалог. Отменяем.");
КонецЕсли;
Сообщить("Действие завершено.");
КонецПроцедуры
Обратите внимание на модификатор Асинх перед Процедура и оператор Ждать перед вызовом ВопросАсинх. Без них код не будет работать как асинхронный.
Вы можете создавать собственные асинхронные процедуры и функции, которые будут выполнять длительные операции без блокировки интерфейса.
// На клиенте
&НаКлиенте
Асинх Функция МояДлительнаяОперацияАсинх()
Сообщить("Начало длительной операции на клиенте...");
// Имитация длительной работы, например, обращения к веб-сервису
// В реальном коде здесь может быть вызов Ждать HTTPЗапросАсинх() или Ждать ВызватьФункциюСервераАсинх()
Для Индекс = 1 По 5 Цикл
// Здесь мы просто демонстрируем, что функция Асинх может быть просто вызвана.
// Для реальной задержки без блокировки потребуется более сложный механизм или платформа.
// Например, Ждать КомандаОжиданияАсинх(1000);
Сообщить(" Шаг " + Индекс + "...");
КонецЦикла;
Сообщить("Длительная операция на клиенте завершена.");
Возврат Истина;
КонецФункции
&НаКлиенте
Асинх Процедура ВыполнитьВсеДействия(Команда)
Сообщить("Запускаем несколько асинхронных операций...");
// Вызываем длительную операцию и ждем ее завершения
Результат = Ждать МояДлительнаяОперацияАсинх();
Если Результат Тогда
Сообщить("Первая операция успешно завершена. Запускаем ВопросАсинх.");
Ответ = Ждать ВопросАсинх("Продолжить далее?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
Сообщить("Продолжаем!");
Иначе
Сообщить("Остановлено.");
КонецЕсли;
КонецЕсли;
Сообщить("Все асинхронные действия завершены.");
КонецПроцедуры
Эти примеры показывают, как модификатор Асинх и оператор Ждать используются вместе для создания и управления асинхронным потоком выполнения. После того как вы настроите Синтакс-помощник, вы сможете легко найти подробную информацию по каждому из этих ключевых слов и функций.
Проблема с отсутствием асинхронных функций в "Содержании" и "Индексе" Синтакс-помощника 1С, при их наличии в "Поиске", является распространенной, но легко решаемой. Её причина кроется в механизме контекстного отбора информации, который по умолчанию может скрывать специфические для определенных контекстов элементы. Активация опции "Отображать все" или выбор соответствующих контекстов (например, "Тонкий клиент", "Клиент (управляемое приложение)") в настройках Синтакс-помощника полностью решает эту проблему. Помните, что режим совместимости конфигурации не влияет на отображение документации в Синтакс-помощнике, а только на доступность функций в рантайме. Вооружившись этим знанием, вы сможете эффективно использовать все возможности встроенного языка 1С, включая современные асинхронные механизмы, и всегда иметь под рукой актуальную справочную информацию.