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

  1  2  3  4  5   
1С:Предприятие ::

Метки: 

v7: Оптимизация запроса

Я
   bananan
 
25.12.12 - 11:35
Когда я задал обрботку 10 дней он работал 00:05:59, когда я ему задал тужу обработку но в функции ПересчетВЯщики(ТМЦ, Количество) в первой же строке вызвал Возврат - он работал 00:03:34 (на 2 минуты и 25 секунд меньше). Т.е. именно функция ПересчетВЯщики() сильно тормозит. К подчиненному справочнику Справочник.ЕдИз надо как-то иначе обращаться (не в функции, в функции опять же циклы). Т.е. е справочнику Справочник.ЕдИз надообращатьс через Запрос строго через запрос, может выполнять для этого второй Запрос. Подскажите как это сделать?
 
 
   1Сергей
 
1 - 25.12.12 - 11:36
Сам понял что спросил?
   Жан Пердежон
 
2 - 25.12.12 - 11:36
тс долго терпел
   Ёпрст
 
3 - 25.12.12 - 11:37
воткнуть галку сортировка на реквизит Ед в справочнике ЕдИзм
искать потом через ВыбратьЭлементыПоРеквизиту
   cw014
 
4 - 25.12.12 - 11:37
Какой фееричный бред
   Sh1ko
 
5 - 25.12.12 - 11:38
Вы просто не знаете содержание предыдущих серий.
   bananan
 
6 - 25.12.12 - 11:39
(3) Сейчас так попробую
   Ёпрст
 
7 - 25.12.12 - 11:39
а так, как у тебя скуль, то любое обращение к внешней функции в тексте запроса будет всегда медленно, це не дбф.
   bananan
 
8 - 25.12.12 - 11:44
(3) В функции наисал так:
Функция ПересчетВЯщики(ТМЦ, Количество)
    Спр.ИспользоватьВладельца(ТМЦ);
    Спр.ВыбратьЭлементыПоРеквезиту("Ед");
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если (Спр.ПометкаУдаления()=0)И(Спр.Ед = Перечисление.Единицы.ящик) Тогда
            Возврат Количество/?(Спр.Коэффициент=0,1,Спр.Коэффициент);
        КонецЕсли;
    КонецЦикла;
    Возврат Количество;
КонецФункции  
Выскакивает модальное диалоговое окно с надписью:
Поле агрегатного объекта не обнаружено (ВыбратьЭлеменыПоРеквезиту): 36
   miki
 
9 - 25.12.12 - 11:46
(8)в русском реквизИт через И.
Базван v.2?
   Ёпрст
 
10 - 25.12.12 - 11:49
Одно непонятно, конфа автора вовсю использует 1cpp для расчета останков прямым запросом, в том числе, в модулях проведения, + класс на перехватчике для собственного логгирования..
Откуда там автор взялся с незнанием элементарщины ?!
 
 Рекламное место пустует
   bananan
 
11 - 25.12.12 - 11:50
(10) Так уж получилось. но, поверьте - неделя-две и от этого незнания и следа не будет
   Андрей_Андреич
 
12 - 25.12.12 - 11:50
(10) Кстати, пока все дома - для DBF ф-я "ЗначениеВСтрокуБД()" работает?
   bananan
 
13 - 25.12.12 - 11:52
(3) При попытке сохранить метаданные выдает модальное диалогово окно  Ошибка последовательности функций (это сервер ругается)
   bananan
 
14 - 25.12.12 - 11:52
(12) Как проверить (пример кода плиз)
   Ёпрст
 
15 - 25.12.12 - 11:53
(11) :))))))))))))))

(12) работает
   bananan
 
16 - 25.12.12 - 11:53
+(13) Причем данная БД - тестовая и с ней работаю только я
   bananan
 
17 - 25.12.12 - 11:56
+(13) с даной проблемой обратился к нашему сисадмину - сейчас он посмотрит
   Mikeware
 
18 - 25.12.12 - 12:04
(11) не верю. ты уже доказал, что тебе 5 лет мало...
   bananan
 
19 - 25.12.12 - 12:11
(18) Эти пять лет были совсем другие задачи
   Ёпрст
 
20 - 25.12.12 - 12:11
(18) может, автор в другом измерении живет, для него 5-лет..это по нашенски - 5 минут
:)
   Ёпрст
 
21 - 25.12.12 - 12:12
(19) ну, по твоим темам этого не скажешь.
   bananan
 
22 - 25.12.12 - 12:12
(17) Сисадмин в данном случае ничего сделать не может.
А иначе этот запрос никак нельзя сделать?
   Ёпрст
 
23 - 25.12.12 - 12:13
(22) можно
   Ёпрст
 
24 - 25.12.12 - 12:13
начнеи его с select
   bananan
 
25 - 25.12.12 - 12:14
(24) Т.е? Синтаксис SQL м как дальше?
   Ёпрст
 
26 - 25.12.12 - 12:16
   bananan
 
27 - 25.12.12 - 12:23
(26) Его можно запустить в QA
Что такое QA?
   Ёпрст
 
28 - 25.12.12 - 12:26
   bananan
 
29 - 25.12.12 - 12:37
(28) Софт я закачал, но... достукатьсяиз него к серверу не получиться без шефа..
А запрос это попробывал через 1С (код иакой:
Процедура Сформировать()
    Запрос=СоздатьОбъект("Запрос");
    ТекстЗапроса = "
        |SELECT
        |    Спр.Code as Код,
        |    Спр.Descr as Наименование
        |FROM
        |    sc433 as Спр";
        ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
        ТЗ.ВыбратьСтроку();
КонецПроцедуры
 так выдает
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(10)}: Поле агрегатного объекта не обнаружено (ВыполнитьИнструкцию)
   bananan
 
30 - 25.12.12 - 12:37
+(29) и чето делать7
   Mikeware
 
31 - 25.12.12 - 12:39
(30) вариант 1.: почитать документацию
вариант 2.: спросить у шефа
   Ёпрст
 
32 - 25.12.12 - 12:41
(31) к чтению ТС не приучен
   bananan
 
33 - 25.12.12 - 12:44
Просто Выполнить а не ВыполнитьИнструукцию - это уже поменял, но:
ТЗ = Запрос.Выполнить(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(10)}:      <<?>> Спр.Code as Код,
Запрос[3] : Ожидается  '=' перед 'Спр'
ТЗ.ВыбратьСтроку();
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(11)}: Значение не представляет агрегатный объект (ВыбратьСтроку)
т.е. насколько я понимаю Спр.Code as Код, надо писать иначе. Как?
 
 
   bananan
 
34 - 25.12.12 - 12:45
+(33) написал так: Код=Спр.Code as Код,
- он и на такой синтаксис ругается...
   Ёпрст
 
35 - 25.12.12 - 12:46
(33) чего, не в состоянии ужо прочесть одну страничку в ворде из (26) ?
   varelchik
 
36 - 25.12.12 - 12:47
С каких это пор у объекта Запрос появился метод ВыполнитьИнструкцию()?
Наверное все таки на использовать OdbcRecordSet?
   bananan
 
37 - 25.12.12 - 12:48
(35) В состоянии, но там такого нет!
   varelchik
 
38 - 25.12.12 - 12:49
(37) мда тогда я пошел.
   Ёпрст
 
39 - 25.12.12 - 12:49
(37) не пиз..ди!
2-ая страничка сверху.
   bananan
 
40 - 25.12.12 - 12:50
(39) Вторая страница с ферху:
Для DBF версии рекомендуется использовать объект “ OLEDBData”(для версии 1С++ 2.0.0.0 и выше) следующим образом:
        База = СоздатьОбъект("OLEDBData");
        Соединение = "Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN=""";
        Рез = База.Соединение(Соединение);
        Запрос = База.СоздатьКоманду();
А что делать, если на компьютере не установлен драйвер фокса? Дык, качать!

Запрос = СоздатьОбъект("ODBCRecordset");
Внимание! SQL версия не требует дополнительной инструкции подключения к базе, метод "УстБД1С()"  нужен для подключения к другой(не текущей) базе.
ТекстЗапроса = "
|SELECT
|    Спр.Code as Код,
|    Спр.Descr as Наименование
|FROM
|    sc433 as Спр";

ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку();

Вот и выполнился наш первый запрос. Это конечно хорошо, но справочников в конфигурации много, смотреть каждый раз в DDS ой как не хочется, да и читать такие запросы совсем не удобно. Если использовать ADO, а не 1С++, то так и придется делать. Но скажем спасибо разработчикам 1С++, что в ней есть метапарсер имен, который сам переведет все идентификаторы объектов в их реальные имена. А делается это так:

ТекстЗапроса = "
|SELECT
|    Спр.Code as Код,
|    Спр.Descr as Наименование
|FROM
|    $Справочник.Номенклатура as Спр";

Заменяются следующие имена:
$Справочник.ХХХ – справочник
$Документ.ХХХ – документ
$ДокументСтроки.ХХХ – табличная часть документа
А также регистры, журналы расчетов (об этом поговорим позднее)

Немножко усложним пример. Выберем дополнительно реквизит “ТипНоменклатуры”
ТекстЗапроса = "
|SELECT
|    Спр.Code as Код,
|    Спр.Descr as Наименование,
|    $Спр.ТипНоменклатуры as ТипНоменклатуры
|FROM
|    $Справочник.Номенклатура as Спр";

Замечание: Чтобы избежать коллизий, всегда пользуйтесь алиасами.

Как вы уже заметили, мы не стали искать соответствий имен в DDS, а переложили эту задачу на метапарсер. Для того чтобы парсер понял, что это реквизит нужно перевести на язык SQL ставим знак $ перед именем таблицы: $Спр.ТипНоменклатуры
Правда, не все имена метапарсер преобразовывает в поля таблиц. Есть исключения – это предопределенные имена:
Для справочников
ИД (Ссылка)        ID    
Код            Code
Наименование    Descr
Родитель        ParentID
Владелец        ParentExt
ЭтоГруппа        IsFolder

И где здась обТЗ = Запрос.Выполнить(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(10)}:      <<?>> Спр.Code as Код,
Запрос[3] : Ожидается  '=' перед 'Спр'
ну и т.д.
   bananan
 
41 - 25.12.12 - 12:51
+(40) у нас SQL
   Ёпрст
 
42 - 25.12.12 - 12:51
(40) может стоить сходить к окулисту, или черничьки поесть ?
   Ёпрст
 
43 - 25.12.12 - 12:52
Запрос = СоздатьОбъект("ODBCRecordset");
   КонецЦикла
 
44 - 25.12.12 - 12:57
(10) O_o
   bananan
 
45 - 25.12.12 - 12:59
Ёпрст4 большое спасибо, в этом форуме ты мне уже не первый раз помагаешь, остальные в основном ругаються.
ТС запросом:Запрос = СоздатьОбъект("ODBCRecordset"); поменял
а вот здесь ругается:
ТЗ.ВыбратьСтроку();
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(11)}: Значение не представляет агрегатный объект (ВыбратьСтроку)
ТЗ у нас вроде как и не определена, здесь ндо ТЗ создать как таблицу значений?
   bananan
 
46 - 25.12.12 - 13:02
+(45) Объявил ТЗ как таблицаЗначений - все-равно ругается:
ТЗ.ВыбратьСтроку();
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(12)}: Значение не представляет агрегатный объект (ВыбратьСтроку)
   Ёпрст
 
47 - 25.12.12 - 13:02
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса)
   Mikeware
 
48 - 25.12.12 - 13:04
(47) не в коня корм...
   bananan
 
49 - 25.12.12 - 13:04
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(11)}: State 42S02, native 208, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'sc433'.
А какой прграммой лучше смотреть 1Cv7.DDS?
 
 Рекламное место пустует
   Ёпрст
 
50 - 25.12.12 - 13:06
программа notepad.exe
   Mikeware
 
51 - 25.12.12 - 13:06
(47) нахрен тебе ДДС сдался?
ну, блокнотом посмотри... фаром. вордом. тотал командером. райтом...
   Ёпрст
 
52 - 25.12.12 - 13:08
и если че, в твоей конфе нет справочника Номенклатура, у тя есть ТМЦ
   bananan
 
53 - 25.12.12 - 13:10
(51) Проверить правильность имен полей
   Ёпрст
 
54 - 25.12.12 - 13:11
(53) ран тебе еще, метапарсер обманывать
   bananan
 
55 - 25.12.12 - 13:18
(54) Да никого я не хочу обманывать; просто ейчас выдает:
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(11)}: State 42S02, native 208, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'sc433'.
   Ёпрст
 
56 - 25.12.12 - 13:20
(55) см (52)
   bananan
 
57 - 25.12.12 - 13:24
(56) Да я и сгначала задал ТМЦ - ошибка посмотерл в файл там:
#==TABLE no 25     : Справочник ТМЦ
# Name    |Descr                         |SQLTableNam|RecordLock
T=SC92    |Справочник ТМЦ                |SC92       |R        
#-----Fields-------

Задал Descr - ошибка
оказыввается Справочник ТМЦ - SC92
   bananan
 
58 - 25.12.12 - 13:24
=(57) Ращбираюсь дальше
   Mikeware
 
59 - 25.12.12 - 13:25
(57) пляттттть...
  $Справочник.ТМЦ as Спр";
   Ёпрст
 
60 - 25.12.12 - 13:26
(59) тупость затягивает, не так ли ?
:))
   Mikeware
 
61 - 25.12.12 - 13:27
(60) главное - не заразиться...
   Mikeware
 
62 - 25.12.12 - 13:29
вообще, настроение хреновое. товарищ умер.работать обломно. Домой ехать лень. к нему - на его жену смотреть тяжело...
вот и флужу...
   bananan
 
63 - 25.12.12 - 13:30
(59) До этого уже дошел - работает, а вот
$Спр.ТипТМЦ as ТипТМЦ - не хочет:
Meta name parser error: поле таблицы не найдено "$Спр.ТипТМЦ"
   Ёпрст
 
64 - 25.12.12 - 13:34
(63)Открой наконец пофигуратор, протри очки и посмотри - у справочника ТМЦ нет реквизита ТипТМЦ .
и не было.
   bananan
 
65 - 25.12.12 - 13:38
(64) Спасибо
   bananan
 
66 - 25.12.12 - 14:09
Разбираюсь с документом http://www.1cpp.ru/forumfiles/Attachments/mod_002.zip так вот незнаю как мне определить НачДата и КонДата для запроса:
ТекстЗапроса = "
        |SELECT
        |    Жур.IDDoc as [Док $Документ],
        |    Жур.IDDocDef as Док_вид
        |FROM
        |    _1SJourn as Жур
        |WHERE
        |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |    Жур.IDDocDef = $ВидДокумента.РасходнаяНкладная";
Поставил на форму два поля ввода выбора даты: НачДата и КонДата - не проходит:
44)}: Meta name parser error: не указан параметр ":НачДата"
Что здесь не так?
   Ёпрст
 
67 - 25.12.12 - 14:10
(66) УстановитьТекстовыйПараметр
   Ёпрст
 
68 - 25.12.12 - 14:10
читай статью, там всё есть
   bananan
 
69 - 25.12.12 - 14:18
(68) Читаю, сделал так:
Запрос=СоздатьОбъект("ODBCRecordset");
    ТекстЗапроса = "
        |SELECT
        |    Жур.IDDoc as [Док $Документ],
        |    Жур.IDDocDef as Док_вид
        |FROM
        |    _1SJourn as Жур
        |WHERE
        |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |    Жур.IDDocDef = $ВидДокумента.РасходнаяНкладная";

    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТЗ.УстановитьТекстовыйПараметр("НачДата", НачДата);
    ТЗ.УстановитьТекстовыйПараметр("КонДата", КонДата);
    ТЗ.ВыбратьСтроку();
Дак ругается все равно:
: Meta name parser error: не указан параметр ":НачДата"
ТЗ.УстановитьТекстовыйПараметр("НачДата", НачДата);
я как-то не так вызываю?
   Mikeware
 
70 - 25.12.12 - 14:20
плять. ТЗ -то тут причем?
   Ёпрст
 
71 - 25.12.12 - 14:20
(69) думать то когда будешь ?
Устанавливать параметры запроса надо ДО его выполнения.
   Ёпрст
 
72 - 25.12.12 - 14:21
ну и (70).. это я даже не увидел :))))))))))))))
   Mikeware
 
73 - 25.12.12 - 14:21
писец какой-то... сначала выполняет запрос, потом параметры ему пытается передать....
причем параметры пытается передать результатам запроса
   bananan
 
74 - 25.12.12 - 14:28
(70) ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
(73) Значит надо так:
ТЗ=СоздатьОбъект("Запрос");
ТЗ.УстановитьТекстовыйПараметр("НачДата", НачДата);
ТЗ.УстановитьТекстовыйПараметр("КонДата", КонДата)
   Mikeware
 
75 - 25.12.12 - 14:29
без слов...
   bananan
 
76 - 25.12.12 - 14:30
+(74) Дык и так не работает:
Meta name parser error: не указан параметр ":НачДата"
   Mikeware
 
77 - 25.12.12 - 14:30
был бы ты 86 нола 0 посоветовал бы  позвать взрослых...
на по факту - либо у тебя маразм, либо дебильность в средней стадии
   bananan
 
78 - 25.12.12 - 14:30
(75) А если со словами? Как это сдалать???
   bananan
 
79 - 25.12.12 - 14:31
(77) Вот здесь как раз без слов.
Ты знаещь в какой обстановке я работаю?
   bananan
 
80 - 25.12.12 - 14:32
Ёпрст4 как установить текстовый параметр?
   bananan
 
81 - 25.12.12 - 14:34
+(80) Написал так:
Запрос=СоздатьОбъект("ODBCRecordset");
    ТЗ = СоздатьОбъект("Запрос");
    ТЗ.УстановитьТекстовыйПараметр("НачДата", НачДата);
    ТЗ.УстановитьТекстовыйПараметр("КонДата", КонДата);
    ТекстЗапроса = "
        |SELECT
        |    Жур.IDDoc as [Док $Документ],
        |    Жур.IDDocDef as Док_вид
        |FROM
        |    _1SJourn as Жур
        |WHERE
        |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |    Жур.IDDocDef = $ВидДокумента.РасходнаяНкладная";

    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТЗ.ВыбратьСтроку();
Все-равно ругается:
Поле агрегатного объекта не обнаружено (УстановитьТекстовыйПараметр
   Ёпрст
 
82 - 25.12.12 - 14:34
АААААААААААААААААААААААААААААААААААААААААААААААААААААААААА!
   Ёпрст
 
83 - 25.12.12 - 14:35
ладно, на вот:
екстЗапроса = "
       |SELECT .........
Запрос=СоздатьОбъект("ODBCRecordset");
Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   bananan
 
84 - 25.12.12 - 14:36
(82) Да нчего страшного, просто скажи как...
   bananan
 
85 - 25.12.12 - 14:36
(83) Спасибо
   palpetrovich
 
86 - 25.12.12 - 14:36
(79) неужели в окопе под бомбами?
   bananan
 
87 - 25.12.12 - 14:38
(86) поверь, хуже
   Ёпрст
 
88 - 25.12.12 - 14:40
(87) вмазанный шоле?
   bananan
 
89 - 25.12.12 - 14:41
(88) Вмазаная у меня жена (уже не первый месяц)... :(
   Ёпрст
 
90 - 25.12.12 - 14:42
(89) дык брось её нахрен
   Ёпрст
 
91 - 25.12.12 - 14:42
это не лечится
   bananan
 
92 - 25.12.12 - 14:44
(83) Ну тут тип документа видимо я неправильно задаю ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(44)}: Meta name parser error: объект не найден "$ВидДокумента.РасходнаяНакладная"
пробывал так:
|    Жур.IDDocDef = $ВидДокумента.Реализацция";
тоже ругается как в украинской конфе обозвали $ВидДокумента?
   Ёпрст
 
93 - 25.12.12 - 14:51
РасходнаяНакладная
   bananan
 
94 - 25.12.12 - 14:51
(89) а двое детей?
   Ёпрст
 
95 - 25.12.12 - 14:52
если что, она <> РасходнаяНкладная как у тебя в (81)
   bananan
 
96 - 25.12.12 - 14:53
(95) Да так работает просто я в первы раз допустил опечатку РасходнаяНкладная
   Ёпрст
 
97 - 25.12.12 - 14:53
(94) оставь себе, жену лишить родительских прав через суд, предоставив справки с наркушки
   Ёпрст
 
98 - 25.12.12 - 14:54
Хотя, похрен, дал ей денех на дозняк - сама всё подпишет и отдаст
   Ёпрст
 
99 - 25.12.12 - 14:55
ну а дальше - пинка под зад и давай - до свиданья!
   bananan
 
100 - 25.12.12 - 14:56
(96) Дак дело в том, что такая фигнгя продолэаетс уже лет 5-6, и я с детьми разговаривал, Они говорят: №Если выбирать - то мы будем жить с мамой"

  1  2  3  4  5   

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