Многозадачность в 7.7. У меня глюк или я что-то не знаю. #535224


#0 by dzemon666
Ситуация: Внешний отчет: 1шт. Зашел в базу, под своим именем (проверил 700 раз), больше ни кто под моим именем не заходил (проверил 800 раз), база не терминальном сервере , под моим пользователем винды "Администратор" никто не работает(проверено 1000 раз). Запускаю внешний отчет. (Файл-открыть). Отчет сразу (в процедуре ПриОткрытии) начинает лопатить. + Имеется строка СтатусВозврата, что бы не появлялась форма. Через некоторое время (5 секунд), я могу спокойно лазить в 1с : по меню, просматривать документы, проводить, удалять и т.д. НО! Через отладчик смотрю - обработка работает на всю. Точки останова работают, 1с Предприятие останваливается тоже - все по правилам. Убираем точку останова, прождолжаем по F5 - все снова вертиться, можно снова лазить по 1С-ке, удалять...проводить.. и т.д. Но мой внешний отчет все еще работает и даже выдает сообщения!!. ОбработкаОжидания не используется 100%. (проверено мильйон раз). Я какбы чота не знаю?
#1 by dzemon666
База SQL.
#2 by andrewks
выкладывай свою чудо-обработку
#3 by dzemon666
Внешний отчет работает долго (1,5 часа), это так и надо.
#4 by mikecool
а отчет с телом ч = 1 * 1 ?
#5 by dzemon666
расшифруй пжлст. Если ты про размер мобуля отчета, то он большой.
#6 by dzemon666
Щас, пока не могу достучаться через конфигуратор к обработке, пишет Файловая ошибка.
#7 by dzemon666
Общая файловая ошибка.. но такое бывает. Через 5 минут текст выложу.
#8 by dzemon666
Вот какбы текст процедуры КонецПроцедуры Остальное приводить смысла не вижу. Там бух запросы, в итоге формируется и проводиться документ. Я оказывается даже СтатусВозврата закоментил. О_о. куды ж тогда форма внешнего отчета девается. Магнитных бурь на солнце нет. Сервер перезагружал. Воооообщем пойдука я выпью.
#9 by Aleksey
На форме есть кнопки? Или голая форма?
#10 by Skom
+ если ты не видишь суслика, не значит что его нет. СЛОИ проверь еще
#11 by dzemon666
В модуле 3-и поцедуры Кнопки на форме: Свормировать "запускает СформироватьПотм" проверил Закрыть "запускает #Закрыть" Текстовые метки , без формул Поле ввода ПредСумма, число. Щас сижу играюсь с многозадачностью, прикольно. Мож дисертацию на єту тему написать? :-)
#12 by dzemon666
Слой один "Основной"
#13 by 1Сергей
Пока в обработке выполняется ПриОткрытии, ты его не можешь ни открыть в конфигураторе, ни изменить
#14 by Skom
офф я сначала прочел как долго думал. много смеялся
#15 by Sh1ko
что в ней?
#16 by andrewks
ВК какие используются? и кстати откуда тогда берётся СформироватьНов?
#17 by Aleksey
Боюсь ты не будешь первым. Так как это известный баян. формулы выполняются в фоне
#18 by andrewks
СтатусВозврата
#19 by dzemon666
Щас у меня выводиться слово "Привет" с задержкой в секунд 7-10, для задержки использовал бух запрос, с немного меняющимися параметрами!. То  есть сообщить("Привет"); и бух запрос находятся в ОДНОМ ЦИКЛЕ. Сообщения пишутся ,а я в этот момент какой-то документ просматриваю. Ничо нипонятно.
#20 by vS
а из СформироватьНов то она выходит? или поди так так и кружится?
#21 by andrewks
черепашка утверждает, что формул нет!
#22 by dzemon666
отчет отлично отрабатывает ввереный ему алгоритм, формирует Документ и закрывает 1с.
#23 by dzemon666
Я ща всё удалю с формы.
#24 by dzemon666
Все работает. Форма отчета так и не появляется.
#25 by iamnub
Ну вот. Оказывается - в клюшках есть нативная многозадачность.
#26 by dzemon666
Форма идеально чистая, как сферический конь в вакууме.
#27 by andrewks
я понял. проблема в нике
#28 by dzemon666
Я начал переживать, а не накроется ли у меня сегодня все большой пятой точкой.
#29 by vS
ваакуме
#30 by dzemon666
Садись, двойка.
#31 by dzemon666
-
#32 by vS
ты уж определись, что кому :) а то я начал переживать, что тема закроется... и предложил новую ;)
#33 by dzemon666
что в ней? Таковая отсутсвует. П.С. Играюсь как маленький ребёнок, щас я ее все-таки заглючу.
#34 by АЛьФ
Старейший глюк...
#35 by Злопчинский
и в чем он заключается??? и как его использовать на благо? .
#36 by Aleksey
Как на благо - так и не нашли
#37 by andrewks
чо за баян-то?
#38 by Темный Эльф
При удалении помеченных недавно тоже такое было. Оно себе ищет ссылки на 200000 объектов, а тем временем можно по меню ходить, отчеты формировать.
#39 by Толич
Впервые о таком слышу. Просто баг платформы какой-то.
#40 by НП
Форма не появится никогда. Когда обработка в процедуре ПриОткрытии закончится, система закроется.
#41 by Злопчинский
про это я знаю... а вот как добиться эффекта у автора?
#42 by Mashinist
сделай тестовую обработку и выложи с пустыми циклами и сообщениями народ жаждет увидеть
#43 by Aleksey
Не совсем параллельный процесс, так просто имитация. Такой себе фокус. См. файл.
#44 by Aleksey
Кому интересно советую начать чтения отсюда и по ссылке из той ветки Очень много вещей по этой теме там раскрыто
#45 by Torquader
Например, если в 1С из другого приложения послать DDE запрос, то он выполняется в момент перехода с одной строки кода на другую, то есть в прерывание основного процесса. Что касается параллельного выполнения, то ОбработкаОжидания может выполняться в момент работы пользователя с формой. То есть в данном случае сообщения от формы вклиниваются в поток выполнения кода - соответственно - возможность выполнения более одного участка кода существует (точнее существует возможность обработки действий пользователя в момент выполнения кода). Не стоит забывать, что Windows допускает для оконной процедуры начинать обработку новых сообщений, пока не завершилась обработка старых, если сообщения приходят от разных потоков, а при общении с отладчиком, например, 1С обменивается сообщениями через очередь сообщений (и с любым OLE-объектом в другом процессе тоже), то есть для работы 1С нужна работа очереди сообщений, но события пользователя (кроме нажатия Esc), 1С "отбрасывает", то есть она ввод пользователя обрабатывает - далее, каким-то образом флаг "отброса" сбрасывается - и получаем некое подобие многозадачности. P.S. если из системы посылать в 1С сообщения в оконную процедуру, то у меня, например, получалось заставить 1С пересчитать бухгалтерские итоги в момент проведения документа - точнее в момент перехода со строки на строку - если выполняемый код (например, цикл) записать в одну строку, то ни DDE-запрос ни "чудный" вызов оконной процедуры не срабатывает (видимо, при переходе между строками 1С пытается что-то сообщить отладчику и "лазит" в очередь сообщений). Также надо понимать, что параллельного исполнения нет - есть вклинивание одного вызова между строками другого (нечто подобное происходит, когда мы выполняем ОткрытьФорму - идёт создание нового контекста и выполнение ПриОткрытии формы в этом контексте, а потом идёт возврат в вызвавший код - если же форма модальная, то идёт работа формы в новом контексте). То есть, изначально в 1С была реализована смена контекстов, то есть возможность иметь несколько исполняемых модулей. Для реальной же многозадачности необходимо, чтобы два контекста исполнялись паралельно, а не один вклинивался в другой, а вот это уже 1С делать не умеет.
#46 by smaharbA
ПриНачалеРаботыСистемы
#47 by smaharbA
нафига столько букв адинес всегда была многопоточна иначе и не могло быть
#48 by Злопчинский
(46047) Помедленнее, я записываю.. диктуйте!
#49 by Torquader
Всё-таки, многозадачность и многопоточность - это немного разные вещи, хотя запустив 1С мы видим, что число исполняемых потоков - 3. Открыв какую-нить обработку мы видим, что число потоков начинает расти, то есть можно предполагать, что для каждой обработки и контекста создаётся свой поток (а почему бы и нет - ведь так проще хранить данные - а исполнение регулировать семафорами)
#50 by orefkov
Огорчу - вся основная работа в 1С - выполняется в одном потоке. Все остальные потоки, которые вы видите - создает MFC и прочие библиотеки сугубо для своих служебно-внутренних целей.
#51 by Злопчинский
так сказать "оборотни в погонах"
#52 by Torquader
Да не только MFC, например, вызов простого диалога открытия файла вызывает создание потока для прорисовки формы выбора. Но, тот факт, что никоим образом нельзя заставить 1С выполнять одномоментно несколько инструкций кода говорит о том, что для исполнения кода встроенного языка используется только один поток, а то, что в исполнение кода можно "вклинить" исполнение другого кода, как раз это только и подтверждает. Обидно, только, что ОбработкаОжидания имеет интервал не менее одной секунды.
#53 by DJ Anthon
у меня точно так же было, я здесь писал. меня идиотом назвали ))) повторить не могу сей баг
#54 by DJ Anthon
у меня даже последовательность восстанавливалась и я спокойно мог ходить по доументам и даже проводить их.
#55 by Cthulhu
так и не дождался связного изложения способов реализации, моментов и условий появления (и - памятуя о заявлении АЛьФ-а - опасности этого "глюка"). а жаль.
#56 by Torquader
В общем так, если запустить в 1С обработку, то она там что-то выполняет (например, бесконечный цикл, но обязательно должен быть переход со строки на строку - иначе ничего не выйдет). Потом можно 1С послать через WM_COMMAND какую-то команду меню - она начинает её отрабатывать (а обработка знай себе выполняется). Только вот большинство команд (я пробовал, например, создать новый текст - самая первая команда) - Windows мёртво зависает на обработке событий ввода (такое с 1С бывает иногда само по себе, а вот при "параллельной" работе - только в путь).
#57 by Torquader
Также проверено, что код, выполняемый через ОбработкаОжидания хоть и может исполняться в фоне (когда идёт работа с другой формой), но как раз его исполнение намертво вешает 1С и интерфейс не отвечает, пока обработка не завершится. Если же запускать из формы (по кнопке), то потом можно посылать команды меню - они прекрасно отрабатываются, и даже можно открыть калькулятор и календарь, которые работают. С остальными формами такого не получается - открыть можно всё, но ввод блокирован (то есть система ждёт нажатия Esc для прерывания кода) - процедуру, где выполняется переключение ожидания - пока найти не удалось, но это надо смотреть отладчиком внутри кода 1С - где-то должен проверяться флаг исполнения. Если код разместить в одной строке (то есть бесконечный цикл while 1=1 do i=i+1;enddo;), то никакой обработки добиться нельзя - 1С намертво висит и на Esc не реагирует. То есть "видимая" многозадачность связана с тем, что 1С ожидает от пользователя нажатия Esc в момент перехода с одной строки кода на другую. Если долго исполняется только одна строка, то 1С в системную очередь сообщений не лазит, и операционная система считает приложение "зависшим" (появляется сообщение "Не отвечает"). В общем, вывод - непрерываемый пользователем код нужно писать в одной строке.
#58 by Злопчинский
> В общем, вывод - непрерываемый пользователем код нужно писать в одной строке. - запомнить!
#59 by Ёпрст
дык баян же.. воспоизводится легко и непринужденно на любой базе.
#60 by Ёпрст
не угадал..
#61 by Ёпрст
-->
#62 by NikVars
Закладка.
#63 by Cthulhu
: связно изложенного баяна не увидал есичо - об том и плач.
#64 by DGorgoN
Многозадачность в 1с реализуется просто если работать с отчетами - берез спец. пользователя, под ним запускается 1с и в случае передачи информации для обработки обрабатываем и скидываем результат куда нибудь, а уже в реальной базе ждем ответ по обработке ожидания :)
#65 by Cthulhu
: так не видно хода выполнения и с обработкой расшифровок не всегда нормально.
#66 by Ёпрст
короче, запуск любой внешней обработки (просто ОткрытьФорму)  из операторов основной программы в глобальнике будет идти в "фоне".
#67 by Torquader
Можно между сеансами файлами перекидываться - у меня так работает - и достаточно быстро.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С