Имя: Пароль:
1C
1С v8
В запросе сделать подзапрос, где параметры будут данные другого запроса
0 Coldboy
 
05.11.13
15:38
Здравствуйте. Делаю запрос допустим по документам, с табличной частью Товары, на эти товары хочу получить срез последних цен на данный товар, но периодом данного среза будет дата документа, где дата документа выбирается между параметрами НачДата, кОндата. Как сделать такой запрос с такими хитрыми вложениями?
1 Господин ПЖ
 
05.11.13
15:38
никак
2 Господин ПЖ
 
05.11.13
15:39
точнее можно покурить "срез последних на каждую дату"
3 shuhard
 
05.11.13
15:39
(1) + 1
через подзапрос - ни как
4 sanja26
 
05.11.13
15:41
со срезом последних/первых в одном запросе не получится
5 Coldboy
 
05.11.13
15:51
а как по другому програмно обрабатывать?
6 sanja26
 
05.11.13
15:54
(5) если для внутренних действий, то либо цикл, либо физ. таблица
в скд 2 набора данных
7 Fragster
 
модератор
05.11.13
16:00
в условии соединения можно использовать вложенные запросы, в которых можно использовать данные внешних запросов
8 Fragster
 
модератор
05.11.13
16:00
да и просто в условии можно
9 Coldboy
 
05.11.13
16:00
(7) а точнее?
(6) как в скд 2 набора данных ?
10 Coldboy
 
05.11.13
16:01
(6) попрет вариант, Как сделать его?
11 Рыжий Лис
 
05.11.13
16:05
(10) Связь наборов данных по периодам
http://its.1c.ru/db/metod81#content:4303:1
12 sanja26
 
05.11.13
16:05
13 Fragster
 
модератор
05.11.13
16:06
ВЫБРАТЬ
    1 КАК Период,
    "А" КАК Значение
ПОМЕСТИТЬ Данные

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

ВЫБРАТЬ
    2,
    "Б"

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

ВЫБРАТЬ
    4,
    "А"

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

ВЫБРАТЬ
    9,
    "Б"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Данные.Период,
    Данные.Значение,
    ДанныеПредыдущие.Период КАК Период1,
    ДанныеПредыдущие.Значение КАК Значение1
ИЗ
    Данные КАК Данные
        ЛЕВОЕ СОЕДИНЕНИЕ Данные КАК ДанныеПредыдущие
        ПО Данные.Значение = ДанныеПредыдущие.Значение
            И (ДанныеПредыдущие.Период В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    ДанныеУсловие.Период
                ИЗ
                    Данные КАК ДанныеУсловие
                ГДЕ
                    ДанныеУсловие.Значение = Данные.Значение
                    И ДанныеУсловие.Период < Данные.Период
                УПОРЯДОЧИТЬ ПО
                    ДанныеУсловие.Период УБЫВ))
14 floody
 
05.11.13
16:13
как уже сказали:

1)2 раза соединять с основной таблицей регистра сведений
2)в скд соединением наборов (тогда можно взять срезпоследних)
15 Coldboy
 
05.11.13
16:23
отчет и данные выбираю в скд кстати забыл уточнить. все хочу сделать через него, чтобы не возится с макетами.
16 Coldboy
 
05.11.13
16:27
(12) таблицу дат как получил человек не понял.
17 Coldboy
 
05.11.13
16:27
хотя можно документами связать.
18 Coldboy
 
05.11.13
16:34
(12) там попроще там период и остатки, можно тупо соединением, думаю. а у меня дата от документа ... и связь по документу.
19 sanja26
 
05.11.13
16:50
(18) еще проще
20 sanja26
 
05.11.13
16:51
Один набор докуметы, другой срез последних
21 Coldboy
 
05.11.13
22:20
(20) я так и сделал, а потом сделал связи, и че-то цены вернулись не те...
22 Coldboy
 
06.11.13
09:29
сделал 2 набора данных
1-ый запрос:
ВЫБРАТЬ
    ПеремещениеТоваровТовары.Номенклатура,
    ПеремещениеТоваровТовары.СчетУчета,
    ПеремещениеТоваровТовары.Количество,
    ПеремещениеТоваровТовары.Ссылка.СкладОтправитель КАК Склад,
    ПеремещениеТоваровТовары.Ссылка.Дата
ИЗ
    Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ГДЕ
    ПеремещениеТоваровТовары.Ссылка.ПометкаУдаления = ЛОЖЬ
    И ПеремещениеТоваровТовары.Ссылка.Проведен = ИСТИНА
    И ПеремещениеТоваровТовары.Ссылка.СкладОтправитель В(&СкладОтправитель)
    И ПеремещениеТоваровТовары.Ссылка.Дата МЕЖДУ &НачДата И &КонДата

2-ой запрос:
ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Период,
    ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
            &Период,
            ТипЦен = &ТипЦен
                И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних


и сделал связи набора данных:
где источник свзяи 1-ый запрос приемник 2-ой запрос.
по параметру дата -период
и номенклатуре и что-то ничего не возвращается.
23 catena
 
06.11.13
10:00
(22)Ты просишь его найти записи в регистре сведений, которые по ПЕРИОДУ четко совпадают с датой документа. Конечно ничего не выходит.
Не обойтись тут срезом последних, сказали же. Надо имитировать срез последних на каждую нужную тебе дату.
24 scanduta
 
06.11.13
10:06
Делай в первом наборе таблицу Дат на которые получаешь остатки, а во второй их передавай в качестве параметра
25 scanduta
 
