7.7 Процедурка ОбработкаОжидания() обнуляет поля :(

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Asttoxa, 7 ноя 2012.

  1. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    В глоб. модуле стоит ОбработкаОжидания() из которой каждые 5 мин запускается внешняя обработка. Занимает менее секунды поэтому пользователи ее не замечают, но если при запуске этой обработки пользователь печатает в текстовом поле чтолибо, вернее после прохода этой обработки все напечатанное выделяется. А так как у нас большинство печатает глядя на клавиатуру все благополучно стирается заменяется новым текстом :((( Люди жалуются! что по нескольку раз приходится набирать. Можно ли как нибудь убрать данный факт?
    Спасибо.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Что за внешняя обработка? Функции?
  3. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    Быстрый просмотр "горячих" документов, методом запроса. И если таковые имеются выдавать предупреждение. Если отсутствуют "горячки" то выход методом СтатусВозврата(0) и все. Могу кинуть текст если нужно.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    скиньте. Похоже вы обработкой "цепляете" открытый документ
  5. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    Да вроде нет таких моментов.
    Код:
    Функция ЕстьНеСогласованные(Док)
    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку()=1 Цикл
    Если Док.Разрешение=1 Тогда
    Возврат 1;
    КонецЕсли;
    КонецЦикла;	  
    Возврат 0;
    КонецФункции
    Процедура Сформировать2(Док)
    КолДок = 0;
    КолОжидДок = 0;
    КолГотДок = 0;
    
    ПодчДок=СоздатьОбъект("Документ");
    ПодчДок.ВыбратьПодчиненныеДокументы(,,Док);
    Пока ПодчДок.ПолучитьДокумент()=1 Цикл
    Если ПодчДок.Вид()<>"НЗ_Картриджей" Тогда
    Продолжить;
    КонецЕсли;
    
    КолДок=КолДок+1;
    
    Если (ПодчДок.Статус=Перечисление.СтатусыНарядов.Готов)или(ПодчДок.Статус=Перечисление.СтатусыНарядов.Оформлен) Тогда
    КолГотДок=КолГотДок+1;
    КонецЕсли;
    
    Если (ПодчДок.Статус=Перечисление.СтатусыНарядов.Ожидание) Тогда
    Если ЕстьНеСогласованные(ПодчДок)=1 Тогда
    КолОжидДок=КолОжидДок+1;
    КонецЕсли;
    КонецЕсли;
    
    КонецЦикла;
    
    Если КолДок=КолГотДок Тогда
    СписокГотовых.ДобавитьЗначение(Док);
    ИначеЕсли КолДок-КолГотДок=КолОжидДок Тогда							   
    СписокЗапроса.ДобавитьЗначение(Док);
    КонецЕсли;
    
    КонецПроцедуры
    //*******************************************
    // Процедура генерации запроса Сформировать.
    //
    // Процедура генерации запроса ПолучитьСписокДокументов.
    //
    Процедура ПолучитьСписокДокументов()
    Перем Запрос, ТекстЗапроса;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(ПолучитьСписокДокументов)
    |ОбрабатыватьДокументы НеПроведенные;
    |Обрабатывать НеПомеченныеНаУдаление;
    |ЗаявкаОборотаКартриджей = Документ.ЗаявкаОборотаКартриджей.ТекущийДокумент;
    |Статус = Документ.ЗаявкаОборотаКартриджей.Статус;
    |Группировка ЗаявкаОборотаКартриджей;
    |Условие(Статус = Перечисление.СтатусыОборотаКартриджей.ВСервис);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    // Подготовка к заполнению выходных форм данными запроса
    // Заполнение полей "Заголовок"
    
    Отчет="";
    
    Пока Запрос.Группировка(1) = 1 Цикл
    Сформировать2(Запрос.ЗаявкаОборотаКартриджей);
    КонецЦикла;
    
    
    //Предупреждение(Отчет,30);
    // Вывод заполненной формы
    КонецПроцедуры
    
    Процедура РаботаСтаблицей(Реж)
    Если Реж=1 Тогда
    ОткрытьФорму(СписокЗапроса.ПолучитьЗначение(СписокЗапроса.ТекущаяСтрока())); 
    ИначеЕсли Реж=2 Тогда
    ОткрытьФорму(СписокГотовых.ПолучитьЗначение(СписокГотовых.ТекущаяСтрока())); 
    КонецЕсли;
    КонецПроцедуры
    Процедура ПриОткрытии()
    Состояние("Проверка картриджей...");
    ПолучитьСписокДокументов();
    Если (СписокЗапроса.РазмерСписка()=0)и(СписокГотовых.РазмерСписка()=0) ТОгда
    СтатусВозврата(0);
    КонецЕсли;
    КонецПроцедуры
    
  6. ZaharovAleksandr
    Offline

    ZaharovAleksandr

    Регистрация:
    17 авг 2012
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    1
    У меня такая проблема так и осталась. Решения не нашел. А обработчик ожидания вызывает процедуру каждую минуту. Пишешь что-нибуть в поле текстового назначения, далее БАЦ ОбработкаОжидания(), некие действия, сообщения или даже если
    просто прервать процедуру, все равно по окончании обработки то поле, в котором ты располагаешься полностью выделяется, по типу перехода между реквизитами текстового назначение TAB-ом. Здесь проблема не в модуле, а в самой 1с.
    Ситуация Asstoxи полностью совпадает с моей. Ранее я описывал проблему в теме:
    http://www.1c-pro.ru/topic44529.html
    Но, к сожалению, ни к чему так и не пришел.
  7. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    Ой как обидно. :(
  8. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    Вообщем обратил внимание, что выделяется поле текста при выполнении запроса!
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    А не проще ли обработку запуска вообще в отдельной сессии? Создаем пользователя "робот" и только под ним выполняется обработка.
  10. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    Проще но нужно, чтобы не у робота показывалось сообщение, а у пользователей!
  11. GlukAl
    Offline

    GlukAl Опытный в 1С

    Регистрация:
    4 окт 2012
    Сообщения:
    187
    Симпатии:
    7
    Баллы:
    29
    Код:
    Процедура ПриОткрытии()
    //
    //
    СтатусВозврата(0);
    Возврат;
    //
    КонецПроцедуры
  12. evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Я у себя для похожих целей всётаки завёл отдельного пользователя "робот" в отдельном сеансе. И я вижу что в нём очень не удобно работать человеку, сеанс постоянно "моргает", правда у меня ОбработкаОжидания() запускается каждые 4 секунды.
    Я у себя реализовал такую фишку: все сообщения от робота к пользователям (например о наличии "горячих" документов) идут через ICQ (я делал это ради других целей, но и проблему "моргания" экрана у пользователей это в том числе решает)
    Думаю можно придумать и другие способы сообщения от робота пользователям
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    А у меня сообщения для пользователей "валятся" в каталог пользователя. И оттуда уже через ту же обработку ожидания выводятся на экран.

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