1.
G_113542465906431490351
13.01.24 17:20 Сейчас в теме
добрый день
В общем модуле есть процедура, которая называется «TələbnaməYoxlanışı». Внутри этого модуля есть процедура
Процедура Yoxla() Экспорт
Слова = Новый Массив;
Слова.Добавить("Bildirişlər");
\\\\\\\\\\
Есть запросы, которые заполняют Слова
\\\\\\\\\\
Для Каждого Элемент Из Слова Цикл
Сообщить(Элемент);
КонецЦикла;
Показать
однако это занимает до 40 секунд, когда я вызываю процедуру при открытии. Как я могу заставить эту процедуру работать в фоновом режиме и в сообщении, когда форма открыта?
в списке документов:
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)
1 - Оптимизируйте процедуру. Зачем у Вас 5 запросов? Сделайте вместо них один. Затем обходите выборку и сообщайте что нужно. Это значительно сократит время выполнения.
2 - Если после оптимизации все равно будет долго отрабатывать, то используйте "ПодключитьОбработчикОжидания", посмотрите как его используют, попробуйте сделать.
11.
G_113542465906431490351
22.01.24 12:00 Сейчас в теме
(9)
Проблема в том, что после добавления слов в массив каждое из них не отображается как сообщение. В фоновом процессе пользователь не может видеть сообщения. Я пытался отобразить элементы возвращаемого массива из функции экспорта в виде сообщения пользователю, но процедура уже завершилась до заполнения массива.