Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Оптимизация поиска по номенклатуре

Оптимизация поиска по номенклатуре
Я
   unknown181538
 
02.06.18 - 18:20
Вроде бы тривиальная задача, но впал в ступор.
Есть загрузка из excel файла. Колонок, допустим 25. Почти по всем нужно сделать поиск по наименованию из соответствующего справочника.
Сначала делал запросом, успешно, но теперь колонок уже 25, и получается следующее:
ВЫБРАТЬ
Спр1.Ссылка,
Спр2.Ссылка,
...
Спр25.Ссылка
Из ВТ КАК ВТ
Левое Соединение Спр1 КАК СПр1
По ВТ.Наименование1Файл = Спр1.Наименование
...
..
Левое СоЕДИНЕНИЕ Спр25
ПО....


Стало валиться "Недостаточно памяти", хотя строк всего 5
Попробовал разбить на пакеты по 5 соединений, валится все равно
Как будет оптимально? на каждый справочник по отдельному запросу пакета?
 
 
   Cyberhawk
 
1 - 02.06.18 - 19:10
Разбить на несколько запросов
   unknown181538
 
2 - 02.06.18 - 19:20
(1) один пакетный или надо именно несколько разных?
чтобы один запрос на один справочник? 25 запросов?
   Cyberhawk
 
3 - 02.06.18 - 20:54
(2) Пакетный не пойдет.
Разбей на два, при повторении проблемы - на 4, и т.д.
Ну это так - тушение пожара. По-правильному сначала разбирайся (расследуй) причину падения
   Optan
 
4 - 02.06.18 - 20:58
(0) А с результатом запроса что делаешь после загрузки? Куда то записываешь?
   mistеr
 
5 - 02.06.18 - 21:21
(0) Небольшие справочники загнать в Соответствия. По большим НайтиПоНаименованию(). Если скорость не устроит, делать свой кэш.
   Garykom
 
6 - 02.06.18 - 22:23
(0) Изучи уже программирование и алгоритмы, а не только запросы.
   unknown181538
 
7 - 02.06.18 - 22:38
(4) в документ потом все идет. Но падает на выполнении запроса.
ОК. Буду писать процедуру, которая будет составлять текст запроса отдельно по справочникам
   Garykom
 
8 - 02.06.18 - 22:40
не тупи, кто тебе мешает сделать и выполнить несколько различных запросов а затем собрать данные/результат из них вместе?

причем собирать часто лучше кодом а не запросом
   Garykom
 
9 - 02.06.18 - 22:41
берешь файл экселя, данные из колонки 1 в запрос 1, результат в тз
затем данные из колонки 2 в запрос 2, результат в тз и т.д.

затем собрал все вместе из тз
   VS-1976
 
10 - 02.06.18 - 22:57
Делаешь таблицу значений
1-я колонка Наименование
2-2 колонка Номер колонки
И делаешь с 1-й колонкой соединение
Потом результат раскидываешь
 
 Рекламное место пустует
   unknown181538
 
11 - 02.06.18 - 22:57
(8) Я уже делаю.
На каждую колонку процедура будет выполнять запрос.
"Собирать кодом лучше" - имеешь в виду, что выполнить НайтиПоНаименованию по каждой строке может оказаться быстрее, чем выполнить запрос к справочнику по всей колонке?
   unknown181538
 
12 - 02.06.18 - 22:57
&НаСервере
Процедура ПодобратьЭлементПоНаименованию(ВРТЗ,ИмяСправочника,ИмяРеквизита)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |  ВЫБРАТЬ 
    |ВРТЗ.Инд КАК Инд,
    |ВРТЗ.[ИмяРеквизитаФайл] КАК ИмяРеквизитаФайл
    |ПОМЕСТИТЬ ВТ
    | ИЗ  &ВрТЗ КАК ВРТЗ
    |;
    |ВЫБРАТЬ
    |ТаблСправочник.Ссылка,
    |ВТ.Инд
    |ИЗ 
    |ВТ КАК ВТ
    |ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник[ИмяСправочника] КАК ТаблСправочник
    |ПО ВТ.ИмяРеквизитаФайл = ТаблСправочник.Наименование    
    |";
    Запрос.Текст = СтрЗаменить(Запрос.Текст,"[ИмяРеквизитаФайл]",ИмяРеквизита+"Файл");
    Запрос.Текст = СтрЗаменить(Запрос.Текст,"[ИмяСправочника]",ИмяСправочника);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл    
        СтрТЗ = ТЗ[Выборка.Инд];
        СтрТЗ[ИмяРеквизита] = Выборка.Ссылка;    
    КонецЦикла;
        
КонецПроцедуры
   VS-1976
 
13 - 02.06.18 - 22:59
(10) Забыл ещё колонка номер строки
   Garykom
 
14 - 02.06.18 - 23:26
(11) Какое отношение НайтиПоНаименованию имеет к "собирать"?

У тебя несколько колонок/ТЗ с найденными ссылками на элементы нужных справочников, какой смысл загонять эти ТЗ в запрос для сборки в одну ТЗ ? Это подразумевал.
   youalex
 
15 - 02.06.18 - 23:31
(0) И в каждой из этих 25 колонок - наименование из справочника в 1С, по которому нужно найти ссылку?
Или наименование в одной колонке, а остальные 24 колонки - это типа реквизиты?
   youalex
 
16 - 02.06.18 - 23:36
Собственно, если первое - заливай ТЗ из экселя в ВТ, и дальше в пакете. каждую колонку из ТЗ - цепляй с нужным справочником. Одна колонка - один запрос пакета. Имя поля еще можно вывести, чтобы ориентироваться, а сам запрос можно программно сформировать.

Если второе - добавь в ТЗ Ключ (типа номерСтроки) - и помещай в ВТ только его, и саму строку наименования, на выходе, в выборке получишь номер строки и ссылку, найденную по наименованию
   Tateossian
 
17 - 02.06.18 - 23:38
Обходи поколоночно, загружая массив параметром. По каждому справочнику.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует