Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Истинная многопоточность в 1С (число прочтений - 371 )
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Истинная многопоточность в 1С
11. Октября 2011 :: 12:05
Печать  
Для начала попробуйте в любой базе запустить следующий код (или запустить приаттаченную обработку):

Код
Выбрать все
Перем Система;

Процедура UserMessage(Т)
	Сообщить(Т);
КонецПроцедуры

Функция GetObject(Т)
	Возврат СоздатьОбъект(Т);
КонецФункции

Процедура Сформировать()

	ИмяФайла=КаталогВременныхФайлов()+"test.vbs";

	ТекстСкрипта="
	|Set Kont = GetObject("""+Система.Сериализовать(Контекст)+""")
	|Set Doc = Kont.GetObject(""Документ"")
	|Doc.SelectDocuments
	|Do While Doc.GetDocument = 1
	|	Doc.Write
	|	Kont.UserMessage Doc.KindPresent & "" № "" & Doc.DocNum & "" от "" & Doc.DocDate
	|Loop
	|";

	Текст=СоздатьОбъект("Текст");
	Для Инд=1 По СтрКоличествоСтрок(ТекстСкрипта) Цикл
		Текст.ДобавитьСтроку(СтрПолучитьСтроку(ТекстСкрипта,Инд));
	КонецЦикла;

	Текст.Записать(ИмяФайла);

	WshShell=СоздатьОбъект("WScript.Shell");
	WshShell.Run(ИмяФайла,0);

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

Процедура ПриОткрытии()
	Система=СоздатьОбъект("Система");
КонецПроцедуры 



Что мы имеем? У нас начинают последовательно перезаписываться документы (можно было и перепровести), с сообщением о каждом обработанном документе. Во время обработки мы можем спокойно работать: открывать другие окна, формировать другие отчеты, проводить другие документы и т.д. - то есть что угодно, обработке перезаписи документов это не мешает, она продолжает молотить и молотить, ей не мешают даже модальные окна и запросы. Главное - не закрывать окно обработки, так как скрипт потеряет контекст открытой формы и мы получим ошибку.

Я пробовал даже запускать несколько таких обработок, они все работают параллельно и не мешают ни друг другу, ни 1С. Это многопоточность? Не знаю как вам, но в моем представлении - да.

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

Так как увы я в С++ не силен, у меня есть просьба-предложение к знающим людям: отладьте наконец метод "Сериализовать", и мы получим то, чего зачастую так не хватает - многопоточность в 1С без вылетов и глюков.
  

_____005.ert (Вложенный файл удалён)
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать