Имя: Пароль:
1C
1С v8
Добавление второго регистра в запрос
0 Artyom20
 
28.10.14
11:29
Добрый день, помогите пожалуйста добавить еще один регистр в запрос. Есть отчет, который вытаскивает последние продажи по товарам, мне нужно тащить туда еще себестоимость этих товаров на момент продажи.

вот запросы:

Продажи:

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

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

Закупки:

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

СГРУППИРОВАТЬ ПО
    ПартииТоваровНаСкладах.Номенклатура.Артикул
;

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

СГРУППИРОВАТЬ ПО
    ВТ_Приходы.НоменклатураАртикул,
    ВТ_Приходы.Период
1 Artyom20
 
28.10.14
11:29
(0) не знаю как их соеденить =\\
2 Ёпрст
 
28.10.14
11:32
(0) во втором запросе получить номенклатуру, а не артикул, сделать левое соединение с первым запросом по номенклатуре - поиметь свою себестоимость. всё.
3 Artyom20
 
28.10.14
11:49
(2) но это же будет последние продажи и последняя себестоимость по товарам, а мне нужно именно ту себестоимость, которая была в продажах последних =\
4 Ёпрст
 
28.10.14
11:51
(3) че ?
5 Ёпрст
 
28.10.14
11:51
ну получай тогда себестоимость в разрезе номенклатура-период.
6 yavasya
 
28.10.14
12:04
ты понимаешь что такое партионный учет? из партии всё тащи
7 Enders
 
28.10.14
12:19
(3) Дарю

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЧекТовар.Регистратор,
    ЧекТовар.Номенклатура,
    ЧекТовар.КоличествоОборот,
    ЧекТовар.СтоимостьОборот,
    ЧекТовар.СтоимостьБезСкидокОборот,
    ЧекТовар.НДСОборот,
    ЧекТовар.ПродажаБезНДС,
    Себестоимость.СтоимостьРасход
ИЗ
    ЧекТовар КАК ЧекТовар
        ЛЕВОЕ СОЕДИНЕНИЕ Себестоимость КАК Себестоимость
        ПО ЧекТовар.Регистратор = Себестоимость.Регистратор
            И ЧекТовар.Номенклатура = Себестоимость.Номенклатура
8 Skom
 
28.10.14
12:28
а чего за конфа?
9 Skom
 
28.10.14
12:29
каким образом у вас себестоимость считается? может у вас есть регистр ПродажиСебестоимость? как, например, в комплексной?
10 Skom
 
28.10.14
12:43
в Комплексной автоматизации
я выбирал продажи с себестоимостью вот таким вот запросом, правда у меня там был известен перечень документов, по которым мне нужно получить такие данные.

ВЫБРАТЬ РАЗЛИЧНЫЕ
    Д.Номенклатура
    ,Продажи.Регистратор КАК Чек
    ,Продажи.Регистратор.СуммаДокумента КАК Сумма
    //,Продажи.Номенклатура КАК Номенклатура

    ,СУММА(isnull(Продажи.СтоимостьОборот,0)) КАК СуммаСтроки
    ,СУММА(isnull(ПродажиСебестоимость.СтоимостьОборот,0)) КАК Себестоимость
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК Д
ЛЕВОЕ СОЕДИНЕНИЕ
   РегистрНакопления.Продажи.Обороты(,,Регистратор,) КАК Продажи ПО Продажи.Регистратор = Д.Ссылка И Продажи.Номенклатура = Д.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ
    РегистрНакопления.ПродажиСебестоимость.Обороты(,,Регистратор,) КАК ПродажиСебестоимость
                                            ПО ПродажиСебестоимость.Регистратор = Д.Ссылка И ПродажиСебестоимость.Номенклатура = Д.Номенклатура
ГДЕ
   Д.Ссылка В (&Док)
СГРУППИРОВАТЬ ПО
    Продажи.Регистратор,
    Д.Номенклатура,
    Продажи.Регистратор.СуммаДокумента
АВТОУПОРЯДОЧИВАНИЕ
11 Artyom20
 
28.10.14
12:57
Конфигурация УТ 10.3 =\
12 Artyom20
 
28.10.14
13:02
(7) спасибо большое, ребята - я еще совсем глупый в этих запросах, подскажите как на примере (7) поставить МАКСИМУМ(ПЕРИОД) правильно, что бы на каждый товар давал по одной строке (в которой будет последняя продажа, относящаяся к тек. периоду)
13 КтоКакБог
 
28.10.14
13:05
Почему ты используешь партии, а не ПродажиСебестоимость?
14 Kalambur
 
28.10.14
13:08
(13) потому что только что о нем узнал )
15 Artyom20
 
28.10.14
13:17
Я честно говоря еще ничего в этом не понимаю =\, сижу капаюсь, просто поставили такую задачу
16 Skom
 
28.10.14
13:28
(15) сложно тебе будет!
Подскажу один косяк, который может тебя поджидать.
Например, в документе продажи могли одинаковый товар продать 2-мя строками разными.
Тогда у тебя в регистре ПРОДАЖИ будет 2 строки из документа, а в регистре ПРОДАЖИСЕБЕСТОИМОСТЬ будет всего одна строка.
17 Skom
 
28.10.14
13:30
+(16) к слову, в запросе из (10) этот косяк я победил)
собственно этот запрос именно из-за описанной проблемы я и модернизировал, потому как предыдущая его версия не умела обрабатывать такой нюанс.

Кстати, думаю в УТ не много различий по сравнению с КА, по которой писал свой запрос.
18 Artyom20
 
28.10.14
13:31
(16) а РегистрНакопления.ПартииТоваровНаСкладах почему нельзя взять? Можно сделать отбор на Регистратор = РеализацияТоваровУслуг ? или я совсем затупил уже куда то ? ))
19 Artyom20
 
28.10.14
13:32
(17) Подскажи пожалуйста, как в (7) с твоим допилом поставить МАКСИМУМ(ПЕРИОД) ?
20 Skom
 
28.10.14
13:34
(18) я УТ не знаю совсем.
21 Skom
 
28.10.14
13:35
ты посмотри регистр ПродажиСебестоимость
если я верно понял, то ты вообще все только из него можешь взять.
22 Skom
 
28.10.14
13:35
просто открой
Операции-РегистрНакопления-ПродажиСебестоимость
и посмотри, заполнен он у тебя или нет?
23 Enders
 
28.10.14
13:51
(19) в запросе (7) у меня используется временная таблица "ЧекиПоБроне" куда я отобрал только нужные мне чеки.
Создай свою таблицу с такими чеками. Внимание, тебе нужны именно чеки(регистраторы, а не периоды), так как себестоимость считается по чекам.
И в последнем куске, надо сгруппировать по всем полям ЧекТовар, а поля из Себестоимость в сумму, иначе могут быть дубли.
24 Enders
 
28.10.14
13:51
+(23) ну или используй "ПродажиСебестоимость")
25 Artyom20
 
28.10.14
13:54
(21)
я вот что сейчас достаю:

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

СГРУППИРОВАТЬ ПО
    ПартииТоваровНаСкладах.Номенклатура.Артикул,
    ПартииТоваровНаСкладах.Регистратор,
    ПартииТоваровНаСкладах.Стоимость,
    ПартииТоваровНаСкладах.Количество
;

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

СГРУППИРОВАТЬ ПО
    ВТ_Приходы.НоменклатураАртикул,
    ВТ_Приходы.Период,
    ВТ_Приходы.Стоимость,
    ВТ_Приходы.Количество,
    ВТ_Приходы.Регистратор


Мне остаеться только из "Регистратора" брать количество, сумму.. это реально? или я тут не прав ?
26 Enders
 
28.10.14
13:58
(25) удали и никому не показывай)
ВТ_Приходы ты группируешь по регистратору и период в максимум. Как думаешь, что ты при этом получишь?
27 Artyom20
 
28.10.14
14:00
1С съедает мои мозги ))
28 Enders
 
28.10.14
14:04
Кратко, не проверял:

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

Вот мои чеки - это в запросе из (7) "ЧекиПоБроне"
Только в конце сгруппируй как я написал в (23)