|
Оптимизация поиска по номенклатуре | ☑ | ||
---|---|---|---|---|
0
unknown181538
02.06.18
✎
18:20
|
Вроде бы тривиальная задача, но впал в ступор.
Есть загрузка из excel файла. Колонок, допустим 25. Почти по всем нужно сделать поиск по наименованию из соответствующего справочника. Сначала делал запросом, успешно, но теперь колонок уже 25, и получается следующее: ВЫБРАТЬ Спр1.Ссылка, Спр2.Ссылка, ... Спр25.Ссылка Из ВТ КАК ВТ Левое Соединение Спр1 КАК СПр1 По ВТ.Наименование1Файл = Спр1.Наименование ... .. Левое СоЕДИНЕНИЕ Спр25 ПО.... Стало валиться "Недостаточно памяти", хотя строк всего 5 Попробовал разбить на пакеты по 5 соединений, валится все равно Как будет оптимально? на каждый справочник по отдельному запросу пакета? |
|||
1
Cyberhawk
02.06.18
✎
19:10
|
Разбить на несколько запросов
|
|||
2
unknown181538
02.06.18
✎
19:20
|
(1) один пакетный или надо именно несколько разных?
чтобы один запрос на один справочник? 25 запросов? |
|||
3
Cyberhawk
02.06.18
✎
20:54
|
(2) Пакетный не пойдет.
Разбей на два, при повторении проблемы - на 4, и т.д. Ну это так - тушение пожара. По-правильному сначала разбирайся (расследуй) причину падения |
|||
4
Optan
02.06.18
✎
20:58
|
(0) А с результатом запроса что делаешь после загрузки? Куда то записываешь?
|
|||
5
mistеr
02.06.18
✎
21:21
|
(0) Небольшие справочники загнать в Соответствия. По большим НайтиПоНаименованию(). Если скорость не устроит, делать свой кэш.
|
|||
6
Garykom
гуру
02.06.18
✎
22:23
|
(0) Изучи уже программирование и алгоритмы, а не только запросы.
|
|||
7
unknown181538
02.06.18
✎
22:38
|
(4) в документ потом все идет. Но падает на выполнении запроса.
ОК. Буду писать процедуру, которая будет составлять текст запроса отдельно по справочникам |
|||
8
Garykom
гуру
02.06.18
✎
22:40
|
не тупи, кто тебе мешает сделать и выполнить несколько различных запросов а затем собрать данные/результат из них вместе?
причем собирать часто лучше кодом а не запросом |
|||
9
Garykom
гуру
02.06.18
✎
22:41
|
берешь файл экселя, данные из колонки 1 в запрос 1, результат в тз
затем данные из колонки 2 в запрос 2, результат в тз и т.д. затем собрал все вместе из тз |
|||
10
VS-1976
02.06.18
✎
22:57
|
Делаешь таблицу значений
1-я колонка Наименование 2-2 колонка Номер колонки И делаешь с 1-й колонкой соединение Потом результат раскидываешь |
|||
11
unknown181538
02.06.18
✎
22:57
|
(8) Я уже делаю.
На каждую колонку процедура будет выполнять запрос. "Собирать кодом лучше" - имеешь в виду, что выполнить НайтиПоНаименованию по каждой строке может оказаться быстрее, чем выполнить запрос к справочнику по всей колонке? |
|||
12
unknown181538
02.06.18
✎
22:57
|
&НаСервере
Процедура ПодобратьЭлементПоНаименованию(ВРТЗ,ИмяСправочника,ИмяРеквизита) Запрос = Новый Запрос; Запрос.Текст = " | ВЫБРАТЬ |ВРТЗ.Инд КАК Инд, |ВРТЗ.[ИмяРеквизитаФайл] КАК ИмяРеквизитаФайл |ПОМЕСТИТЬ ВТ | ИЗ &ВрТЗ КАК ВРТЗ |; |ВЫБРАТЬ |ТаблСправочник.Ссылка, |ВТ.Инд |ИЗ |ВТ КАК ВТ |ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник[ИмяСправочника] КАК ТаблСправочник |ПО ВТ.ИмяРеквизитаФайл = ТаблСправочник.Наименование |"; Запрос.Текст = СтрЗаменить(Запрос.Текст,"[ИмяРеквизитаФайл]",ИмяРеквизита+"Файл"); Запрос.Текст = СтрЗаменить(Запрос.Текст,"[ИмяСправочника]",ИмяСправочника); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл СтрТЗ = ТЗ[Выборка.Инд]; СтрТЗ[ИмяРеквизита] = Выборка.Ссылка; КонецЦикла; КонецПроцедуры |
|||
13
VS-1976
02.06.18
✎
22:59
|
(10) Забыл ещё колонка номер строки
|
|||
14
Garykom
гуру
02.06.18
✎
23:26
|
(11) Какое отношение НайтиПоНаименованию имеет к "собирать"?
У тебя несколько колонок/ТЗ с найденными ссылками на элементы нужных справочников, какой смысл загонять эти ТЗ в запрос для сборки в одну ТЗ ? Это подразумевал. |
|||
15
youalex
02.06.18
✎
23:31
|
(0) И в каждой из этих 25 колонок - наименование из справочника в 1С, по которому нужно найти ссылку?
Или наименование в одной колонке, а остальные 24 колонки - это типа реквизиты? |
|||
16
youalex
02.06.18
✎
23:36
|
Собственно, если первое - заливай ТЗ из экселя в ВТ, и дальше в пакете. каждую колонку из ТЗ - цепляй с нужным справочником. Одна колонка - один запрос пакета. Имя поля еще можно вывести, чтобы ориентироваться, а сам запрос можно программно сформировать.
Если второе - добавь в ТЗ Ключ (типа номерСтроки) - и помещай в ВТ только его, и саму строку наименования, на выходе, в выборке получишь номер строки и ссылку, найденную по наименованию |
|||
17
Tateossian
02.06.18
✎
23:38
|
Обходи поколоночно, загружая массив параметром. По каждому справочнику.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |