|
Слишком много фактических параметров | ☑ | ||
---|---|---|---|---|
0
SavageRoman
12.02.18
✎
21:28
|
#Область СлужебныеПроцедурыИФункции
Процедура КонтрольДлительныхОпераций() Экспорт АктивныеДлительныеОперации = ДлительныеОперацииКлиент.АктивныеДлительныеОперации(); Если АктивныеДлительныеОперации.Обработка Тогда Возврат; КонецЕсли; АктивныеДлительныеОперации.Обработка = Истина; Попытка ПроконтролироватьДлительныеОперации(АктивныеДлительныеОперации.Список); АктивныеДлительныеОперации.Обработка = Ложь; Исключение АктивныеДлительныеОперации.Обработка = Ложь; ВызватьИсключение; КонецПопытки; КонецПроцедуры Процедура ПроконтролироватьДлительныеОперации(АктивныеДлительныеОперации) ТекущаяДата = ТекущаяДата(); // дата сеанса не используется КонтролируемыеОперации = Новый Соответствие; ЗаданияДляПроверки = Новый Массив; ЗаданияДляОтмены = Новый Массив; Для каждого ДлительнаяОперация Из АктивныеДлительныеОперации Цикл ДлительнаяОперация = ДлительнаяОперация.Значение; ОперацияОтменена = Ложь; Если ДлительнаяОперация.ФормаВладелец <> Неопределено И Не ДлительнаяОперация.ФормаВладелец.Открыта() Тогда ОперацияОтменена = Истина; КонецЕсли; Если ДлительнаяОперация.ОповещениеОЗавершении <> Неопределено И ТипЗнч(ДлительнаяОперация.ОповещениеОЗавершении.Модуль) = Тип("УправляемаяФорма") И Не ДлительнаяОперация.ОповещениеОЗавершении.Модуль.Открыта() Тогда ОперацияОтменена = Истина; КонецЕсли; Если ОперацияОтменена Тогда КонтролируемыеОперации.Вставить(ДлительнаяОперация.ИдентификаторЗадания, ДлительнаяОперация); ЗаданияДляОтмены.Добавить(ДлительнаяОперация.ИдентификаторЗадания); ИначеЕсли ДлительнаяОперация.Контроль <= ТекущаяДата Тогда КонтролируемыеОперации.Вставить(ДлительнаяОперация.ИдентификаторЗадания, ДлительнаяОперация); ЗаданиеДляПроверки = Новый Структура("ИдентификаторЗадания,ВыводитьПрогрессВыполнения,ВыводитьСообщения"); ЗаполнитьЗначенияСвойств(ЗаданиеДляПроверки, ДлительнаяОперация); ЗаданияДляПроверки.Добавить(ЗаданиеДляПроверки); КонецЕсли; КонецЦикла; Статусы = Новый Соответствие; Статусы = ДлительныеОперацииВызовСервера.ОперацииВыполнены(ЗаданияДляПроверки, ЗаданияДляОтмены); Для каждого СтатусОперации Из Статусы Цикл Операция = КонтролируемыеОперации[СтатусОперации.Ключ]; Статус = СтатусОперации.Значение; Попытка Если ПроконтролироватьДлительнуюОперацию(Операция, Статус) Тогда АктивныеДлительныеОперации.Удалить(СтатусОперации.Ключ); КонецЕсли; Исключение // далее не отслеживаем АктивныеДлительныеОперации.Удалить(СтатусОперации.Ключ); ВызватьИсключение; КонецПопытки; КонецЦикла; Если АктивныеДлительныеОперации.Количество() = 0 Тогда Возврат; КонецЕсли; ТекущаяДата = ТекущаяДата(); // дата сеанса не используется Интервал = 120; Для каждого Операция Из АктивныеДлительныеОперации Цикл Интервал = Макс(Мин(Интервал, Операция.Значение.Контроль - ТекущаяДата), 1); ЕстьАктивныеОперации = Истина; КонецЦикла; ПодключитьОбработчикОжидания("КонтрольДлительныхОпераций", Интервал, Истина); КонецПроцедуры Функция ПроконтролироватьДлительнуюОперацию(ДлительнаяОперация, Статус) Если Статус.Статус <> "Отменено" И ДлительнаяОперация.ОповещениеОПрогрессеВыполнения <> Неопределено Тогда Прогресс = Новый Структура; Прогресс.Вставить("Статус", Статус.Статус); Прогресс.Вставить("ИдентификаторЗадания", ДлительнаяОперация.ИдентификаторЗадания); Прогресс.Вставить("Прогресс", Статус.Прогресс); Прогресс.Вставить("Сообщения", Статус.Сообщения); ВыполнитьОбработкуОповещения(ДлительнаяОперация.ОповещениеОПрогрессеВыполнения, Прогресс); КонецЕсли; Если Статус.Статус = "Выполнено" Тогда ПоказатьОповещение(ДлительнаяОперация); ВыполнитьОповещение(ДлительнаяОперация, Статус); Возврат Истина; ИначеЕсли Статус.Статус = "Ошибка" Тогда ВыполнитьОповещение(ДлительнаяОперация, Статус); Возврат Истина; ИначеЕсли Статус.Статус = "Отменено" Тогда Возврат Истина; КонецЕсли; ИнтервалОжидания = ДлительнаяОперация.ТекущийИнтервал; Если ДлительнаяОперация.Интервал = 0 Тогда ИнтервалОжидания = ИнтервалОжидания * 1.4; Если ИнтервалОжидания > 15 Тогда ИнтервалОжидания = 15; КонецЕсли; ДлительнаяОперация.ТекущийИнтервал = ИнтервалОжидания; КонецЕсли; ДлительнаяОперация.Контроль = ТекущаяДата() + ИнтервалОжидания; // дата сеанса не используется Возврат Ложь; КонецФункции Процедура ПоказатьОповещение(ДлительнаяОперация) Оповещение = ДлительнаяОперация.ОповещениеПользователя; Если Не Оповещение.Показать Тогда Возврат; КонецЕсли; КонецПроцедуры Процедура ПоказатьОповещениеПользователя(ДлительнаяОперация) ПоказатьОповещениеПользователя(?(Оповещение.Текст <> Неопределено, Оповещение.Текст, НСтр("ru = 'Действие выполнено'")), Оповещение.НавигационнаяСсылка, Оповещение.Пояснение); КонецПроцедуры Процедура ВыполнитьОповещение(Знач ДлительнаяОперация, Знач Статус) Если ДлительнаяОперация.ОповещениеОЗавершении = Неопределено Тогда Возврат; КонецЕсли; Результат = Новый Структура; Результат.Вставить("Статус", Статус.Статус); Результат.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата); Результат.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата); Результат.Вставить("КраткоеПредставлениеОшибки", Статус.КраткоеПредставлениеОшибки); Результат.Вставить("ПодробноеПредставлениеОшибки", Статус.ПодробноеПредставлениеОшибки); Результат.Вставить("Сообщения", Статус.Сообщения); ВыполнитьОбработкуОповещения(ДлительнаяОперация.ОповещениеОЗавершении, Результат); КонецПроцедуры #КонецОбласти Ошибка сдесь https://drive.google.com/open?id=11tgyuKLZeG3bbvzTbUlDr6vyiM3T9pGv |
|||
1
Cyberhawk
12.02.18
✎
22:04
|
Бывает, да
|
|||
2
Kigo_Kigo
12.02.18
✎
22:59
|
Или я что то пропустил, но ПоказатьОповещениеПользователя в ПоказатьОповещениеПользователя ?
Процедура ПоказатьОповещениеПользователя(ДлительнаяОперация) ПоказатьОповещениеПользователя(?(Оповещение.Текст <> Неопределено, Оповещение.Текст, НСтр("ru = 'Действие выполнено'")), Оповещение.НавигационнаяСсылка, Оповещение.Пояснение); КонецПроцедуры |
|||
3
h-sp
12.02.18
✎
23:26
|
(2) ну и что? человек рекурсию осваивает.
|
|||
4
SavageRoman
13.02.18
✎
13:38
|
И как ето исправить?
Вот что было, оо ошибок больше https://drive.google.com/open?id=1Z8grQZcLw15lxsOzwQzsD_UI_37CTGL- |
|||
5
catena
13.02.18
✎
13:53
|
(4)Определиться, сколько все-таки должно быть параметров у ПоказатьОповещениеПользователя
|
|||
6
George Wheels
13.02.18
✎
14:01
|
(5) После того как определится сначала долго будет что-то выполняться, потом неизбежен вылет. А так хоть с ошибкой останавливается.
|
|||
7
1Сергей
13.02.18
✎
14:10
|
Для начала, думаю, надо уяснить что не следует использовать зарезервированные слова в именах переменных, процедур, функций
|
|||
8
1Сергей
13.02.18
✎
14:13
|
Вот тоже красота:
ТекущаяДата = ТекущаяДата(); Оно работать будет, но не надо так делать |
|||
9
vde69
13.02.18
✎
14:16
|
(8) почему?
|
|||
10
1Сергей
13.02.18
✎
14:18
|
(9) Слово зарезервированное
|
|||
11
SavageRoman
13.02.18
✎
14:23
|
Помогите решить
Где и как опредилить "ПоказатьОповещениеПользователя" |
|||
12
SavageRoman
13.02.18
✎
14:23
|
{ОбщийМодуль.ДлительныеОперацииГлобальный.Модуль(145,2)}: Процедура или функция с указанным именем не определена (ПоказатьОповещениеПользователя)
<<?>>ПоказатьОповещениеПользователя(?(Оповещение.Текст <> Неопределено, Оповещение.Текст, НСтр("ru = 'Действие выполнено'")), {ОбщийМодуль.ОбменДаннымиГлобальный.Модуль(32,3)}: Процедура или функция с указанным именем не определена (ПоказатьОповещениеПользователя) <<?>>ПоказатьОповещениеПользователя(НСтр("ru = 'Установить обновление'"), "e1cib/app/Обработка.ВыполнениеОбменаДанными", {ОбщийМодуль.СоединенияИБГлобальный.Модуль(85,3)}: Процедура или функция с указанным именем не определена (ПоказатьОповещениеПользователя) <<?>>ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), {ОбщийМодуль.СоединенияИБГлобальный.Модуль(117,4)}: Процедура или функция с указанным именем не определена (ПоказатьОповещениеПользователя) <<?>>ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), {ОбщийМодуль.СоединенияИБГлобальный.Модуль(127,2)}: Процедура или функция с указанным именем не определена (ПоказатьОповещениеПользователя) <<?>>ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), {ОбщийМодуль.СтандартныеПодсистемыГлобальный.Модуль(59,2)}: Процедура или функция с указанным именем не определена (ПоказатьОповещениеПользователя) <<?>>ПоказатьОповещениеПользователя(, "e1cib/command/ОбщаяКоманда.ПредупрежденияПриЗавершенииРаботы", Мобильное приложение содержит синтаксические ошибки. |
|||
13
Волшебник
модератор
13.02.18
✎
14:27
|
нужно поставить 8.3 и/или снять режим совместимости
или используй СообщениеПользователю |
|||
14
1Сергей
13.02.18
✎
14:27
|
(12) Мобильное приложение?
|
|||
15
SavageRoman
13.02.18
✎
14:32
|
Да
|
|||
16
Волшебник
модератор
13.02.18
✎
14:34
|
(15) Используй Сообщить
Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). |
|||
17
SavageRoman
13.02.18
✎
14:55
|
Процедура ПоказатьОповещение(ДлительнаяОперация)
Оповещение = ДлительнаяОперация.ОповещениеПользователя; Если Не Оповещение.Показать Тогда Возврат; КонецЕсли; Сообщить(?(Оповещение.Текст <> Неопределено, Оповещение.Текст, НСтр("ru = 'Действие выполнено'")), Оповещение.НавигационнаяСсылка, Оповещение.Пояснение); КонецПроцедуры .............................................. {ОбщийМодуль.ДлительныеОперацииГлобальный.Модуль(146,35)}: Слишком много фактических параметров (Сообщить) Оповещение.НавигационнаяСсылка, <<?>>Оповещение.Пояснение); (Проверка: Тонкий клиент) |
|||
18
Mankubus
13.02.18
✎
15:22
|
(17) почитай в СП про сообщить
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |