Имя: Пароль:
1C
1С v8
отбор результата запроса
0 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 знаков, тип строка. Соответствует результату запроса.
1 Buster007
 
12.10.18
11:06
выгрузи в тз, проиндексируй колонку
2 88g88
 
12.10.18
11:08
(1) после искать в ТЗ?
3 88g88
 
12.10.18
11:09
И там таблица и там. вроде.
Может я не прав конечно и запарился окончательно.
4 Buster007
 
12.10.18
11:13
(3) "проиндексируй колонку"
5 88g88
 
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;
                КонецЦикла;
6 catena
 
12.10.18
11:17
(5)Выгрузи в таблицу результат запроса, проиндексируй по полю поиска и делай поиск в таблице. Вместо постоянного перебора всего результата.

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