8.х ОбработкаПрерыванияПользователя() и Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

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

  1. TopicStarter Overlay
    dimastik
    Offline

    dimastik

    Регистрация:
    27 апр 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Столкнулся с тем что при запуске внешней простой обработки с автоматическим стартом нужной процедуры не работает ОбработкаПрерыванияПользователя.

    Заодно и не обновляется окно системных сообщений и статус если окно 1С свернуть и развернуть.

    Видимо из-за того что форма не отображается на экране.


    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

    Отказ = Истина;
    Выгрузить();

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

    Даже если заставить форму появится на экране используя
    ПриОткрытии()
    ПодключитьОбработчикОжидания("Выгрузить",1,Истина);

    Ничего не меняется!


    Прерывается только когда запуск процедуры происходит по нажатию Кнопки на Форме.

    Есть выход из этой ситуации?

    Применение

    Процедура ПриОткрытии()
    Shell = Новый COMОбъект("WScript.Shell");
    Shell.SendKeys("^{ENTER}");
    КонецПроцедуры

    Позволяет решить проблему только для обработки запущенной первой.
    Обработки запущенные следом из коммандной строки не реагируют.
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    для чего такой изврат?
  3. TopicStarter Overlay
    dimastik
    Offline

    dimastik

    Регистрация:
    27 апр 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    1. Обработки выгружают первичную статистику в нужном формате на др. SQL-сервер где данные консолидируются с данными прошлой системы (не 1С)

    2. На этапе внедрения еще нет возможности уговорить программеров/админа поместить код в общий модуль и регламентные задания.

    3. Обработка запускается как по расписанию из коммандной строки так и в ручном режиме. При запуске в ручном режиме хочется сохранить контроль над процессом.

    >>По факту просто стало интересно - можно такое в 1С или нет :angry:
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    ОбработкаПрерыванияПользователя() предназначена для интерактивного прерывания работы кода, поэтому логично, что, запуская обработку без формы, оно может не работать.

    Если обработка запускается в ручном режиме, то зачем сразу запускать её выполнение?
  5. TopicStarter Overlay
    dimastik
    Offline

    dimastik

    Регистрация:
    27 апр 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Вы предлагаете иметь 2 версии обработки? "ручную" и авто!
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    можно и одну, главное разобраться для чего нужно прерывание обработки
  7. TopicStarter Overlay
    dimastik
    Offline

    dimastik

    Регистрация:
    27 апр 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Ну, например, для внесения изменения в "настройки" ограничивающие объем выгружаемых данных.
    Иначе придется вносить изменения в код...
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    настройки каждый раз разные? как тогда в автоматическом режиме выполняется обработка?
  9. TopicStarter Overlay
    dimastik
    Offline

    dimastik

    Регистрация:
    27 апр 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Нет конечно, не каждый раз.

    Но бывают редкие исключения когда надо изменить период или состав вхождения в иерахию.

    Но суть не столько в этом, а больше в возможности получить 2 в одном.

    Это возможно? и как... :angry:
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    эээээ....экспортные процедуры пишем в модуле обработки - это даст возможность делать в автоматическом режиме с помощью регламентных заданий, а интерактивный запуск - это частный случай запуска в автоматическом режиме.
  11. TopicStarter Overlay
    dimastik
    Offline

    dimastik

    Регистрация:
    27 апр 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Т.е никак 2 в одном, запуская обработку с машины клиента не получить ...
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    а каким образом происходит запуск в автоматическом режиме?
  13. TopicStarter Overlay
    dimastik
    Offline

    dimastik

    Регистрация:
    27 апр 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    в обработке
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

    Отказ = Истина;
    Выгрузить();

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

    Ну а дальше на машине клиента в назначенных заданиях строка запуска вида

    "C:\Program Files\1cv82\common\1cestart.exe" /S td-1capp\td /AppAutoCheckMode /AppAutoCheckVersion /Execute "C:\_ 1C\_ Выгрузка на SQL.epf"
  14. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    В модуле обработки разместите все процедуры и функции и после напишите Выгрузить() - форму открывать вообще не нужно.

    другими словами модуль обработки будет выглядеть структурно так:

    Перем перем1;
    Перем Перем2 Экспорт;

    Процедура Выгрузить() Экспорт
    .........
    .........
    КонецПроцедуры

    ПРоцедура <ДругаяПроцедура>
    ...........
    ............
    КонецПроцедуры

    Функция <Функция>
    ..........
    ...........
    КонецФункции


    Выгрузить();

    Это будет автоматический вариант.

    Для интерактивного - нужно убрать Выгрузить() из модуля обработки и На форме делаем кнопку типа "выполнить" и в коде обработки нажатия пишем Выгрузить().

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

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