Имя: Пароль:
1C
1С v8
Как убыстрить данный запрос?
,
0 Маленький Вопросик
 
16.04.14
22:40
предлагаю "кусок" функции, как ее убыстрить?


Остатки1 = Новый Запрос("ВЫБРАТЬ
                                      |    ХозрасчетныйОстатки.СуммаОстаток КАК СуммаНоменклатуры,
                                      |    ХозрасчетныйОстатки.КоличествоОстаток КАК КоличествоНоменклатуры
                                      |ИЗ
                                      |    РегистрБухгалтерии.Хозрасчетный.Остатки(
                                      |            &Дата,
                                      |            Счет = &Счет,
                                      |            ,
                                      |            Субконто1 = &Номенклатура
                                      |                И Субконто2 = &Склад
                                      |                И Организация = &Организация) КАК ХозрасчетныйОстатки");
    
    
      ОстаткиВмагазине.УстановитьПараметр("Номенклатура", Номенклатура);
      ОстаткиВмагазине.УстановитьПараметр("Склад", Склад);
      ОстаткиВмагазине.УстановитьПараметр("Организация", Организация);
      ОстаткиВмагазине.УстановитьПараметр("Дата", КонецДня(Дата));
      ОстаткиВмагазине.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.11"));

      ОстаткиПоНоменклатуре = ОстаткиВмагазине.Выполнить().Выгрузить();
      
      Если ОстаткиПоНоменклатуре.Количество()=0 Тогда
          Возврат 0;
          Иначе

               Возврат Номенклатура;      
          КонецЕсли;
1 ДенисЧ
 
16.04.14
22:41
Как минимум - субконты выразить
2 Маленький Вопросик
 
16.04.14
22:43
(1) а как максимум?

как ВЫРАЗИТЬ???
3 ДенисЧ
 
16.04.14
22:45
(2) как максимум - заявление написать :-)
А ВЫРАЗИТЬ - точно так, как описано в документации
4 Маленький Вопросик
 
16.04.14
22:47
непонятно что во что нужно выражать
5 vi0
 
16.04.14
22:51
(4) с субконто вроде все ок
сколько времени запрос выполняется?
6 Маленький Вопросик
 
16.04.14
22:54
идея такая - есть документ реализации (100 строк) - на период создания документа нужно определить остаток позиции по каждой строке....
7 ramir
 
16.04.14
22:55
И что, на каждую строку по запросу?) Выгружай тч во временную таблицу и через join делай запрос. Так будет точно быстрее)
8 Маленький Вопросик
 
16.04.14
23:08
(7) через join - приведи примерчик
9 Dionis Sergeevich
 
16.04.14
23:15
(8) select * from Table1 as a
inner join table2 as b
on a.id = b.id

вот тебе примерчик
10 ramir
 
16.04.14
23:17
СОЕДИНЕНИЕ - это JOIN, про это-то уж знаешь?
11 dimaldinho
 
16.04.14
23:21
ВЫБРАТЬ РАЗЛИЧНЫЕ
    РеализацияТоваровУслугТовары.Номенклатура
ПОМЕСТИТЬ ВТНоменклатура
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ХозрасчетныйОстатки.СуммаОстаток
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(
            &Дата,
            Счет = &Счет,
            ,
            Организация = &Организация
                И Субконто1 В
                    (ВЫБРАТЬ
                        ВТНоменклатура.Номенклатура
                    ИЗ
                        ВТНоменклатура КАК ВТНоменклатура)
                И Субконто2 = &Субконто2
                И Субконто3 = &Субконто3) КАК ХозрасчетныйОстатки
12 Dionis Sergeevich
 
16.04.14
23:22
(11) зачем тут вт? в подзапрос запрос по тч сунуть и все
13 ramir
 
16.04.14
23:25
(12) Видимо не знаешь, что из параметра можно выбирать только во временную таблицу.
14 Hans
 
16.04.14
23:25
(12) так отладить проще.
15 ramir
 
16.04.14
23:25
(12) Или это уже отменили?)
16 Dionis Sergeevich
 
