Прогресс бар 8.2 (УТ 11 без изменения конфигурации, для SQL)

06.11.12

Разработка - Работа с интерфейсом

Данный приём позволяет показать текущее состояние выполнения серверного кода пользователю (без внесения изменений в конфигурацию). Идея взята от сюда http://infostart.ru/public/157706/

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Индикация.epf
.epf 8,97Kb
320
320
1 SM
Скачать Купить за 1 850 руб.

1. Код модуля формы внешней обработки

//Устанавливаем количество обновлений индикатора на сервере.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   
Обновлений = 10;
КонецПроцедуры


//Обнуляем прогресс бар, запускаем фоновую процедуру на сервере, подключаем обработчик ожидания
&НаКлиенте
Процедура НачатьИндикацию(Команда)

   
Прогресс = 0;

   
ВыполнитьНаСервере(УникальныйИдентификатор, Обновлений);

   
ПодключитьОбработчикОжидания("ОбработчикОжидания", 1, Ложь);

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


//Получаем сообщения от фонового задания и прогресс операции. Если операция закончилась отключаем обработчик ожидания.
&НаКлиенте
Процедура ОбработчикОжидания()

   
ПолучитьПрогрессВыполнения(УникальныйИдентификатор, Прогресс);

   
Состояние(НСтр("ru = 'Тест прогресс бара'"), Прогресс, НСтр("ru = 'Пустой цикл для тестирования'"));

    Если
Прогресс = 100 Тогда
       
ОтключитьОбработчикОжидания("ОбработчикОжидания");
    КонецЕсли;

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


//Устанавливаем привилегированный режим, если у пользователя нет административных прав. Запускаем фоновое задания из внешней обработки с помощью метода который доступен в УТ 11.
&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере(УникальныйИдентификатор, Обновлений)

   
УстановитьПривилегированныйРежим(Истина);

   
ЗаданиеПараметры = Новый Массив();
   
ЗаданиеПараметры.Добавить(Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Прогрес-бар [0.0.1]"));
   
ЗаданиеПараметры.Добавить(Новый Структура("Обновлений", Обновлений));
   
ЗаданиеПараметры.Добавить(Неопределено);
   
ЗаданиеПараметры.Добавить(Неопределено);

   
ФоновоеЗадание = ФоновыеЗадания.Выполнить("ДополнительныеОтчетыИОбработки.ВыполнитьОбработкуНепосредственно", ЗаданиеПараметры, УникальныйИдентификатор, "ИндикацияПроцеса");

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

 

&НаСервереБезКонтекста
Процедура ПолучитьПрогрессВыполнения(УникальныйИдентификатор, Прогресс)

   
НайденныеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Ключ", УникальныйИдентификатор));
    Если
НайденныеЗадания.Количество() = 0 Тогда Возврат; КонецЕсли;

   
Задание = НайденныеЗадания[0];
    Если
Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
       
МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина);
        Если
МассивСообщений = Неопределено Тогда Возврат; КонецЕсли;
        Для Каждого
Сообщение Из МассивСообщений Цикл
            Если
Строка(Сообщение.ИдентификаторНазначения) = "00000000-0000-0000-0000-000000000000" Тогда
               
Прогресс = Число(Сообщение.Текст);
            Иначе
               
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение.Текст, Сообщение.КлючДанных, Сообщение.Поле, Сообщение.ПутьКДанным);
            КонецЕсли;
        КонецЦикла;;
    Иначе
       
Прогресс = 100;
    КонецЕсли;

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



2. Код модуля объекта внешней обработки

Функция СведенияОВнешнейОбработке() Экспорт
   
Версия = "0.0.1";

   
// Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные
   
ПараметрыРегистрации = Новый Структура;

   
// Объявим еще одну переменную, которая нам потребуется ниже
   
МассивНазначений = Новый Массив;

   
// Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
    // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
   
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");

   
// Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
    // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе,
    // которые поддерживают механизм ВПФ
    //СчитатьДокументыНазначений(МассивНазначений);
   
ПараметрыРегистрации.Вставить("Назначение", Новый Массив);

   
// Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
   
ПараметрыРегистрации.Вставить("Наименование", "Прогрес-бар [" + Версия + "]");

   
// Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
   
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);

   
// Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
   
ПараметрыРегистрации.Вставить("Версия", Версия);
   
ПараметрыРегистрации.Вставить("Информация", "Прогрес-бар [" + Версия + "]");

   
// Создадим таблицу команд (подробнее смотрим ниже)
   
ТаблицаКоманд = ПолучитьТаблицуКоманд();

   
// Добавим команду в таблицу
   
ДобавитьКоманду(ТаблицаКоманд, "Прогрес-бар [" + Версия + "]", "BP", "ОткрытиеФормы", Ложь, "BP");

   
// Сохраним таблицу команд в параметры регистрации обработки
   
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

   
// Теперь вернем системе наши параметры
   
Возврат ПараметрыРегистрации;

КонецФункции


Функция
ПолучитьТаблицуКоманд()

  
// Создадим пустую таблицу команд и колонки в ней
  
Команды = Новый ТаблицаЗначений;

  
// Как будет выглядеть описание печатной формы для пользователя
  
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));

  
// Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
  
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

  
// Тут задается, как должна вызваться команда обработки
   // Возможные варианты:
   // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
   // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
   // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
  
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

  
// Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
  
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

  
// Для печатной формы должен содержать строку ПечатьMXL
  
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));

   Возврат
Команды;

КонецФункции



Процедура
ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

 
// Добавляем команду в таблицу команд по переданному описанию.
  // Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
 
НоваяКоманда = ТаблицаКоманд.Добавить();
 
НоваяКоманда.Представление = Представление;
 
НоваяКоманда.Идентификатор = Идентификатор;
 
НоваяКоманда.Использование = Использование;
 
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
 
НоваяКоманда.Модификатор = Модификатор;

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


// Пощитаем коэффициенты и сделаем соответствие чтобы знать когда обновлять прогресс. 
Процедура
ВыполнитьКоманду(Параметры) Экспорт

   
Обновлений  = Параметры.Обновлений;
   
Итераций = 10000000;
   
Коэф     = Цел(Итераций / Обновлений);
   
КоэфОбн  = 100 / Обновлений;

   
ТочкиОбновления = Новый Соответствие;
    Для
i = 1 По Обновлений Цикл ТочкиОбновления[i * Коэф] = Цел(i * КоэфОбн); КонецЦикла;

   
Сообщение = Новый СообщениеПользователю;
   
Сообщение.ИдентификаторНазначения = Новый УникальныйИдентификатор;
   
Сообщение.Текст = "Фоновая обработка данных успешно началась.";
   
Сообщение.Сообщить();

    Для
i = 1 По Итераций Цикл
        Если
ТочкиОбновления[i] <> Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Строка(ТочкиОбновления[i])); КонецЕсли;

       
// Основной код.

   
КонецЦикла;

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




Плюсы:

    • Не нужно изменять основную конфигурацию;
    • все очень просто в реализации и использовании;
    • пользователь видит прогресс и одновременно делает что-то еще.



См. также

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    17657    24    6    

38

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    11699    YA_418728146    7    

158

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2876    43    progmaster    8    

4

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    4601    kalyaka    6    

32

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    9378    1    2    

6

Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Бесплатно (free)

Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С - в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.

12.11.2021    19006    acces969    95    

153
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Stamper 43 08.11.12 23:32 Сейчас в теме
не понял, почему для SQL.
2. pbazeliuk 1964 09.11.12 00:47 Сейчас в теме
(1) Stamper, в файловой версии менеджер заданий не активен. И задания выполняются по очереди, а не асинхронно. Комментарий актуален к УТ 11, может в других конфигурациях есть выход.
3. Stamper 43 09.11.12 00:56 Сейчас в теме
(2)
И задания выполняются по очереди, а не асинхронно.

пожалуйста, немного поподробнее расскажи! или может быть, есть ссылочка?
4. pbazeliuk 1964 09.11.12 01:22 Сейчас в теме
(3) Stamper, В файловом варианте задания всегда выполняются последовательно одно за другим, в отличие от клиент-серверного варианта, где несколько заданий могут выполняться параллельно в одном и том же рабочем процессе или в разных рабочих процессах и даже на разных компьютерах. Поэтому, выделенного клиента, занимающегося обработкой заданий, не рекомендуется использовать для других целей, т.к. это может негативно повлиять на производительность выполнения заданий.

Клиенты в файловом варианте не имеют прямой связи с планировщиком заданий и взаимодействуют с ним через файл обмена, который находится в каталоге информационной базы (в клиент-серверном варианте клиенты соединены с планировщиком по TCP/IP, что позволяет избежать задержек при назначении заданий на выполнение). Поэтому при обработке заданий возможны небольшие задержки, связанные с тем, что планировщик читает файл обмена и получает очередную порцию заданий на выполнение только после того, как завершит выполнение полученных ранее заданий.

www.bit.ly/TO6csq
dj_serega; elik1972; NAKIS; teflon; khaoos; Serj1C; +6 Ответить
5. ksuman 22 14.12.13 03:16 Сейчас в теме
(4) можно было не объяснять почему это не работает в файловом варианте, а просто ответить: нет необходимости таких заморочек с ПрогрессБаром, т.к. можно управлять формой Прогресса - Явно;)

Есть какая-дь более эффективная процедура управления Прогресс-баром из текущей формы внешней обработки при запуске длительной Глобальной процедуры на сервере, не меняя конфигурацию, притом что серверная процедура меняет значения элементов этой формы, но обновления реквизитов формы (ПрогрессБар + СтатуснаяСтрока) мы можем увидеть только по окончании выполнения на сервере и возврате в клиентский контекст?
7. pbazeliuk 1964 20.12.13 01:16 Сейчас в теме
(5)В УФ такой процедуры нет. Можно реализовать это прыжками между контекстами "&НаКлиенте" на "&НаСервере", то есть порцию обработали в контексте сервера, вернулись на контекст клиента - показали прогресс, далее возвращаемся на контекст сервера для обработки следующей порции. Этот метод очень негативно влияет на время выполнения длительной операции.

но обновления реквизитов формы (ПрогрессБар + СтатуснаяСтрока) мы можем увидеть только по окончании выполнения на сервере и возврате в клиентский контекст
- Да, обновление интерфейса состоится только после возвращения в контекст клиента.

В обычных формах проблем нет, для их реализовано множество различных ПрогрессБаров.
6. NAKIS 5 18.12.13 14:32 Сейчас в теме
Спасибо, добавил плановому отделу в их обработочку) Теперь приятно радует глаз)
А то все время были возмущения, мол нихрена не понятно, работает или зависло, а текстовое представления работы обработки им не нравилось...
8. velber 18.04.15 15:24 Сейчас в теме
Бухгалтерия предприятия, редакция 3.0 (3.0.39.60)

При выполнении выдает ошибку:

{Форма.Форма.Форма(43)}: Ошибка при вызове метода контекста (Выполнить)
ФоновоеЗадание = ФоновыеЗадания.Выполнить("ДополнительныеОтчетыИОбработки.ВыполнитьОбработкуНепосредственно", ЗаданиеПараметры, УникальныйИдентификатор, "ИндикацияПроцеса");
по причине:
Метод задания не найден: ДополнительныеОтчетыИОбработки:ВыполнитьОбработкуНепосредственно
10. pbazeliuk 1964 18.04.15 16:59 Сейчас в теме
(8) velber, возможно, в БСП изменилось название метода или убрали ключевое слово "Экспорт" или изменились свойства общего модуля
9. velber 18.04.15 15:42 Сейчас в теме
Управление торговлей, редакция 11.1 (11.1.6.20)

При выполнении выдает ошибку:

Метод задания не найден: ДополнительныеОтчетыИОбработки:ВыполнитьОбработкуНепосредственно
11. fixin 4263 31.07.15 15:20 Сейчас в теме
В типовых есть функция ДополнительныеОтчетыИОбработки.ВыполнитьКоманду. Её можно использовать для обработчика фонового задания, чтобы выполнить свою обработку, помещенную в справочник внешних обработок.
paravoz71; gragden; +2 Ответить
12. yuha33 23.10.15 14:02 Сейчас в теме
При выполнении выдает ошибку:

Метод задания не найден: ДополнительныеОтчетыИОбработки:ВыполнитьОбработкуНепосредственно

Можно тыкнуть пальцем, где взять этот код. В УТ11 я его не обнаружил. Ни в старой, ни в новой.
13. pbazeliuk 1964 23.10.15 14:51 Сейчас в теме
(12) yuha33, посмотрите здесь как сделано http://infostart.ru/public/405368/. Работает под УТ 11
14. Andreyyy 75 04.12.15 20:17 Сейчас в теме
Подскажите, будут ли доступны в фоновом исполнении остальные процедуры/функции модуля объекта обработки из процедуры "ВыполнитьКоманду(Параметры)" ?
15. pbazeliuk 1964 07.12.15 13:39 Сейчас в теме
(14) Andreyyy, будут доступны в контексте фонового задания только те методы, которые есть в самой обработке фонового задания. Так же контекст обработки, что инициировала фоновое задание будет недоступен.
Оставьте свое сообщение