Процесс завершается исходящий вызов запрещен 1с

Расследование причины аварийного завершения клиентского приложения при работе с управляемой формой

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

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

Рисунок 1. Сценарий воспроизведения ошибки

На форму добавлено несколько вертикально расположенных реквизитов для того, чтобы обеспечить появление вертикальной «полосы прокрутки». Расположена группа страниц, состоящая из трех страниц (Группа7, Группа2, Группа5). В Группа5 расположены несколько реквизитов и динамический список, работающий с данными регистра сведений. В Группа2 расположены еще несколько реквизитов и еще одна группа страниц, на одной из которых расположена табличная часть документа. В Команда1 в коде изменяется видимость Группа5 и Группа6. При прокрутке вниз и выполнении команды Команда1 происходит аварийное завершение клиентского приложения. Данный пример – это результат расследования и воспроизведения проблемы на пустой базе.

Читайте также  Проблема с самонастраивающимися устройствами как исправить

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

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

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

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

Все ниже описанное касается управляемого приложения.

Начиная с версии 8.3.8 фирма 1С изменила подход к завершению работы и закрытию приложения. Новомодные веяния – ли, ошибки при работе с WEB интерфейсом – ли, но теперь со всех обработчиков событий, используемых нами при закрытии – «ПередЗавершениемРаботыСистемы» и «ПриЗавершенииРаботыСистемы», сервер не доступен. Рассмотрим, как теперь работают данные обработчики.

Обработчик: ПередЗавершениемРаботыСистемы(Отказ, ТекстПредупреждения)

Как мы помним возникает перед завершением программы, до закрытия главного окна. Если «Отказ» равен «Ложь», то программа просто закрывается, не выдавая никаких вопросов. В нем можно сделать всяческие проверки, все функции должны быть только клиентские (В процессе завершения работы приложения запрещены серверные вызовы и открытие окон.) и может быть установлен отказ от выхода из программы. И вот тут появляется первый подвох. Установление «Отказ» в Истина не отменяет выход из системы, а только указывает, что нужно выдать платформенный диалог, в котором будет предложено выйти или остаться с текстом из параметра «ТекстПредупреждения»:

Читайте также  Русская локализация bioshock infinite

Диалог завершения программы

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

Если же пользователь нажмет на «Продолжить работу», то возможны два варианта событий:

    Если вы внутри вызова функций из данной процедуры подключали обработчик ожидания

В платформе "1С:Предприятие" версии 8.3.8 и выше без использования режима совместимости изменилась модель завершения работы приложения.

Прежняя модель не поддерживала корректную работу в веб-клиенте в связи с имеющимися ограничениями браузеров.

При работе в рамках новой модели, в процессе завершения работы приложения запрещено открытие окон и выполнение серверных вызовов в следующих обработчиках:

  • ПередЗавершениемРаботыСистемы ( , ),
  • ПриЗавершенииРаботыСистемы (),
  • ПередЗакрытием ( , , , ),
  • ПриЗакрытии ( ).

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

Ссылка на основную публикацию
Adblock
detector