1с внешний отчет в фоновом режиме
Все гораздо проще. Можно запустить отчет, у которого механизм формирования вызывается из процедуры ПриОткрытии(). Если не менять реквизиты формы (здесь я не уверен - или реквизитов формы вообще не должно быть), то получается эффект фонового режима.
Однако замечено, что предприятие в этом случае коряво отображает, например, списочную информацию. Так что я этой штукой не пользуюсь.
(5)дафай сделай. а потом сравним. чей шустрее отработает
(7)нет мне просто интересено как он заставит запрос в фоне исполняться.
Да вы сначала разберитесь с категориями. Мне кажется, что вы имеете в виду разные вещи, когда говорите "фоновый".
(9)фоновый . я имею виду чел нажал кнопку выполнить . и начал что-то делать. пока формируется отчет.
(8) Ответ в (3). Кстати, я вовсе не утверждаю, что "в фоне" запрос будет быстрее выполняться. Я ж говорю, не использую.
в смысле делать в той же базе где нажал кнопку выпонить
(11)ну ладно будем считать что приболтал. покажи как ты сделаешь
Запрос.Выполнить - в фоне.
(18)нет меня интересует как он умудриться при выполнении запроса. делать что-то
(16) Да ничем "особым" отчет обладает. Конкретно сейчас сделать и проверить времени нету.
Типа так (кину рыбу):
Еще раз стоит упомянуть про реквизиты формы отчета. (кажись начал вспоминать)
В диалоге отчета не должно быть ни одного реквизита.
Запускаем отчет и можем спокойно в этом же сеансе работать.
Вроде все. Попробуйте, кому не лень.
(22)нет с этим я приблизительно понял. поэтому и уточняюю.
как заставить фоном выполняться команду Запрос.Выполнить()
фоновый . я имею виду чел нажал кнопку выполнить . и начал что-то делать. пока формируется отчет.
Не должно быть кнопки-то.
(25) фоном выполняться команду Запрос.Выполнить() - это будет, а кнопки не должно быть.+28 если покажешь как. я сырым съем свой последний кроссовок
(30) Попробуй не изменять строку состояния.
Например, сделай паузу на 1мин. и выведи таблицу.
Проверил. Если на форме нет ни одного элемента, отчет вообще не запускается. В отладчике не заходит ни в ПриОткрытии(), ни в операторы модуля.
Короче, если вспомню как, отдельную ветку создам.
Но это не фантация. Точно.
Запустится в фоновом режиме ЛЮБОЙ ВНЕШНИЙ отчет, у которого что-то написано в приОткрытии() .
Второе важное условие: он должен быть ПЕРВЫМ запущенным отчетом в текущем сеансе 1с .
И глубоко пофиг, сколько у него на форме кнопок и реквизитов! .
(43) Ты гений, мики просветил!
Скунки молчит. Кроссовку выкинуть ты заставил?
(39)нет короче слухай.
Где-то в 20 числах ноября на работе заплатили очередные копейки и я купил себе новые тапки. Вечером мы со Снипом это дело обмыли. Во время употребления спиртных напитков возникла идея сгонять в "Лидер" сыграть в билиярд. Ну за одно там может еще чего-нить найти. Ловим мотор и туда. А надо сказать что выпаший днем снег начал таять. И подход от дороги до "Лидера" превратился в узкую полосу препятствий из мокрого снега и луж. Вот лаврируя между луж пробираемся к "Лидеру". На встречу к нам от "Лидера" лаврирует на каблуках какая-та машка. Вся в цацках, пальцы в сторну. Короче круче только вареные яйца. Когда мы с ней стрелканулись, я как истиный джентельмен решил из благих побуждений уступить даме дорогу. Ну как я пытался расствориться в воздушном пространстве наши плечи, чисто случайно встречаються. Так чирком. Эта ссукца достает платок. И с такой берзгливой мордой начинает махать платком около своего плеча, усиленно изображая, что стирает гавно которое я оставил на ее плече. После чего с такой же брезгливой мордой этот платочек выбрасывает. Разворачивается и шпендихорит дальше. Ясень пень, что такую гнилуху пропустит только законченный лох. Спуская в игнор лужи я ее догоняю и тылкаю поджопник. Поджопник получился что-то надо. Даже Снипу понравилось, а он футболист. Короче фикса после такого разворота оказывается в луже на пятой точке и щелкает ртом, то ли от неожиданного поворота, то ли еще фих знает от чего. А я снимаю кросовок с ноги, которой делал поджопник, и кидаю его ей. После чего на одной ноге попрыгал до дороги ловить мотор назад в полтаву.
При доработке типового отчета БП, возник вопрос, как сделать формирование внешнего отчета в фоне. Результатами исследования захотелось поделится. Использовалась БСП версии 3.0.1.
Сразу стоит отметить, что отчет просто открытый через Файл - Открыть запустить в фоне нельзя (если только он до этого не был добавлен в справочник ДополнительныеОтчетыИОбработки)
Для дополнительного отчета (добавленного в справочник ДополнительныеОтчетыИОбработки) есть два варианта реализации:
1. Использование типовой формы отчета из БСП.
Для этого не указываем (и не создаем) основную форму отчета. Условием формирования в фоновым режиме для формы отчета БСП является его отключенный "Безопасный режим". Т.е. в функции СведенияОВнешнейОбработке указываем
Есть прекрасная статья по этому варианту Подсистема "Варианты отчетов". Используете ли Вы ее правильно? Там "Безопасный режим" в примере сброшен, написано про фоновое формирование, но не описана взаимосвязь.
2. Использование своей формы отчета
Она будет нестандартной для пользователя. В ней нужно реализовывать запуск отчета в фоновом процессе самому. Но можно запустить в фоне и безопасный отчет.
Есть статья Пример формирования внешнего отчета программно и в фоновом режиме, реализующая этот вариант. Но в ней есть ряд недоработок. Используется устаревшая процедура ДлительныеОперации.ЗапуститьВыполнениеВФоне.
К тому же БСП предоставляет готовые механизмы обмена между фоново запущеной командой дополнительного отчета/обработки и ожидающим ее процедурой формы. Нет необходимости создавать временное хранилище и даже помещать в него данные. Но остаётся вопрос, будут ли так работать будущие версии БСП. Возможно, надёжнее самостоятельно помещать данные во временное хранилище.
Привожу свою реализацию формирования отчета со своей формой в фоновом режиме. Первый вариант (с формой БСП) легко реализуем и так. Достаточно отключить основную форму от отчета.
В ней я так же уделил внимание работе со своевременным освобождением памяти хранилища. Иначе, если пользователь, не закрывая форму отчета, много раз нажмет сформировать, памяти может не хватить.
Все действия и поведение системы подробно описаны в комментариях. Понять в контексте кода проще, чем абстрактные описания.
Отчет простой, выводит версии подсистем в базе данных (версия БСП и т.п.). Для использования достаточно заменить схему компоновки данных и оставить нужную кнопку формирования.
Процедура ВыполнитьСКД(ДокументРезультат) Экспорт
ДокументРезультат.Очистить();
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
После выполнения, пока по кнопке формы вручную, таблицу выводит, но при этом пишет:"Отчет не сформирован, Нажмите Сформировать для получения отчета." Что я не так делаю?
по 2 вопросу: замени код на СкомпоноватьРезультат(Док)Если пользователь будет заниматься своими делами, мобыть тогда ему и запускать отчет не нужно? Пусть стартует по расписанию.
Для того чтобы длительные операции дополнительного объекта запускались в фоновом режиме, необходимо запустить выполнение команды в фоновом задании и после его завершения принять результат.
Программный интерфейс, помогающий запускать длительные операции в фоне, представлен следующими процедурами:
1. В общем модуле ДополнительныеОтчетыИОбработкиКлиент: ВыполнитьКомандуВФоне и ПоказатьРезультатВыполненияКоманды.
2. В общем модуле ДополнительныеОтчетыИОбработки: ВыполнитьКомандуИзФормыВнешнегоОбъекта и ВыполнитьКоманду.
Рассмотрим подключение по шагам:
Шаг 1. Добавить реквизит управляемой формы для хранения ссылки внешнего объекта с типом СправочникСсылка.ДополнительныеОтчетыИОбработки. Например, «ОбъектСсылка».
Шаг 2. В обработчике события управляемой формы ПриСозданииНаСервере сохранить ссылку внешнего объекта:
&НаСервере
Шаг 3. Добавить функцию для выполнения команды в файловом режиме по шаблону (в блок служебных процедур и функций):
&НаСервере
Шаг 4. В обработчике команды управляемой формы, которая инициирует длительную операцию, добавить код по шаблону:
&НаКлиенте
Шаг 5. В обработчике события управляемой формы ОбработкаВыбора добавить код для приемки результата:
&НаКлиенте
В данной статье описан пример кода для запуска фонового задания из формы внешней обработки средствами 1С БСП с возможностью отображения индикации.
Описание используемых процедур
Со всеми детальными описаниями и параметрами функций и процедур можно ознакомится в комментариях перед соответствующими процедурами в общих модулях.
Рассмотрим пример обработки.
Пример запуска процедуры внешней обработки в фоновом режиме с помощью функционала 1С БСП
В модуле объекта необходимо описать сведения о внешней обработке. Команда будет запускаться через команду формы.
На форме добавляем команду, при выполнении которой будет запускаться фоновое задание.
Таким образом, происходит запуск и выполнение фонового задания из внешней обработки, подключенной к базе с помощью функционала дополнительных обработок БСП.
Процесс работы будет выглядеть следующим образом:
Данное выполнение реализовано только с помощью функционала БСП. Часто бывает, что данное отображение недостаточно наглядно отображает работу процесса, и пользователи требуют строку индикации, потому что, известно, смотреть бесконечно можно на три вещи: огонь, воду и заполняющуюся строку индикации в 1с.
Далее заменяем исполняемую в модуле общей формы процедуру, в которой происходит считывание прогресса выполнения и вывод информации на форму, и добавляем строку:
Таким образом, при запуске фонового задания будет открыта форма длительной операции с индикатором прогресса.
2. Вывод индикации в форме внешней обработки.
Для реализации данного способа добавим на форму 2 реквизита и соответствующих элемента: Индикатор (тип Число) и СтрокаСостояния (тип Строка).
Идея способа заключается в том, чтобы прочитать прогресс выполняемого задания в форме и вывести данные пользователю, не открывая форму длительной операции.
Для этого добавим Обработчик ожидания, который будет считывать прогресс и выводить его на форму, и саму процедуру считывания прогресса на сервере.
-в процедуре ОбработатьДанные добавим обработку прогресса при завершении выполнения задания:
Читайте также: