Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработка текстового файла в 8.2 приводит к зависанию  (Прочитано 15213 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« : 11-08-2010 20:17 » 

Доброй ночи Уважаемые. Столкнулся с такой проблемой.
Выгрузил в текст справочник базы 7ки.  Некоторые реквизиты пустые. соответственно имеются пустые строки. Получилось около 50 000 строк. При обработке все это зависает Жаль.
При Этом если выгружать не все реквизиты справочника 7ки. а только половину то все нормально обрабатывается

Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 11-08-2010 20:47 » 

Ищи ошибку в алгоритме - 50 тыс. строк это не мого для 8.Х
Вставь вывод в статус-бар номер обрабатываемой строки.
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 12-08-2010 06:44 » 

Kivals, а как вставить вывод в статусную строку?
Состояние() в управляемом приложение не обрабатывается.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 12-08-2010 14:09 » 

Цитата
Глобальный контекст (Global context)
Состояние (Status)

...
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.
Если у тебя обработка на сервере - тогда тебе периодически (каждые ХХХ строк) нужно возвращать управление клиенту, выводить состояние и продолжать дальше на сервере со следующей строки
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 12-08-2010 18:25 » 

Код:
ф = Новый ТекстовыйДокумент;
ф.Прочитать(путь);
Спр = Справочники.Номенклатура;
НовГруппа = Спр.СоздатьГруппу();
НовГруппа.Код=ф.ПолучитьСтроку(1);
новГруппа.Наименование=ф.ПолучитьСтроку(2);
НовГруппа.Записать();
слик = НовГруппа.Ссылка;
ном =2;
КонДок = ф.КоличествоСтрок();
пока ном<>КонДок цикл
Состояние(ном);
ном = ном+1;
ЛС = ф.ПолучитьСтроку(ном);
ном = ном+1;
Наим= ф.ПолучитьСтроку(ном);
наб.Код =ЛС;
наб.Наименование=Наим;
наб.Родитель=слик;
наб.Записать();
КонецЦикла;
Kivals, этот код приводит к ошибке. и каким образом возвращать управление клиенту?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 12-08-2010 18:38 » 

Этот код не понятно где выполняется. Нужно полное объявление процедуры с директивой (если мы говорим про управляемое приложение 8.2):
Код:
&НаКлиенте
Процедура СписокРолиСнятьФлажки(Команда)
...
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
...
КонецПроцедуры
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 12-08-2010 18:49 » 

Код:
&НаСервере
Процедура ОбработСпр()
ф = Новый ТекстовыйДокумент;
ф.Прочитать(путь);
Спр = Справочники.Номенклатура;
НовГруппа = Спр.СоздатьГруппу();
НовГруппа.Код=ф.ПолучитьСтроку(1);
новГруппа.Наименование=ф.ПолучитьСтроку(2);
НовГруппа.Записать();
слик = НовГруппа.Ссылка;
ном =2;
КонДок = ф.КоличествоСтрок();
пока ном<>КонДок цикл
Состояние(ном);
ном = ном+1;
ЛС = ф.ПолучитьСтроку(ном);
ном = ном+1;
Наим= ф.ПолучитьСтроку(ном);
наб.Код =ЛС;
наб.Наименование=Наим;
наб.Родитель=слик;
наб.Записать();
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
ОбработСпр();
КонецПроцедуры
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 13-08-2010 02:41 » 

Код:
&НаСервере
Функция ОбработСпр(Ном=0)
ф = Новый ТекстовыйДокумент;
ф.Прочитать(Путь);
Спр = Справочники.Номенклатура;
Если Ном=0 Тогда
НовГруппа = Спр.СоздатьГруппу();
НовГруппа.Код=ф.ПолучитьСтроку(1);
новГруппа.Наименование=ф.ПолучитьСтроку(2);
НовГруппа.Записать();
слик = НовГруппа.Ссылка;
Ном=2;
КонецЕсли;
КонДок = ф.КоличествоСтрок();
Пока Ном<КонДок Цикл // Вот здесь наверное и ошибка: в случае когда количество строк непарное
//Состояние(ном); На сервере не работает
ном = ном+1;
ЛС = ф.ПолучитьСтроку(ном);
ном = ном+1;
Наим= ф.ПолучитьСтроку(ном);
наб.Код =ЛС;
наб.Наименование=Наим;
наб.Родитель=слик;
наб.Записать();
Если Ном%100=0 Тогда Возврат 0; КонецЕсли;
КонецЦикла;
Возврат 1;
КонецФункции

&НаКлиенте
Процедура Команда1(Команда)
Ном=0;
Пока ОбработСпр(Ном)=0 Цикл
Состояние(Ном); // На клиенте!
КонецЦикла;
КонецПроцедуры
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 13-08-2010 19:58 » 

Kivals, когда выгружаю справочник полностью получается так что две последние строки пустые.
замерил количество строк с помощью notepad++. он показывает на одну строку больше чем считает
ф.количество строк (). думаю что мне надо заместо пустых строк вставлять какой нить символ например "0". так скорее всего излечится. Только непонятно почему 8ка не может верно подсчитать количество строк.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 14-08-2010 06:33 » 

Я бы одну запись писал в одну строку, а разделял табуляцией
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 14-08-2010 08:35 » 

Kivals, спасибо все заработало.
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 14-08-2010 20:31 » 

Kivals, хочу спросить после обработки файла просмотрел что получилось так там некоторые элементы не входят в созданную группу хотя и подчиняются по владельцу. Можно ли это как-то исправить? или вручную через переместить в группу?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 15-08-2010 16:12 » 

У меня небольшая ошибка в коде - я группу создавал (инициализировал) только при первом вызове ОбработСпр(). Соответственно при следующих вызовах надо искать ее по наименованию/коду в первых строках
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 16-08-2010 10:53 » 

Kivals, еще раз Спасибо!!!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines