Имя: Пароль:
1C
1С v8
(УТ 10.3) запрос из регистра партии товаров с учетом количества из поступления 2
, ,
0 MrZLO
 
30.11.16
08:08
Здравствуйте!

Помогите оптимизировать запрос... Точнее объединить два и оптимизировать

1) выбираем поступление для товара перемещенного на склад, кол-во и стоимость

ВЫБРАТЬ
    ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования,
    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход,
    ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьПриход
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
            ,
            ,
            ,
            ,
            Номенклатура = &Номенклатура
                И Склад = &Склад) КАК ПартииТоваровНаСкладахОстаткиИОбороты

Теперь нужно ДокументаОприходывания (который у меня всегда поступление товаров и услуг) выбрать кол-во

Как это сделать? Если делаю левое соединение с таблицей поступлений, это долго и неправильно...
1 mehfk
 
30.11.16
08:15
В чем смысл будущего копрокода?
2 MrZLO
 
30.11.16
08:20
(1) товар приходит через поступление, потом его перемещают на другой склад

нужно выбирать именно тот, товар, который был перемещен с ценой и кол-вом из поступления
3 MrZLO
 
30.11.16
08:21
в этот запрос нужно прикрутить кол-во из поступления, как его из регистра вытащить непонятно... объединять с таблицей поступлений не правильно
4 MrZLO
 
30.11.16
08:36
как обратится к табличной части регистратора из регистра?
5 Cool_Profi
 
30.11.16
09:05
левообъединить с ТЧ нужного документа
6 MrZLO
 
30.11.16
09:06
улучшил первый запрос

ВЫБРАТЬ
    ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования,
    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход,
    ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьПриход
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
            ,
            ,
            Регистратор,
            ,
            Номенклатура = &Номенклатура
                И Склад = &Склад) КАК ПартииТоваровНаСкладахОстаткиИОбороты
7 MrZLO
 
30.11.16
09:07
(5) делал так, запрос 2 сек почти работает
учитывая, что он в форме подбора идет, это долго...
8 h-sp
 
30.11.16
09:31
(7) а зачем вы регистратор берете. Берите Документоприходования. Это быстрее
9 MrZLO
 
30.11.16
10:06
(8) вот так сделал, чуть быстрее

ВЫБРАТЬ
    ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования КАК ДокументОприходования,
    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход,
    ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьПриход,
    ВложенныйЗапрос.Количество
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
            ,
            ,
            Регистратор,
            ,
            Номенклатура = &Номенклатура
                И Склад = &Склад) КАК ПартииТоваровНаСкладахОстаткиИОбороты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
            ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
            ПоступлениеТоваровУслугТовары.Количество КАК Количество
        ИЗ
            Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        ГДЕ
            ПоступлениеТоваровУслугТовары.Номенклатура.Ссылка = &Номенклатура) КАК ВложенныйЗапрос
        ПО ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Ссылка = ВложенныйЗапрос.Ссылка

но может есть способ лучше...
10 h-sp
 
30.11.16
10:12
(9) ну вот это бред

       ГДЕ
            ПоступлениеТоваровУслугТовары.Номенклатура.Ссылка = &Номенклатура) КАК ВложенныйЗапрос
        ПО ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Ссылка = ВложенныйЗапрос.Ссылка


пишите

       ГДЕ
            ПоступлениеТоваровУслугТовары.Номенклатура = &Номенклатура) КАК ВложенныйЗапрос
        ПО ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования = ВложенныйЗапрос.Ссылка

даст выигрыш где-то в 10 раз.
11 h-sp
 
30.11.16
10:13
(9) и уберите

      ,
            Регистратор,
            ,
12 MrZLO
 
30.11.16
10:15
спс, я его оставил, чтобы был разрез по перемещениям
13 Vladal
 
30.11.16
10:17
(9) " секунды потому что соедниение с подзапросом:

ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ

это некрасиво и неправильно. Есть рекомендация на ИТС
http://its.1c.ru/db/metod8dev#content:5842:hdoc:subquery_join
14 MrZLO
 
30.11.16
10:19
спс, поправлю
15 Vladal
 
30.11.16
10:36
пишу "на коленке", прямо в браузере. Могут быть ошибки:


ВЫБРАТЬ
    ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования КАК ДокументОприходования,
    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход,
    ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьПриход,
    ВложенныйЗапрос.Количество

,   // Этот кусок из твоего внутреннего соединения
    ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
    ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
    ПоступлениеТоваровУслугТовары.Количество КАК Количество

ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
    ,
    ,
    Регистратор,
    ,
    Номенклатура = &Номенклатура
        И Склад = &Склад) КАК ПартииТоваровНаСкладахОстаткиИОбороты
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
            по ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования = ПоступлениеТоваровУслугТовары.Ссылка
                И ПоступлениеТоваровУслугТовары.Номенклатура.Ссылка = &Номенклатура) КАК ВложенныйЗапрос
        

Только если надо прям только Поступление брать... Ведь документ Оприходования может быть не всегда ПТиУ.