16.04.14
23:28
(15) нет разницы, все отработает
17 ramir
 
16.04.14
23:31
В ~8.2.8 точно не работало.
18 Ненавижу 1С
 
гуру
16.04.14
23:33
указать явно виды субконто в соответствующем параметре
19 Dionis Sergeevich
 
16.04.14
23:33
(17) ты имеешь ввиду что в параметрах виртуальной таблици нельзя использовать подзапросы? Проверю завтра - интересно стало
20 sanja26
 
16.04.14
23:55
ОстаткиПоНоменклатуре = ОстаткиВмагазине.Выполнить().Выгрузить();
      
      Если ОстаткиПоНоменклатуре.Количество()=0 Тогда

В типовые не заглядывал?
Сделай проверку на результат запроса, а потом уже выгрузку, если строк много.
21 sanja26
 
16.04.14
23:57
(17) может не умеешь конструктор открывать в параметрах?)
22 sanja26
 
16.04.14
23:59
(5) с чего это ок?
по релевантности сначали надо организацию, потом склад, потом номенклатуру
23 ramir
 
17.04.14
00:12
(19) Из таблицы-параметра можно выбирать только во временную таблицу.
24 Dionis Sergeevich
 
17.04.14
00:19
(23) ты про передачу таблицы значений в параметр запроса? Так в (11) нет такого
25 sanja26
 
17.04.14
00:19
(23) Зачем свою таблицу подсовывать, если можно ее получить запросом, поместить в ВТ, а потом уже из нее выбирать в параметре
26 Dionis Sergeevich
 
17.04.14
00:21
я имею ввиду что так будет быстрее

ВЫБРАТЬ
    ХозрасчетныйОстатки.СуммаОстаток
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(
            &Дата,
            Счет = &Счет,
            ,
            Организация = &Организация
                И Субконто1 В
                    (ВЫБРАТЬ
                    РеализацияТоваровУслугТовары.Номенклатура

ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка = &Ссылка)
                И Субконто2 = &Субконто2
                И Субконто3 = &Субконто3) КАК ХозрасчетныйОстатки
27 ramir
 
17.04.14
00:31
(25) По-хорошему нужно перед записью проверять.
28 sanja26
 
17.04.14
00:37
(26) это уже как религия. Я вот вложенных запросов избегаю вообще и разгребать их не нравится.
29 Tobi906
 
17.04.14
00:39
кто кто-то помогите и мне у меня тоже проблемы с запросом!!!
v8: Помогите сделать Автозаполнение ТЧ при выборе значение из справочника!
за раннее благодарю!
30 Dionis Sergeevich
 
17.04.14
00:44
(28)вложенный запрос можно выполнить отдельно в консоли - там даже есть такое как выполнение только выделенного фрагмента - легко потдается анализу и отлаке. А куча временных таблиц в километровых запросах... одно мучение разбирать. КОгда создаются ВТ с выборкой из других ВТ. Ну просто геморой разобрать такое. Написать то много ума не надо. Дело вкуса конечно) Или действительно религии
31 cons74
 
17.04.14
08:20
(0) а еще можно посмотреть типовой механизм вывода остатка в форме подбора номенклатуры
32 Drac0
 
17.04.14
08:26
(25) во-первых, проверка обычно перед записью. Во-вторых, зачем делать лишнее обращение к БД, если нужные данные уже есть?
33 Drac0
 
17.04.14
08:28
(30) Запросы с ВТ просто стабильнее работают. Вложенные запросы могут так озадачить оптимизатор, что он выдаст абсолютно неадекватный план выполнения.
34 ptiz
 
17.04.14
08:46
Ввести новый РН по остаткам, заполнять его в подписке ПриЗаписи бух.регистра.
Чуть замедлится запись, зато получение остатков будет летать!
35 AlexITGround
 
17.04.14
08:52
(23) верно, только во временную, без к-л джоинов, а потом уже в след запросе пакеты делай, что нужно
36 AlexITGround
 
17.04.14
08:52
+ 35 правда тут не тот случай :)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс