8.х Управляемый режим: обмен сообщениями пользователю о состоянии

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем AugustBlack, 25 окт 2011.

  1. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    Управлямый режим, некая обработка, написал 2 процедуры одна на клиенте другая на сервере.
    вызываю серверную процедуру с клиента, серверная проезжает по циклу и показывает пользователю статус загрузки через процедуру Сообщить().
    так вот: почему они выводятся разом и в самом конце работы серверной процедуры а не так как я прописал в циклах на каждый шаг т.е в реальном времени?
    можно ли как нибудь сделать вывод в реальном времени не перепиливая код??
    ps. сорри не в том разделе создал....перенесите если можно
  2. fierylions
    Offline

    fierylions Опытный в 1С

    Регистрация:
    12 апр 2011
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Есть такая особенность что выводятся одновременно и со стороны сервера сообщения и со стороны клиента обычно когда пишется вместо &НаКлиенте и &НаСервере --> &Клиент и &Сервер хоть в синтаксис помощнике написано что это одно и тоже работает правельней с приставнкой "НА".

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

    // Создаём процедуру в которой будим перебирать элементы справочника номенклатуры.
    &НаКлиенте
    Процедура ПеребратьНоменклатуру()

    //Обращаемся к серверу т.к до объекта не добраться (на клиенте существует только копия)
    ПеребратьНоменклатуруСервер();

    КонецПроцедуры

    // Создаём серверную процедуру перебора элементов справочника номенклатура
    &НаСервере
    Процедура ПеребратьНоменклатуруСервер()

    // Приравниваем переменную Выборка к справочнику номенклатуру со всеми элементам внутри.
    Выборка = Справочники.Номенклатура.Выбрать();

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

    Когда возникают определенные вопросы выкладывайте код т.к на словах понять всё намного сложней.
  3. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Да я вот думаю, что автор именно так (или похоже) и делает.

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

    Насколько я понимаю, проблему можно решить только путем многократного вызова сервера (это предположение...:)).
    Т.е. вызываете сервер - делаете часть загрузки - выводите сообщение....следующую чать...и т.д. Понятно, что тормозов не избежать...

    Плюс нашел на инфостарте такую штуку:
    http://infostart.ru/public/65665/
    Сам не смотрел (блин, пароль от своей учетки забыл (снова :)недавно только восстановил... и опять:)))
    ...ну может, что полезное для себя возьмете.
  4. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Вы как то можете прервать загрузку? Или во время загрузки вы какие то действия можете выполнять?
    Просто если вы цикл прервать не можете и интерактивных действий нет какой тогда смысл сообщать на каждой итерации?
  5. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Видимо, для того, чтобы информировать пользователя о ходе выполнения процесса...))
  6. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    1cUserAndrew да, я это имел ввиду, а та обработка платная даже =(
    Спасибо, наверное нету смысла сообщать о каждой итерации. Многие так сказали, а перепиливать код для вывода по порциям нет времени и желания, да и увеличение количества вызовов сервера не есть хорошо. Просто хотелось пользователю сделать удобнее, но теперь все можно свалить на архитектуру =)
  7. fierylions
    Offline

    fierylions Опытный в 1С

    Регистрация:
    12 апр 2011
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Проверил вы правы. Я не внимательно прочитал вопрос.

Поделиться этой страницей