Имя: Пароль:
1C
1С v8
Запрос - левое соединение...
0 ДенисЧ
 
12.07.12
15:15
Вроде простой запрос...

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

ГДЕ
   АВУ.РазделУчета = &ВыбРазделУчета


Цену не показывает :-(

Смысл запроса - получить материалы, пошедшие на продукцию за период, с ценами последнего прихода на дату выпуска...

Где я не прав?
1 х86
 
12.07.12
15:18
вот это мне не нравится

ВЫБРАТЬ ПЕРВЫЕ 1 Приход.Цена, Приход.Номенклатура КАК Номенклатура, КОНЕЦПЕРИОДА(Приход.Ссылка.Дата, ДЕНЬ) КАК ДатаПрихода
           ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК Приход
2 ДенисЧ
 
12.07.12
15:18
(1) ну, порядок-то я добавлю... Неважно, в этом случае первый приход :-)
Или предлагаешь в Закупки лезть?
3 х86
 
12.07.12
15:20
(2)точно не могу сказать, но что-то меня напрягает  )
4 ДенисЧ
 
12.07.12
15:20
(3) наверное, запрос к документу? :-)
5 andrewks
 
12.07.12
15:21
а цену прихода больше неоткуда брать, что-ли? из регистра какого-нибудь?
6 dachnik
 
12.07.12
15:21
а зачем из документа берешь, а не из регистра?
7 ДенисЧ
 
12.07.12
15:24
(5) РС типы цен вести? Так на каждую хотелку регистров не позаводишь. А хотелок много, это только первая прикидка... Хотят видеть по разному
(6) а пофиг.
8 ДенисЧ
 
12.07.12
15:30
+7 вопрос не в том, откуда брать цену, а в том, почему оно не соединяет...
9 ЧашкаЧая
 
12.07.12
15:32
(8) Никак не могу понять зачем там ПЕРВЫЕ, когда нужен максимум по периоду.
10 andrewks
 
12.07.12
15:32
(8)то, что нулл пришёл - это должно наводить на мысли. например, типы разные АУЗ.Затрата и ПоследнийПриход.Номенклатура
11 ssh2006
 
12.07.12
15:34
(8) в подзапросе ПоследнийПриход всего одна произвольная запись
12 andrewks
 
12.07.12
15:36
я думаю, сначала надо получить виртуалку с ценами последних приходов, а потом уже с ней соединять
13 andrewks
 
12.07.12
15:36
(11) +1
14 ДенисЧ
 
12.07.12
15:37
(10) должно. Но не наводит, ибо они оба - СправочникСсылка.Номенклатура...
15 ДенисЧ
 
12.07.12
15:38
(11) логично...
(12) Вируталку? Ну ка расскажи, как? Только не говори про ПОМЕСТИТЬ :-)
16 Жан Пердежон
 
12.07.12
15:39
первые 1 Без сортировки?
и по какому принципу поступления выбираются?
17 Жан Пердежон
 
12.07.12
15:40
и кстати, что за конфа?
там нет регистра типа "ЦеныНоменклатурыПоставщиков"?
18 andrewks
 
12.07.12
15:42
(15) а что, у тебя фобия к ПОМЕСТИТЬ? :-)
19 ДенисЧ
 
12.07.12
15:43
(17) УПП. Регистр есть. Но см (7)
(18) Не люблю лишних сущностей :-)
20 AlexNew
 
12.07.12
15:45
А почему ты решил, что в первом попавшемся документе есть вся номенкалтура?
21 Reset
 
12.07.12
15:46
(0) Выбирается одна произвольная цена на одну произвольную номенклатуру из одного произвольного проведенного документа и с ней происходит соединение. Легко может быть, что условие соединения не выполнится
22 Reset
 
12.07.12
15:47
(21) то, что это бессмысленное соединение - по умолчанию
23 andrewks
 
12.07.12
15:47
(19) 1. регистр есть, а данных в нём нет?
24 ДенисЧ
 
12.07.12
15:50
(23) по-вто-ря-ю. Цена последнего прихода - это только один из минимум 10 вариантов расчёта суммы. На каждый чих не напляшешься.
(20) (21) уже понял.
25 Ёпрст
 
гуру
12.07.12
15:51
Блин.. Дениску укусил снеговик
26 Жан Пердежон
 
12.07.12
15:55
(24) тут плясать не надо, всё уже сделано, осталось брать цену из этого регистра (и настроить его заполнение)

(25) ...да, а вроде хорошим человеком был)
27 х86
 
12.07.12
15:58
(23)а это,  флаг в ПТУ есть "Регестрировать цены ..."?
28 ДенисЧ
 
12.07.12
15:58
(26) Да какая разница, откуда брать цену? Из подзапроса (выбрать цена, дата) или из виртуальной таблицы РегистрЦен.СрезПоследних(, дата), если у меня этих дат куча?
29 ДенисЧ
 
12.07.12
16:00
(27) Всё там есть. А вот понадобилась им недавно цена как ОстатокПоМарт + ПриходыПоСегодня. А завтра = ОстатокПоМай + ПриходыНаСегодня - РасходыНаСегодня.
И что, на каждый чих создавать новый тип цены и заполнять регистр?
30 andrewks
 
12.07.12
16:03
хммм... агрегаты?
31 viktor_vv
 
12.07.12
16:08
По мотивам вот этого

Книга знаний: Срез последних на каждую дату в запросе;

по приходам получилось вот так

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

ее уже можно цеплять куда надо будет. Правда тут без учета характеристик.
32 viktor_vv
 
12.07.12
16:10
(31)+ Но таки может через поместить пошустрее будет.
33 Ёпрст
 
гуру
12.07.12
16:12
(28) коррелированный подзапрос юзай для получения цены
ЗЫ: вот только не помню, есть ли он в селект листе в снеговике?
34 ssh2006
 
12.07.12
16:13
Пример - продажи с последней на момент отгрузки ценой прихода из поступления (корелированный подзапрос)

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

СГРУППИРОВАТЬ ПО
   Продажи.Регистратор,
   Продажи.Номенклатура,
   Продажи.КоличествоОборот
35 viktor_vv
 
12.07.12
16:19
(33) В селекте нету, можно в Где.
36 ДенисЧ
 
12.07.12
16:21
(33) Это первое, что я попытался сделать :-)
37 Ёпрст
 
гуру
12.07.12
16:31
(36) И.. болт ?
Мот в 8.3 уже можно, кто знает ?
38 ssh2006
 
12.07.12
16:33
(37) (34) и в 8.1 работает
39 viktor_vv
 
12.07.12
16:36
(38) Он про тоже самое в поле Выбрать спрашивает.
В СКД двумя наборами данных можно изобразить некое подобие.