Имя: Пароль:
1C
1С v8
вопрос про скд
,
0 tiretrak
 
24.02.14
11:14
есть готовый отчет скд .
нужно добавить в него новый запрос , который создаст список номенклатуры . и этот список должен стать условием отбора номенклатуры для исходного отчета. как лучше сделать?
1 Xao
 
24.02.14
11:25
Просто добавь вложенный запрос (или временную таблицу) с условиями в уже существующий запрос в скд. Далее - связь по номенклатуре.
2 tiretrak
 
24.02.14
12:21
спасибо
3 tiretrak
 
24.02.14
13:01
а можно сделать не через связь а именно поставить результат одного запроса в условия другого?
дело в том что если делать связь то будут отбираться строки отдельные. а мне нужен список номенклатуры по которой было хотя бы одно движение за период. то есть просто  связью по номенклатуре это не получится
4 barrgand
 
24.02.14
13:06
Почему не получится? Создай ВТ с номенклатурой, по которой было хотя одно движение, потом свой запрос соединяешь с этой ВТ и в условии проверяешь на ЕСТЬ NULL
5 daringer
 
24.02.14
13:10
ВЫБРАТЬ
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.КоличествоОборот
ПОМЕСТИТЬ ВТПродажи
ИЗ
    РегистрНакопления.Продажи.Обороты(, , , ) КАК ПродажиОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗапасыОстатки.Номенклатура,
    ЗапасыОстатки.КоличествоОстаток
ИЗ
    РегистрНакопления.Запасы.Остатки(
            ,
            Номенклатура В
                (ВЫБРАТЬ
                    ВТПродажи.Номенклатура
                ИЗ
                    ВТПродажи КАК ВТПродажи)) КАК ЗапасыОстатки
6 tiretrak
 
24.02.14
13:21
у меня запрос сборный
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Остатки.ПериодДень,
    Остатки.Номенклатура,
    Остатки.КоличествоНачальныйОстаток,
    Остатки.КоличествоКонечныйОстаток,
    0 КАК КоличествоПлан,
    0 КАК КоличествоЗаказы
ИЗ
    (ВЫБРАТЬ
        НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.ПериодДень, ДЕНЬ) КАК ПериодДень,
        СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
        СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,
        ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
    ГДЕ
        ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Родитель.Наименование = "Светильники"
    
    СГРУППИРОВАТЬ ПО
        НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.ПериодДень, ДЕНЬ),
        ТоварыНаСкладахОстаткиИОбороты.ПериодДень,
        ТоварыНаСкладахОстаткиИОбороты.Номенклатура) КАК Остатки

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Заказы.ПериодДень,
    Заказы.Номенклатура,
    0,
    0,
    0,
    Заказы.КоличествоЗаказы
ИЗ
    (ВЫБРАТЬ
        НАЧАЛОПЕРИОДА(ЗаказыПокупателей.Период, ДЕНЬ) КАК ПериодДень,
        ЗаказыПокупателей.Номенклатура КАК Номенклатура,
        СУММА(ЗаказыПокупателей.Количество) КАК КоличествоЗаказы
    ИЗ
        РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей
    ГДЕ
        ЗаказыПокупателей.Период МЕЖДУ &НачалоПериода И &КонецПериода
        И ЗаказыПокупателей.Регистратор ССЫЛКА Документ.ЗаказПокупателя
    
    СГРУППИРОВАТЬ ПО
        НАЧАЛОПЕРИОДА(ЗаказыПокупателей.Период, ДЕНЬ),
        ЗаказыПокупателей.Номенклатура) КАК Заказы
7 daringer
 
24.02.14
13:25
можно в каждый запрос в объединении добавить условие по номенклатуре как в моем примере
Номенклатура В
                (ВЫБРАТЬ
                    ВТПродажи.Номенклатура
                ИЗ
                    ВТПродажи КАК ВТПродажи)

или весь запрос поместить в ВТ а потом наложить на него условие. Либо внутренним соединением сделать с таблицей необходимой номенклатуры
8 daringer
 
24.02.14
13:32
Можно сделать вычисляемое поле типа НоменклатураУдовлетворяетУсловиям,в выражении прописать функцию из общего модуля, затем наложить отбор на вычисляемое поле. Но думаю это будет не оч. эффективно работать
9 tiretrak
 
