Имя: Пароль:
1C
 
1с Оптимальность запроса
,
0 ilyavorobyev
 
08.10.14
11:45
мне нужно получить товар без N и найти с таким же кодом только N + код, запрос не оптимален?

ВЫБРАТЬ
    НезавершенноеПроизводствоГП40.Ссылка КАК Документ,
    НезавершенноеПроизводствоГП40.Ссылка.ЦФУ КАК ЦФУ,
    НезавершенноеПроизводствоГП40.Количество КАК Количество,
    НезавершенноеПроизводствоГП40.Всего КАК Всего,
    НезавершенноеПроизводствоГП40.ВсегоВал КАК ВсегоВал,
    НезавершенноеПроизводствоГП40.Отклонение КАК Отклонение,
    НезавершенноеПроизводствоГП40.ОтклонениеВал КАК ОтклонениеВал,
    НезавершенноеПроизводствоГП40.Товар КАК Товар,
    НезавершенноеПроизводствоГП40.Товар.НомерИзКаталога
ПОМЕСТИТЬ ВТБезN
ИЗ
    Документ.НезавершенноеПроизводство.ГП40 КАК НезавершенноеПроизводствоГП40
ГДЕ
    НезавершенноеПроизводствоГП40.Ссылка.ЦФУ.Код = 24
    И НЕ НезавершенноеПроизводствоГП40.Товар.Код ПОДОБНО "N%"
    И НезавершенноеПроизводствоГП40.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    НезавершенноеПроизводствоГП40.Ссылка,
    НезавершенноеПроизводствоГП40.Количество,
    НезавершенноеПроизводствоГП40.Всего,
    НезавершенноеПроизводствоГП40.ВсегоВал,
    НезавершенноеПроизводствоГП40.Отклонение,
    НезавершенноеПроизводствоГП40.ОтклонениеВал,
    НезавершенноеПроизводствоГП40.Товар,
    НезавершенноеПроизводствоГП40.Товар.НомерИзКаталога,
    НезавершенноеПроизводствоГП40.Ссылка.ЦФУ
ПОМЕСТИТЬ ВТСN
ИЗ
    Документ.НезавершенноеПроизводство.ГП40 КАК НезавершенноеПроизводствоГП40
ГДЕ
    НезавершенноеПроизводствоГП40.Товар.Код ПОДОБНО "N%"
    И НезавершенноеПроизводствоГП40.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТБезN.Документ КАК Документ,
    ВТБезN.Количество,
    ВТБезN.Всего,
    ВТБезN.ВсегоВал,
    ВТБезN.Отклонение,
    ВТБезN.ОтклонениеВал,
    ВТБезN.Товар,
    ВТБезN.ТоварНомерИзКаталога,
    ВТСN.Ссылка КАК Документ1,
    ВТСN.Количество КАК Количество1,
    ВТСN.Всего КАК Всего1,
    ВТСN.ВсегоВал КАК ВсегоВал1,
    ВТСN.Отклонение КАК Отклонение1,
    ВТСN.ОтклонениеВал КАК ОтклонениеВал1,
    ВТСN.Товар КАК Товар1,
    ВТСN.ТоварНомерИзКаталога КАК ТоварНомерИзКаталога1,
    ВТБезN.ЦФУ,
    ВТСN.ЦФУ КАК ЦФУ1
ИЗ
    ВТБезN КАК ВТБезN
        ЛЕВОЕ СОЕДИНЕНИЕ ВТСN КАК ВТСN
        ПО (ВТСN.Товар.Код = "N" + ВТБезN.Товар.Код)
1 Ymryn
 
08.10.14
11:50
(0) могу ошибаться, но есть ощущение, что просто проверять первый символ будет быстрее чем вхождение на подобно.
2 Crush
 
08.10.14
11:54
Одним запросом с левым соединением решается
3 sf
 
08.10.14
11:56
(1) >>просто проверять первый символ
а как это?
4 sf
 
08.10.14
11:58
(0) а вообще скорее всего надо:
- получить сначала ВТ с товарами
- второй запрос как (2) говорит с соединением с первой вт.
хотя конечно, мало входных данных, сколько документов, сколько товаров и т.п.
5 Крошка Ру
 
08.10.14
11:59
(3) ПОДСТРОКА(НезавершенноеПроизводствоГП40.Товар.Код,1,1)
6 Ymryn
 
08.10.14
11:59
(3) ПОДСТРОКА?
7 sf
 
08.10.14
12:05
(6) имхо, подстрока - точно к фулскану приведет. а для использования индекса можно оставить ПОДОБНО и добавить дополнительное условие на больше N
8 asady
 
08.10.14
12:08
(5) Тогда уж оптимальнее ВЫРАЗИТЬ(НезавершенноеПроизводствоГП40.Товар.Код КАК СТРОКА(1))
9 Ymryn
 
08.10.14
12:10
(8) а разве Выразить не выполняется уже в конце получения данных?
10 asady
 
08.10.14
12:11
(9) это здесь к чему?
11 ilyavorobyev
 
08.10.14
12:11
(4) есть табличная часть у документа, нужно получить товары их количество и соединить их по Товар.Код  = "N" + Товар.Код
12 sf
 
08.10.14
12:24
(11) запрос работает? это отчет? сколько времени выполняется?
13 ilyavorobyev
 
08.10.14
12:29
(12) дело не во времени а в правильности, это отчет на скд, один из набора данных
14 sf
 
08.10.14
12:36
(13) если вопрос в правильности, то вопрос: почему там левое соединение? бывает, что товар с N есть, а без N кода нет?
15 ilyavorobyev
 
08.10.14
12:46
(14) да именно так
16 ilyavorobyev
 
08.10.14
12:47
потом у меня есть другой набор данных и я его соединяю с первым и там товара без N почему то нет

ВЫБРАТЬ
    НезавершенноеПроизводствоГП20.Ссылка КАК Документ,
    НезавершенноеПроизводствоГП20.Ссылка.ЦФУ,
    НезавершенноеПроизводствоГП20.СтатьяЗатрат КАК СтатьяЗатрат,
    НезавершенноеПроизводствоГП20.Товар КАК Товар,
    0 КАК СуммаРуб,
    0 КАК СуммаУЕ,
    0 КАК РубДт,
    0 КАК РубКт,
    ВЫБОР
        КОГДА НезавершенноеПроизводствоГП20.СтатьяЗатрат.Код = 14
            ТОГДА 0
        ИНАЧЕ НезавершенноеПроизводствоГП20.Сумма
    КОНЕЦ КАК Сумма,
    ВЫБОР
        КОГДА НезавершенноеПроизводствоГП20.СтатьяЗатрат.Код = 14
            ТОГДА 0
        ИНАЧЕ НезавершенноеПроизводствоГП20.СуммаВал
    КОНЕЦ КАК СуммаВал,
    НезавершенноеПроизводствоГП20.Товар КАК ТоварПервый,
    ВЫБОР
        КОГДА НезавершенноеПроизводствоГП20.СтатьяЗатрат.Код = 30
            ТОГДА НезавершенноеПроизводствоГП20.Сумма
        ИНАЧЕ 0
    КОНЕЦ КАК СуммаОбщ30,
    ВЫБОР
        КОГДА НезавершенноеПроизводствоГП20.СтатьяЗатрат.Код = 30
            ТОГДА НезавершенноеПроизводствоГП20.СуммаВал
        ИНАЧЕ 0
    КОНЕЦ КАК СуммаОбщВал30,
    ВЫБОР
        КОГДА НезавершенноеПроизводствоГП20.СтатьяЗатрат.Код = 16
            ТОГДА НезавершенноеПроизводствоГП20.Сумма
        ИНАЧЕ 0
    КОНЕЦ КАК СуммаОбщ16,
    ВЫБОР
        КОГДА НезавершенноеПроизводствоГП20.СтатьяЗатрат.Код = 16
            ТОГДА НезавершенноеПроизводствоГП20.СуммаВал
        ИНАЧЕ 0
    КОНЕЦ КАК СуммаОбщВал16
ИЗ
    Документ.НезавершенноеПроизводство.ГП20 КАК НезавершенноеПроизводствоГП20
ГДЕ
    НезавершенноеПроизводствоГП20.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    И НезавершенноеПроизводствоГП20.Ссылка.Проведен
    И НЕ НезавершенноеПроизводствоГП20.Товар.Код ПОДОБНО "N%"
    И НезавершенноеПроизводствоГП20.Ссылка.ЦФУ.Код = 24

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    0,
    ПроводкиОбороты.КорСубконто2,
    ПроводкиОбороты.КорСубконто1,
    ПроводкиОбороты.КорСубконто3,
    ПроводкиОбороты.СуммаОборотДт - ПроводкиОбороты.СуммаОборотКт,
    ПроводкиОбороты.СуммаВалОборотДт - ПроводкиОбороты.СуммаВалОборотКт,
    ПроводкиОбороты.СуммаОборотДт,
    ПроводкиОбороты.СуммаОборотКт,
    0,
    0,
    ПроводкиОбороты.КорСубконто3,
    0,
    0,
    0,
    0
ИЗ
    РегистрБухгалтерии.Проводки.Обороты(&НачалоПериода, &КонецПериода, , Счет = &СчетДт, , , КорСчет = &СчетКт, ) КАК ПроводкиОбороты
17 H A D G E H O G s
 
08.10.14
12:50
Расстрелять.
18 ilyavorobyev
 
08.10.14
12:50
(17) за что?
19 Ник второй
 
08.10.14
12:54
Залез, посмотрел на мракобесий, ушел пить ....
20 ilyavorobyev
 
08.10.14
13:17
(19) помочь никак?
21 hhhh
 
08.10.14
13:45
(18) может за числовые коды?
22 ilyavorobyev
 
08.10.14
13:52
(21) суть не в этом
23 hhhh
 
08.10.14
13:58
ну, может на самом деле нет этого товара в документе?
24 sf
 
08.10.14
14:01
(22) отладь каждый запрос по отдельности. потом задавай правильно вопрос о том, что у тебя не получается. стопятьсот можно придумать почему у тебя отчет не работает: неправильно соединяешь, данных нет, отбор не тот и т.п.
25 hhhh
 
08.10.14
14:04
(22) что за табличные части ГП20 и ГП40?
26 vi0
 
08.10.14
14:15
это НезавершенноеПроизводствоГП40.Ссылка.ЦФУ.Код = 24
замени на НезавершенноеПроизводствоГП40.Ссылка.ЦФУ = &ЦФУ24
Ссылка.ЦФУ - индексирован?

во временные таблицы сразу выбирай код
в ВТБезN выбирай код без N
и в конце соединяй уже ПО (ВТСN.Код = ВТБезN.КодБезN)