Статья предназначена для программистов и администраторов, работающих с большими объемами данных. При этом в самой обработке есть понимание объема обрабатываемых данных и, как следствие, возможно отображение прогресса и хода обработки.
Предполагается, что имеются общие представления об использовании длительных операций в БСП. В противном случае рекомендую ознакомиться с .
Использовалась БСП версии 2.3. На более ранних версиях это не работает, там нет такого программного интерфейса.
Прогресс выполнения
Если при выполнении длительных операций в фоне вам (или пользователям) не хочется просто смотреть на вращающийся кружок, а хочется знать, сколько обработалось данных и что в текущий момент обрабатывается, то в БСП есть механизм визуализации прогресса.
Процедура, являющаяся обработчиком команды, отображаемой на форме.
В ней производится передача исполнения на сервер в процедуру, инициирующую запуск длительной операции. После чего начинается ожидание завершения длительной операции.
Теперь в своей форме не надо описывать обработчики ожидания и запоминать идентификаторы заданий. Достаточно передать описание оповещения, которое вызовется при окончании фонового задания.
Если задание не завершится в течение 2 секунд, то вызовется форма ожидания, на которой будет отображаться прогресс выполнения операции и описание текущего действия.
&НаКлиенте Процедура ВыполнитьПроцедуруФоново(Команда) ДлительнаяОперация = ВыполнитьФоновоеЗаданиеНаСервере(); ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); // указываем необходимость вывода прогресса состояния ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина; // указываем интервал обновления состояния в секундах, если не указать, // то интервал будет увеличиваться при каждой итерации в 1.4 раза. ПараметрыОжидания.Интервал = 2; ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Новый ОписаниеОповещения("ВыполнитьПроцедуруФоновоВыполнено", ЭтотОбъект), ПараметрыОжидания); КонецПроцедуры
Серверная процедура, инициирующая запуск длительной операции
В данной процедуре формируются параметры запуска, и инициируется запуск длительной операции методом ВыполнитьВФоне.
&НаСервере Функция ВыполнитьФоновоеЗаданиеНаСервере() СтруктураПараметров = Новый Структура; ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = "Наименование фонового задания""); ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне("ИмяМодуля.ИмяЭкспортнойПроцедуры", СтруктураПараметров, ПараметрыВыполнения); Возврат ДлительнаяОперация; КонецФункции
Сообщение о прогрессе
В самой процедуре длительной операции "ИмяМодуля.ИмяЭкспортнойПроцедуры " необходимо сообщать о прогрессе выполнения и описание текущего действия.
Данные сообщения собирает родительский сеанс и выводит в форму ожидания.
Процедура ИмяЭкспортнойПроцедуры(СтруктураПараметров, АдресРезультата) Экспорт //... ДлительныеОперации.СообщитьПрогресс(Окр(ПроцентВыполнения, 0), Описание); //... КонецПроцедуры
Процедура обработки результата
Данная процедура инициируется после завершения длительной операции. При завершении операции с ошибками есть возможность обработать их.
В случае успешного выполнения длительной операции, результат будет находиться во временном хранилище, находящемуся по адресу "Результат.АдресРезультата ".
&НаКлиенте Процедура ВыполнитьПроцедуруФоновоВыполнено(Результат, ДополнительныеПараметры) Экспорт Если Результат = Неопределено Тогда Возврат; ИначеЕсли Результат.Статус = "Ошибка" Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.ПодробноеПредставлениеОшибки); ИначеЕсли Результат.Статус = "Выполнено" Тогда // обрабатываем результат //ОбработатьРезультат(Результат.АдресРезультата); КонецЕсли; КонецПроцедуры
Вот такая форма будет вызвана типовым кодом БСП:
Работаем над юзабилити
В текущем окне ожидания завершения длительной операции, на мой взгляд, есть следующие недостатки:
- Нет наглядности индикации прогресса. Выводится только текст, хотя есть возможность отображать индикатор.
- Нет оценки оставшегося времени выполнения операции.
- При нажатии на "Отмена" не отменяется фоновое задание, а просто закрывается форма.
Поэтому можно воспользоваться немного видоизмененной формой:
Для того, чтобы заменить вызов стандартной формы на данную, необходимо:
- Перенести форму "ДлительнаяОперацияНовая" из обработки, приложенной к статье, в общие формы конфигурации.
- Заменить имя вызываемой формы ожидания в процедуре "ДлительныеОперацииКлиент.ОжидатьЗавершение" с "ОбщаяФорма.ДлительнаяОперация" на "ОбщаяФорма.ДлительнаяОперацияНовая ".
Отладка длительных операций
И небольшой бонус (может кому будет полезным) - для отладки длительных операций в текущем сеансе достаточно запустить 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С:Предприятие с параметром запуска "РежимОтладки". Об этом кратко упоминается в документации . В этом случае не будет запущено фоновое задание, а переданную функцию система запустит в текущем сеансе. Это отлаживать намного удобнее.