v7: Как ускорить запрос в 1С 7.7 #768301


#0 by Косяк
Есть задача: найти последний по дате приходный документ, в котором есть конкретный материал. База довольно большая и за несколько лет. Делаю соответствующий запрос. Обхожу этот запрос в нужном мне порядке. а именно, - в обратном порядке. Обойти то я его обойду, но это когда он уже сформирован, а формироваться он может долго. Сам запрос выполняется по всем годам в прямом порядке: сначала год 2000, затем 2001 и т.д. Неужели нет способа ускорить? Если встретился документ с разыскиваемым материалом, например в 2016 году, то нужно прекратить перебор документов. Как?
#0 by Косяк
Есть задача: найти последний по дате приходный документ, в котором есть конкретный материал. База довольно большая и за несколько лет. Делаю соответствующий запрос. Обхожу этот запрос в нужном мне порядке. а именно, - в обратном порядке. Обойти то я его обойду, но это когда он уже сформирован, а формироваться он может долго. Сам запрос выполняется по всем годам в прямом порядке: сначала год 2000, затем 2001 и т.д. Неужели нет способа ускорить? Если встретился документ с разыскиваемым материалом, например в 2016 году, то нужно прекратить перебор документов. Как?
#1 by evGenius
Ну например сделать не единым запросом, а циклом с запросами по месяцам, начиная с последнего месяца и постепенно идти назад.
#2 by evGenius
А вообще в семерке выборка хорошо работала, бывало что и быстрее запроса.
#3 by ДенисЧ
#4 by Duke1C
Для начала выкинь Код из условия. Если я правильно понимаю то ОснМатериал - это реквизит на форме?
#5 by kobzon2
Условие в цикл и если выполняется то Прервать;
#6 by Duke1C
+4 и нафейхоа тебе лишние переменные в запросе ДатаДокумента, ДатаНомерСчФактуры, Поставщик (для которого еще к тому же наименование выбирается)??
#7 by 1Сергей
+1 А также есть смысл использовать запрос к регистру
#8 by Lazy Stranger
если это оперучет - я бы по регистру искал, что-то вроде рег = СоздатьОбъект("Регистр.ОстаткиТМЦ"); рег.УстановитьЗначениеФильтра("Номенклатура",ОснМатериал) КонецЦикла; и проверить наличие галки "отбор движений" на соответствующем измерении регистра
#9 by Mikeware
а лучше все-таки
#10 by Lazy Stranger
лучше, но сложнее на порядок - разбираться с отдельной технологией и приделывать ВК к базе
#11 by Mikeware
у него база вроде даже сиквельная.
#12 by Lazy Stranger
если чел в обычно запросе вместо ОсновнойМатериал= ОснМатериал пишет ОсновнойМатериал.Код = ОснМатериал.Код, страшно представить что в прямых запросах будет (впрочем я тоже их писать не умею, хотя видоизменять готовые доводилось, есть у меня клиент, где предшественник писал отчеты прямыми запросами - штука могучая, конечно)
#13 by Косяк
А как по-вашему будет выглядеть вариант с выборкой?
#14 by Ёпрст
прямой запрос. А так, в , вот за этот код |Условие(ОсновнойМатериал.Код = ОснМатериал.Код); нужно стальной линейкой по пальчикам бить
#15 by trad
ребром линейки или гранью?
#16 by Злопчинский
а можно я еще фофана отвешу?
#17 by Mikeware
ну дык! Ник-то у него говорящий...
#18 by Масянька
Если бы вы работали учителями/преподавателями - давно бы уже сидели... За насилие над учащимися... :)
#19 by kobzon2
Не дай бог таких в инструктора по вождению))
#20 by Косяк
Чем ненормален код?
#21 by Mikeware
я - работал :-) Ученики через 15 лет спасибо говорили...
#22 by Mikeware
анахуа он?
#23 by Косяк
Вы не понимете зачем нужен запрос
#24 by Масянька
Блин... Прострелить коленку...
#25 by Злопчинский
аналогично, хотя я "учил" меньше. Но постоянно ругаюсь сейчас на всяких ларечников-клюшечников - стучаться за консультациями... ниче, терпят, пасибу говорят, денежку перечисляют. Если не мы, то - кто?
#26 by Ёпрст
ну как тебе сказать, например в sql базе выполняется в разы медленнее, если написать по-человечьи
#27 by trad
у нас в школе, когда я учился, математичка была - старушка старой закалки, могла и линейкой по башке и мелком метко швырнуть. Одна из самых уважаемых была, и уважали как хорошего учителя, а не из-за страха
#28 by Mikeware
одну?
#29 by Злопчинский
если работы разовые/редко - то забить на быстройдействие.
#30 by Mikeware
я не понимаю, зачем сравнивать по коду.
#31 by Масянька
Тогда - времена были другие. Учитель был авторитетом. А сегодня? Ученик откровенно саботирует, да еще и права качает...
#32 by Ёпрст
У нас многие учителя могли запросто линеечкой по пальчикам
#33 by Mikeware
авторитет не зависит от "времени". авторитет зависит от человека.
#34 by Mikeware
остается вспомнить анекдот про бегемотиков...
#35 by Ёпрст
Вот блин, батка рассказывал, раньше вообще на горох ставили, от наука то где была!
#36 by Ёпрст
в нашей версии про летающих крокодильчиков.
#37 by Злопчинский
ты ишшо маладой, мне так в детстве поприходилось на горохе в углу постоять...
#38 by kobzon2
Убери это условие |Условие(ОсновнойМатериал.Код = ОснМатериал.Код); И добавь его в обход группировки. Разве так не лучше?)
#39 by Масянька
Не прав... Сегодня даже просто накричать - чревато. Не было раньше такого. Не было.
#40 by ДенисЧ
Подай на них в суд, как виновников детской застарелой психической травмы
#41 by Mikeware
гыыы! в - второй!
#42 by Ёпрст
не было чего ?
#43 by Mikeware
сотовых телефонов.
#44 by Ёпрст
каюсь, не застал.
#45 by Mikeware
исправляйся. сам. если  накосячишь - так сразу...
#46 by Косяк
Проверил. Абсолютно никакой разницы.
#47 by Ёпрст
Если делать штатно, то добавить графу отбора и ВыбратьПоЗначению, будет не быстро, а очень быстро. Можно еще и ускорить, ограничив через ИспользоватьЖурнал
#48 by Mikeware
слушай, а 1sqlite только на чтение работает, чтоль ?
#49 by Mikeware
если ему разово надо - то добавление графы будет дольше..
#50 by Ёпрст
яяя, инсерт/делете там только с родной базой можно
#51 by MishaD
я бы для начала попробовал бы еще альтернативные варианты. Выборку и Бухитоги.
#52 by Косяк
как?
#53 by Mikeware
база файловая или сиквельная?
#54 by Косяк
SQL
#55 by kobzon2
Если запрос работает в прямом порядке, может тогда ну его нах? Делать через выборку документов в обратном порядке.
#56 by Косяк
>>Делать через выборку документов в обратном порядке. Тема создана для этого!
#57 by Косяк
Как выбрать документы в обратном порядке???!!!
#58 by MishaD
Давно бы заглянул в синтакс помошник ОбратныйПорядок(<?>); Синтаксис: ОбратныйПорядок(<Режим>) Назначение: Установить порядок выборки документов во времени. Возвращает значение порядка выборки до вызова:   1 - выборка документов в порядке убывания даты и времени;  0 - в порядке возрастания. Параметры: <Режим> -  необязательный параметр. Число: 1 - выбирать документы в порядке убывания даты и времени;   0 - выбирать документы в порядке возрастания даты и времени. Если параметр опущен, то метод просто возвращает текущее значение порядка выборки документов. Замечание: Метод можно использовать как процедуру и как функцию. Метод  можно использовать только для объектов, созданных функцией СоздатьОбъект.
#59 by Lazy Stranger
регистры остатков каких-нибудь двигает этот документ? если да - чем вариант из не подходит?
#60 by kobzon2
#61 by kobzon2
Забыл Док.ВыбратьДокументы(Дата1,Дата2);
#62 by Mikeware
ты много чего забыл. а скорее всего даже не знал, а еще и забыл...
#63 by Lazy Stranger
подозреваю что материал там в табл. части - перебирать все строки всех документов - ещё больший изврат чем в
#64 by Mikeware
Загрузи 1cpp.dll ,  и выполни следующее: рс=СоздатьОбъект("ODBCRecordset"); ТекстЗапроса=" (вместо "ПоступлениеТМЦ" поставь название своего дока, вместо Номенклатура - название твоего поля)
#65 by kobzon2
Если в табличной то да, геморр..
#66 by Mikeware
Не скопировалась еще одна сточка: ДокПоступление=рс.ВыполнитьСкалярный(ТекстЗапроса);
#67 by kobzon2
Не умничай. За 62 поста, сколько решений предложил ты?
#68 by Mikeware
лучше молчать, чем нести куйню, как ты. я могу сделать это добрым десятком методов. но самый правильный был предложен в
#69 by ДенисЧ
Я всегда правильные методы подсказываю )) Правда, не все это ценят...
#70 by MishaD
Насчет SQL не скажу, но на файловой выборка вполне могла оказаться быстрей.
#71 by kobzon2
Это ты все посты в этой теме нёс куйню, перечитай. И не затыкай меня!
#72 by Mikeware
если графа используется - то да. Там тогда вообще шесть строк....
#73 by Mikeware
уймись, дерево....
#74 by Косяк
Мальчики, не ссорьтесь.
#75 by kobzon2
Ты не у себя на кухне, иди проспись.
#76 by Косяк
"Загрузи 1cpp.dll" - это как?
#77 by Mikeware
#78 by Mikeware
у меня на кухне дерева нет. ДСП есть. ты из опилок?
#79 by Косяк
рс=СоздатьОбъект("ODBCRecordset"); {Документ.Обоснование1.Форма.Модуль}: Неудачная попытка создания объекта (ODBCRecordset) 1CPP.DLL лежит в папке 1С BIN
#80 by Mikeware
Если ЗагрузитьВнешнююКомпоненту("1CPP.dll") = 0 Тогда Предупреждение("Неудачная попытка загрузить 1CPP.dll"); СтатусВозврата; Возврат; КонецЕсли;
#81 by Ёпрст
загрузитьвнешнююкомпоненту(1cpp.dll); воткни в поделку свою, примерно так: примерно
#82 by Косяк
Что то не хочет работать, не пойму почему.. RS.УстановитьТекстовыйПараметр("Материал",ОснМатериал); {Документ.Обоснование1.Форма.Модуль}: Значение не представляет агрегатный объект (УстановитьТекстовыйПараметр)
#83 by Mikeware
после загрузки компонениы еще раз создай одбсрекордсет. ты ж его не создал - вывалился по исключению....
#84 by Ёпрст
ну, не приучен тс к копипасту :)
#85 by Ёпрст
да и..текст запроса не верный.
#86 by Косяк
что не так
#87 by Ёпрст
>>>ПоступлениеМатериаловСтроки.IDDOC нет такого алияса ПоступлениеМатериаловСтроки есть ПоступлениеМатериалов если че ну и дальше по тексту исправить
#88 by Косяк
Не знаю что надо исправить, не работает..
#89 by ДенисЧ
а что именно не работает?
#90 by Косяк
ТЗ.ВыбратьСтроки; {Документ.Обоснование1.Форма.Модуль}: Значение не представляет агрегатный объект (ВыбратьСтроки)
#91 by Mikeware
вместо ----------
#92 by Mikeware
естественно, даст ошибку...
#93 by Mikeware
Кстати, в ПоступлениииМатериалов Материал - какого вида?
#94 by Косяк
из справочника Материалы
#95 by Ёпрст
и типа ? мало ли, он там как <Справочник>
#96 by Косяк
Если оставлю только RS=СоздатьОбъект("ODBCRecordset"); то получаю ошибку ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса); {Документ.Обоснование1.Форма.Модуль}: База данных не установлена
#97 by Ёпрст
1cpp какой версии хоть ?
#98 by Масянька
Фига себе... До сотки дотянули... А сделал бы выборку - уже давно другую задачу решал бы... Комсомольцы, блин...
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С