06.11.13
10:06
в (12) все описано же
26 Coldboy
 
06.11.13
16:19
(25) пробывал как в (12) не очень получилось, и мне с датами не как.
27 sanja26
 
06.11.13
16:38
(26) ВЫБРАТЬ
    НачалоПериода(ПеремещениеТоваровТовары.Ссылка.Дата, День) как ПараметрСвязиДляСвязиНаборовДанныхСКД,
    ПеремещениеТоваровТовары.Номенклатура,
    ПеремещениеТоваровТовары.СчетУчета,
    ПеремещениеТоваровТовары.Количество,
    ПеремещениеТоваровТовары.Ссылка.СкладОтправитель КАК Склад,
    ПеремещениеТоваровТовары.Ссылка.Дата
ИЗ
    Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ГДЕ
    ПеремещениеТоваровТовары.Ссылка.ПометкаУдаления = ЛОЖЬ
    И ПеремещениеТоваровТовары.Ссылка.Проведен = ИСТИНА
28 sanja26
 
06.11.13
16:40
+(27) Связь наборов в скд по номенклатуре и параметр - ПараметрСвязиДляСвязиНаборовДанныхСКД
Ну все разжевано
29 DexterMorgan
 
06.11.13
16:47
(23) Если ты не умеешь пользоваться СКД, это не значит, что этого нельзя сделать. Просто дату нужно параметром передавать во второй набор
30 catena
 
07.11.13
07:43
(29)Да, с этим скилом я не была знакома.
31 Coldboy
 
08.11.13
09:03
все сделал еще вчера, вот какие запросы получились, нужные вещи вроде выбирались.
вот первый набор запросом:
ВЫБРАТЬ
    ПеремещениеТоваровТовары.Номенклатура,
    ПеремещениеТоваровТовары.СчетУчета,
    ПеремещениеТоваровТовары.Количество,
    ПеремещениеТоваровТовары.Ссылка.СкладОтправитель КАК Склад,
    ПеремещениеТоваровТовары.Ссылка.Дата,
    ПеремещениеТоваровТовары.Номенклатура.Родитель КАК Группа
ИЗ
    Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ГДЕ
    ПеремещениеТоваровТовары.Ссылка.ПометкаУдаления = ЛОЖЬ
    И ПеремещениеТоваровТовары.Ссылка.Проведен = ИСТИНА
    И ПеремещениеТоваровТовары.Ссылка.СкладОтправитель В(&СкладОтправитель)
    И ПеремещениеТоваровТовары.Ссылка.Дата МЕЖДУ &НачДата И &КонДата

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

и все это в СКД связываю на вкладке связи наборов данных по периоду, номенклатуре. как в (12) ссылке. почему-то запросы получились проще чем у них выбрать в {выбрать как то так}
32 Lev292
 
08.11.13
09:19
Такой запрос можно написать и причем в СКД. Отчет по продажам себестоимость в произвольных ценах. Пользуйся

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

СГРУППИРОВАТЬ ПО
    Продажи.Период,
    Продажи.Номенклатура,
    Продажи.ХарактеристикаНоменклатуры,
    Продажи.Регистратор,
    Продажи.ДоговорКонтрагента,
    Продажи.Организация,
    Продажи.Контрагент,
    Продажи.Подразделение

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    ХарактеристикаНоменклатуры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦеныНоменклатуры.Период КАК Период,
    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
    ЦеныНоменклатуры.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ втЦен
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
    ЦеныНоменклатуры.ТипЦен = &ТипЦен
    И (ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.ХарактеристикаНоменклатуры) В
            (ВЫБРАТЬ
                втПериодов.Номенклатура,
                втПериодов.ХарактеристикаНоменклатуры
            ИЗ
                втПериодов КАК втПериодов)
    И ЦеныНоменклатуры.Период <= &КонецПериода
;

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

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

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

СГРУППИРОВАТЬ ПО
    втПериодовЦен.Номенклатура,
    втПериодовЦен.ХарактеристикаНоменклатуры,
    втПериодовЦен.Регистратор,
    втПериодовЦен.ДоговорКонтрагента,
    втПериодовЦен.Организация,
    втПериодовЦен.Контрагент,
    втЦен.Цена,
    втПериодовЦен.Подразделение
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втВспомогательная.Номенклатура,
    втВспомогательная.ХарактеристикаНоменклатуры,
    втВспомогательная.Организация,
    втВспомогательная.Контрагент,
    втВспомогательная.ДоговорКонтрагента,
    втВспомогательная.Регистратор,
    втВспомогательная.Цена,
    втВспомогательная.Количество,
    втВспомогательная.Стоимость,
    втВспомогательная.СтоимостьБезСкидок,
    втВспомогательная.НДС,
    втВспомогательная.СтоимостьВУказанныхЦенах,
    втВспомогательная.Подразделение
ИЗ
    втВспомогательная КАК втВспомогательная
33 Coldboy
 
08.11.13
09:44
(32) все одним запросом сделано? я прсото все сделал в СКД но тока 2 запросами и связал.
34 GANR
 
08.11.13
09:44
(0) Коррелированный подзапрос в 1С? Никак...
Обходной путь - http://kb.mista.ru/article.php?id=92
35 Lev292
 
08.11.13
09:56
(33) это запрос из рабочего отчета в СКД. Схему скопировал из СКД и выложил.
36 Coldboy
 
08.11.13
10:21
(35) временные таблицы?
Закон Брукера: Даже маленькая практика стоит большой теории.