Имя: Пароль:
1C
1C 7.7
v7: Формекс. Процедура ПослеОткрытия()
0 hovnokoder
 
05.09.14
12:15
Здраствуйте уважаемые.
Есть такая задача:
Нужно после открытия формы отчета подготовить входные данные (создать и заполнить таблицу значений).
Только некрасиво получается.
Если пишу заполнение таблицы значений в ПриОткрытии(), то форма не появляется до тех пор, пока ТЗ не заполнится.
Если пишу заполнение таблицы значений в ПослеОткрытия(), то форма также не появляется.
Что посоветуете?
1 hovnokoder
 
05.09.14
12:32
В ПослеОткрытия() как-бы появляется форма, но это назвать формой никак нельзя: отдельные очертания реквизитов формы.
2 akaBrr
 
05.09.14
12:43
(0) обработчик ожидания советую
3 Масянька
 
05.09.14
13:14
(0) Попробуй - ФормаПриСоздании
4 lavalit
 
05.09.14
13:28
А большая ТЗ? Как вариант (при небольшой ТЗ), пока заполняется делать ее невидимой.. она просто тупо быстрее загрузится, чем если бы она была видимая на форме.
5 varelchik
 
05.09.14
14:37
(4)+100.
(0)И вообще когда заполняется ТЗ на форме идет постоянное ее обновление.
Так что последуй слудуй совету (4)
6 hovnokoder
 
05.09.14
14:41
(3) Это откуда? В описаннии формекса такого не нащел.
(4) (5) ТЗ не на форме.  Да ТЗ относительно большая, примерно 10000 строк (6 колонок).
7 hovnokoder
 
05.09.14
14:43
Проблема в том что пока ТЗ не сформировалась. Форма отчёта не открывается. Посторюсь: на форме нет ТЗ.
8 hovnokoder
 
05.09.14
14:45
В смысле пользователь нажимает. "Отрыть нужный отчет". И на экране ничего не происходит 2-3 сек. Потом появляется форма отчета
9 Chum
 
05.09.14
14:48
(8) нафига ТЗ из 10К строк на форме? Справочник материалов засасываешь?
10 hovnokoder
 
05.09.14
14:48
(9) Повторюсь еще раз: ТЗ нет на форме.
11 hovnokoder
 
05.09.14
14:56
Посоветуйте как быть? Как после того как откроется форма отчета, автоматически запустить определенную процедуру из этого же отчета.
12 varelchik
 
05.09.14
15:05
(11) Повторюсь?
А нафига такой объем?
13 hovnokoder
 
05.09.14
15:26
(12) Какая разница?
Ладно опишу для чего.
В отчете получаю некую нужную инфу. Так как отчет нужно формировать несколько раз с разными параметрами (скажем так для любого выбранного контрагента), есть смысл общую информацию для записать в ТЗ (чтобы каждый раз её не формировать - она какраз формируется 2-3 сек).
В ТЗ (не на форме) заполняю общую входную информацию. И уже при формировании отчета использую эту ТЗ (что намного быстрее)
14 rinaty17
 
05.09.14
15:29
13) чушь полная
15 Злопчинский
 
05.09.14
15:34
если заполнение данными  идет 2-3 секунды - по любому придется ждать. и пофиг откуда запускать формирование.
16 hovnokoder
 
05.09.14
15:35
(14) чушь или нет, неважно. Я прошу конкретного совета: Как после того, как откроется форма отчета, запустить нужную мне процедуру.
Больше ничего.
17 hovnokoder
 
05.09.14
15:39
(15) Вопрос в том, что когда откроется форма отчета, пользователю будет спокойнее - он будет знать что отчет он уже открыл (а так неизвестно выбрал он из меню нужный отчет или нет.
А чтобы раньше времени не пытался нажимать кнопки на форме отчета, я сделал Видимость(0) для елементов.
18 hovnokoder
 
05.09.14
15:40
+ (15) 2-3 сек это только один раз при открытии формы, а потом уже мгновенно формируется отчет
19 hovnokoder
 
05.09.14
15:44
Где же ЁПРСТ. Он бы посоветовал гениальное решение (в прочем как всегда).....
20 varelchik
 
05.09.14
15:45
(19) Он тебе тоже самое что и остальные скажет.
21 hovnokoder
 
05.09.14
15:51
(20) "Чушь полная" точно не скажет.
Так что мне делать?
Как после того, как откроется форма отчета, запустить нужную мне процедуру. Или такое невозможно в принципе?
22 hovnokoder
 
05.09.14
15:58
Раз невозможно (или никто незнает как) решил сделать обходным путём: При откритии в переменную УжеСформированаТЗ пишу "0".
При первом формировании отчета (если УжеСформированаТЗ=0) формирую мою ТЗ и пишу УжеСформированаТЗ=1).
При последующих формированиях отчета моя ТЗ уже повторно небудет формироваться.
Тоисть отчёт будет формироваться относительно долго только первый раз.
Как-никак выход для hovnokodera.....
23 varelchik
 
05.09.14
16:08
(22)оригинальный подход.
вот только вы ни забывайте что база штука динамическая.
и данные в ней постоянно меняются.
интересно пользователь ну загрузил эту твою тз.
а другой пользователь эти загруженные данные изменил.
ваши действия при этом?
24 varelchik
 
05.09.14
16:10
мда и ник соответствующий.
25 hovnokoder
 
05.09.14
16:14
(23) 1. Отчет в пользователя же небудет висеть открытим месяцами.
2. Данные, которые заполняются в мою ТЗ изменяются максимум 2 раза в месяц.
26 varelchik
 
05.09.14
16:15
(0) вы б еще это в глобальную переменную загрузили эту тз.
тогда вообще проблем не будет.
вот токо памяти 1С сожреть немерочно.
27 hovnokoder
 
05.09.14
16:18
(26) я не настолько hovnokoder, чтобы так делать.
28 Попытка1С
 
05.09.14
16:22
(0) ты бы всю задачу озвучил для начала
29 hovnokoder
 
05.09.14
16:25
(28) Задача:
Как после того как откроется форма отчета, автоматически запустить определенную процедуру из этого же отчета.

Остальное неважно.
30 Попытка1С
 
05.09.14
16:33
(0) Какой формат базы у тебя?
(29) Это бред какой то а не задача. Изначально что хочешь сделать расскажи.
31 hovnokoder
 
05.09.14
16:38
(30) такое как я озвучил в (29) в принципе возможно или нет?
32 lavalit
 
05.09.14
16:41
Вот может быть как еще вариант... Если уж надо "успокоить" пользователя... при открытии выведи какое нибудь предупреждение на пару сек.... во первых пользователь сразу поймет, что отчет запустился и второе пока предупреждение висит на экране табличка то все равно формируется а не ждет, пока погаснет предупреждение.
33 lavalit
 
05.09.14
16:42
через пару сек. предупреждение само погаснет а к этому времени и форма будет готова к отображению
34 lavalit
 
05.09.14
16:43
А если поставишь все это дело в проц "послеОткрытия" то на время заполнения таблицы появится рамочка самого отчета... ну конечно если она раскрыта на весь экран, то  рамочка особо и не заметна будет... эт минус
35 lavalit
 
05.09.14
16:45
а в предупреждалку можно какой нибудь анекдот запузырить.. пока пользователь читает и ржет.. оно уже и готово))) и все счастливы))
36 varelchik
 
05.09.14
16:49
(35) а вот тут вы неправы.
Пока он будет читать ничего не будет выполнятся.
пока он не нажметь ок.
37 hovnokoder
 
05.09.14
16:51
(36) тоже самое хотел сказать.
Оставлю так как решил: Формирую ТЗ при первом выполнении отчета.
38 Попытка1С
 
05.09.14
16:52
Формат базы какой, второй раз спрашиваю
39 lavalit
 
05.09.14
16:54
Валерчику. я проверял. ставлю предупреждение на 1 сек. и сразу цикл н азаполнение таблички на 10000 циклов.... благополучно предупреждалка переходит в режим обратного отсчета и так как всего 1сек она ждет окончания цикла, а если поставить скажем 5 сек ну с запасом. то ничего не ждет предупреждалка гаснет и на этом все))
40 hovnokoder
 
05.09.14
16:55
(38) формат базы - ДБФ
41 Попытка1С
 
05.09.14
16:58
надо просто при открытии запустить в фоне заполнение таблички другой обработкой например.
42 lavalit
 
05.09.14
16:58
Перем Т;
//*******************************************
Процедура Сформировать()
    Для сч=1 По 100000 Цикл
        Т.НоваяСтрока();
        Т.номер = сч;
    КонецЦикла;
    Сообщить("ок");
КонецПроцедуры
//******************************************************************************
//
Процедура ПослеОткрытия()
    Предупреждение("Ждите",1);
    Сформировать();
КонецПроцедуры

Т = СоздатьОбъект("ТаблицаЗначений");
Т.НоваяКолонка("номер");
43 lavalit
 
05.09.14
16:59
Ну лишнее можно убрать))
44 Garry1010
 
05.09.14
17:01
(32)(36)А почему бы тогда не использовать ПоказатьОповещениеПользователя().
45 lavalit
 
05.09.14
17:01
Скажу более того, если заполнятьтаблицу после открытия с предупреждалкой, то форма отрисовывается на экране нормально, полностью с кнопками,барами,и прочими атрибутами.)))
46 lavalit
 
05.09.14
17:04
(44) Это некая процедура? она может и есть у кого то в моей конфиге такого нет.. поентому не скажу как она работает
47 Garry1010
 
05.09.14
17:26
(46) Хммм. Это вообще системная вещь - в синтакс-помощнике тоже не видите?
48 КонецЦикла
 
05.09.14
17:27
Не очень понятно, но можно сделать ТЗ не видимой до обновления/заполнения
49 КонецЦикла
 
05.09.14
17:29
Все понятно теперь...
Жениться Вам надо, батенька
50 hovnokoder
 
05.09.14
17:52
(44) речь идет о 7.7
(48) ее вообще нет на форме.
51 Garry1010
 
05.09.14
18:20
(50) 7.7? Упссс.
Хммм... странно, откуда в 7.7 ПослеОткрытия()? Вот её я не вижу.
52 lavalit
 
05.09.14
18:30
(47) d 1C 7.7 нет такой системной вещи
53 lavalit
 
05.09.14
18:31
(51) После открытия можно использовать при наличии формекса
54 Злопчинский
 
05.09.14
22:06
делаем обычным образом штатно
.
Процедура ЗаполнитьТЗ()
  Форма.ОбработкаОжидания("",0);
  //тут заполняем ТЗ
КонецПроцедуры
//
Процедура ПриОткрытии()
  Форма.ОбработкаОжидания("ЗаполнитьТЗ",ТутТаймерВсекундахИлиМелисикундах);

КонецПроцедуры
55 oslokot
 
05.09.14
22:23
(51) ПослеСозданияФормы() формекс
Программист всегда исправляет последнюю ошибку.