|
падает 1С "Недостаточно памяти" | ☑ | ||
---|---|---|---|---|
0
Sasha_H
20.06.12
✎
15:15
|
Работаю с внешним источником данных, необходимо загружать товары, так вот на входе 165 000 строк, но все мне они не нужны а нужны лишь только по определенным условиям, а понять я могу какие нужны только соединив со своим справочником товаров.
Так вот первый запрос берет весь товар: ТекстЗапроса = "ВЫБРАТЬ | НоменклатураЛЦ.NOMEN_ID КАК ЛЦ_NOMEN_ID, | НоменклатураЛЦ.NAME КАК Наименование, | ТоварнаяМатрица.IS_ACTIVE КАК ЛЦ_Активный, | ТоварнаяМатрица.IS_VISIBLE КАК ЛЦ_Видимый |ИЗ | ВнешнийИсточникДанных."+СтруктураОбмена.НастройкаОбмена.ЛЦ_ВнешнийИсточникДанных+".Таблица.dbo_t_nomens КАК НоменклатураЛЦ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.dt_LC.Таблица.dbo_t_nom_objects КАК ТоварнаяМатрица | ПО НоменклатураЛЦ.NOMEN_ID = ТоварнаяМатрица.NOMEN_ID | И (ТоварнаяМатрица.OBJECT_ID = &ИДСклад)"; Запрос.УстановитьПараметр("ИДСклад",СтруктураОбмена.НастройкаОбмена.ЛЦ_ИдентификаторСклада); Запрос.Текст = ТекстЗапроса; РезЗапр = Запрос.Выполнить(); ВнешниеДанные = РезЗапр.Выгрузить(); Все отлично данные в таблице значений. Далее я этут ТЗ хочу обойти в другом запросе и при этом уже соеденить со своим справочником: Запрос = Новый Запрос("ВЫБРАТЬ | ВнешниеДанные.ЛЦ_NOMEN_ID, | ВнешниеДанные.Наименование, | ВнешниеДанные.ЛЦ_Активный, | ВнешниеДанные.ЛЦ_Видимый |ПОМЕСТИТЬ ВремТабл |ИЗ | &ВнешниеДанные КАК ВнешниеДанные |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВремТабл.ЛЦ_NOMEN_ID, | ВремТабл.Наименование, | ВремТабл.ЛЦ_Активный, | ВремТабл.ЛЦ_Видимый |ИЗ | ВремТабл КАК ВремТабл | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура | ПО ВремТабл.ЛЦ_NOMEN_ID = СпрНоменклатура.ЛЦ_NOMEN_ID |ГДЕ | ВЫБОР | КОГДА СпрНоменклатура.Ссылка ЕСТЬ NULL | И ВремТабл.ЛЦ_Видимый = 0 | ИЛИ СпрНоменклатура.ЛЦ_TS = ВремТабл.ЛЦ_TS | ТОГДА ЛОЖЬ | ИНАЧЕ ИСТИНА | КОНЕЦ"); Запрос.УстановитьПараметр("ВнешниеДанные",ВнешниеДанные); РезЗапрТовары = Запрос.Выполнить(); Вот при выполнении этого запроса и падает 1С с ошибкой на недостаточно памяти. Пробовал с запроса выкинуть соединение со справочником номенклатура, ошибка осталась. Если это никак не излечить придется тупо в обходе запроса искать ненужные товары и отсекать, а выполнение это увеличится раз в 10 как минимум :( |
|||
1
kosts
20.06.12
✎
15:21
|
(0) Попробуй вместо ВнешниеДанные = РезЗапр.Выгрузить(); сам создать ТЗ с конкретными типами. и заполнить ее.
|
|||
2
Sasha_H
20.06.12
✎
15:24
|
(1) тут интересней намного все :). Итак запрос, что я скинул я поля обрезал чтобы на форуме особо не сорить, так вот убрав поля, хотя многие из них мне нужны, запрос начал работать. Начинаю отслежовать какое поле ему мешает.
|
|||
3
Fragster
гуру
20.06.12
✎
15:24
|
Не(СпрНоменклатура.Ссылка ЕСТЬ NULL И ВремТабл.ЛЦ_Видимый = 0 ИЛИ СпрНоменклатура.ЛЦ_TS = ВремТабл.ЛЦ_TS)
|
|||
4
Fragster
гуру
20.06.12
✎
15:25
|
но вообще сдается мне, что ЛЦ_TS сильно неуникально
|
|||
5
Fragster
гуру
20.06.12
✎
15:25
|
вернее ЛЦ_NOMEN_ID
|
|||
6
H A D G E H O G s
20.06.12
✎
15:26
|
Сделать по частям.
|
|||
7
Sasha_H
20.06.12
✎
15:27
|
(4) - это поле ДАТА
|
|||
8
Sasha_H
20.06.12
✎
15:27
|
(6) вот щас и пробую
|
|||
9
Sasha_H
20.06.12
✎
15:28
|
(5) уникально - это тебе только здается
|
|||
10
Sasha_H
20.06.12
✎
15:28
|
(9) там на базе скула пишет даже, что это ключ!
|
|||
11
Sasha_H
20.06.12
✎
15:41
|
Падает на поле "ЕдИзм" и "Производитель"
Первый запрос! |НоменклатураЛЦ.MAKER_ID.NAME КАК Производитель, |ЕСТЬNULL(НоменклатураЛЦ.SI_ID.si_name,"""") КАК ЕдИзм, Тут 1С связала таблицы "dbo_t_sis по ключу SI_ID" и "dbo_t_makers по ключу MAKER_ID" сама в конфигураторе. Может можно как-то это обойти и через соединения получить данные!? в этих таблица по одному товару даные 1 к 1 не 1 ко многим. |
|||
12
Sasha_H
20.06.12
✎
15:42
|
то есть я первым запросом данные вытянул, а вот при работе с врем таблами падает иммено на поле связанном с другой таблицей.
|
|||
13
Fragster
гуру
20.06.12
✎
15:43
|
(11)(12) а зачем ты нас обманывал в (0), что первый запрос работает?
|
|||
14
Sasha_H
20.06.12
✎
15:48
|
(13) запрос работает. Он вытянул эти данные а падает на получении этих же данных по этим полям на запросе по временым таблицам.
А дело как оказывается в том. что 1С связала эти поля с другими таблицами, щас я на уровне конфигуратора делаю поле MAKER_ID просто Число 10 как и другие ключи и пробую через соединение получить данные. Результат сообщу. |
|||
15
Fragster
гуру
20.06.12
✎
15:52
|
(14) я не вижу куска (11) в (0)
|
|||
16
Sasha_H
20.06.12
✎
16:01
|
(15) весь код:
//Помещаем все товары по складу во временную таблицу Запрос = Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ | НоменклатураЛЦ.NOMEN_ID КАК ЛЦ_NOMEN_ID, | НоменклатураЛЦ.NAME КАК Наименование, | НоменклатураЛЦ.IS_DIVIDEND КАК Весовой, | НоменклатураЛЦ.FULL_NAME КАК НаименованиеПолное, | НоменклатураЛЦ.EKKA_NAME КАК НаименованиеСокращенное, | НоменклатураЛЦ.TYPEPDV_ID КАК СтавкаНДС, | НоменклатураЛЦ.TS КАК ЛЦ_TS, | НоменклатураЛЦ.IS_SOCIAL КАК СоциальнаяГруппа, | НоменклатураЛЦ.UKTZ КАК КодУКТВЭД, | ТоварнаяМатрица.IS_ACTIVE КАК ЛЦ_Активный, | ТоварнаяМатрица.IS_VISIBLE КАК ЛЦ_Видимый, | ТоварнаяМатрица.RECOM_MARKUP КАК ЛЦ_ПроцентНаценки, | ТоварнаяМатрица.IS_DISCOUNT_BLOCKED КАК ЛЦ_БлокироватьСкидку, | ТоварнаяМатрица.RECOM_OUT_PRICE КАК ЛЦ_ЦенаПродажи, | ТоварнаяМатрица.IS_OUT_PRICE_BLOCKED КАК ЛЦ_БлокироватьЦенуПродажи, | ТоварнаяМатрица.IS_MARKUP_BLOCKED КАК ЛЦ_БлокироватьНаценку, | НоменклатураЛЦ.BRUTTO КАК ВесБРУТТО, |НоменклатураЛЦ.SIZE_WIDTH КАК п1, | ЕСТЬNULL(ЕдиницыИзмерения.si_name, """") КАК ЕдИзм, | ЕСТЬNULL(Производители.NAME, """") КАК Производитель |ИЗ | ВнешнийИсточникДанных.dt_LC.Таблица.dbo_t_nomens КАК НоменклатураЛЦ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.dt_LC.Таблица.dbo_t_nom_objects КАК ТоварнаяМатрица | ПО НоменклатураЛЦ.NOMEN_ID = ТоварнаяМатрица.NOMEN_ID | И (ТоварнаяМатрица.OBJECT_ID = &ИДСклад) | ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.dt_LC.Таблица.dbo_t_sis КАК ЕдиницыИзмерения | ПО НоменклатураЛЦ.SI_ID = ЕдиницыИзмерения.si_id | ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.dt_LC.Таблица.dbo_t_makers КАК Производители | ПО НоменклатураЛЦ.MAKER_ID = Производители.MAKER_ID"; //обрабатываем из временной таблицы все товары и ищем только измененные //и отсекаем не видимые когда те еще не были в нашей базе Запрос = Новый Запрос("ВЫБРАТЬ | ВнешниеДанные.п1, | ВнешниеДанные.ЛЦ_NOMEN_ID, | ВнешниеДанные.Наименование, //| ВнешниеДанные.ЕдИзм, | ВнешниеДанные.Весовой, | ВнешниеДанные.НаименованиеПолное, | ВнешниеДанные.НаименованиеСокращенное, | ВнешниеДанные.СтавкаНДС, | ВнешниеДанные.ЛЦ_TS, | ВнешниеДанные.СоциальнаяГруппа, | ВнешниеДанные.КодУКТВЭД, | ВнешниеДанные.ЛЦ_Активный, | ВнешниеДанные.ЛЦ_Видимый, | ВнешниеДанные.ЛЦ_ПроцентНаценки, | ВнешниеДанные.ЛЦ_БлокироватьСкидку, | ВнешниеДанные.ЛЦ_ЦенаПродажи, | ВнешниеДанные.ЛЦ_БлокироватьЦенуПродажи, | ВнешниеДанные.ЛЦ_БлокироватьНаценку, //| ВнешниеДанные.Производитель, | ВнешниеДанные.ВесБРУТТО |ПОМЕСТИТЬ ВремТабл |ИЗ | &ВнешниеДанные КАК ВнешниеДанные |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВремТабл.п1, | ВремТабл.ЛЦ_NOMEN_ID, | ВремТабл.Наименование, //| ВремТабл.ЕдИзм, | ВремТабл.Весовой, | ВремТабл.НаименованиеПолное, | ВремТабл.НаименованиеСокращенное, | ВремТабл.СтавкаНДС, | ВремТабл.ЛЦ_TS, | ВремТабл.СоциальнаяГруппа, | ВремТабл.КодУКТВЭД, | ВремТабл.ЛЦ_Активный, | ВремТабл.ЛЦ_Видимый, | ВремТабл.ЛЦ_ПроцентНаценки, | ВремТабл.ЛЦ_БлокироватьСкидку, | ВремТабл.ЛЦ_ЦенаПродажи, | ВремТабл.ЛЦ_БлокироватьЦенуПродажи, | ВремТабл.ЛЦ_БлокироватьНаценку, //| ВремТабл.Производитель, | ВремТабл.ВесБРУТТО, | ЕСТЬNULL(СпрНоменклатура.Ссылка, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК Номенклатура, | ВЫБОР | КОГДА СпрНоменклатура.Ссылка ЕСТЬ NULL | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ПустаяСсылка |ИЗ | ВремТабл КАК ВремТабл | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура | ПО ВремТабл.ЛЦ_NOMEN_ID = СпрНоменклатура.ЛЦ_NOMEN_ID |ГДЕ | ВЫБОР | КОГДА СпрНоменклатура.Ссылка ЕСТЬ NULL | И ВремТабл.ЛЦ_Видимый = 0 | ИЛИ СпрНоменклатура.ЛЦ_TS = ВремТабл.ЛЦ_TS | ТОГДА ЛОЖЬ | ИНАЧЕ ИСТИНА | КОНЕЦ"); |
|||
17
Sasha_H
20.06.12
✎
16:02
|
так вот ребят не помогло то что я сменил тип в таблицах на уровне конфигуратора, всеравно падает.
Добавояю на верхнем запросе колонку "п1" и все падает. по ходу ограничение какое-то есть :( |
|||
18
Vosmerkin
20.06.12
✎
16:04
|
попробуй интереса ради тоже самое, но на исходной табличке обрежь количество строк, до 10ти например. Посмотри как с мелкой табличкой работает
|
|||
19
Sasha_H
20.06.12
✎
16:06
|
падает из-за падает цу... когда я поместил во временную таблицу ЕдИзм или Производителя
|
|||
20
Fragster
гуру
20.06.12
✎
16:08
|
я фиг знает, но всё равно не вижу (11), даже в (15)
|
|||
21
Sasha_H
20.06.12
✎
16:09
|
(20) 11 я уже переделал на ЛЕВОЕ СОЕДИНЕНИЕ
|
|||
22
Fragster
гуру
20.06.12
✎
16:15
|
по условию какая доля отсекается?
|
|||
23
Fragster
гуру
20.06.12
✎
16:16
|
и точно ли нету номенклатуры с пустым ЛЦ_NOMEN_ID (типа 0) и в dbo_t_nomens тоже пустым?
|
|||
24
Sasha_H
20.06.12
✎
16:20
|
(22) замер размер таблица до соединения и после, количество строк одинаковое 165874
|
|||
25
Sasha_H
20.06.12
✎
16:21
|
(23) ЛЦ_NOMEN_ID (типа 0) да есть такой ЛЦ_NOMEN_ID=0
|
|||
26
Fragster
гуру
20.06.12
✎
16:21
|
попробуй убери из результата все поля кроме тех, на которых "падает" тогда
|
|||
27
Fragster
гуру
20.06.12
✎
16:22
|
| ПО ВремТабл.ЛЦ_NOMEN_ID = СпрНоменклатура.ЛЦ_NOMEN_ID
| И СпрНоменклатура.ЛЦ_NOMEN_ID <> 0 |
|||
28
Sasha_H
20.06.12
✎
16:26
|
где убрать? на верхнем запросе?
|
|||
29
Fragster
гуру
20.06.12
✎
16:29
|
(28) в обоих
|
|||
30
Sasha_H
20.06.12
✎
16:32
|
ПЕРВЫЙ ЗАПРОС
ВЫБРАТЬ НоменклатураЛЦ.NOMEN_ID КАК ЛЦ_NOMEN_ID, НоменклатураЛЦ.TS КАК ЛЦ_TS, ТоварнаяМатрица.IS_VISIBLE КАК ЛЦ_Видимый, ЕСТЬNULL(ЕдиницыИзмерения.si_name, "") КАК ЕдИзм, ЕСТЬNULL(Производители.NAME, "") КАК Производитель ИЗ ВнешнийИсточникДанных.dt_LC.Таблица.dbo_t_nomens КАК НоменклатураЛЦ ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.dt_LC.Таблица.dbo_t_nom_objects КАК ТоварнаяМатрица ПО НоменклатураЛЦ.NOMEN_ID = ТоварнаяМатрица.NOMEN_ID И (ТоварнаяМатрица.OBJECT_ID = &ИДСклад) ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.dt_LC.Таблица.dbo_t_sis КАК ЕдиницыИзмерения ПО НоменклатураЛЦ.SI_ID = ЕдиницыИзмерения.si_id ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.dt_LC.Таблица.dbo_t_makers КАК Производители ПО НоменклатураЛЦ.MAKER_ID = Производители.MAKER_ID ГДЕ НоменклатураЛЦ.NOMEN_ID > 0 ВТОРОЙ ЗАПРОС ВЫБРАТЬ ВнешниеДанные.ЛЦ_NOMEN_ID, ВнешниеДанные.ЕдИзм, ВнешниеДанные.ЛЦ_TS, ВнешниеДанные.ЛЦ_Видимый, ВнешниеДанные.Производитель ПОМЕСТИТЬ ВремТабл ИЗ &ВнешниеДанные КАК ВнешниеДанные ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВремТабл.ЛЦ_NOMEN_ID, ВремТабл.ЕдИзм, ВремТабл.ЛЦ_TS, ВремТабл.ЛЦ_Видимый, ВремТабл.Производитель, ЕСТЬNULL(СпрНоменклатура.Ссылка, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК Номенклатура, ВЫБОР КОГДА СпрНоменклатура.Ссылка ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ПустаяСсылка ИЗ ВремТабл КАК ВремТабл ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура ПО ВремТабл.ЛЦ_NOMEN_ID = СпрНоменклатура.ЛЦ_NOMEN_ID ГДЕ ВЫБОР КОГДА СпрНоменклатура.Ссылка ЕСТЬ NULL И ВремТабл.ЛЦ_Видимый = 0 ИЛИ СпрНоменклатура.ЛЦ_TS = ВремТабл.ЛЦ_TS ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ ТАК работает. Как только я подключаю поля, все нафик валится :( |
|||
31
Sasha_H
20.06.12
✎
16:38
|
самое больное то, что на выходе ждет меня только 6000 товаров которые мне нужны. Но к ним не могу никак добратся
|
|||
32
Sasha_H
20.06.12
✎
16:42
|
Прошло. пришлось отрубить Наименование полное "СТРОКА 255"
|
|||
33
Sasha_H
20.06.12
✎
16:42
|
видимо все же есть ограниченеи к данным
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |