Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема RecconectNative() (число прочтений - 2940 )
Riman
YaBB Newbies
*
Отсутствует



Сообщений: 11
Зарегистрирован: 26. Августа 2008
Пол: Мужской
RecconectNative()
27. Августа 2008 :: 14:18
Печать  
Добрый день!

Не могу разобраться с методом RecconectNative().
Хочу побороть замедление проведения документов как описано в:
http://www.1cpp.ru/forum/YaBB.pl?num=1148038411.

При проведении документов при первом же выполнении метода RecconectNative() падает 1С и вываливает ошибку:
"Инструкция по адресу "0х00640162" обратилась к памяти по адресу "0х056е0165". Память не может быть "written". Плачущий

Если же не проводить документы, а просто периодически выполнять метод RecconectNative() 1С работает нормально и никаких ошибок не вылетает.

      DataBase = СоздатьОбъект("ODBCDatabase");
     DataBase.Attach1C();
       ...
      ОсталосьВСеансе = Константа.КоличествоДокументовДляСлПроведения;
     Док = СоздатьОбъект("Документ");
     ТЗ.ВыбратьСтроки();
     Пока ТЗ.ПолучитьСтроку() = 1 Цикл
           Док.НайтиДокумент(ТЗ.Док);
           Док.Провести();
           ОсталосьВСеансе = ОсталосьВСеансе - 1;
           Если ОсталосьВСеансе = 0 Тогда
                 Сообщить("===== Реконнект ======");
                 DataBase.ReconnectNative();
                 ОсталосьВСеансе = Константа.КоличествоДокументовДляСлПроведения;
           КонецЕсли;
     КонецЦикла;

  

Сделал дело - гуляй смело!
Наверх
 
IP записан
 
Riman
YaBB Newbies
*
Отсутствует



Сообщений: 11
Зарегистрирован: 26. Августа 2008
Пол: Мужской
Re: RecconectNative()
Ответ #1 - 27. Августа 2008 :: 18:39
Печать  
Кто-то помочь может? Хочется по человечески сделать, а не закрывать - открывать 1С... У меня сейчас как раз второй вариант и работает... Но совсем не прикольно когда 1С открывается и закрывается минимум 50 раз  Печаль... Мало ли что может произойти при очередном открытии...
  

Сделал дело - гуляй смело!
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: RecconectNative()
Ответ #2 - 27. Августа 2008 :: 19:25
Печать  
Поиск по слову ReconnectNative и изучение документации должны помочь.
Здесь есть успешные результаты использования, так что все получится.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: RecconectNative()
Ответ #3 - 28. Августа 2008 :: 07:05
Печать  
Поробуй так:
     Текст="
     |select
     |j.iddoc [Док $Документ],
     |j.iddocdef Док_вид
     |from _1SJourn j (NOLOCK)
     |WHERE
     |j.closed &1=1
     |and j.ismark=0
     |and j.date_time_iddoc between :НачДата~ AND :КонДата~
     |and ("+УсловиеПоследовательностей+")
     |ORDER BY
     |j.date_time_iddoc
     |";
     ТЗ=СоздатьОбъект("ТаблицаЗначений");
     ТЗ=Запрос.ВыполнитьИнструкцию(Текст);
     Всего=ТЗ.КоличествоСтрок();
     Счетчик=1;
     Тран=0;
     НачатьТранзакцию();
     глГрупповаяОбработка=1;
     ТЗ.ВыбратьСтроки();
     лДок=СоздатьОбъект("Документ");
     Пока ТЗ.ПолучитьСтроку() = 1 Цикл
           лДок.НайтиДокумент(ТЗ.Док);
           Если фВыводитьИнформацию=1 Тогда
                 Сообщить("Проведение :"+Строка(лДок)+" "+ТекущееВремя());
           КонецЕсли;
           Инфо="Обработано "+Строка(Окр(Счетчик/Всего*100,2))+" %
           |Транзакция "+Строка(Тран);
           Если лДок.Провести()=0 Тогда
                 глГрупповаяОбработка=0;
                 ОтменитьТранзакцию();
                 Возврат;
           КонецЕсли;
           Если Счетчик%КвоВТранзакции=0 Тогда
                 ЗафиксироватьТранзакцию();
                 Тран=Тран+1;
                 лДок=0;
                 База=СоздатьОбъект("ODBCDataBase");
                 База.ReconnectNative();
                 Для н=1 по 10000 Цикл
                 КонецЦикла;
                 лДок=СоздатьОбъект("Документ");
                 НачатьТранзакцию();
           КонецЕсли;
           Счетчик=Счетчик+1;
           Форма.Обновить();
     КонецЦикла;
     Предупреждение("Восстановление завершено!",20);
     Сообщить("Восстановление завершено "+ТекущееВремя());
     ЗафиксироватьТранзакцию();
  
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: RecconectNative()
Ответ #4 - 28. Августа 2008 :: 07:24
Печать  
Заново создавай ссылку на объект типа Документ после реконнекта...
Код
Выбрать все
.
.
.
   Док=0;
   Сообщить("===== Реконнект ======");
   DataBase.ReconnectNative();
   Док = СоздатьОбъект("Документ");
