DellShop B2B
Корзина

Как задать вопрос на сервере в 1С

8 апреля 2026 г.·16 мин чтения·Игорь ДементьевИгорь Дементьев
Как задать вопрос на сервере в 1С

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

Это ограничение связано с принципом «тонкого клиента» и веб-клиента, где серверные процедуры выполняются на сервере приложений, а не на рабочей станции пользователя. Диалоговые окна — это элементы пользовательского интерфейса, которые могут существовать только в клиентском контексте. Попытка показать вопрос на сервере 1С нарушает архитектуру платформы и приводит к ошибкам выполнения.

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

Почему нельзя напрямую вызвать Вопрос() на сервере

Платформа 1С использует трёхуровневую архитектуру: клиент, сервер приложений и сервер базы данных. Код с директивой &НаСервере выполняется на сервере приложений — физически на другой машине, где нет доступа к GUI пользователя. Метод Вопрос() пытается создать модальное окно в операционной системе, что технически невозможно из серверного процесса.

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

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

Методы отображения диалоговых окон в 1С

Платформа 1С предоставляет два основных метода для показа вопроса пользователю: синхронный Вопрос() и асинхронный ПоказатьВопрос(). Оба метода доступны только в клиентском контексте, но различаются механизмом обработки ответа.

Метод Вопрос() — синхронное выполнение

Метод Вопрос() блокирует выполнение кода до получения ответа пользователя. Он возвращает значение из перечисления КодВозвратаДиалога, которое можно сразу проверить в условии. Этот подход прост для понимания, но работает только в обычном приложении — для тонкого клиента и веб-клиента метод устарел.

Пример использования:

&НаКлиенте
Процедура УдалитьЭлемент(Команда)
    Ответ = Вопрос("Удалить выбранный элемент?", РежимДиалогаВопрос.ДаНет);
    Если Ответ = КодВозвратаДиалога.Да Тогда
        УдалитьЭлементНаСервере();
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура УдалитьЭлементНаСервере()
    // Серверная логика удаления
    ТекущийЭлемент = РеквизитФормыВЗначение("Объект");
    ТекущийЭлемент.Удалить();
КонецПроцедуры

Недостатки синхронного метода: блокировка интерфейса, невозможность использования в веб-клиенте с включённым режимом совместимости версии 8.3.6 и выше, ограничения производительности при множественных вызовах. Метод Вопрос() не рекомендуется для новых разработок.

Метод ПоказатьВопрос() — асинхронное выполнение

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

Синтаксис метода:

ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалога, Таймаут, КнопкаПоУмолчанию, Заголовок);

Параметр ОписаниеОповещения создаётся конструктором Новый ОписаниеОповещения(), который принимает имя процедуры обработчика, ссылку на модуль (обычно ЭтотОбъект для модуля формы) и необязательные дополнительные параметры.

Пример с асинхронным вызовом:

&НаКлиенте
Процедура УдалитьЭлемент(Команда)
    ТекстВопроса = "Удалить выбранный элемент без возможности восстановления?";
    Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопросУдаления", ЭтотОбъект);
    ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопросУдаления(РезультатВопроса, ДополнительныеПараметры) Экспорт
    Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
        УдалитьЭлементНаСервере();
        Оповестить("ЭлементУдалён");
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура УдалитьЭлементНаСервере()
    ТекущийЭлемент = РеквизитФормыВЗначение("Объект");
    ТекущийЭлемент.Удалить();
КонецПроцедуры

Обратите внимание: процедура-обработчик ПослеОтветаНаВопросУдаления должна быть экспортной (&НаКлиенте и ключевое слово Экспорт). Первый параметр — результат диалога, второй — структура дополнительных параметров, если они были переданы при создании ОписаниеОповещения.

Паттерны взаимодействия клиента и сервера

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

Паттерн «Клиент → Сервер → Клиент»

Стандартный сценарий: пользователь нажимает кнопку, клиентская процедура показывает вопрос, при положительном ответе вызывает серверную функцию для выполнения операции, получает результат и обновляет интерфейс.

&НаКлиенте
Процедура ЗаписатьИЗакрыть(Команда)
    Если Модифицированность Тогда
        Оповещение = Новый ОписаниеОповещения("ПослеВопросаОСохранении", ЭтотОбъект);
        ПоказатьВопрос(Оповещение, "Сохранить изменения перед закрытием?",
            РежимДиалогаВопрос.ДаНетОтмена);
    Иначе
        Закрыть();
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПослеВопросаОСохранении(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        ЗаписатьДанныеНаСервере();
        Закрыть();
    ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда
        Модифицированность = Ложь;
        Закрыть();
    КонецЕсли; // Отмена — ничего не делаем
КонецПроцедуры

&НаСервере
Процедура ЗаписатьДанныеНаСервере()
    ТекущийОбъект = РеквизитФормыВЗначение("Объект");
    ТекущийОбъект.Записать();
КонецПроцедуры

Этот паттерн подходит для большинства сценариев подтверждения действий. Важно: серверная процедура не должна содержать логику принятия решений на основе ответа пользователя — всю маршрутизацию выполняет клиент.

Паттерн «Передача контекста через дополнительные параметры»

Когда процедура-обработчик вопроса должна знать контекст вызова (например, какой элемент списка удалять), используется третий параметр конструктора ОписаниеОповещения — структура с дополнительными данными.

&НаКлиенте
Процедура УдалитьСтроку(Команда)
    ТекущаяСтрока = Элементы.Табличка.ТекущиеДанные;
    Если ТекущаяСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;

    ДопПараметры = Новый Структура("ИдентификаторСтроки", ТекущаяСтрока.ПолучитьИдентификатор());
    Оповещение = Новый ОписаниеОповещения("ПослеВопросаУдаленияСтроки", ЭтотОбъект, ДопПараметры);

    ТекстВопроса = СтрШаблон("Удалить строку ""%1""?", ТекущаяСтрока.Наименование);
    ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

&НаКлиенте
Процедура ПослеВопросаУдаленияСтроки(Результат, ДопПараметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        СтрокаТаблицы = Объект.Табличка.НайтиПоИдентификатору(ДопПараметры.ИдентификаторСтроки);
        Если СтрокаТаблицы <> Неопределено Тогда
            Объект.Табличка.Удалить(СтрокаТаблицы);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Этот подход позволяет одной процедуре-обработчику обрабатывать вопросы из разных мест формы, различая их по переданным параметрам.

Паттерн «Проверка условий на сервере перед вопросом»

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

&НаКлиенте
Процедура ПровестиДокумент(Команда)
    Если ТребуетсяПодтверждениеПроведения() Тогда
        Оповещение = Новый ОписаниеОповещения("ПослеВопросаОПроведении", ЭтотОбъект);
        ТекстВопроса = "Документ содержит нестандартные суммы. Провести документ?";
        ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
    Иначе
        ПровестиДокументНаСервере();
    КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ТребуетсяПодтверждениеПроведения()
    ДокументОбъект = РеквизитФормыВЗначение("Объект");
    // Проверяем условия в базе данных
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ... ГДЕ ...";
    Запрос.УстановитьПараметр("Ссылка", ДокументОбъект.Ссылка);
    Возврат НЕ Запрос.Выполнить().Пустой();
КонецФункции

&НаКлиенте
Процедура ПослеВопросаОПроведении(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        ПровестиДокументНаСервере();
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПровестиДокументНаСервере()
    ДокументОбъект = РеквизитФормыВЗначение("Объект");
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
    ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры

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

Альтернативные подходы без диалоговых окон

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

Использование кнопок с подтверждением

Для критичных действий (удаление, очистка данных) можно реализовать двухэтапную активацию: первое нажатие меняет текст кнопки на «Подтвердить удаление», второе нажатие выполняет действие. Через несколько секунд кнопка возвращается в исходное состояние.

&НаКлиенте
Перем ОжиданиеПодтвержденияУдаления;

&НаКлиенте
Процедура УдалитьЭлемент(Команда)
    Если ОжиданиеПодтвержденияУдаления = Истина Тогда
        УдалитьЭлементНаСервере();
        ОжиданиеПодтвержденияУдаления = Ложь;
        Элементы.Удалить.Заголовок = "Удалить";
    Иначе
        ОжиданиеПодтвержденияУдаления = Истина;
        Элементы.Удалить.Заголовок = "Подтвердить удаление";
        ПодключитьОбработчикОжидания("СброситьПодтверждениеУдаления", 5);
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура СброситьПодтверждениеУдаления()
    ОжиданиеПодтвержденияУдаления = Ложь;
    Элементы.Удалить.Заголовок = "Удалить";
КонецПроцедуры

&НаСервере
Процедура УдалитьЭлементНаСервере()
    ТекущийОбъект = РеквизитФормыВЗначение("Объект");
    ТекущийОбъект.Удалить();
КонецПроцедуры

Этот подход не требует обработки оповещений и упрощает восприятие для опытных пользователей, которые выполняют действие многократно.

Отображение предупреждений в форме

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если ЕстьПроблемыСДанными() Тогда
        Элементы.ПредупреждениеОПроблемах.Видимость = Истина;
        Элементы.ПредупреждениеОПроблемах.Заголовок =
            "Обнаружены несоответствия в данных. Рекомендуется проверка.";
    КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ЕстьПроблемыСДанными()
    // Логика проверки на сервере
    Возврат Ложь; // Заглушка
КонецФункции

Такой подход подходит для информирования, но не для подтверждения критичных действий — пользователь может не обратить внимание на предупреждение.

Откладывание выполнения через регламентные задания

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

&НаКлиенте
Процедура ЗапуститьОбработку(Команда)
    ПоставитьЗадачуВОчередь();
    ПоказатьПредупреждение(, "Обработка поставлена в очередь. Результат придёт уведомлением.", 5);
КонецПроцедуры

&НаСервере
Процедура ПоставитьЗадачуВОчередь()
    ПараметрыЗадания = Новый Массив;
    ПараметрыЗадания.Добавить(Объект.Ссылка);

    РегламентныеЗаданияСервер.ДобавитьЗадание(
        "ОбработкаДанныхФоновоеЗадание",
        ПараметрыЗадания,
        "Обработка данных для " + Строка(Объект.Ссылка));
КонецПроцедуры

Этот паттерн применяется в современных веб-приложениях и позволяет избежать блокировки интерфейса на время выполнения длительных операций.

Требования к серверной инфраструктуре для 1С

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

Для развёртывания инфраструктуры 1С рекомендуем серверы Dell PowerEdge для 1С — проверенные конфигурации с оптимизированным соотношением ядер процессора, объёма RAM и скорости дисковой подсистемы. Серверы этой линейки обеспечивают стабильную работу при нагрузке от 50 до 500 одновременных пользователей.

Для задач с интенсивной обработкой данных (проведение документов, запросы к регистрам сведений) критична производительность базы данных. Используйте серверы Dell PowerEdge для баз данных с поддержкой NVMe-дисков и контроллерами PERC H755 для максимальной скорости IOPS.

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

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

Ошибка: попытка получить возвращаемое значение от ПоказатьВопрос()

Метод ПоказатьВопрос() не возвращает значения, так как выполнение кода продолжается сразу после вызова, не дожидаясь ответа пользователя. Попытка написать «Результат = ПоказатьВопрос(...)» приведёт к ошибке компиляции.

// ❌ Неправильно
&НаКлиенте
Процедура ОшибочныйПодход()
    Результат = ПоказатьВопрос(...); // Ошибка: процедура не возвращает значение
    Если Результат = КодВозвратаДиалога.Да Тогда
        // Этот код никогда не выполнится правильно
    КонецЕсли;
КонецПроцедуры

// ✅ Правильно
&НаКлиенте
Процедура ПравильныйПодход()
    Оповещение = Новый ОписаниеОповещения("ОбработчикОтвета", ЭтотОбъект);
    ПоказатьВопрос(Оповещение, "Текст вопроса", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОтвета(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        // Логика обработки
    КонецЕсли;
КонецПроцедуры

Ошибка: забыли экспортировать процедуру-обработчик

Процедура, указанная в ОписаниеОповещения, должна быть экспортной. Без ключевого слова Экспорт платформа не сможет вызвать её, и после ответа пользователя возникнет ошибка времени выполнения «Метод объекта не обнаружен».

// ❌ Неправильно
&НаКлиенте
Процедура ОбработчикОтвета(Результат, Параметры) // Забыли Экспорт
    // Код
КонецПроцедуры

// ✅ Правильно
&НаКлиенте
Процедура ОбработчикОтвета(Результат, Параметры) Экспорт
    // Код
КонецПроцедуры

Ошибка: потеря контекста при вложенных вызовах

Если один диалог открывается из обработчика другого диалога, необходимо корректно передавать контекст через дополнительные параметры. Использование переменных модуля формы может привести к гонкам данных (race condition) при быстрых действиях пользователя.

// ❌ Неправильно: переменная модуля
&НаКлиенте
Перем ТекущийИдентификатор; // Может быть перезаписана до ответа на вопрос

&НаКлиенте
Процедура ОшибочныйПодход()
    ТекущийИдентификатор = 123;
    Оповещение = Новый ОписаниеОповещения("Обработчик", ЭтотОбъект);
    ПоказатьВопрос(Оповещение, "Вопрос", РежимДиалогаВопрос.ДаНет);
    // Если пользователь быстро вызовет эту процедуру снова,
    // ТекущийИдентификатор будет перезаписан
КонецПроцедуры

// ✅ Правильно: передача через дополнительные параметры
&НаКлиенте
Процедура ПравильныйПодход(Идентификатор)
    ДопПараметры = Новый Структура("Идентификатор", Идентификатор);
    Оповещение = Новый ОписаниеОповещения("Обработчик", ЭтотОбъект, ДопПараметры);
    ПоказатьВопрос(Оповещение, "Вопрос", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

&НаКлиенте
Процедура Обработчик(Результат, ДопПараметры) Экспорт
    Идентификатор = ДопПараметры.Идентификатор; // Гарантированно правильное значение
    // Логика
КонецПроцедуры

Ошибка: игнорирование варианта «Отмена»

Если диалог содержит три кнопки (Да/Нет/Отмена), необходимо обрабатывать все три варианта ответа. Игнорирование варианта «Отмена» может привести к непредсказуемому поведению — например, к закрытию формы без сохранения, когда пользователь хотел отменить действие.

&НаКлиенте
Процедура ПослеВопросаОСохранении(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        Записать();
        Закрыть();
    ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда
        Закрыть(); // Закрыть без сохранения
    ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда
        // Ничего не делаем — пользователь остаётся в форме
    КонецЕсли;
КонецПроцедуры

Явная обработка всех вариантов повышает предсказуемость интерфейса и соответствует ожиданиям пользователей.

Оптимизация производительности при множественных диалогах

В сценариях массовой обработки данных (например, проверка списка документов с запросом подтверждения для каждого) показ диалога для каждого элемента замедляет работу. Рекомендуется группировать действия и запрашивать подтверждение один раз для всей операции.

&НаКлиенте
Процедура УдалитьВыделенныеСтроки(Команда)
    ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
    Если ВыделенныеСтроки.Количество() = 0 Тогда
        ПоказатьПредупреждение(, "Не выбраны строки для удаления");
        Возврат;
    КонецЕсли;

    ТекстВопроса = СтрШаблон("Удалить %1 выбранных строк?", ВыделенныеСтроки.Количество());
    ДопПараметры = Новый Структура("Строки", ВыделенныеСтроки);
    Оповещение = Новый ОписаниеОповещения("ПослеВопросаМассовогоУдаления", ЭтотОбъект, ДопПараметры);

    ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

&НаКлиенте
Процедура ПослеВопросаМассовогоУдаления(Результат, ДопПараметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        УдалитьСтрокиНаСервере(ДопПараметры.Строки);
        Элементы.Список.Обновить();
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура УдалитьСтрокиНаСервере(МассивСтрок)
    Для Каждого ИдентификаторСтроки Из МассивСтрок Цикл
        СтрокаТаблицы = Объект.Табличка.НайтиПоИдентификатору(ИдентификаторСтроки);
        Если СтрокаТаблицы <> Неопределено Тогда
            Объект.Табличка.Удалить(СтрокаТаблицы);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Один вопрос вместо десятков сокращает время операции с минут до секунд и не раздражает пользователя многократными диалогами.

Особенности работы в веб-клиенте

Веб-клиент 1С накладывает дополнительные ограничения на работу с диалоговыми окнами из-за механизма работы браузеров. Модальные окна в браузере могут блокироваться настройками безопасности, всплывающие окна отключаются блокировщиками рекламы.

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

Для критичных действий используйте комбинацию: первое нажатие кнопки меняет её цвет и текст на «Подтвердите действие», второе нажатие выполняет операцию. Это работает быстрее диалогов и не зависит от настроек браузера.

Отладка кода с асинхронными вызовами

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

&НаКлиенте
Процедура ПослеВопроса(Результат, Параметры) Экспорт
    ЗаписатьЛогНаСервере("Пользователь ответил: " + Строка(Результат));

    Если Результат = КодВозвратаДиалога.Да Тогда
        // Логика
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗаписатьЛогНаСервере(Сообщение)
    ЗаписьЖурналаРегистрации("Отладка", УровеньЖурналаРегистрации.Информация,, , Сообщение);
КонецПроцедуры

Альтернативный способ — использовать режим «Обычное приложение» с синхронным методом Вопрос() для первоначальной отладки логики, затем переписать на ПоказатьВопрос() для продакшена.

Часто задаваемые вопросы

Можно ли обойти ограничение и вызвать Вопрос() из серверной процедуры?

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

Чем отличается ПоказатьВопрос() от ПоказатьПредупреждение()?

ПоказатьВопрос() отображает диалог с несколькими кнопками выбора (Да/Нет, Да/Нет/Отмена и другие) и возвращает код нажатой кнопки в процедуру-обработчик. ПоказатьПредупреждение() показывает информационное сообщение с единственной кнопкой «ОК» и не требует обработки результата. Используйте ПоказатьВопрос() для подтверждения действий, ПоказатьПредупреждение() для уведомлений.

Как передать несколько параметров в процедуру-обработчик вопроса?

Создайте структуру с нужными полями и передайте её третьим параметром конструктора ОписаниеОповещения. Пример: ДопПараметры = Новый Структура("Поле1, Поле2", Значение1, Значение2); Оповещение = Новый ОписаниеОповещения("Обработчик", ЭтотОбъект, ДопПараметры). В процедуре-обработчике параметры будут доступны через второй аргумент: Процедура Обработчик(Результат, ДопПараметры) Экспорт.

Почему после показа вопроса форма закрывается раньше, чем я нажал кнопку?

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

Поделиться статьёй:

TelegramVKWhatsApp

Об авторе

Игорь Дементьев
Игорь Дементьев

Подбор и консалтинг · Экономика и выбор

Консультант по подбору серверного оборудования. 7 лет помогает компаниям выбирать серверы под задачи и бюджет. Сторонник разумной экономии.

Все статьи автора →

Похожие материалы

Автономный сервер 1С: когда работает без серверной лицензии

Автономный сервер 1С: когда работает без серверной лицензии

Платформа 1С:Предприятие позволяет развернуть локальный сервер без покупки серверной лицензии при условии работы одного пользователя и локальной СУБД. Разбираем ограничения автономного режима, когда нужна полная лицензия и как выбрать оборудование для роста бизнеса.

19.04.20267 мин
Хранилище конфигураций 1С на сервере: назначение и управление

Хранилище конфигураций 1С на сервере: назначение и управление

Хранилище конфигураций 1С — это централизованная система контроля версий на сервере, где хранятся все изменения базы данных. Оно позволяет нескольким разработчикам работать параллельно, сохраняет историю изменений и дает возможность откатиться к предыдущей версии.

18.04.202616 мин
Развёртывание 1С на виртуальной машине: настройка и ресурсы

Развёртывание 1С на виртуальной машине: настройка и ресурсы

Виртуализация сервера 1С снижает затраты и упрощает масштабирование. Разбираем установку 1С на виртуальной машине: требования к ресурсам, выбор гипервизора, пошаговую настройку, оптимизацию производительности.

18.04.202610 мин