Имя: Пароль:
1C
1C 7.7
v7: Пропадает сообщение в статусной строке
0 zelenprog
 
26.09.12
11:59
В обработке в статусную строку вывожу сообщение.
Оно там мелькает, но потом в статусной строке опять появляется:
".... нажмите F1"
Из-за чего так происходит?
1 Heckfy
 
26.09.12
11:59
Цикл закончился.
2 Godofsin
 
26.09.12
11:59
От того, что в коде очищается окно сообщений
3 1Сергей
 
26.09.12
11:59
так и должно быть
4 Godofsin
 
26.09.12
12:00
упс, сори, (2) не в тему )
5 Ork
 
26.09.12
12:00
(0) Система хочет сказать "Усьо сделано шеф. Я в стойке". Т. е. фокус попал опять на форму. Хочешь свое сообщение оставить "для потомков" - дублируй в текст на форме.
6 zelenprog
 
26.09.12
12:04
(1) нет, не закончился
7 Heckfy
 
26.09.12
12:05
(6) Тады код в студию
8 zelenprog
 
26.09.12
12:08
код удаления документов:



   НачатьТранзакцию();

   лСписокДокументовДляУдаления = СоздатьОбъект("СписокЗначений");
   
   Док = СоздатьОбъект("Документ");
   Док.ОбратныйПорядок(1);
   Док.УстановитьФильтр(1, 1, 1, 1, 1, 1);
   Док.ВыбратьДокументы(, дПоследняяДата);
   Пока Док.ПолучитьДокумент() = 1 Цикл
       
       лСчетчик = лСчетчик + 1;
       лДокСтр = глПредставлениеДокументаМой(Док);
       лСообщить = 0;
       
       Если (лПредДатаСообщения <> Док.ДатаДок) ИЛИ (лСчетчик % 100 = 0) Тогда
           лСообщение = "    ... следующий документ: " + лДокСтр + " ...";
           Состояние(лСообщение);
           лПредДатаСообщения = Док.ДатаДок;
       КонецЕсли;
       
       лДокСсылка = Док.ТекущийДокумент();
       Если СписокСозданныхДок.НайтиЗначение(лДокСсылка) <> 0 Тогда
           Продолжить;                
       КонецЕсли;
       лСписокДокументовДляУдаления.ДобавитьЗначение(лДокСсылка);
       
       Если Док.Проведен() = 1 Тогда
           Док.СделатьНеПроведенным();
       КонецЕсли;
       Если Док.ПометкаУдаления() <> 1 Тогда
           Док.Удалить(0);
       КонецЕсли;

       лСчетчикУдаленных = лСчетчикУдаленных + 1;
       Если лСчетчикУдаленных % 400 = 0 Тогда
           ЗафиксироватьТранзакцию();
           НачатьТранзакцию();
       КонецЕсли;
       
   КонецЦикла;

   ЗафиксироватьТранзакцию();
9 dk
 
26.09.12
12:11
закомментируй нафиг условие по перед 2Состояние", не такой это ресурсоемкий код
10 zelenprog
 
26.09.12
12:14
(9) закомментировал...

но сейчас уже профессиональный интерес: что в коде заставляет строку состояния обнулиться?
11 Heckfy
 
26.09.12
12:16
(10) Из условия выпадает по ходу. Вынеси состояние в

       лСчетчик = лСчетчик + 1;
       лДокСтр = глПредставлениеДокументаМой(Док);
       лСообщить = 0;

       Состояние(лСообщение);
12 1Сергей
 
26.09.12
12:18
(10) видимо, в предопределенных процедурах ПриОтменеПроведения, ПриУдалении, состояние меняется
13 dk
 
26.09.12
12:18
может в платформе время жизни сообщения строки состояния есть или какое-нить другое сообщение вылазит типа глОживить
14 zelenprog
 
26.09.12
12:20
(11) нет не выпадает, срабатывает как и нужно через каждые 100 циклов или на новой дате,
но оно просто мелькнет и сразу превращается в "... F1 ..."
15 zelenprog
 
26.09.12
12:20
(12) другого сообщения точно нету, глОживить вообще в конфигурации есть, но в данной обработке не вызывается
16 zelenprog
 
26.09.12
12:20
грешу на транзакции
17 dk
 
26.09.12
12:21
комменть участки кода пока не найдешь "паршивца"
18 zelenprog
 
26.09.12
12:22
(17) жалко времени, думал может кто уже боролся с такой бедой
19 zelenprog
 
26.09.12
12:23
проще выводить для каждого прохода, вроде вывод состояния много времени не жрет
20 vladko
 
26.09.12
12:26
транзакция не виновата. Согласен с предположением (10)
21 zelenprog
 
26.09.12
12:27
(20) не понял с каким предположением, уточни...
22 orefkov
 
26.09.12
12:58
(0)
Сделай свою панельку в строке состояния и выводи туда текст перманентно.
23 zelenprog
 
26.09.12
16:17
(22) это понятно.

интересен внутренний механизм 1С-ки из-за чего так происходит.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший