добавление фонового процесса

1. G_113542465906431490351 13.01.24 17:20 Сейчас в теме
добрый день
В общем модуле есть процедура, которая называется «TələbnaməYoxlanışı». Внутри этого модуля есть процедура
Процедура Yoxla() Экспорт
Слова = Новый Массив;
Слова.Добавить("Bildirişlər");
\\\\\\\\\\
Есть запросы, которые заполняют Слова 
\\\\\\\\\\
Для Каждого Элемент Из Слова Цикл	
	
	Сообщить(Элемент);
	
		
	КонецЦикла;	
Показать



однако это занимает до 40 секунд, когда я вызываю процедуру при открытии. Как я могу заставить эту процедуру работать в фоновом режиме и в сообщении, когда форма открыта?
в списке документов:
&НаСервереБезКонтекста
Процедура ПриОткрытииНаСервере()
TələbnaməYoxlanışı.Yoxla();    
 	 
КонецПроцедуры	


&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПриОткрытииНаСервере();
КонецПроцедуры
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1880116 13.01.24 18:37 Сейчас в теме
(1)
процедура, которая называется «TələbnaməYoxlanışı».
Я дальше даже разбираться не буду.
3. G_113542465906431490351 15.01.24 11:57 Сейчас в теме
имя модуля — TələbnaməYoxlanışı. Это модуль, который я создал. Существует только одна процедура, которая называется «Yoxla()».
4. PowerBoy 3365 15.01.24 12:33 Сейчас в теме
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания("ОбновитьПриОткрытии",1,Истина);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьПриОткрытии() Экспорт
ПриОткрытииНаСервере();
КонецПроцедуры
Показать
Fox-trot; +1 Ответить
5. Fox-trot 158 15.01.24 12:48 Сейчас в теме
(4) секунды имхо многовато ))
6. user1880116 15.01.24 12:53 Сейчас в теме
(4) А где тут "фоновый процесс", за который ТС спрашивает?
7. G_113542465906431490351 16.01.24 12:08 Сейчас в теме
Запрос в процедуре, которая написана в "общие модули".
(6)
Процедура Yoxla() Экспорт
	

	 	
	Слова = Новый Массив;
	Слова.Добавить("Bildirişlər");
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
		|	ПоступлениеТоваровУслугТовары.Номенклатура.Артикул КАК НоменклатураАртикул,
		|	ПоступлениеТоваровУслугТовары.Автомобиль КАК Автомобиль,
		|	ПоступлениеТоваровУслугТовары.Ссылка.Дата КАК Дата,
		|	ПоступлениеТоваровУслугТовары.Ссылка.ОтветственныйПоставщик.Наименование КАК ОтветственныйПоставщикНаименование,
		|	ПоступлениеТоваровУслугТовары.Количество КАК Количество
		|ИЗ
		|	Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		|ГДЕ
		|	ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &Дата И &Дата2
		|	И ПоступлениеТоваровУслугТовары.Ссылка.ОтветственныйПоставщик.Наименование <> ""Rəhbərlik""
		|	И ПоступлениеТоваровУслугТовары.Автомобиль.Наименование <> ""Anbar""";
	
	Запрос.УстановитьПараметр("Дата", Дата('2023.12.01 00:00:00'));
	Запрос.УстановитьПараметр("Дата2", ТекущаяДата()-60*60*24*2);

	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	Alfa = 0;
	Beta = 0;
	
	
		Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВозвратТоваровПоставщикуТовары.Номенклатура КАК Номенклатура
		|ИЗ
		|	Документ.ВозвратТоваровПоставщику.Товары КАК ВозвратТоваровПоставщикуТовары
		|ГДЕ
		|	ВозвратТоваровПоставщикуТовары.Номенклатура = &Номенклатура
		|	И ВозвратТоваровПоставщикуТовары.Количество = &Количество
		|	И ВозвратТоваровПоставщикуТовары.Ссылка.Дата > &Дата";
	
	Запрос.УстановитьПараметр("Дата", ВыборкаДетальныеЗаписи.Дата);
	Запрос.УстановитьПараметр("Количество", ВыборкаДетальныеЗаписи.Количество);
	Запрос.УстановитьПараметр("Номенклатура", ВыборкаДетальныеЗаписи.Номенклатура);
	
	Резуль = Запрос.Выполнить().Выбрать();
	

	
	Пока Резуль.Следующий() Цикл
	Alfa = 1;
	КонецЦикла;

	
	
	
	
		Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
		|ИЗ
		|	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
		|ГДЕ
		|	РеализацияТоваровУслугТовары.Номенклатура = &Номенклатура
		|	И РеализацияТоваровУслугТовары.Количество = &Количество
		|	И РеализацияТоваровУслугТовары.Автомобиль = &Автомобиль
		|	И РеализацияТоваровУслугТовары.Ссылка.Дата >= &Дата";
	
	Запрос.УстановитьПараметр("Автомобиль", ВыборкаДетальныеЗаписи.Автомобиль);
	Запрос.УстановитьПараметр("Дата", ВыборкаДетальныеЗаписи.Дата);
	Запрос.УстановитьПараметр("Количество", ВыборкаДетальныеЗаписи.Количество);
	Запрос.УстановитьПараметр("Номенклатура", ВыборкаДетальныеЗаписи.Номенклатура);
	
	Результат = Запрос.Выполнить().Выбрать();
	

	
	Пока Результат.Следующий() Цикл
	Alfa = 1;
	КонецЦикла;

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура
		|ИЗ
		|	РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки
		|ГДЕ
		|	ПартииТоваровНаСкладахОстатки.Номенклатура = &Номенклатура
		|	И ПартииТоваровНаСкладахОстатки.ДокументОприходования.Дата < &Дата
		|	И ПартииТоваровНаСкладахОстатки.КоличествоОстаток > 0";
	
	Запрос.УстановитьПараметр("Дата", ВыборкаДетальныеЗаписи.Дата);
	Запрос.УстановитьПараметр("Номенклатура", ВыборкаДетальныеЗаписи.Номенклатура);
	
	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	
	
	Пока РезультатЗапроса.Следующий() Цикл
	
	Для Каждого Элемент Из Слова Цикл		
	Если Элемент = "" + ВыборкаДетальныеЗаписи.ОтветственныйПоставщикНаименование + "-" + ВыборкаДетальныеЗаписи.Номенклатура + " " + ВыборкаДетальныеЗаписи.НоменклатураАртикул+" " + "Anbarda olan mal alınıb" тогда
	Beta = 1; 
	КонецЕсли;
	КонецЦикла;
	
	Если Beta = 0 и  Alfa = 0 тогда
	Слова.Добавить("" + ВыборкаДетальныеЗаписи.ОтветственныйПоставщикНаименование + "-" + ВыборкаДетальныеЗаписи.Номенклатура + " " + ВыборкаДетальныеЗаписи.НоменклатураАртикул+" " + "Anbarda olan mal alınıb");
	КонецЕсли;
	
	КонецЦикла;
	
	
	
		//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
		|ИЗ
		|	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
		|ГДЕ
		|	РеализацияТоваровУслугТовары.Номенклатура = &Номенклатура
		|	И РеализацияТоваровУслугТовары.Количество = &Количество
		|	И РеализацияТоваровУслугТовары.Автомобиль = &Автомобиль
		|	И РеализацияТоваровУслугТовары.Ссылка.Дата >= &Дата";
	
	Запрос.УстановитьПараметр("Автомобиль", ВыборкаДетальныеЗаписи.Автомобиль);
	Запрос.УстановитьПараметр("Дата", ВыборкаДетальныеЗаписи.Дата);
	Запрос.УстановитьПараметр("Количество", ВыборкаДетальныеЗаписи.Количество);
	Запрос.УстановитьПараметр("Номенклатура", ВыборкаДетальныеЗаписи.Номенклатура);
	
	Результат = Запрос.Выполнить().Выбрать();
	
	
	Пока Результат.Следующий() Цикл
	Alfa = 1;
	КонецЦикла;

	 	//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
	
	
	//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

	
	Если Alfa = 0 тогда
	 Слова.Добавить(ВыборкаДетальныеЗаписи.ОтветственныйПоставщикНаименование + "-" + ВыборкаДетальныеЗаписи.Номенклатура + " " + ВыборкаДетальныеЗаписи.НоменклатураАртикул+" " + ВыборкаДетальныеЗаписи.Автомобиль + " üçün gəlib və Anbarda qalıb(Avtomobil üçün satışa getməyib)");	
	КонецЕсли;
	КонецЦикла;
	
	
	
	
	
	Для Каждого Элемент Из Слова Цикл	
	
	Сообщить(Элемент);
	
		
	КонецЦикла;	
	КонецПроцедуры

Показать


Это только экспортирует сообщение пользователю. Как мы можем вызвать запрос в фоновом процессе и когда он будет выполнен, пользователю будет показано сообщение? Поэтому, когда пользователи хотят открыть список документов, им не нужно ждать завершения процедуры.
Прикрепленные файлы:
8. G_113542465906431490351 18.01.24 16:22 Сейчас в теме
кто-нибудь знает ответ на этот вопрос?
10. ActionBlog 19.01.24 09:36 Сейчас в теме
(8)
1 - Оптимизируйте процедуру. Зачем у Вас 5 запросов? Сделайте вместо них один. Затем обходите выборку и сообщайте что нужно. Это значительно сократит время выполнения.
2 - Если после оптимизации все равно будет долго отрабатывать, то используйте "ПодключитьОбработчикОжидания", посмотрите как его используют, попробуйте сделать.
9. comptr 31 19.01.24 08:12 Сейчас в теме
Процедура выполняется на сервере, но не в фоновом процессе. Перепишите на использование фоновых заданий, тогда интерфейс не будет тормозить.
Пример использования фоновых заданий:
https://infostart.ru/1c/articles/1102674/
https://infostart.ru/1c/articles/341698/
11. G_113542465906431490351 22.01.24 12:00 Сейчас в теме
(9)
Проблема в том, что после добавления слов в массив каждое из них не отображается как сообщение. В фоновом процессе пользователь не может видеть сообщения. Я пытался отобразить элементы возвращаемого массива из функции экспорта в виде сообщения пользователю, но процедура уже завершилась до заполнения массива.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот