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

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

отбор результата запроса

отбор результата запроса
Я
   88g88
 
12.10.18 - 11:04
Приветствую форумчане!
В базе УПП был создан запрос выполняющийся достаточно долго для включения его в цикл.
Результат запроса выгружается в ексель. Но не просто выгружается, а находит значение кода номенклатуры в ексель после чего ищет строку в результате запроса и вставляет результаты значений запроса в определенные столбцы ексель.

Проблема возникла в том что порядок сортировки ексель отличается от базы 1с. И может меняться когда угодно и как угодно по настроению заказчика. Соответственно в результате запроса надо искать каждую строку отдельно.
пробовал так...

                РезультатЗароса.Сбросить();
                Пока РезультатЗароса.Следующий() цикл//РезультатЗароса.НайтиСледующий(Формат(лист.Cells(Ячейка,2).Value,"ЧЦ=11; ЧВН=; ЧГ=0")) = Истина цикл

                    Если РезультатЗароса.код = Формат(лист.Cells(Ячейка,2).Value,"ЧЦ=11; ЧВН=; ЧГ=0") тогда
                        лист.Cells(Ячейка,5).Value = РезультатЗароса.КолВоНаСклдахНачалоПериода;
                        лист.Cells(Ячейка,6).Value = РезультатЗароса.КолВоНаПроизводствеНачалоПериода;
                        лист.Cells(Ячейка,10).Value = РезультатЗароса.КоличествоПриход;
                        лист.Cells(Ячейка,11).Value = РезультатЗароса.СреднийРасходТриМесяца;
                        лист.Cells(Ячейка,12).Value = РезультатЗароса.ПоПланупПродаж;
                        лист.Cells(Ячейка,14).Value = РезультатЗароса.РасходНаПроизводство;
                        лист.Cells(Ячейка,19).Value = РезультатЗароса.ТекущийОстатокНаСкладахХранения;
                        лист.Cells(Ячейка,20).Value = РезультатЗароса.ТекущийОстатокНаОстальныхСкладах;
                        колво = Колво + 1;
                        Прервать;
                    КонецЕсли;    
                КонецЦикла;
    

Но это долго. 
пробовал вариант "найти следующий" (строка с коментом//) но не всегда в результате соответствия показывает истину не смотря на соответствие полей. с чем причина не понятно в отладчики и поля одинаковые и тип одинаковый но выдает "лож". может в форматной строке не то что-то.
В общем, находит запрос 400 значений а выгружается по итогу 256 строк. остальные пролетают по несоответствию.
Вопроса 2 по сути.
1) как быстро обработать результат запроса с поиском (Есть ли другие варианты)
2) что не так с строкой форматной может быть Значение получаемое в строке - код номенклатуры, 11 знаков, тип строка. Соответствует результату запроса.
 
 
   Buster007
 
1 - 12.10.18 - 11:06
выгрузи в тз, проиндексируй колонку
   88g88
 
2 - 12.10.18 - 11:08
(1) после искать в ТЗ?
   88g88
 
3 - 12.10.18 - 11:09
И там таблица и там. вроде.
Может я не прав конечно и запарился окончательно.
   Buster007
 
4 - 12.10.18 - 11:13
(3) "проиндексируй колонку"
   88g88
 
5 - 12.10.18 - 11:13
Вот более быстрый вариант.
но несоответствие полей срезает.
хотя и при простом обходе срезает тоже.

                РезультатЗароса.Сбросить();
                Пока РезультатЗароса.НайтиСледующий(Формат(лист.Cells(Ячейка,2).Value,"ЧЦ=11; ЧВН=; ЧГ=0")) = Истина цикл
                        лист.Cells(Ячейка,5).Value = РезультатЗароса.КолВоНаСклдахНачалоПериода;
                        лист.Cells(Ячейка,6).Value = РезультатЗароса.КолВоНаПроизводствеНачалоПериода;
                        лист.Cells(Ячейка,10).Value = РезультатЗароса.КоличествоПриход;
                        лист.Cells(Ячейка,11).Value = РезультатЗароса.СреднийРасходТриМесяца;
                        лист.Cells(Ячейка,12).Value = РезультатЗароса.ПоПланупПродаж;
                        лист.Cells(Ячейка,14).Value = РезультатЗароса.РасходНаПроизводство;
                        лист.Cells(Ячейка,19).Value = РезультатЗароса.ТекущийОстатокНаСкладахХранения;
                        лист.Cells(Ячейка,20).Value = РезультатЗароса.ТекущийОстатокНаОстальныхСкладах;
                        колво = Колво + 1;
                КонецЦикла;
   catena
 
6 - 12.10.18 - 11:17
(5)Выгрузи в таблицу результат запроса, проиндексируй по полю поиска и делай поиск в таблице. Вместо постоянного перебора всего результата.

По несоответствию, хоть покажи значения, которые не находит. Только не из екселя, а из отладчика значения полей Формат(лист.Cells(Ячейка,2).Value,"ЧЦ=11; ЧВН=; ЧГ=0") и РезультатЗароса.код
   88g88
 
7 - 12.10.18 - 11:22
(6)
Формат(лист.Cells(Ячейка,2).Value,"ЧЦ=11; ЧВН=; ЧГ=0")    "00000050592"    Строка
РезультатЗароса.НайтиСледующий(Формат(лист.Cells(Ячейка,2).Value,"ЧЦ=11; ЧВН=; ЧГ=0"))    Ложь    Булево
РезультатЗароса.код    "00000050592"    Строка
   88g88
 
8 - 12.10.18 - 11:24
(5) В этом примере обход результата с поиском. Обходит очень быстро. но соответствие не всегда срабатывает. (В обоих вариантах)
   88g88
 
9 - 12.10.18 - 11:26
При копии результата запроса в ексель проходит 100 % найденных строк и заполняет все.
может тонкости в екселе какие то...

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