Вход | Регистрация

1С:Предприятие ::

Метки: 

Слишком много фактических параметров

Я
   SavageRoman
 
12.02.18 - 21:28
#Область СлужебныеПроцедурыИФункции


Процедура КонтрольДлительныхОпераций() Экспорт
    
    АктивныеДлительныеОперации = ДлительныеОперацииКлиент.АктивныеДлительныеОперации();
    Если АктивныеДлительныеОперации.Обработка Тогда
        Возврат;
    КонецЕсли;
    
    АктивныеДлительныеОперации.Обработка = Истина;
    Попытка
        ПроконтролироватьДлительныеОперации(АктивныеДлительныеОперации.Список);
        
        АктивныеДлительныеОперации.Обработка = Ложь;
    Исключение
        АктивныеДлительныеОперации.Обработка = Ложь;
        ВызватьИсключение;
    КонецПопытки;
    
КонецПроцедуры

Процедура ПроконтролироватьДлительныеОперации(АктивныеДлительныеОперации)
    
    ТекущаяДата = ТекущаяДата();// дата сеанса не используется 

    
    КонтролируемыеОперации = Новый Соответствие;
    ЗаданияДляПроверки = Новый Массив;
    ЗаданияДляОтмены = Новый Массив;
    
    Для каждого ДлительнаяОперация Из АктивныеДлительныеОперации Цикл
        
        ДлительнаяОперация = ДлительнаяОперация.Значение;
        
        ОперацияОтменена = Ложь;
        Если ДлительнаяОперация.ФормаВладелец <> Неопределено И Не ДлительнаяОперация.ФормаВладелец.Открыта() Тогда
            ОперацияОтменена = Истина;
        КонецЕсли;
        Если ДлительнаяОперация.ОповещениеОЗавершении <> Неопределено И ТипЗнч(ДлительнаяОперация.ОповещениеОЗавершении.Модуль) = Тип("УправляемаяФорма") 
            И Не ДлительнаяОперация.ОповещениеОЗавершении.Модуль.Открыта() Тогда
            ОперацияОтменена = Истина;
        КонецЕсли;
        
        Если ОперацияОтменена Тогда
            
            КонтролируемыеОперации.Вставить(ДлительнаяОперация.ИдентификаторЗадания, ДлительнаяОперация);
            ЗаданияДляОтмены.Добавить(ДлительнаяОперация.ИдентификаторЗадания);
            
        ИначеЕсли ДлительнаяОперация.Контроль <= ТекущаяДата Тогда
            
            КонтролируемыеОперации.Вставить(ДлительнаяОперация.ИдентификаторЗадания, ДлительнаяОперация);
            
            ЗаданиеДляПроверки = Новый Структура("ИдентификаторЗадания,ВыводитьПрогрессВыполнения,ВыводитьСообщения");
            ЗаполнитьЗначенияСвойств(ЗаданиеДляПроверки, ДлительнаяОперация);
            ЗаданияДляПроверки.Добавить(ЗаданиеДляПроверки);
            
        КонецЕсли;
        
    КонецЦикла;
    
    Статусы = Новый Соответствие;
    Статусы = ДлительныеОперацииВызовСервера.ОперацииВыполнены(ЗаданияДляПроверки, ЗаданияДляОтмены);
    Для каждого СтатусОперации Из Статусы Цикл
        Операция = КонтролируемыеОперации[СтатусОперации.Ключ];
        Статус = СтатусОперации.Значение;
        Попытка
            Если ПроконтролироватьДлительнуюОперацию(Операция, Статус) Тогда
                АктивныеДлительныеОперации.Удалить(СтатусОперации.Ключ);
            КонецЕсли;
        Исключение
            // далее не отслеживаем

            АктивныеДлительныеОперации.Удалить(СтатусОперации.Ключ);
            ВызватьИсключение;
        КонецПопытки;
    КонецЦикла;

    Если АктивныеДлительныеОперации.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    ТекущаяДата = ТекущаяДата();// дата сеанса не используется

    Интервал = 120; 
    Для каждого Операция Из АктивныеДлительныеОперации Цикл
        Интервал = Макс(Мин(Интервал, Операция.Значение.Контроль - ТекущаяДата), 1);
        ЕстьАктивныеОперации = Истина;
    КонецЦикла;
    
    ПодключитьОбработчикОжидания("КонтрольДлительныхОпераций", Интервал, Истина);
    
КонецПроцедуры

Функция ПроконтролироватьДлительнуюОперацию(ДлительнаяОперация, Статус)
    
    Если Статус.Статус <> "Отменено" И ДлительнаяОперация.ОповещениеОПрогрессеВыполнения <> Неопределено Тогда
        Прогресс = Новый Структура;
        Прогресс.Вставить("Статус", Статус.Статус);
        Прогресс.Вставить("ИдентификаторЗадания", ДлительнаяОперация.ИдентификаторЗадания);
        Прогресс.Вставить("Прогресс", Статус.Прогресс);
        Прогресс.Вставить("Сообщения", Статус.Сообщения);
        ВыполнитьОбработкуОповещения(ДлительнаяОперация.ОповещениеОПрогрессеВыполнения, Прогресс);
    КонецЕсли;
        
    Если Статус.Статус = "Выполнено" Тогда
        
        ПоказатьОповещение(ДлительнаяОперация);
        ВыполнитьОповещение(ДлительнаяОперация, Статус);
        Возврат Истина;
        
    ИначеЕсли Статус.Статус = "Ошибка" Тогда
        
        ВыполнитьОповещение(ДлительнаяОперация, Статус);
        Возврат Истина;
        
    ИначеЕсли Статус.Статус = "Отменено" Тогда
        
        Возврат Истина;
        
    КонецЕсли;
    
    ИнтервалОжидания = ДлительнаяОперация.ТекущийИнтервал;
    Если ДлительнаяОперация.Интервал = 0 Тогда
        ИнтервалОжидания = ИнтервалОжидания * 1.4;
        Если ИнтервалОжидания > 15 Тогда
            ИнтервалОжидания = 15;
        КонецЕсли;
        ДлительнаяОперация.ТекущийИнтервал = ИнтервалОжидания;
    КонецЕсли;
    ДлительнаяОперация.Контроль = ТекущаяДата() + ИнтервалОжидания;  // дата сеанса не используется

    Возврат Ложь;
        
КонецФункции

Процедура ПоказатьОповещение(ДлительнаяОперация)
    
    Оповещение = ДлительнаяОперация.ОповещениеПользователя;
    Если Не Оповещение.Показать Тогда
        Возврат;
    КонецЕсли;
    
КонецПроцедуры

    
Процедура ПоказатьОповещениеПользователя(ДлительнаяОперация)

    ПоказатьОповещениеПользователя(?(Оповещение.Текст <> Неопределено, Оповещение.Текст, НСтр("ru = 'Действие выполнено'")), 
        Оповещение.НавигационнаяСсылка, Оповещение.Пояснение);

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

Процедура ВыполнитьОповещение(Знач ДлительнаяОперация, Знач Статус)
    
    Если ДлительнаяОперация.ОповещениеОЗавершении = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Результат = Новый Структура;
    Результат.Вставить("Статус",    Статус.Статус);
    Результат.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата);
    Результат.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата);
    Результат.Вставить("КраткоеПредставлениеОшибки", Статус.КраткоеПредставлениеОшибки);
    Результат.Вставить("ПодробноеПредставлениеОшибки", Статус.ПодробноеПредставлениеОшибки);
    Результат.Вставить("Сообщения", Статус.Сообщения);
    ВыполнитьОбработкуОповещения(ДлительнаяОперация.ОповещениеОЗавершении, Результат);

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

#КонецОбласти



Ошибка сдесь https://drive.google.com/open?id=11tgyuKLZeG3bbvzTbUlDr6vyiM3T9pGv
 
 
   Cyberhawk
 
1 - 12.02.18 - 22:04
Бывает, да
   Kigo_Kigo
 
2 - 12.02.18 - 22:59
Или я что то пропустил, но ПоказатьОповещениеПользователя в ПоказатьОповещениеПользователя ?
Процедура ПоказатьОповещениеПользователя(ДлительнаяОперация)

    ПоказатьОповещениеПользователя(?(Оповещение.Текст <> Неопределено, Оповещение.Текст, НСтр("ru = 'Действие выполнено'")), 
        Оповещение.НавигационнаяСсылка, Оповещение.Пояснение);

КонецПроцедуры
   h-sp
 
3 - 12.02.18 - 23:26
(2) ну и что? человек рекурсию осваивает.
   SavageRoman
 
4 - 13.02.18 - 13:38
И как ето исправить?
Вот что было, оо ошибок больше https://drive.google.com/open?id=1Z8grQZcLw15lxsOzwQzsD_UI_37CTGL-
   catena
 
5 - 13.02.18 - 13:53
(4)Определиться, сколько все-таки должно быть параметров у ПоказатьОповещениеПользователя
   George Wheels
 
6 - 13.02.18 - 14:01
(5) После того как определится сначала долго будет что-то выполняться, потом неизбежен вылет. А так хоть с ошибкой останавливается.
   1Сергей
 
7 - 13.02.18 - 14:10
Для начала, думаю, надо уяснить что не следует использовать зарезервированные слова в именах переменных, процедур, функций
   1Сергей
 
8 - 13.02.18 - 14:13
Вот тоже красота:
ТекущаяДата = ТекущаяДата();

Оно работать будет, но не надо так делать
   vde69
 
9 - 13.02.18 - 14:16
(8) почему?
   1Сергей
 
10 - 13.02.18 - 14:18
(9) Слово зарезервированное
 
 Рекламное место пустует
   SavageRoman
 
11 - 13.02.18 - 14:23
Помогите решить 
Где и как опредилить "ПоказатьОповещениеПользователя"
   SavageRoman
 
12 - 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 и/или снять режим совместимости
или используй СообщениеПользователю
   1Сергей
 
14 - 13.02.18 - 14:27
(12) Мобильное приложение?
   SavageRoman
 
15 - 13.02.18 - 14:32
Да
   Волшебник
 
Модератор
16 - 13.02.18 - 14:34
(15) Используй Сообщить

Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
   SavageRoman
 
17 - 13.02.18 - 14:55
Процедура ПоказатьОповещение(ДлительнаяОперация)
    
    Оповещение = ДлительнаяОперация.ОповещениеПользователя;
    Если Не Оповещение.Показать Тогда
        Возврат;
    КонецЕсли;
    
    Сообщить(?(Оповещение.Текст <> Неопределено, Оповещение.Текст, НСтр("ru = 'Действие выполнено'")), 
        Оповещение.НавигационнаяСсылка, Оповещение.Пояснение);

КонецПроцедуры
..............................................
{ОбщийМодуль.ДлительныеОперацииГлобальный.Модуль(146,35)}: Слишком много фактических параметров (Сообщить)
        Оповещение.НавигационнаяСсылка, <<?>>Оповещение.Пояснение); (Проверка: Тонкий клиент)
   Mankubus
 
18 - 13.02.18 - 15:22
(17) почитай в СП про сообщить


Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует