Имя: Пароль:
1C
1С v8
Запретить фоновые отчеты
,
0 romix
 
22.07.15
20:06
УФ, 1С 8.3, SQL.

http://v8.1c.ru/overview/Term_000000117.htm Цитата:
«Выполнение отчетов в фоновом режиме. Отчеты, использующие систему компоновки данных, могут формироваться в фоновом режиме. Запустив отчет пользователь может продолжать свою работу с программой, а на время формирования отчета вместо данных будет отображаться специальная картинка».

У меня такое чувство, что отчет, сформированный, к примеру, со слишком широкими условиями (и который будет выполняться долго) уходит куда-то в фон, и никакие действия пользователя или администратора (даже срубание сеансов, вплоть до перезапуска сервера 1С) не помогают ЭТО прервать.

Вопрос, где можно посмотреть настройки выполнения отчетов фон/не фон, и отключаются ли они в принципе? Вызовов наподобие

ЭтаФорма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Фоновый);

в коде конфигурации я не вижу.
1 ДенисЧ
 
22.07.15
20:12
"где можно посмотреть настройки выполнения отчетов фон/не фон"

Подсказываю - в конфигураторе.
Хотя, ты можешь сказать, что его не существует, потому что у тебя нет исходных кодов...
Но тем не менее - смотрится именно там.
2 romix
 
22.07.15
20:19
(1) А где именно? Я навскидку не вижу.
3 hhhh
 
22.07.15
20:21
ну запускаешь поиск по слову ДлительныеОперации
4 ДенисЧ
 
22.07.15
20:25
(2) Ладно, подскажу. В последний раз...
Ты в конфигурации где-нибудь видел код типа Если НЕ Константы.ЗапускатьОтчётыВФоновомРежиме.Получить() Тогда...
?

Я так подозреваю, что нет.

А знаешь, почему?

Потому что там такого кода нет.!
Не летали^W^W не предусмотрели таких забавных желаний разработчики...
5 romix
 
22.07.15
20:34
(3) Ага есть такое.
(4) Этого нет.
6 Сниф
 
22.07.15
20:43
(3) открыл для себя удивительный мир ДлительныхОпераций в ут 11.

ОченьОченьДолгиеОперацииВыМожетеЛечьПоспать
7 romix
 
22.07.15
20:47
(3) В отчете не видно обращений в эту подсистему. Там просто отчет на СКД.
(6) Отчет (самый обычный на СКД) легко срубается пользователем по нажатию Escape, но где-то внутри системы продолжается его бурное исполнение.
8 romix
 
22.07.15
20:54
Тут деятель разобрался, как отключить фоновые отчеты (по умолчанию в клиент-серверных базах они выполняются в фоне, в файловых - непосредственно). Но не написал, как именно это надлежит сделать.
http://sales1c.ru/skd-strannoe-povedenie-otcheta.html
9 romix
 
22.07.15
21:00
Вот еще рецепт:
http://www.intalev.ru/products/km/manual/index.html?cm7_faq_sources_adapters_reports_whynotrunanexternalreport.htm

«Для того чтобы исключить возникновение подобной ситуации, следует в отчете отказаться от фонового выполнения, указав в явном виде режим формирования отчета. Для этого необхомидо заменить стандартную команду отчета Сформировать на аналогичную с программным обработчиком нажатия в модуле формы отчета:

#НаКлиенте
Процедура Сформировать()
СкомпоноватьРезультат(РежимКомпоновкиРезультата.Непосредственно);
КонецПроцедуры

Фоновое выполнение отчета следует использовать исключительно для сложных, длительно выполняющихся отчетов. Если этот режим использовать для простых отчетов, то временные затраты платформы на запуск и выполнения фонового задания могут значительно превышать временные затраты, связанные с традиционным выполнением отчета».
10 Сниф
 
22.07.15
21:06
А я смотрю код отчета КнигаПокупок в УТ 11:

&НаСервере
Процедура ОтменитьВыполнениеЗадания()    
    ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания);    
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()

    Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
        ОтменитьВыполнениеЗадания();
    КонецЕсли;

КонецПроцедуры
11 Сниф
 
22.07.15
21:09
+(10) по идее должен быть какой-то перехватчик интерактивного прерывания вроде ОбработкаПрерыванияПользователя в котором и вызывать ОтменитьВыполнениеЗадания().

Но ОбработкаПрерыванияПользователя  используется в цикле только, кажется. И получается нет цикла - некуда повесить и обработчик :(
12 romix
 
22.07.15
21:21
(11) Если налагать запрет (9), то пользователь получает белый экран. Непонятно как совместить приятное с полезным: может рубить вообще все фоновые задания этого пользователя, когда он закрывает любой отчет?
13 romix
 
22.07.15
21:23
Или что-то вроде вопроса «Отчет выполняется более 5 минут. Продолжить выполнение отчета?».
14 Сниф
 
22.07.15
21:24
в отчете такой код     Если ИБФайловая Тогда
        АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
        УчетНДСПереопределяемый.ПодготовитьПараметрыКнигиПокупок(ПараметрыОтчета, АдресХранилища);
        РезультатВыполнения = Новый Структура("ЗаданиеВыполнено", Истина);
    Иначе
        РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
            УникальныйИдентификатор,
            "УчетНДСПереопределяемый.ПодготовитьПараметрыКнигиПокупок",
            ПараметрыОтчета,
            БухгалтерскиеОтчетыКлиентСервер.ПолучитьНаименованиеЗаданияВыполненияОтчета(ЭтаФорма));
            
        ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания;
        АдресХранилища       = РезультатВыполнения.АдресХранилища;
    КонецЕсли;
15 Сниф
 
22.07.15
21:25
а ты сделай так:
Если ИБФайловая ИЛИ ЯНеЛюблюФоновыеОтчеты Тогда

Тогда тебе останется заполнять переменную ЯНеЛюблюФоновыеОтчеты
16 romix
 
22.07.15
21:28
(15) Мне сейчас говорят что белый экран неприемлем, надо вот это круглое солнышко рисовать, чтобы оно шевелилось. Думаю что (14) правильный вариант, он же во всех типовых.

Хотя может уже платформа научилась срубать сеанс при закрытии окна... Где-то пробегало в новостях релизов 1С что-то в этом духе.
17 Сниф
 
22.07.15
21:30
Попробуй как в (14). По сути ты принудительно гонишь алгоритм по той ветке, где он идет в файловой. Может так быстрее будет.
18 romix
 
22.07.15
21:33
http://downloads.v8.1c.ru/content/Comm/Platform/8_2_13_219/V8Update.htm

Версия 8.2.13
«Выполняется завершение работы отчета, работающего в фоновом режиме, при закрытии формы отчета, даже если в обработчике события "ПередЗакрытием" формы отчета  параметру "СтандартнаяОбработка" будет присвоено значение "Ложь". Собственно остановка фонового задания, выполняющего отчет, выполняется после выполнения обработчика "ПриЗакрытии" формы отчета».
19 romix
 
22.07.15
21:34
У меня режим совместимости Версия 8.2.16
Версия 1С:Предприятие 8.3 (8.3.5.1517)
20 Сниф
 
22.07.15
21:41
(18) для этого можно было не читать инструкцию, код ПриЗакрытии в (10).
21 romix
 
22.07.15
21:46
(20) Т.е. если этого не напишешь во всех отчетах и их формах, то пользователи будут плодить фоновые задания?
22 Сниф
 
22.07.15
21:52
(21) не во всех отчетах. у большинства простых отчетов нет даже формы. соответственно, они не должны, ИМХО, порождать фоновые задания.
речь только о сложных отчетах, где форма есть и в форме явно прописан вызов ДлительныеОперации.ЗапуститьВыполнениеВФоне
23 romix
 
22.07.15
21:52
У фоновых заданий я смотрю есть методы платформы НайтиПоУникальномуИдентификатору и ПолучитьФоновыеЗадания.
24 romix
 
22.07.15
21:55
(22) Да вот я подозреваю что они все порождают (и плодят) фоновые задания. У меня сейчас куча отчетов вообще без форм, а кое-где есть простая форма без обращения к функциональности по прерыванию или обращению к фоновым заданиям (что видимо не есть гут).
25 Сниф
 
22.07.15
21:59
(24) да вряд ли, если только у тебя не завелся искусственный разум на 1С)
Поставь точку останова в ДлительныеОперации.ЗапуститьВыполнениеВФоне и погляди. Вряд ли платформа может порождать фоновые задания, скорее всё идет через эту фунцайку.
26 romix
 
22.07.15
22:12
(25) Конфа не типовая, в основном просто СКД-отчеты без форм, обращения (10) там нигде нет. Размножение пользователей можно узреть в списке сеансов...
27 hhhh
 
23.07.15
00:18
(26) формы-то зачем ищете? И  ежу ведь понятно, что модуль объекта надо смотреть. И модуль менеджера.
28 Сниф
 
23.07.15
13:37
(27) Ёж будет удивлен, но в типовых конфигурациях код, вызывающий выполнения отчета в фоне, находится в форме. Видимо, чтобы показывать надпись "Отчет формируется" и дать пользователю возможность прекратить формирование отчета (закрыв отчет).
Программист всегда исправляет последнюю ошибку.