Имя: Пароль:
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
пишу "на коленке", прямо в браузере. Могут быть ошибки:


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

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

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

Только если надо прям только Поступление брать... Ведь документ Оприходования может быть не всегда ПТиУ.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn