Имя: Пароль:
1C
1C 7.7
v7: Запрос в SQL оочень медленно стал работать
,
0 sammmm
 
10.08.11
10:12
В запросе
               |Период с ДатаДок по ВсДата;
               |ВидТМЦ = Регистр.ВыпускГП.ВидТМЦ;
               |МОЛ1 = Регистр.ВыпускГП.МОЛ;
               |Продукция = Регистр.ВыпускГП.Наименование;
               |Док = Регистр.ВыпускГП.Док;
               |Количество = Регистр.ВыпускГП.Количество;
               |ВесЕдиницы = Регистр.ВыпускГП.ВесЕдиницы;
               |Функция КоличествоКонОст = КонОст(Количество);
               |Группировка Док упорядочить по Док.ДатаДок;
               |Условие(Продукция = Наименование);
               |Условие(МОЛ1 = {МОЛ});
после перехода на sql стала оочень долго выполняться функция                |Функция КоличествоКонОст = КонОст(Количество);
может кто-нибудь знает как её обойти?
1 sammmm
 
10.08.11
10:14
Если что, документ Расходная накладная. ОбработкаПроведения
2 Гефест
 
10.08.11
10:16
За черный запрос в скульной базе при проведении знаешь какое место отрывают?
3 AeDen
 
10.08.11
10:17
попробуй ВключитьSQL(0) (вроде, или 1)
4 sammmm
 
10.08.11
10:18
(2) нечего не знаю, моя хата скраю(с) если честно это не я писал
5 sammmm
 
10.08.11
10:19
(3) Всё равно очень долго
6 Ёпрст
 
10.08.11
10:20
(0)
штатно - установить фильтры, рассчитать, если нужно регистр + ВыгрузитьИтоги()

а так, прямой запрос  - наше всё.
7 Ёпрст
 
10.08.11
10:20
+6 да, то, что в (0) - в топку без вариантов.
8 sammmm
 
10.08.11
10:21
+4 тут программистов до меня около 10 программистов работало и каждый свою лепту внёс
9 sammmm
 
10.08.11
10:21
(6) подскажи пожалуйста что за фильтры
10 Гефест
 
10.08.11
10:21
(8) Виноватым все равно тебя назначат. Так что делай как в (6)
11 sammmm
 
10.08.11
10:23
Рассчитать я так понимаю нужно командой РассчитатьРегистрыПО??
12 sammmm
 
10.08.11
10:24
непонятно только что за фильтры
13 ДенисЧ
 
10.08.11
10:26
(12) УстановитьЗначениеФильтра()
По продукции и МОЛ
14 Ёпрст
 
10.08.11
10:29
(11) для начала, нужно установить, нужно ли вообще временный расчет делать.
15 sammmm
 
10.08.11
10:34
(14) мне кажется нужно. Там если есть остатки то выполняется действие. Стоит вот так
Если ЗапросГП.КоличествоКонОст >0 Тогда
...
...
16 Гефест
 
10.08.11
10:36
Загляни в типовую торговлю. Там примеров полно
17 sammmm
 
10.08.11
10:36
ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
               РегВыпускГП = СоздатьОбъект("Регистр.ВыпускГП");  
               РегВыпускГП.УстановитьЗначениеФильтра(Регистр.ВыпускГП.Наименование,Наименование);
               РегВыпускГП.УстановитьЗначениеФильтра(Регистр.ВыпускГП.МОЛ,МОЛ);  
               РегВыпускГП.РассчитатьРегистрыПо(ВсДата);
               РегВыпускГП.ВыгрузитьИтоги(ТабЗнач);
               ТабЗнач.ВыбратьСтроки();
18 sammmm
 
10.08.11
10:37
что-то похожее?
19 sammmm
 
10.08.11
10:45
Правда пишет ошибку

РегВыпускГП.УстановитьЗначениеФильтра(Регистр.ВыпускГП.Наименование,Наименование);
{Документ.РасходнаяНакладная.Модуль Документа(832)}: Реквизит с данным идентификатором не найден!
20 Андрей_Андреич
 
naïve
10.08.11
10:47
РегВыпускГП.УстановитьЗначениеФильтра(Регистр.ВыпускГП.Продукция ,Наименование);
21 sammmm
 
10.08.11
10:48
на (20) Поле агрегатного объекта не обнаружено (Продукция). Да и неоткуда ему там взяться
22 sammmm
 
10.08.11
10:51
поставил
РегВыпускГП.УстановитьЗначениеФильтра("Наименование",Наименование);
вроде всё норм
23 sammmm
 
10.08.11
11:00
когда стоит
РассчитатьРегистрыПо(ВсДата);
Пишет что не может после ТА считать, хотя ВСдата=ТА
24 AeDen
 
10.08.11
11:05
а вот тут обычно у нормальных людей начинается вдумчивое чтение документации.
25 viktor_vv
 
10.08.11
11:05
А что такое ВсДата ?
26 viktor_vv
 
10.08.11
11:06
Так если ты всегда на дату ТА хочешьполучать, то и не надо РассчитатьРегистрыПо.
27 viktor_vv
 
10.08.11
11:07
Только скорее всего тебе на текущий документ надо будет. РассчитатьРегистрыНа(ТекущийДокумент()).
28 sammmm
 
10.08.11
11:09
ВсДата=КонМесяца(ДатаДок)
А КонОст() - на текущий документ подбивает?
29 sammmm
 
10.08.11
11:12
По-моему разобрался. Всем кто помого огромнейшее спасибо!
30 sammmm
 
10.08.11
13:17
и ещё один вопрос почему когда я убираю из запроса
              |Функция КоличествоКонОст = КонОст(Количество);
Группировка равна всегда 0???
31 sammmm
 
10.08.11
13:18
или пишу
            |Функция КоличествоКонОст = Приход(Количество);

либо

            |Функция КоличествоКонОст = Сумма(Количество);
всегда группировка 0
32 sammmm
 
10.08.11
13:23
сам запрос

|Период с ДатаДок по ВсДата;
               |ВидТМЦ = Регистр.ВыпускГП.ВидТМЦ;
               |МОЛ1 = Регистр.ВыпускГП.МОЛ;
               |Продукция = Регистр.ВыпускГП.Наименование;
               |Док = Регистр.ВыпускГП.Док;
               |Количество = Регистр.ВыпускГП.Количество;
               |ВесЕдиницы = Регистр.ВыпускГП.ВесЕдиницы;
               |Функция КоличествоКонОст = КонОст(Количество);
               |Группировка Док упорядочить по Док.ДатаДок;
               |Условие(Продукция = Наименование);
               |Условие(МОЛ1 = {МОЛ});
33 sammmm
 
10.08.11
13:36
подскажите кто знает!!!
34 Ёпрст
 
10.08.11
13:48
(30)
в забросе к регистру обязательным условием является наличие функции .

(31) 1. не было прихода за выбранный период в движенияъ регистра
2. функция сумма сама по себе ничего не считает для остаткового регистра (исключение - в аргументе функции реквизит регистра), только совместно с основными функциями - НачОст,КонОст,Приход,Расход
35 sammmm
 
10.08.11
13:49
(34) ооо хоть кто-то откликнулся. А ты не знаешь как можно обойти КонОст или НачОст. А то больно долго считает
36 sammmm
 
10.08.11
13:51
ооо а расход есть. группировка отрабатывает
37 sammmm
 
10.08.11
14:02
блин так приход или расход не везде же будет((
38 Ёпрст
 
10.08.11
14:06
(35) ВыгрузитьИтоги, это если штатно, прямой запрос - это если надо еще быстрее.
39 sammmm
 
10.08.11
14:13
С прямым запросом не выйдет, 1с++ не разрешают юзать. А за советы спасибо большое, уже который раз помогаешь и походу не одному мне