Имя: Пароль:
1C
1С v8
Как найти битую запись
0 qazokm
 
11.03.15
11:33
Прохожу циклом по таблице, но где -то встречается битая запись и выходит сообщение "мало памяти" и 1с завершает работу, как найти на какой записи выходит ошибка?
выборка = Справочники.ХранилищеДополнительнойИнформации.Выбрать();
Пока выборка.Следующий() = 1 Цикл  
   Сообщить("Документ " + выборка.Объект.наименование);
КонецЦикла
Может как-то сохранять "Документ " + выборка.Объект.наименование в текстовый файл
1 mikecool
 
11.03.15
11:34
(0) нет объекта - нет и наименования
пробуй сохранять тип объекта и ссылку
2 Сергиус
 
11.03.15
11:36
(0)А ты уверен, что проблема в битой записи? Возможно реально памяти не хватает.. Попробуй сделать тоже самое, но запросом. В смысле делаешь выборку из запроса, и далее ее обход.
3 mikecool
 
11.03.15
11:37
(2) был как то на семинаре софтпоинта, показывали фишку - при попытке читать битый объект память кушалась неимоверно и приводила к нехватке памяти
4 qazokm
 
11.03.15
11:39
(2) При запросе полдня висел(снял задачу) и непонятно, то ли делается запрос, то ли висит
5 qazokm
 
11.03.15
11:42
не важно, вместо объекта.наименование, я могу поставить строковое поле ИмяФайла, все равно выходит та же ошибка, я просто не знаю как в 1с, при ошибке формируется файл с указанием ошибка, записи и т.д.
6 mikecool
 
11.03.15
11:43
(5) параметры запуска смотри - есть выходной файл
7 D_E_S_131
 
11.03.15
11:44
А сколько элементов в справочнике вообще? Ну и Сообщить() же не "бесплатно" для памяти происходит.
8 mistеr
 
11.03.15
11:49
(0) >как найти на какой записи выходит ошибка?

Каждые N записей вемсто Сообщить() пиши лог во внешний файл (с закрытием) или в ЖР.
Ну и выборку сделай упорядоченной.
9 qazokm
 
11.03.15
11:50
(7) 5000, там какой то рисунок офигенного размера в хранилище значений, а где не могу понять, пока делаю цикл
типа
Файл = Новый ЗаписьТекста("d:\x+i
10 Гёдза
 
11.03.15
11:51
запросами ищи
11 qazokm
 
11.03.15
11:53
(10) они подвешивают комп, первые 3000 проходят, дальше виснет...
12 Гёдза
 
11.03.15
11:56
(11) не верю. Покажи запрос
13 D_E_S_131
 
11.03.15
11:57
(11) Ты запросом выбирай представление от объекта (для идентификации) и хранилище (для определения размера).
14 qazokm
 
11.03.15
12:02
Спасибо, проблему решил, вылетает на 4667 записи
XDI = Справочники.ХранилищеДополнительнойИнформации.select();
i=0;
while xdi.next() = 1 do
    i=i+1;
    Файл = Новый ЗаписьТекста("d:\tmp\x"+строка(i));
    Файл.ЗаписатьСтроку(""+xdi.Объект);
    Файл.закрыть();
    
enddo;
15 rozer76
 
11.03.15
12:40
(14) ндя )