Обработка длительных операций 1с 8.3. Отображение прогресса выполнения длительных операций в БСП и их отладка в текущем сеансе

Обработка длительных операций 1с 8.3. Отображение прогресса выполнения длительных операций в БСП и их отладка в текущем сеансе

Статья предназначена для программистов и администраторов, работающих с большими объемами данных. При этом в самой обработке есть понимание объема обрабатываемых данных и, как следствие, возможно отображение прогресса и хода обработки.

Предполагается, что имеются общие представления об использовании длительных операций в БСП. В противном случае рекомендую ознакомиться с .

Использовалась БСП версии 2.3. На более ранних версиях это не работает, там нет такого программного интерфейса.

Прогресс выполнения

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

Процедура, являющаяся обработчиком команды, отображаемой на форме.

В ней производится передача исполнения на сервер в процедуру, инициирующую запуск длительной операции. После чего начинается ожидание завершения длительной операции.

Теперь в своей форме не надо описывать обработчики ожидания и запоминать идентификаторы заданий. Достаточно передать описание оповещения, которое вызовется при окончании фонового задания.

Если задание не завершится в течение 2 секунд, то вызовется форма ожидания, на которой будет отображаться прогресс выполнения операции и описание текущего действия.

&НаКлиенте Процедура ВыполнитьПроцедуруФоново(Команда) ДлительнаяОперация = ВыполнитьФоновоеЗаданиеНаСервере(); ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); // указываем необходимость вывода прогресса состояния ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина; // указываем интервал обновления состояния в секундах, если не указать, // то интервал будет увеличиваться при каждой итерации в 1.4 раза. ПараметрыОжидания.Интервал = 2; ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Новый ОписаниеОповещения("ВыполнитьПроцедуруФоновоВыполнено", ЭтотОбъект), ПараметрыОжидания); КонецПроцедуры

Серверная процедура, инициирующая запуск длительной операции

В данной процедуре формируются параметры запуска, и инициируется запуск длительной операции методом ВыполнитьВФоне.

&НаСервере Функция ВыполнитьФоновоеЗаданиеНаСервере() СтруктураПараметров = Новый Структура; ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = "Наименование фонового задания""); ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне("ИмяМодуля.ИмяЭкспортнойПроцедуры", СтруктураПараметров, ПараметрыВыполнения); Возврат ДлительнаяОперация; КонецФункции

Сообщение о прогрессе

В самой процедуре длительной операции "ИмяМодуля.ИмяЭкспортнойПроцедуры " необходимо сообщать о прогрессе выполнения и описание текущего действия.

Данные сообщения собирает родительский сеанс и выводит в форму ожидания.

Процедура ИмяЭкспортнойПроцедуры(СтруктураПараметров, АдресРезультата) Экспорт //... ДлительныеОперации.СообщитьПрогресс(Окр(ПроцентВыполнения, 0), Описание); //... КонецПроцедуры

Процедура обработки результата

Данная процедура инициируется после завершения длительной операции. При завершении операции с ошибками есть возможность обработать их.

В случае успешного выполнения длительной операции, результат будет находиться во временном хранилище, находящемуся по адресу "Результат.АдресРезультата ".

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

Вот такая форма будет вызвана типовым кодом БСП:

Работаем над юзабилити

В текущем окне ожидания завершения длительной операции, на мой взгляд, есть следующие недостатки:

  1. Нет наглядности индикации прогресса. Выводится только текст, хотя есть возможность отображать индикатор.
  2. Нет оценки оставшегося времени выполнения операции.
  3. При нажатии на "Отмена" не отменяется фоновое задание, а просто закрывается форма.

Поэтому можно воспользоваться немного видоизмененной формой:

Для того, чтобы заменить вызов стандартной формы на данную, необходимо:

  1. Перенести форму "ДлительнаяОперацияНовая" из обработки, приложенной к статье, в общие формы конфигурации.
  2. Заменить имя вызываемой формы ожидания в процедуре "ДлительныеОперацииКлиент.ОжидатьЗавершение" с "ОбщаяФорма.ДлительнаяОперация" на "ОбщаяФорма.ДлительнаяОперацияНовая ".

Отладка длительных операций

И небольшой бонус (может кому будет полезным) - для отладки длительных операций в текущем сеансе достаточно запустить 1С:Предприятие с параметром запуска "РежимОтладки". Об этом кратко упоминается в документации . В этом случае не будет запущено фоновое задание, а переданную функцию система запустит в текущем сеансе. Это отлаживать намного удобнее.

Версии ПРОФ редакция 3.0 разработана на технологической платформе 1С: Предприятие 8.2 и в полной мере использует ее возможности, в том числе и возможность использования через Интернет с помощью облачного сервиса. В этом случае программа запускается не жесткого диска компьютера, а через браузер с сайта, предоставляющего . Пользователь, использующий программу 1С: Бухгалтерия 8 ПРОФ через Интернет, получает гарантии соблюдения полной конфиденциальности и сохранности информации. При этом пользователи 1С: Бухгалтерия 8 ПРОФ ред. 3. 0 могут использовать программу, как через облачный сервис, так и локально, транспортируя учетные данные. Однако многое в программе осталось от редакции 2.0, в том числе методология бухгалтерского и налогового учета.

Еще больше сервисных возможностей

  • Переход от раздела к разделу осуществляется посредством закладок с названиями разделов и информационными пиктограммами, что в значительной степени упрощает навигацию.
  • Внешний вид форм документов или справочников пользователь может легко изменить в соответствии с спецификой деятельности фирмы, а именно:
    • поменять порядок расположения полей,
    • убрать неиспользуемые закладки.
    При этом все изменения, выполненные пользователем, можно передать другим пользователям.
  • Имеется кнопка «История», посредством которой можно просмотреть список недавно созданных и отредактированных документов.
  • Для доступа к любому журналу, справочнику или документу можно получить внутреннюю ссылку, по которой другой пользователь, подключенный к той же информационной базе в необходимыми правами, быстро найдет его.
  • В программе есть раздел «Избранное», в который можно помещать любые документы, отчеты и т. д., что обеспечит быстрый доступ к ним при необходимости.
  • Также в программе реализована возможность доступа к информационной базе только с правом просмотра данных.

Новый функционал учета зарплаты и кадров

В редакции 3.0 программы 1С: Бухгалтерия 8 ПРОФ изменен порядок ввода должности и зарплаты сотрудника. Теперь эта информация вводится непосредственно в его карточке, а не в отдельных документах, как в редакции программы 2.0.

Кадровые приказы также формируются из карточки сотрудника.

Начисление зарплаты, исчисление НДФЛ и страховых взносов выполняется автоматически и отображается в одном документе.

Учет зарплаты тоже видоизменился, теперь он ведется в программе по рабочим местам, поэтому расчетные ведомости можно составлять по отделам. При этом выплаты зарплаты также можно осуществлять по отделам.

Фоновый режим для длительных операций

В редакции 3.0 программы 1С: Бухгалтерия 8 ПРОФ стало работать еще удобней. Теперь не нужно ждать, когда завершится длительная операция, например, закрытие месяца или формирование какого-то отчета, так как все они реализованы в фоновом режиме, поэтому во время из выполнения пользователь может продолжать работу.

И в заключение хотелось бы отметить, что перейти на редакцию 3.0 пользователь может самостоятельно, воспользовавшись конфигуратором обновлений. При этом, пользователям редакции 2.0 программы 1С: Бухгалтерия 8 ПРОФ, подписанным на информационно-технологическое сопровождение (), предоставляется возможность обновить конфигурацию до редакции 3.0 бесплатно.

Статья предназначена для программистов и администраторов, работающих с большими объемами данных. При этом в самой обработке есть понимание объема обрабатываемых данных и, как следствие, возможно отображение прогресса и хода обработки.

Предполагается, что имеются общие представления об использовании длительных операций в БСП. В противном случае рекомендую ознакомиться с .

Использовалась БСП версии 2.3. На более ранних версиях это не работает, там нет такого программного интерфейса.

Прогресс выполнения

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

Процедура, являющаяся обработчиком команды, отображаемой на форме.

В ней производится передача исполнения на сервер в процедуру, инициирующую запуск длительной операции. После чего начинается ожидание завершения длительной операции.

Теперь в своей форме не надо описывать обработчики ожидания и запоминать идентификаторы заданий. Достаточно передать описание оповещения, которое вызовется при окончании фонового задания.

Если задание не завершится в течение 2 секунд, то вызовется форма ожидания, на которой будет отображаться прогресс выполнения операции и описание текущего действия.

&НаКлиенте Процедура ВыполнитьПроцедуруФоново(Команда) ДлительнаяОперация = ВыполнитьФоновоеЗаданиеНаСервере(); ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); // указываем необходимость вывода прогресса состояния ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина; // указываем интервал обновления состояния в секундах, если не указать, // то интервал будет увеличиваться при каждой итерации в 1.4 раза. ПараметрыОжидания.Интервал = 2; ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Новый ОписаниеОповещения("ВыполнитьПроцедуруФоновоВыполнено", ЭтотОбъект), ПараметрыОжидания); КонецПроцедуры

Серверная процедура, инициирующая запуск длительной операции

В данной процедуре формируются параметры запуска, и инициируется запуск длительной операции методом ВыполнитьВФоне.

&НаСервере Функция ВыполнитьФоновоеЗаданиеНаСервере() СтруктураПараметров = Новый Структура; ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = "Наименование фонового задания""); ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне("ИмяМодуля.ИмяЭкспортнойПроцедуры", СтруктураПараметров, ПараметрыВыполнения); Возврат ДлительнаяОперация; КонецФункции

Сообщение о прогрессе

В самой процедуре длительной операции "ИмяМодуля.ИмяЭкспортнойПроцедуры " необходимо сообщать о прогрессе выполнения и описание текущего действия.

Данные сообщения собирает родительский сеанс и выводит в форму ожидания.

Процедура ИмяЭкспортнойПроцедуры(СтруктураПараметров, АдресРезультата) Экспорт //... ДлительныеОперации.СообщитьПрогресс(Окр(ПроцентВыполнения, 0), Описание); //... КонецПроцедуры

Процедура обработки результата

Данная процедура инициируется после завершения длительной операции. При завершении операции с ошибками есть возможность обработать их.

В случае успешного выполнения длительной операции, результат будет находиться во временном хранилище, находящемуся по адресу "Результат.АдресРезультата ".

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

Вот такая форма будет вызвана типовым кодом БСП:

Работаем над юзабилити

В текущем окне ожидания завершения длительной операции, на мой взгляд, есть следующие недостатки:

  1. Нет наглядности индикации прогресса. Выводится только текст, хотя есть возможность отображать индикатор.
  2. Нет оценки оставшегося времени выполнения операции.
  3. При нажатии на "Отмена" не отменяется фоновое задание, а просто закрывается форма.

Поэтому можно воспользоваться немного видоизмененной формой:

Для того, чтобы заменить вызов стандартной формы на данную, необходимо:

  1. Перенести форму "ДлительнаяОперацияНовая" из обработки, приложенной к статье, в общие формы конфигурации.
  2. Заменить имя вызываемой формы ожидания в процедуре "ДлительныеОперацииКлиент.ОжидатьЗавершение" с "ОбщаяФорма.ДлительнаяОперация" на "ОбщаяФорма.ДлительнаяОперацияНовая ".

Отладка длительных операций

И небольшой бонус (может кому будет полезным) - для отладки длительных операций в текущем сеансе достаточно запустить 1С:Предприятие с параметром запуска "РежимОтладки". Об этом кратко упоминается в документации . В этом случае не будет запущено фоновое задание, а переданную функцию система запустит в текущем сеансе. Это отлаживать намного удобнее.

Статья предназначена для программистов и администраторов, работающих с большими объемами данных. При этом в самой обработке есть понимание объема обрабатываемых данных и, как следствие, возможно отображение прогресса и хода обработки.

Предполагается, что имеются общие представления об использовании длительных операций в БСП. В противном случае рекомендую ознакомиться с .

Использовалась БСП версии 2.3. На более ранних версиях это не работает, там нет такого программного интерфейса.

Прогресс выполнения

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

Процедура, являющаяся обработчиком команды, отображаемой на форме.

В ней производится передача исполнения на сервер в процедуру, инициирующую запуск длительной операции. После чего начинается ожидание завершения длительной операции.

Теперь в своей форме не надо описывать обработчики ожидания и запоминать идентификаторы заданий. Достаточно передать описание оповещения, которое вызовется при окончании фонового задания.

Если задание не завершится в течение 2 секунд, то вызовется форма ожидания, на которой будет отображаться прогресс выполнения операции и описание текущего действия.

&НаКлиенте Процедура ВыполнитьПроцедуруФоново(Команда) ДлительнаяОперация = ВыполнитьФоновоеЗаданиеНаСервере(); ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); // указываем необходимость вывода прогресса состояния ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина; // указываем интервал обновления состояния в секундах, если не указать, // то интервал будет увеличиваться при каждой итерации в 1.4 раза. ПараметрыОжидания.Интервал = 2; ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Новый ОписаниеОповещения("ВыполнитьПроцедуруФоновоВыполнено", ЭтотОбъект), ПараметрыОжидания); КонецПроцедуры

Серверная процедура, инициирующая запуск длительной операции

В данной процедуре формируются параметры запуска, и инициируется запуск длительной операции методом ВыполнитьВФоне.

&НаСервере Функция ВыполнитьФоновоеЗаданиеНаСервере() СтруктураПараметров = Новый Структура; ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = "Наименование фонового задания""); ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне("ИмяМодуля.ИмяЭкспортнойПроцедуры", СтруктураПараметров, ПараметрыВыполнения); Возврат ДлительнаяОперация; КонецФункции

Сообщение о прогрессе

В самой процедуре длительной операции "ИмяМодуля.ИмяЭкспортнойПроцедуры " необходимо сообщать о прогрессе выполнения и описание текущего действия.

Данные сообщения собирает родительский сеанс и выводит в форму ожидания.

Процедура ИмяЭкспортнойПроцедуры(СтруктураПараметров, АдресРезультата) Экспорт //... ДлительныеОперации.СообщитьПрогресс(Окр(ПроцентВыполнения, 0), Описание); //... КонецПроцедуры

Процедура обработки результата

Данная процедура инициируется после завершения длительной операции. При завершении операции с ошибками есть возможность обработать их.

В случае успешного выполнения длительной операции, результат будет находиться во временном хранилище, находящемуся по адресу "Результат.АдресРезультата ".

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

Вот такая форма будет вызвана типовым кодом БСП:

Работаем над юзабилити

В текущем окне ожидания завершения длительной операции, на мой взгляд, есть следующие недостатки:

  1. Нет наглядности индикации прогресса. Выводится только текст, хотя есть возможность отображать индикатор.
  2. Нет оценки оставшегося времени выполнения операции.
  3. При нажатии на "Отмена" не отменяется фоновое задание, а просто закрывается форма.

Поэтому можно воспользоваться немного видоизмененной формой:

Для того, чтобы заменить вызов стандартной формы на данную, необходимо:

  1. Перенести форму "ДлительнаяОперацияНовая" из обработки, приложенной к статье, в общие формы конфигурации.
  2. Заменить имя вызываемой формы ожидания в процедуре "ДлительныеОперацииКлиент.ОжидатьЗавершение" с "ОбщаяФорма.ДлительнаяОперация" на "ОбщаяФорма.ДлительнаяОперацияНовая ".

Отладка длительных операций

И небольшой бонус (может кому будет полезным) - для отладки длительных операций в текущем сеансе достаточно запустить 1С:Предприятие с параметром запуска "РежимОтладки". Об этом кратко упоминается в документации . В этом случае не будет запущено фоновое задание, а переданную функцию система запустит в текущем сеансе. Это отлаживать намного удобнее.




Самое обсуждаемое
Какие бывают выделения при беременности на ранних сроках? Какие бывают выделения при беременности на ранних сроках?
Сонник и толкование снов Сонник и толкование снов
К чему увидеть кошку во сне? К чему увидеть кошку во сне?


top