24.02.14
14:25
(7)вот так сделал но не взлетает
ВЫБРАТЬ
    Сводный.ПериодДень,
    Сводный.Номенклатура,
    Сводный.КоличествоНачальныйОстаток,
    Сводный.КоличествоКонечныйОстаток,
    Сводный.КоличествоПлан,
    Сводный.КоличествоЗаказы
ИЗ
    (ВЫБРАТЬ
        Остатки.ПериодДень КАК ПериодДень,
        Остатки.Номенклатура КАК Номенклатура,
        Остатки.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
        Остатки.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
        0 КАК КоличествоПлан,
        0 КАК КоличествоЗаказы
    ИЗ
        (ВЫБРАТЬ
            НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.ПериодДень, ДЕНЬ) КАК ПериодДень,
            СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
            СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,
            ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура
        ИЗ
            РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
        ГДЕ
            ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Родитель.Наименование = "Светильники"
        
        СГРУППИРОВАТЬ ПО
            НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.ПериодДень, ДЕНЬ),
            ТоварыНаСкладахОстаткиИОбороты.ПериодДень,
            ТоварыНаСкладахОстаткиИОбороты.Номенклатура) КАК Остатки
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        План.ПериодДень,
        План.Номенклатура,
        План.КоличествоНачальныйОстаток,
        План.КоличествоКонечныйОстаток,
        План.КоличествоПлан,
        0
    ИЗ
        (ВЫБРАТЬ
            НАЧАЛОПЕРИОДА(ПланыПроизводства.Период, ДЕНЬ) КАК ПериодДень,
            ПланыПроизводства.Номенклатура КАК Номенклатура,
            СУММА(ПланыПроизводства.Количество) КАК КоличествоПлан,
            0 КАК КоличествоНачальныйОстаток,
            0 КАК КоличествоКонечныйОстаток
        ИЗ
            РегистрНакопления.ПланыПроизводства КАК ПланыПроизводства
        ГДЕ
            ПланыПроизводства.Период МЕЖДУ &НачалоПериода И &КонецПериода
        
        СГРУППИРОВАТЬ ПО
            НАЧАЛОПЕРИОДА(ПланыПроизводства.Период, ДЕНЬ),
            ПланыПроизводства.Номенклатура) КАК План
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        Заказы.ПериодДень,
        Заказы.Номенклатура,
        0,
        0,
        0,
        Заказы.КоличествоЗаказы
    ИЗ
        (ВЫБРАТЬ
            НАЧАЛОПЕРИОДА(ЗаказыПокупателей.Период, ДЕНЬ) КАК ПериодДень,
            ЗаказыПокупателей.Номенклатура КАК Номенклатура,
            СУММА(ЗаказыПокупателей.Количество) КАК КоличествоЗаказы
        ИЗ
            РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей
        ГДЕ
            ЗаказыПокупателей.Период МЕЖДУ &НачалоПериода И &КонецПериода
            И ЗаказыПокупателей.Регистратор ССЫЛКА Документ.ЗаказПокупателя
        
        СГРУППИРОВАТЬ ПО
            НАЧАЛОПЕРИОДА(ЗаказыПокупателей.Период, ДЕНЬ),
            ЗаказыПокупателей.Номенклатура) КАК Заказы) КАК Сводный
ГДЕ
    Сводный.Номенклатура В
            (ВЫБРАТЬ
                СписокНоменклатуры.Номенклатура
            ИЗ
                СписокНоменклатуры КАК СписокНоменклатуры)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗаказыПокупателей.Номенклатура,
    ЗаказыПокупателей.Количество
ПОМЕСТИТЬ СписокНоменклатуры
ИЗ
    РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей
ГДЕ
    ЗаказыПокупателей.Период МЕЖДУ &НачалоПериода И &КонецПериода
    И ЗаказыПокупателей.Количество > 0
10 daringer
 
24.02.14
14:28
а почему должно взлететь,если не правильно
11 daringer
 
24.02.14
14:33
Почему временная таблица после условия
ВЫБРАТЬ
    Сводный.ПериодДень,
    Сводный.Номенклатура,
    Сводный.КоличествоНачальныйОстаток,
    Сводный.КоличествоКонечныйОстаток,
    Сводный.КоличествоПлан,
    Сводный.КоличествоЗаказы
ИЗ
    (ВЫБРАТЬ
        Остатки.ПериодДень КАК ПериодДень,
        Остатки.Номенклатура КАК Номенклатура,
        Остатки.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
        Остатки.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
        0 КАК КоличествоПлан,
+ Code
        0 КАК КоличествоЗаказы
    ИЗ
        (ВЫБРАТЬ
            НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.ПериодДень, ДЕНЬ) КАК ПериодДень,
            СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
            СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,
            ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура
        ИЗ
            РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
        ГДЕ
            ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Родитель.Наименование = "Светильники"
        
        СГРУППИРОВАТЬ ПО
            НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.ПериодДень, ДЕНЬ),
            ТоварыНаСкладахОстаткиИОбороты.ПериодДень,
            ТоварыНаСкладахОстаткиИОбороты.Номенклатура) КАК Остатки
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        План.ПериодДень,
        План.Номенклатура,
        План.КоличествоНачальныйОстаток,
        План.КоличествоКонечныйОстаток,
        План.КоличествоПлан,
        0
    ИЗ
        (ВЫБРАТЬ
            НАЧАЛОПЕРИОДА(ПланыПроизводства.Период, ДЕНЬ) КАК ПериодДень,
            ПланыПроизводства.Номенклатура КАК Номенклатура,
            СУММА(ПланыПроизводства.Количество) КАК КоличествоПлан,
            0 КАК КоличествоНачальныйОстаток,
            0 КАК КоличествоКонечныйОстаток
        ИЗ
            РегистрНакопления.ПланыПроизводства КАК ПланыПроизводства
        ГДЕ
            ПланыПроизводства.Период МЕЖДУ &НачалоПериода И &КонецПериода
        
        СГРУППИРОВАТЬ ПО
            НАЧАЛОПЕРИОДА(ПланыПроизводства.Период, ДЕНЬ),
            ПланыПроизводства.Номенклатура) КАК План
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        Заказы.ПериодДень,
        Заказы.Номенклатура,
        0,
        0,
        0,
        Заказы.КоличествоЗаказы
    ИЗ
        (ВЫБРАТЬ
            НАЧАЛОПЕРИОДА(ЗаказыПокупателей.Период, ДЕНЬ) КАК ПериодДень,
            ЗаказыПокупателей.Номенклатура КАК Номенклатура,
            СУММА(ЗаказыПокупателей.Количество) КАК КоличествоЗаказы
        ИЗ
            РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей
        ГДЕ
            ЗаказыПокупателей.Период МЕЖДУ &НачалоПериода И &КонецПериода
            И ЗаказыПокупателей.Регистратор ССЫЛКА Документ.ЗаказПокупателя
        
        СГРУППИРОВАТЬ ПО
            НАЧАЛОПЕРИОДА(ЗаказыПокупателей.Период, ДЕНЬ),
            ЗаказыПокупателей.Номенклатура) КАК Заказы) КАК Сводный
ГДЕ
    Сводный.Номенклатура В
            (ВЫБРАТЬ
                СписокНоменклатуры.Номенклатура
            ИЗ
                СписокНоменклатуры КАК СписокНоменклатуры)
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗаказыПокупателей.Номенклатура,
    ЗаказыПокупателей.Количество
ПОМЕСТИТЬ СписокНоменклатуры
ИЗ
    РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей
ГДЕ
    ЗаказыПокупателей.Период МЕЖДУ &НачалоПериода И &КонецПериода
    И ЗаказыПокупателей.Количество > 0
12 daringer
 
24.02.14
14:33
блин....не то скопировал
почему временная таблица после условия
ГДЕ
    Сводный.Номенклатура В
            (ВЫБРАТЬ
                СписокНоменклатуры.Номенклатура
            ИЗ
                СписокНоменклатуры КАК СписокНоменклатуры)
13 tiretrak
 
24.02.14
14:36
(12)
вот этот момент меня тоже смутил.
а куда ее поставить?
14 daringer
 
24.02.14
14:39
Нужно временную таблицу описать до того как ты ее будешь использвать
15 daringer
 
24.02.14
14:40
И использование вложенных запросов не оптимально, лучше временные
16 tiretrak
 
24.02.14
16:09
(14)поменял местами.зашуршало. спасибо