|   |   | 
| 
 | v7: Помогите с запросом VFPOLEDB на DBF базе | ☑ | ||
|---|---|---|---|---|
| 0
    
        smitti911 11.08.14✎ 12:17 | 
        Есть код :
 Соединение=" |Provider=VFPOLEDB.1; |Null = Yes; |Exclusive = No; |SourceType = DBF; |Data Source=" + КаталогИБ() + "; |Mode=ReadWrite; |Extended Properties=""""; |User ID=""""; |Password=""""; |Mask Password=False; |Collating Sequence=MACHINE; |DSN="""""; //-- Попытка открыть базу данных через OLEDB Попытка OLEDB=СоздатьОбъект("OLEDBData"); Рез=OLEDB.Соединение(Соединение); cmdOLEDB=OLEDB.СоздатьКоманду(); Сообщить("Коннект"); Исключение Предупреждение("Неудачная попытка открыть базу данных"); КонецПопытки; cmdOLEDB = OLEDB.СоздатьКоманду(); ТекстЗапроса = " |Select | Док.IDDoc, | _1SJourn.IDDOCDEF, | _1SJourn.DOCNO, | _1SJourn.Date_Time_IDDoc |FROM | $ДокументСтроки." + ВидДок.Идентификатор + " as Док |INNER JOIN | _1SJourn ON _1SJourn.IDDoc = Док.IDDoc |WHERE |_1SJourn.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |"; cmdOLEDB.УстановитьТекстовыйПараметр("НачДата", НачДата); cmdOLEDB.УстановитьТекстовыйПараметр("КонДата", КонДата); Попытка тз = cmdOLEDB.ВыполнитьИнструкцию(ТекстЗапроса); Исключение Сообщить("Запрос не выполнился!", "!"); КонецПопытки; При выполнении сообщает коннект и 1С падает. Тоже самое при использовании 1СQA. Если в консольке набрать select * from 1sjourn , идет выполнения запроса (секунды 3) и падает 1С с сообщением RunTime Error. Что может быть не так? | |||
| 20
    
        Ёпрст гуру 11.08.14✎ 13:56 | 
        ну и не видно, как и че ты запущаешь и какие запросы выполняешь, какой зоопарк из вк стоит ит .д     | |||
| 21
    
        smitti911 11.08.14✎ 13:58 | 
        Зоопарк :
 ЗагрузитьВК("1CPP.dll"); Настройки=СоздатьОбъект("УправлениеНастройками"); Настройки.Сбросить("Проверка типов"); Настройки.Сбросить("Отладка"); Настройки.Включить("Оптимизация"); Настройки.Включить("TurboBL"); Настройки.Включить("ПерехватитьСобытияГК"); ЗагрузитьВК("1sqlite.dll"); ЗагрузитьВК("FormEx.dll"); ЗагрузитьВК("TurboMD.dll"); ЗагрузитьВК("SpreadSheet.dll"); ЗагрузитьВК("MiracleV8.dll"); ЗагрузитьВК("RWidjets.dll"); ЗагрузитьВК("ROM-Mail.dll"); ЗагрузитьВК("DialMail.dll"); ЗагрузитьВК("OpenXML.dll"); ЗагрузитьВК("Tracer1C.dll"); // ЗагрузитьВК("dynwrapx.dll"); Запрос select * from 1SCONST работает через раз | |||
| 22
    
        Ёпрст гуру 11.08.14✎ 14:03 | 
        ну а так че ?
 Попытка база = СоздатьОбъект("SQLiteBase"); Исключение ЗагрузитьВнешнююКомпоненту("1sqlite.dll"); база = СоздатьОбъект("SQLiteBase"); КонецПопытки; база.Открыть(":memory:"); запрос = база.НовыйЗапрос(); запрос.ВыполнитьЗапрос("select * from [Журнал]").ВыбратьСтроку(); | |||
| 23
    
        smitti911 11.08.14✎ 14:05 | 
        (22) Через 1sqlite не пробовал , хочу уже с этим VFP разобраться....     | |||
| 24
    
        smitti911 11.08.14✎ 14:08 | 
        в классе ПрямойЗапрос есть возможность сделать DELETE записей из табличек?     | |||
| 25
    
        Ёпрст гуру 11.08.14✎ 14:12 | 
        класс прямой запрос в топку, учись писать запросы без него     | |||
| 26
    
        Злопчинский 11.08.14✎ 14:13 | 
        (25) ну.. это можно рассматривать как деградацию + одну из ступеней перехода на снеговика с его "прямыми" запросами.. ;-)     | |||
| 27
    
        Ёпрст гуру 11.08.14✎ 14:13 | 
        на счет vfp - всё написано в (15).
 1sqlite не способен на delete/insert/update/запрос к чужой базе, тут только запрос на оледб. | |||
| 28
    
        smitti911 11.08.14✎ 17:16 | 
        (19) Пока перезагрузку не могу сделать (работают юзвери), но есть новая ошибка:
 Не найден ключ реестра с данным класидомHKCR\oledbdata\CLSID\ для объекта: oledbdata Прог-ид oledbdata не найден в реестре и помечен как обработанный для исключения повторной генерации. Ошибка генерации файлов по прог-иду: oledbdata | |||
| 29
    
        smitti911 11.08.14✎ 17:18 | 
        На демо конфигурации Комплексная отрабатывают любые запросы в консольке ...     | |||
| 30
    
        smitti911 12.08.14✎ 12:55 | 
        Как оптимизировать запрос ?
 Код : ТекстЗапроса = " |Delete | Пров |FROM | 1SENTRY as Пров |WHERE | (Пров.docid in ( | select | jr.iddoc as iddoc | from | 1sjourn as jr | where (jr.date BETWEEN :НачДата~~ AND :КонДата~~) AND " + УсловиеПоВидамДок() + ")) | |"; рс.УстановитьТекстовыйПараметр("НачДата", НачДата); рс.УстановитьТекстовыйПараметр("КонДата", КонДата); Попытка рс.ВыполнитьИнструкцию(ТекстЗапроса); Сообщить("...проводки удалены"); Исключение Сообщить("Запрос по проводкам документов не выполнился!", "!"); Сообщить("Ош "+ОписаниеОшибки()); КонецПопытки; | |||
| 31
    
        smitti911 12.08.14✎ 12:57 | 
        Или так, есть процедура очистки базы прямым запросом
 Код: //******************************************* Процедура Удалить() ОлеДБ = СоздатьОбъект("OLEDBData"); Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE"; Рез = ОлеДБ.Соединение(Соединение); Сообщить("Рез "+Рез); рс = ОлеДБ.СоздатьКоманду(); рс.Выполнить("EXECSCRIPT('SET ANSI OFF')"); рс.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')"); рс.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')"); рс.Выполнить("Exec('SET TABLEVALIDATE TO 0')"); рс.Отладка(1); Сообщить("Обработка таблиц документов"); Для Счетчик = 1 По Докум.РазмерСписка() Цикл //по таблицам документов Если Докум.Пометка(Счетчик) = 0 Тогда Продолжить; КонецЕсли; ВидДок = Докум.ПолучитьЗначение(Счетчик); Сообщить(" ..." + ВидДок + "..."); Состояние("...удаляются строки документов..."); ТекстЗапроса = " |Delete | Док |FROM | $ДокументСтроки." + ВидДок.Идентификатор + " as Док | where Док.iddoc in ( | select | jr.iddoc as iddoc | from | 1sjourn as jr | where (jr.date BETWEEN :НачДата~~ AND :КонДата~~)) |"; рс.УстановитьТекстовыйПараметр("НачДата", НачДата); рс.УстановитьТекстовыйПараметр("КонДата", КонДата); Попытка рс.ВыполнитьИнструкцию(ТекстЗапроса); Сообщить("...строки удалены"); Исключение Сообщить("Запрос по строкам документов вида " + ВидДок.Идентификатор + " не выполнился!", "!"); Сообщить("ош "+ОписаниеОшибки()); КонецПопытки; Состояние("...удаляются шапки документов..."); ТекстЗапроса = " |Delete | Док |FROM | $Документ." + ВидДок.Идентификатор + " as Док | where Док.iddoc in ( | select | jr.iddoc as iddoc | from | 1sjourn as jr | where (jr.date BETWEEN :НачДата~~ AND :КонДата~~)) |"; рс.УстановитьТекстовыйПараметр("НачДата", НачДата); рс.УстановитьТекстовыйПараметр("КонДата", КонДата); Попытка рс.ВыполнитьИнструкцию(ТекстЗапроса); Сообщить("...шапки удалены"); Исключение Сообщить("Запрос по шапкам документов вида " + ВидДок.Идентификатор + " не выполнился!", "!"); КонецПопытки; КонецЦикла; //по табоицам документов Состояние(""); Сообщить("Обработка таблиц регистров"); // Для СчетчикРег = 1 По спРегистров.РазмерСписка() Цикл //по таблицам регистров ВидРег = спРегистров.ПолучитьЗначение(СчетчикРег); Сообщить("..." + ВидРег + "..."); ТекстЗапроса = " |Delete | Рег |FROM | $Регистр." + ВидРег.Идентификатор + " as Рег |WHERE Рег.iddoc in ( | select | jr.iddoc as iddoc | from | 1sjourn as jr | where (jr.date BETWEEN :НачДата~~ AND :КонДата~~) AND " + УсловиеПоВидамДок() + ") | | | |"; рс.УстановитьТекстовыйПараметр("НачДата", НачДата); рс.УстановитьТекстовыйПараметр("КонДата", КонДата); Попытка рс.ВыполнитьИнструкцию(ТекстЗапроса); Сообщить("...движения удалены"); Исключение Сообщить("Запрос по регистру вида " + ВидРег + " документов вида " + ВидДок.Идентификатор + " не выполнился!", "!"); КонецПопытки; КонецЦикла; //по таблицам регистров //смотрим общие таблицы по всем видам Сообщить("Обработка общих таблиц"); Сообщить(" ...удаляются проводки..."); ТекстЗапроса = " |Delete | Пров |FROM | 1SENTRY as Пров |WHERE | (Пров.docid in ( | select | jr.iddoc as iddoc | from | 1sjourn as jr | where (jr.date BETWEEN :НачДата~~ AND :КонДата~~) AND " + УсловиеПоВидамДок() + ")) | |"; рс.УстановитьТекстовыйПараметр("НачДата", НачДата); рс.УстановитьТекстовыйПараметр("КонДата", КонДата); Попытка рс.ВыполнитьИнструкцию(ТекстЗапроса); Сообщить("...проводки удалены"); Исключение Сообщить("Запрос по проводкам документов не выполнился!", "!"); Сообщить("Ош "+ОписаниеОшибки()); КонецПопытки; Сообщить(" ...удаляются периодические реквизиты, заполняемые документами..."); ТекстЗапроса = " |Delete | Конст |FROM | 1SCONST as Конст |WHERE (Конст.docid in ( | select | jr.iddoc as iddoc | from | 1sjourn as jr | where (jr.date BETWEEN :НачДата~~ AND :КонДата~~) AND " + УсловиеПоВидамДок() + ")) |"; рс.УстановитьТекстовыйПараметр("НачДата", НачДата); рс.УстановитьТекстовыйПараметр("КонДата", КонДата); Попытка тз = рс.ВыполнитьИнструкцию(ТекстЗапроса); Сообщить("...периодика удалена"); Исключение Сообщить("Запрос по периодике не выполнился!", "!"); Сообщить("Ош "+ОписаниеОшибки()); КонецПопытки; // Сообщить(" ...удаляются перекрестные ссылки..."); ТекстЗапроса = " |DELETE | Док |FROM | 1scrdoc as Док | |WHERE (SUBSTR(Док.ParentVal, 7, 9) in ( | select | jr.iddoc as iddoc | from | 1sjourn as jr | where " + УсловиеПоВидамДок() + ")) AND Док.childdate BETWEEN :НачДата~~ AND :КонДата~~ | |"; рс.УстановитьТекстовыйПараметр("НачДата", НачДата); рс.УстановитьТекстовыйПараметр("КонДата", КонДата); Попытка рс.ВыполнитьИнструкцию(ТекстЗапроса); Сообщить("...перекрестные ссылки удалены"); Исключение Сообщить("Запрос по перекрестным ссылкам и графам отбора не выполнился!", "!"); Сообщить("Ош "+ОписаниеОшибки()); КонецПопытки; // Сообщить(" ...удаляются операции..."); ТекстЗапроса = " |DELETE | Док |FROM | 1soper as Док | |WHERE Док.DocID in ( | select | jr.iddoc as iddoc | from | 1sjourn as jr | where " + УсловиеПоВидамДок() + ") AND Док.Date BETWEEN :НачДата~~ AND :КонДата~~ | |"; рс.УстановитьТекстовыйПараметр("НачДата", НачДата); рс.УстановитьТекстовыйПараметр("КонДата", КонДата); Попытка рс.ВыполнитьИнструкцию(ТекстЗапроса); Сообщить("...операции удалены"); Исключение Сообщить("Запрос по таблице операций не выполнился!", "!"); Сообщить("Ош "+ОписаниеОшибки()); КонецПопытки; // Сообщить(" ...удаляются ссылки из журнала документов..."); ТекстЗапроса = " |Delete | jr |FROM | 1SJourn as jr |WHERE " + УсловиеПоВидамДок() + " | AND | jr.date BETWEEN :НачДата~~ AND :КонДата~~ |"; рс.УстановитьТекстовыйПараметр("НачДата", НачДата); рс.УстановитьТекстовыйПараметр("КонДата", КонДата); Попытка рс.ВыполнитьИнструкцию(ТекстЗапроса); Сообщить("...ссылки удалены"); Исключение Сообщить("Запрос по ссылкам документов не выполнился!", "!"); Сообщить("Ош "+ОписаниеОшибки()); КонецПопытки; Предупреждение("Обработка закончена!"); КонецПроцедуры Где можно оптимизировать запросы ?Проводки и ссылки удаляются очень долго. | |||
| 32
    
        Ёпрст гуру 12.08.14✎ 13:12 | 
        читать это
 http://www.1cpp.ru/forum/YaBB.pl?num=1184317705 и переписывать запросы под попадание в индекс | |||
| 33
    
        smitti911 12.08.14✎ 13:15 | 
        (32) Интересует табличка 1SENTRY. Есть еще проблемка, если журнал цеплять через иннер джоин то VFP ругается Function name is missing.Может мое условие 
 |Delete | Пров |FROM | 1SENTRY as Пров |WHERE | (Пров.docid in ( | select | jr.iddoc as iddoc | from | 1sjourn as jr | where (jr.date BETWEEN :НачДата~~ AND :КонДата~~) AND " + УсловиеПоВидамДок() + ")) | |"; можно переписать оптимальней? | |||
| 34
    
        SSSSS_AAAAA 12.08.14✎ 13:33 | 
        (33) ":НачДата~~ "
 Вы такой синтаксис где откопали? | |||
| 35
    
        smitti911 12.08.14✎ 13:36 | ||||
| 36
    
        SSSSS_AAAAA 12.08.14✎ 13:39 | 
        (35) А конкретней? В списке форумов предлагаете искать? 
 На каком языке этот код? Для какого драйвера этот код? | |||
| 37
    
        smitti911 12.08.14✎ 13:41 | 
        (36) Все описано выше : VFPOLEDB на DBF базе прямой запрос 1С++     | |||
| 38
    
        smitti911 12.08.14✎ 13:43 | 
        (36) Сейчас читаю про попадание в индекс, например:
 Например мы хотим выбрать документы из 1SJOURN за период . Подходящий индекс – ACDATETIM (дата/время) : «DTOS(date)+time+iddoc» Если использовать Код: |WHERE Жур.Date BETWEEN :НачДата~~ AND :КонДата~~ то оптимизатор не найдет индекса, так как «Жур.Date» не соответствует «DTOS(date)+time+iddoc» К счастью FoxPro поддерживает упорядочение строк – и можно использовать оператор BETWEEN . Длина строки «time+iddoc» равна 15. Определим переменные МинСтрока= " " МаксСтрока= "ZZZZZZZZZZZZZZZ" Собственно условие Код: WHERE DTOS(date)+time+iddoc BETWEEN (DTOS(:НачДата~~)+' ') AND (DTOS(:КонДата~~)+'ZZZZZZZZZZZZZZZ') (для простоты переменные МинСтрока и МаксСтрока не используются) | |||
| 39
    
        Ёпрст гуру 12.08.14✎ 13:43 | 
        (34) че не устраивает ?     | |||
| 40
    
        SSSSS_AAAAA 12.08.14✎ 13:46 | 
        (39) Зайдем с другой стороны. Что еще пишет в сообщении об ошибке кроме Function name is missing? На какую строку ругается?     | |||
| 41
    
        Ёпрст гуру 12.08.14✎ 13:52 | 
        вот.. кусок кода
 мд = СоздатьОбъект("MetaDataWork"); Для ном = 1 по Метаданные.Регистр() Цикл Рег = Метаданные.Регистр(ном); Состояние("движуха регистра "+Рег.Идентификатор); Сообщить("движуха регистра "+Рег.Идентификатор,"i"); Если Рег.БыстраяОбработкаДвижений =0 Тогда стр =" |DELETE |FROM $Регистр."+Рег.Идентификатор+" |WHERE iddoc in (select Жур.iddoc from 1sjourn Жур where | |dtos(Жур.date)+Жур.time+Жур.iddoc between (dtos(:НачДата~~)+' '+' ') and (dtos(:КонДата~~)+'ZZZZZZ' + 'ZZZZZZZZZ') |) |"; Иначе стр =" |DELETE |FROM $Регистр."+Рег.Идентификатор+" | WHERE | DTOS(date)+time+iddoc+STR(lineno,4)+STR(actno,6) BETWEEN | DTOS(:НачДата~~)+' '+' '+' '+' ' | And DTOS(:КонДата~~)+'ZZZZZZ'+'ZZZZZZZZZ'+'ZZZZ'+'ZZZZZZ' | |"; КонецЕсли; Запрос.УстановитьТекстовыйПараметр("НачДата", '01.01.80'); Запрос.УстановитьТекстовыйПараметр("КонДата", ВыбДата); Если Запрос.ВыполнитьИнструкцию(стр) = 0 Тогда Сообщить("движуха регистра "+Рег.Идентификатор,"!!!"); КонецЕсли; | |||
| 42
    
        Ёпрст гуру 12.08.14✎ 13:53 | 
        А тебе.. можно запихать выборку доков во временную табличку и соединять потом везде в делете     | |||
| 43
    
        SSSSS_AAAAA 12.08.14✎ 13:57 | 
        (41) dtos(:НачДата~~) в сочетании с УстановитьТекстовыйПараметр("НачДата", '01.01.80') - чушь, приводящая к ругани на несоответствие типов. К тому же, '01.01.80' есть большие грабли в деле правильного понимания драйвером сего безобразия.     | |||
| 44
    
        SSSSS_AAAAA 12.08.14✎ 13:58 | 
        (41) Добавчик: а Жур.date у нас какого типа?     | |||
| 45
    
        Ёпрст гуру 12.08.14✎ 14:00 | 
        (43) ты не в теме     | |||
| 46
    
        SSSSS_AAAAA 12.08.14✎ 14:05 | 
        (45) Я очень даже в теме VFPOLEDB на DBF.
 VFPOLEDB на dtos() со строковым параметром будет ругаться на несоответствие типов. | |||
| 47
    
        SSSSS_AAAAA 12.08.14✎ 14:07 | 
        (45) Изучай:
 Visual FoxPro 9.0 Справка по языку Функция DTOS( ) См.также Пример Свернуть все Возвращает дату в виде символьной строки формата ггггммдд из заданного выражения типа "дата" (Date) или "дата-время" DateTime. DTOS(dExpression | tExpression) Параметры dExpression Указывает выражение типа "дата" для преобразования посредством функции DTOS( ) в строку из восьми цифр. tExpression Указывает выражение типа "дата-время" для преобразования посредством функции DTOS( ) в строку из восьми цифр. Возвращаемое значение Символьное Примечания Эта функция полезна для индексирования таблиц, содержащих поля типа "дата" и "дата-время". Она равнозначна функции DTOC( ) для случая, когда указывается первый необязательный аргумент. Вид и содержимое символьной строки, возвращаемой функцией DTOS( ), не зависит от установок SET DATE или SET CENTURY. | |||
| 48
    
        Ёпрст гуру 12.08.14✎ 14:09 | 
        (46) :)     | |||
| 49
    
        Ёпрст гуру 12.08.14✎ 14:10 | 
        Продолжай дальше изучение справки по vfp     | |||
| 50
    
        smitti911 12.08.14✎ 14:11 | 
        (40) Запрос >>> OLEDBCommand error:
 FAILED! ICommandText::Execute(): Function name is missing ). | |||
| 51
    
        SSSSS_AAAAA 12.08.14✎ 14:14 | 
        (49) Спасибо, но в таких рекомендациях не нуждаюсь. Эту справку и так почти наизусть знаю.     | |||
| 52
    
        smitti911 12.08.14✎ 14:15 | 
        (41) В чем разница Если Рег.БыстраяОбработкаДвижений =0 Тогда     | |||
| 53
    
        Ёпрст гуру 12.08.14✎ 14:17 | 
        (52) в табличке движений регистра будут доп поля - не надо будет делать соединение с журналом (аналогично будут поля, ежели стоит галка на одном из измерений регистра)     | |||
| 54
    
        SSSSS_AAAAA 12.08.14✎ 14:17 | 
        (50) М-да, очень информативно. Но видно, что стоит закрывающая скобка, которой не найдено соответствие.     | |||
| 55
    
        Ёпрст гуру 12.08.14✎ 14:18 | 
        для проводок, нужно задействовать этот индекс
 DTOS(DATE)+TIME+DOCID+STR(NUMBER,5)+STR(CORNO,5) | |||
| 56
    
        Ёпрст гуру 12.08.14✎ 14:19 | 
        (51) и как помогает ?     | |||
| 57
    
        Ёпрст гуру 12.08.14✎ 14:19 | 
        в УсловиеПоВидамДок
 у тя там че хоть ? Ты не у всех документов режешь движуху ? | |||
| 58
    
        smitti911 12.08.14✎ 14:21 | 
        (57) Движуху надо оставить по банк.випис. и зарплатная часть
 //******************************************* Функция УсловиеПоВидамДок() СтрокаУсловия = "("; СчетчикВыбраных = 0; Для СчетчикДок = 1 По Докум.РазмерСписка() Цикл //перебираем таблицы документов Если Докум.Пометка(СчетчикДок) = 0 Тогда Продолжить; КонецЕсли; СчетчикВыбраных = СчетчикВыбраных + 1; КонецЦикла; Для СчетчикДок = 1 По Докум.РазмерСписка() Цикл //перебираем таблицы документов Если Докум.Пометка(СчетчикДок) = 0 Тогда Продолжить; КонецЕсли; ВидДок = Докум.ПолучитьЗначение(СчетчикДок); СтрокаУсловия = СтрокаУсловия + "jr.IDDOCDEF = $ВидДокумента." + ВидДок.Идентификатор; СчетчикВыбраных = СчетчикВыбраных - 1; Если СчетчикВыбраных = 0 Тогда СтрокаУсловия = СтрокаУсловия + ")"; Иначе СтрокаУсловия = СтрокаУсловия + " | OR "; КонецЕсли; КонецЦикла; Возврат СтрокаУсловия; КонецФункции | |||
| 59
    
        smitti911 12.08.14✎ 14:23 | 
        (55) Чем можно смотреть какой индекс используется у какай таблички?     | |||
| 60
    
        SSSSS_AAAAA 12.08.14✎ 14:24 | 
        (56) Ага, особенно в поисках ошибок в чужом коде.     | |||
| 61
    
        smitti911 12.08.14✎ 14:27 | 
        (50) select Пров.TIME FROM 1SENTRY as Пров
 INNER JOIN 1SJourn ON 1SJourn.IDDoc = Пров.DocID WHERE 1SJourn.Date BETWEEN :НачДата AND :НачДата~ Запрос >>> OLEDBCommand error: FAILED! ICommandText::Execute(): Command contains unrecognized phrase/keyword. | |||
| 62
    
        SSSSS_AAAAA 12.08.14✎ 14:28 | 
        (59) Ничем. В фоксе нет такого средства. Но есть возможность посмотреть уровень оптимизации. SYS(3054). Но для этого запрос надо отлаживать в фоксе, и только потом готовый запрос тащить в другие системы.     | |||
| 63
    
        SSSSS_AAAAA 12.08.14✎ 14:30 | 
        (61) Разумеется ругается. Он не знает что такое  :НачДата     | |||
| 64
    
        Ёпрст гуру 12.08.14✎ 14:30 | 
        (61)
 select Пров.TIME FROM 1SENTRY as Пров INNER JOIN 1SJourn as Жур ON Жур .IDDoc = Пров.DocID WHERE Жур .Date BETWEEN :НачДата~~ AND :НачДата~~ | |||
| 65
    
        Ёпрст гуру 12.08.14✎ 14:30 | 
        (62) :)))))))))))))))))))))))))))))))))))))     | |||
| 66
    
        Ёпрст гуру 12.08.14✎ 14:31 | 
        только вот, соединение с журналом в этом запросе лишнее + нет попадания в индекс     | |||
| 67
    
        SSSSS_AAAAA 12.08.14✎ 14:32 | 
        (65) Ну вот и прелестно, хоть кому-то я жизнь скрасил.     | |||
| 68
    
        Ёпрст гуру 12.08.14✎ 14:33 | 
        (67) месье не знает как посмотреть индексы на табличку ?     | |||
| 69
    
        SSSSS_AAAAA 12.08.14✎ 14:34 | 
        (68) Мсье знает как посмотреть индексы на табличку, но вопрос был про использование индексов в запросе, а это сильно разные вещи.     | |||
| 70
    
        Junior1s 12.08.14✎ 14:35 | 
        (68) кто то походу троллит тебя :)     | |||
| 71
    
        smitti911 12.08.14✎ 14:38 | 
        (31) Лучше переписать через INNER JOIN с журналом или оставить как есть только попадать в индекс.Что бістрее отработает?     | |||
| 72
    
        smitti911 12.08.14✎ 14:39 | 
        (64) Так работает.Спасибо.     | |||
| 73
    
        smitti911 12.08.14✎ 14:40 | 
        (63) Все он знает. 1sqa если что....     | |||
| 74
    
        SSSSS_AAAAA 12.08.14✎ 14:42 | 
        (73) Не всё. Найдите отличия между :НачДата~~ и :НачДата     | |||
| 75
    
        SSSSS_AAAAA 12.08.14✎ 14:43 | 
        (71) Что быстрее отработает поможет узнать тестовый прогон запросов.     | |||
| 76
    
        Ёпрст гуру 12.08.14✎ 14:45 | 
        (74) {d '2001-01-01'}, '20010101'
 дальше бум тупить, или как ? | |||
| 77
    
        Ёпрст гуру 12.08.14✎ 14:45 | 
        (75) что быстрее работает, покажет план выполнения запроса     | |||
| 78
    
        Ёпрст гуру 12.08.14✎ 14:46 | 
        и о чудо, его тоже можно смотреть в дбф базах.. если че     | |||
| 79
    
        Ёпрст гуру 12.08.14✎ 14:48 | 
        (72) см. (66)
 в этом запросе, можно выкинуть соединение с журналом и воткнуть условие на дату из проводки | |||
| 80
    
        SSSSS_AAAAA 12.08.14✎ 15:07 | 
        (76) И что? Первое вообще не пойми что, второе - строка, которая может быть получена от функции dtos() при передаче ей значения типа ДАТА, например {^2001-01-1}.     | |||
| 81
    
        SSSSS_AAAAA 12.08.14✎ 15:08 | 
        (78) его - это ЧТО?     | |||
| 82
    
        smitti911 12.08.14✎ 15:10 | 
        ТекстЗапроса = "
 |Delete | Пров |FROM | 1SENTRY as Пров |WHERE | Пров.docid in ( | select | jr.iddoc as iddoc | from | 1sjourn as jr |where DTOS(jr.date)+jr.time+jr.iddoc BETWEEN (DTOS(:НачДата~~)+' ') AND (DTOS(:КонДата~~)+'ZZZZZZZZZZZZZZZ') AND " + УсловиеПоВидамДок() + ") | | |"; В журнале ведь индекс DTOS(date)+time+iddoc , почему нету прироста по скорости? | |||
| 83
    
        SSSSS_AAAAA 12.08.14✎ 15:11 | 
        (78) Или под словом "его" имеется в виду план запроса? Если так, то разочарую - в фоксе нет понятия "план запроса", впрочем, как нет и понятия "дбф база" :)     | |||
| 84
    
        SSSSS_AAAAA 12.08.14✎ 15:13 | 
        (82) "ведь индекс DTOS(date)+time+iddoc  , почему нету прироста по скорости?"
 Потому, что, как минимум, наличие какого-то индекса не гарантирует его использования. | |||
| 85
    
        Ёпрст гуру 12.08.14✎ 15:16 | 
        (82) 
 что в УсловиеПоВидамДок ? | |||
| 86
    
        smitti911 12.08.14✎ 15:17 | 
        (85) WHERE (jr.IDDOCDEF = ' E7L')     | |||
| 87
    
        Ёпрст гуру 12.08.14✎ 15:21 | 
        (86) там всегда 1 вид документа ?
 или что ? | |||
| 88
    
        Ёпрст гуру 12.08.14✎ 15:21 | 
        УсловиеПоВидамДок() покажи код функции     | |||
| 89
    
        Ёпрст гуру 12.08.14✎ 15:21 | 
        (83) та ты шо     | |||
| 90
    
        smitti911 12.08.14✎ 15:23 | 
        (87) Нет, пока пробую на копии базы то 1 . А потом будет порядка 20-и     | |||
| 91
    
        smitti911 12.08.14✎ 15:23 | 
        через OR     | |||
| 92
    
        smitti911 12.08.14✎ 15:23 | 
        (87) Cvjnhb (58)     | |||
| 93
    
        Ёпрст гуру 12.08.14✎ 15:26 | 
        (90) и зачем это всё ?
 Зачем в этом запросе ограничение по виду ? Это свёртка же, там нужно у всех доков проводки выкидывать | |||
| 94
    
        Ёпрст гуру 12.08.14✎ 15:28 | 
        если у двух документов нужно оставить, то так тогда хотя бы
 and not in ($ВидДокумента.ПервыйДок,$ВидДокумента.ВторойДок) но никак не or | |||
| 95
    
        smitti911 12.08.14✎ 15:29 | 
        (93) Ну назовем это неполная свертка, нужно несколько видов доков оставить с проводками, движухой и т.д.Такая вот тупая задача.Незнаю как бухи будут сводить остатки....
 Сейчас запускал чистку за 1 день по виду док. приходная.Время выполнения 45 сек причем 33 из них это чистка 1ссентри | |||
| 96
    
        SSSSS_AAAAA 12.08.14✎ 15:34 | 
        (89) Сильный аргумент. :) Лучше ссылочку на доку по планам запросов в фоксе кинул для изучения, может где мимо меня промелькнула?     | |||
| 97
    
        Ёпрст гуру 12.08.14✎ 15:37 | ||||
| 98
    
        Ёпрст гуру 12.08.14✎ 15:38 | 
        даже фокс не нужен, только некоторое файло с него     | |||
| 99
    
        SSSSS_AAAAA 12.08.14✎ 15:59 | 
        (98) "ЗЫ... Нужны VFP9 Run-Time Libraries " А это уже перестало быть фоксом? :) Учите матчасть. :)     | |||
| 100
    
        SSSSS_AAAAA 12.08.14✎ 16:01 | 
        (98) И что-то про планы запросов не наблюдаю ничего? Куда смотреть?     | |||
| 101
    
        Ёпрст гуру 12.08.14✎ 16:03 | 
        (99) читать то умеешь, али как ?     | |||
| 102
    
        SSSSS_AAAAA 12.08.14✎ 16:04 | 
        (101) Аргументировать то можешь или как? Пруф на планы запросов в фоксе в студию.     | |||
| 103
    
        Ёпрст гуру 12.08.14✎ 16:07 | 
        чем тебя (97) не устраивает ?     | |||
| 104
    
        SSSSS_AAAAA 12.08.14✎ 16:07 | 
        (103) Тем, что там нет ничего про планы запросов.     | |||
| 105
    
        Ёпрст гуру 12.08.14✎ 16:09 | 
        ну и для тех, у кого не установлен фокс, читаем это:
 http://www.1cpp.ru/forum/YaBB.pl?num=1210677779/27#27 | |||
| 106
    
        SSSSS_AAAAA 12.08.14✎ 16:12 | 
        (105) Ну и где там про планы запросов. Где взять и как работать с рантаймом фокса я сам поучить могу. Где планы запросов, ткни меня носом.     | |||
| 107
    
        SSSSS_AAAAA 12.08.14✎ 16:18 | 
        (105) А, ты повелся на Execute_PLAN? Наивный... :) Нет и не может там быть плана ибо его нет в природе. Там всего лишь вывод в файл результата работы уже упомянутой функции Sys(3054). А это ни разу не план, в нем нет информации по используемым индексам и т.д. Там есть уровень оптимизации и не более того.     | |||
| 108
    
        Ёпрст гуру 12.08.14✎ 16:28 | 
        (107) спасибо, я в курсе     | |||
| 109
    
        Ёпрст гуру 12.08.14✎ 16:35 | 
        а на счет индексов - всё там будет написано     | |||
| 110
    
        Ёпрст гуру 12.08.14✎ 16:37 | 
        будет написано какой задействован индекс и какой уровень оптимизации     | |||
| 111
    
        Ёпрст гуру 12.08.14✎ 16:37 | 
        этого более чем достаточно в данном вопросе.     | |||
| 112
    
        SSSSS_AAAAA 12.08.14✎ 16:43 | 
        (109) Не будет. Уровень оптимизации указывается всего тремя словами: full, partial, none. Всё!
 Кстати, о птичках. Так как в данной теме обсужадется получение данных из дбф-файлов 1С версии 7.*, то могу огорчить еще одним сообщением. Для того, что бы индеккс использовался, нужно чтобы он был открыт во время выполнения запроса. Отрываться он может и автоматом при открытии таблицы, но для этого он должен быть создан соотвествующим образом. А вот это с указанными файлами еще надо проверить. Хоть в 1с у индексных фалов и стоИт расширение CDX, то еще не факт, что в дбф-файлах стоИт соттвествующий признак. А без него что есть индексы, что их нет - без разницы. | |||
| 113
    
        SSSSS_AAAAA 12.08.14✎ 16:47 | 
        (110) Не будет. Нет там указания на индекс.
 Статью из хелпа показать? | |||
| 114
    
        Ёпрст гуру 12.08.14✎ 16:56 | ||||
| 115
    
        Ёпрст гуру 12.08.14✎ 16:57 | 
        using index... не о чем не говорит вам ?     | |||
| 116
    
        SSSSS_AAAAA 12.08.14✎ 17:13 | 
        (115) Дата поста и версия фокса ничего не говорят?     | |||
| 117
    
        Ёпрст гуру 12.08.14✎ 17:15 | 
        (116) в 9.2 я вижу тоже самое, если что , используя поделку из форума 1cpp     | |||
| 118
    
        SSSSS_AAAAA 12.08.14✎ 17:28 | 
        (117) 9.2? Это что? Версия фокса? Или чего-то еще? Если фокса, то где откопал? Или ты так второй сервиспак обзываешь? Так после него еще паки были.     | |||
| 119
    
        Ёпрст гуру 12.08.14✎ 17:35 | 
        да sp2     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |