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

06.11.12

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

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

Скачать файлы

Наименование Файл Версия Размер
Индикация.epf
.epf 8,97Kb
319
.epf 8,97Kb 319 Скачать

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 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61711    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54320    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16625    21    4    

35

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2024    21    progmaster    7    

3

Модель состояния для MVC

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

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

1 стартмани

05.07.2022    3581    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12013    1    5    

10

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

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

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

6000 руб.

18.01.2022    8774    1    2    

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

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

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

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

Есть какая-дь более эффективная процедура управления Прогресс-баром из текущей формы внешней обработки при запуске длительной Глобальной процедуры на сервере, не меняя конфигурацию, притом что серверная процедура меняет значения элементов этой формы, но обновления реквизитов формы (ПрогрессБар + СтатуснаяСтрока) мы можем увидеть только по окончании выполнения на сервере и возврате в клиентский контекст?
7. pbazeliuk 1954 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 1954 18.04.15 16:59 Сейчас в теме
(8) velber, возможно, в БСП изменилось название метода или убрали ключевое слово "Экспорт" или изменились свойства общего модуля
9. velber 18.04.15 15:42 Сейчас в теме
Управление торговлей, редакция 11.1 (11.1.6.20)

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

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

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

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