.
.
.
 

  
Наверх
ICQ  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: RecconectNative()
Ответ #5 - 28. Августа 2008 :: 08:18
Печать  
А я разве не это написал?
И чтобы никаких форм списков небыло открыто!
  
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: RecconectNative()
Ответ #6 - 28. Августа 2008 :: 08:36
Печать  
varelchik писал(а) 28. Августа 2008 :: 08:18:
А я разве не это написал?
И чтобы никаких форм списков небыло открыто!

Ты написал именно это, а вот у автора этого нет. Ну и не только форм списков, но и открытух курсоров вообще (т.е. выборок из справочников и документов.)
  
Наверх
ICQ  
IP записан
 
Riman
YaBB Newbies
*
Отсутствует



Сообщений: 11
Зарегистрирован: 26. Августа 2008
Пол: Мужской
Re: RecconectNative()
Ответ #7 - 28. Августа 2008 :: 09:35
Печать  
Спасибо Mikeware и varelchik!
Все заработало!!! Улыбка Улыбка Улыбка

  

Сделал дело - гуляй смело!
Наверх
 
IP записан
 
GEORG
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 43
Зарегистрирован: 15. Мая 2008
Re: RecconectNative()
Ответ #8 - 28. Августа 2008 :: 09:43
Печать  
                         База = СоздатьОбъект("ODBCDatabase");
     Если (МонопольныйРежим() > 0) Тогда    
           НачДата1 = Последовательность.Восстановление.ПолучитьДату();
           Пока НачДата1<= ТекущаяДата() Цикл
                 УстановитьТАна(НачДата1);
                 дкДок = "";
                 База.ReconnectNative();
                 дкДок = СоздатьОбъект("Документ");
                 Запрос=СоздатьОбъект("ODBCRecordset");
                 Запрос.УстановитьТекстовыйПараметр("НачДата",НачДата1);
                 Запрос.УстановитьТекстовыйПараметр("КонДата",НачДата1);
                 ТЗ=Запрос.ВыполнитьИнструкцию("
                 |select
                 | iddoc [Документ $Документ],
                 | iddocdef Документ_вид
                 |from _1sjourn j (nolock)
                 |where j.date_time_iddoc between :НачДата and :КонДата~
                 | and (J.CLOSED & 1 = 1)
                 |order by j.date_time_iddoc
                 |");
                 ТЗ.ВыбратьСтроки();
                 Пока ТЗ.ПолучитьСтроку()=1 Цикл
                       дкДок.НайтиДокумент(ТЗ.Документ);
                       Если      дкДок.Провести(2) > 0 Тогда
                             ПозицияДокумента = СформироватьПозициюДокумента(дкДок, 1);      
                             
                             Если Последовательность.Восстановление.ПринадлежитПоследовательности(дкДок.Вид()) = 1 Тогда
                                   Последовательность.Восстановление.Установить(ПозицияДокумента);      
                             КонецЕсли;
                       Иначе          
                             Сообщить("Не удалось восстановить последовательность"+ дкДок);
                             Возврат ;
                       КонецЕсли;      
                 КонецЦикла; 
                 НачДата1 = НачДата1 + 1;
           КонецЦикла;
           дкДок = ""; 
           СтараяПозицияТА = ПолучитьПозициюТА();
           Если  Дата(СтараяПозицияТА)<Дата(Константа.ДатаВосстановленияПоследовательности) Тогда
                 УстановитьТАна(Константа.ДатаВосстановленияПоследовательности) ;
           КонецЕсли;
           Форма.Обновить();
     КонецЕсли;
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать