Имя: Пароль:
1C
 
Запрос. К каждой номенклатуре по складу вывести свою норму
0 StillEnough
 
13.04.15
16:07
Всем добрый день.
Есть банальный запрос
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахОстаткиИОбороты

Надо вот так. в регистре 2 измерения Склад, Номенклатура и Ресурс "Норма"
http://c2n.me/3g0JVal
К каждой номенклатуре по складу вывести свою норму

Помогите, пожалуйста!
1 ХардHard
 
13.04.15
16:11
(0) А что у нас нормы хранятся в  РегистрНакопления.ТоварыНаСкладах ?
2 spiller26
 
13.04.15
16:12
(0) Что за РС (регистр сведений), какой он периодический или нет, и по чем его связывать?
Что за "Норма"?
3 Drac0
 
13.04.15
16:15
(0)
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
Нормы.Норма
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахОстаткиИОбороты

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИмяТвоегоРегистра КАК Нормы
ПО Нормы.Склад = оварыНаСкладахОстаткиИОбороты.Склад
И Нормы.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура

Если регистр периодеский, то надо ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИмяТвоегоРегистра.СРезПоследних() КАК Нормы
4 Drac0
 
13.04.15
16:16
Опечатки и синтаксис сам проверь
5 spiller26
 
13.04.15
16:20
(3) Но ещё бывает. что приходиться РС в виртуальную таблицу запихивать. Не помню уже в каких случаях.
6 Drac0
 
13.04.15
16:24
(5) Соединение самой с собой, многократное использование. В данном случае это немного облегчит работу скульного оптимизатора, но если у регистра стоит галка формировать физическую таблицу среза последних, то и здесь профита не будет.
7 StillEnough
 
13.04.15
16:41
(3) окей я сделал левым. Но у меня идет дублирование записей из накопления, потому что в РС (он кстати говоря переодический) по каждому складу и номенклатуре несколько значений. Мне же нужно всегда брать одно последнее.
8 Drac0
 
13.04.15
16:45
(7) В конце специально для этого случай оставил комментарий же... Ну что такое.
9 StillEnough
 
13.04.15
16:52
(8) прощу прощения, страница не обновилась. Прочитал комментарий, и честно сказать ничего не понял. Пошел погуглить - наткнулся на Книга знаний: Срез последних на каждую дату в запросе
Вроде по теме, буду разбираться. Но если вы знаете, можете сказать как быстрее и правильнее сделать? Сейчас у меня выводиться блок записей с нужной нормой на последнюю дату, после начинается дубли
10 Drac0
 
13.04.15
16:55
(9) Ты это прочитал: "Если регистр периодеский, то надо ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИмяТвоегоРегистра.СРезПоследних() КАК Нормы"

И ты это не смог понять?
11 StillEnough
 
13.04.15
16:58
(10) я про (6) написал. Из вашего коммента все осознал, сделал, но результат не изменился
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвижениеСебестоимости.СрезПоследних(&КонецПериода, ) КАК ДвижениеСебестоимостиСрезПоследних
12 StillEnough
 
13.04.15
17:00
(11) вернее он, конечно, изменился, но проблему дублей это не решило
13 Drac0
 
13.04.15
17:01
(11) Значит, в ДвижениеСебестоимости есть еще одно измерение.
14 Drac0
 
13.04.15
17:01
(13) или даже больше.
15 StillEnough
 
13.04.15
17:04
(14) да вы правы. Есть еще пара измерений. Как же быть в этой ситуации?
16 spiller26
 
13.04.15
17:05
(12) Структуру давай, а то долго будем соображать.
РегистрСведений.ДвижениеСебестоимости
пока интересует Измерения
17 StillEnough
 
13.04.15
17:06
ДвижениеСебестоимостиМатериалов
--
Документ
СкладПолучатель
Номенклатура
Движение
18 Drac0
 
13.04.15
17:09
(17) Сами регистр делали?
19 spiller26
 
13.04.15
17:09
(17) В левое соединение по чем делаешь
запрос кинь полностью
20 StillEnough
 
13.04.15
17:10
(19) ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Регистратор,
    ТоварыНаСкладахОстаткиИОбороты.Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.Период КАК Период,
    ВЫБОР
        КОГДА ДвижениеСебестоимостиСрезПоследних.Количество <> 0
            ТОГДА ДвижениеСебестоимостиСрезПоследних.СебестоимостьСумма / ДвижениеСебестоимостиСрезПоследних.Количество
    КОНЕЦ КАК ЧегоТоТам,
    ДвижениеСебестоимостиСрезПоследних.Период КАК Период1,
    ДвижениеСебестоимостиСрезПоследних.Количество КАК ПолОднородный
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахОстаткиИОбороты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДвижениеСебестоимости.СрезПоследних(&КонецПериода, ) КАК ДвижениеСебестоимостиСрезПоследних
        ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ДвижениеСебестоимостиСрезПоследних.Номенклатура
            И ТоварыНаСкладахОстаткиИОбороты.Склад = ДвижениеСебестоимостиСрезПоследних.СкладПолучатель
            И (ТоварыНаСкладахОстаткиИОбороты.Регистратор = ДвижениеСебестоимостиСрезПоследних.Документ
                ИЛИ ТоварыНаСкладахОстаткиИОбороты.Регистратор.ДокументОснование = ДвижениеСебестоимостиСрезПоследних.Документ)

УПОРЯДОЧИТЬ ПО
    Период1
21 StillEnough
 
13.04.15
17:10
(18) так точно
22 StillEnough
 
13.04.15
17:11
(20) не с той консоли скоппировал. У меня 2 последних условия удалены про сравнение регистраторов. Это тестовый вариант
23 Drac0
 
13.04.15
17:13
(22) Почему измерение Документ, а не подчинение регистратору сделали? Это раз. Что лежит в измреении Движение? Это два.
24 spiller26
 
13.04.15
17:13
(21) жесть конечно
25 StillEnough
 
13.04.15
17:16
(23) 1) не смог придумать как реализовать само Движение в системе. У меня в каждой записи регистра хранится значение себестоимости партии на предыдущем участке на этом складе. Расчет проходит в конце месяца с учетом 10 документов. В запись регистра при расчете записываются данные, подчиненную регистратору не перезаписать из модуля другого документа.
2) ИСТИНА - ЛОЖЬ
26 StillEnough
 
13.04.15
17:17
(24) ну жесть не жесть, но работает как надо. Осталось только 1 цифру в группировку вывести.
27 Drac0
 
13.04.15
17:22
Сначала собираешь временную таблицу:

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

СГРУППИРОВАТЬ ПО
РС_ДС_Срез.СкладПолучатель,
РС_ДС_Срез.Номенклатура

Дальше переделываешь соединение на

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвижениеСебестоимости.СрезПоследних(&КонецПериода, ) КАК ДвижениеСебестоимостиСрезПоследних
  ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_РеальноПоследние КАК ВТ_РеальноПоследние
  ПО ВТ_РеальноПоследние.СкладПолучатель
=
  ВТ_РеальноПоследние.Номенклатура =
  ВТ_РеальноПоследние.МаксПериод =
        ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ДвижениеСебестоимостиСрезПоследних.Номенклатура
            И ТоварыНаСкладахОстаткиИОбороты.Склад = ДвижениеСебестоимостиСрезПоследних.СкладПолучатель


Правда ,если у тебя две записи в рамках одной секунды, то все равно херня будет. Но тогда нужна еще одна ВТ, а мне лень писать.
28 Drac0
 
13.04.15
17:22
(26) Это и есть ошибка проектирования. Когда ради одно циферки получаешь геморрой.
29 StillEnough
 
13.04.15
17:24
(28) да кто же спорит. Но я 3 раза концепцию расчета себестоимости менял в процессе разработки. Экономист по итогам "раза" понимал, что-то не так... и начинались заплатки
30 StillEnough
 
13.04.15
17:26
(27) спасибо. в разрезе склада и номенклатуры не будет такого
Программист всегда исправляет последнюю ошибку.