|
Недостаточно памяти при работе с РС | ☑ | ||
---|---|---|---|---|
0
kozhem1990
15.02.16
✎
11:08
|
Есть регистр сведений (примерно 50000 записей), есть таблица значений (140000 записей). Перебираю записи РС, и для каждой из них ищу соответствие в таблице значений по определенному ресурсу, через функцию Найти(). Если функция Найти() возвращает найденную запись, то создаю менеджер записи в этом же регистре и записываю в попытке. при отладке выдает окно ошибки с единственным сообщение "Недостаточно памяти".
|
|||
1
ДенисЧ
15.02.16
✎
11:09
|
А памяти на компе 640КБ, которых хватит всем?
|
|||
2
Zhuravlik
15.02.16
✎
11:10
|
В смысле через "Найти()" - ресурс строковый? А запросом по "ПОДОБНО" никак? Обязательно столько информации в тз помещать?
з.ы. недостаточно памяти через попытку не победишь)) |
|||
3
kozhem1990
15.02.16
✎
11:18
|
Перед отладкой заглянул в диспетчер: доступно 2,5 Гб памяти. Попытку использую, чтобы записать в лог ошибку, если такая такая имеет метсо быть при записи в РС.
|
|||
4
H A D G E H O G s
15.02.16
✎
11:18
|
код покажи
|
|||
5
kozhem1990
15.02.16
✎
11:19
|
поиск = ТЗ.Найти(<Значение>, <Колонки>), - где <Значение>- это мой ресурс, а <Колонки>- имя колонки таблицы значения, по которой ищу
|
|||
6
kozhem1990
15.02.16
✎
11:21
|
Для каждого Строка Из ТаблицаРС Цикл
ТЗ.Индексы.Добавить("nn"); Поиск = ТЗ.Найти(Строка.НоменклатурныйНомер, "nn"); Если ЗначениеЗаполнено(Поиск) Тогда МенеджерЗаписи = РегистрыСведений.НоменклатурныеНомера.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Номенклатура = Строка.Номенклатура; МенеджерЗаписи.СерияНоменклатуры = Строка.СерияНоменклатуры; МенеджерЗаписи.ДокументПартии = Строка.ДокументПартии; МенеджерЗаписи.Прочитать(); МенеджерЗаписи.ДатаПоследнегоДвиженияИС = Поиск[0].Dkr; Попытка МенеджерЗаписи.Записать(); Текст.ЗаписатьСтроку("" + ТекущаяДата() + " " + "Cоздана запись с номенклатурным номером " + Строка.НоменклатурныйНомер); Текст.ЗаписатьСтроку(""); Исключение Текст.ЗаписатьСтроку("" + ТекущаяДата() + " " + "Не удалось создать запись в регистре с номенклатурным номером " + Строка.НоменклатурныйНомер); Текст.ЗаписатьСтроку(""); КонецПопытки; КонецЕсли; КонецЦикла; |
|||
7
kozhem1990
15.02.16
✎
11:23
|
ТаблицаРС - в нее выгрузил РС НоменклатурныеНомера через запрос, а ТЗ - таблица значений.
|
|||
8
ObjectRelation Model
15.02.16
✎
11:23
|
(6) а зачем индекс создавать в цикле?
|
|||
9
H A D G E H O G s
15.02.16
✎
11:23
|
ТЗ.Индексы.Добавить("nn");
вынести за цикл |
|||
10
kozhem1990
15.02.16
✎
11:24
|
попробую сейчас, спасибо)
|
|||
11
H A D G E H O G s
15.02.16
✎
11:25
|
Но и этого может не хватить, индексы занимают дозвизды места.
Найти в таблицах через Merge |
|||
12
H A D G E H O G s
15.02.16
✎
11:26
|
Вот это тоже не понятно
Поиск[0].Dkr; |
|||
13
kozhem1990
15.02.16
✎
11:35
|
(12) Дело было в индексе, вроде не вылетает больше, спасибо еще раз. Поиск[0].Dkr - несколько записей может быть найдено по данному ресурсу в ТЗ, я выбираю самую первую найденную.
|
|||
14
kozhem1990
15.02.16
✎
11:45
|
Друзья, спасибо всем, можно тему закрывать: действительно, поместил по неопытности создание индекса в цикл, вынес за его пределы, и всё заработало)
|
|||
15
H A D G E H O G s
15.02.16
✎
11:50
|
(13) "несколько записей может быть найдено по данному ресурсу в ТЗ, я выбираю самую первую найденную."
неправильно |
|||
16
kozhem1990
15.02.16
✎
12:19
|
(13) Спасибо, поменял код: теперь ищу не в ТЗ, а перебираю записи ТЗ и ищу соответствие в РС.
|
|||
17
kozhem1990
15.02.16
✎
12:19
|
(15) Спасибо, поменял код: теперь ищу не в ТЗ, а перебираю записи ТЗ и ищу соответствие в РС.
|
|||
18
HardBall
15.02.16
✎
12:29
|
ТЗ во временную таблицу.
Соединяй с в запросе РС по значению ресурса. Перебирай выборку. Писай в регистр. Профит. |
|||
19
kozhem1990
15.02.16
✎
13:26
|
(18) На будущее это мне, учту, пока оптимизировать мне так не надо профессионально, уже отработало и так, загрузил данные, но спасибо)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |