Имя: Пароль:
1C
 
СКД получить выборку
0 Худой
 
30.06.17
09:58
В принципе, получить выборку из регистра накопления проблем нет. Все мышкой делается.
Но вот не могу понять как, например, из регистра накопления "Товары на складах" получить чуток более хитрую выборку запросом.
Выбрать остатки на начало и на конец периода, а обороты только по определенным документам. Например, только документы реализации и документы поступления. А всякие там перемещения, списания и проч. убрать фильтром.
Естественно, при таком отчете, если будут обороты по документам, не всегда остаток на начало + количество поступление - реализация будет равна остаток на конец. Но это, в принципе, в этом отчете ожидаемо.
Как такое реализовать запросом на СКД?
1 Митяйский
 
30.06.17
10:38
"Остатки и обороты" без регистратора объединить с "остатками и   оборотами" с регистратором. Причем в первой таблице брать только поля остатков, вместо оборотов поставить 0, а во второй таблице обнулить остатки,  взять только обороты, и навесить прямо в запросе условие отбора по конкретным видам документов.

Не знаю, насколько правильный этот способ, но вроде как работает.
2 Худой
 
30.06.17
10:51
(1)Точно так и сделал, прежде чем сюда обратиться.
Объединил эти два запроса.
В СКД выводит отдельно колонки Остатки и отдельно обороты. И остатки и обороты с фильтрацией выводятся правильно.
То есть, две группы "Остатки поступление выбытие Остатки". В одной только остатки на начало и на конец, в другой только поступление и выбытие за этот период..
Попытка "впихнуть" остатки в обороты приводит к тому, что эти обороты накладываю фильтр на остатки. И получается, что остатки неправильные.
3 Худой
 
30.06.17
10:55
Такое поведение, когда отдельно остатки и обороты с фильтром, например, за один месяц еще терпимо.
Но если за несколько месяцев, то уже полный  фарш получается.
4 Митяйский
 
30.06.17
10:56
Ну так надо отфильтровать обороты прежде чем объединять с остатками.
Отфильтровать регистраторы на уровне запроса, а уже потом через "объединить все" навесить таблицу остатков.
5 Худой
 
30.06.17
11:32
Нет. Не получается.
6 Худой
 
30.06.17
11:32
Если не ставлю фильтр, то считает все правильно.
С фильтром остатки искажает
7 Худой
 
30.06.17
11:32
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.Качество КАК Качество,
    ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры,
    ТоварыНаСкладахОстаткиИОбороты.СерияНоменклатуры,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход,
    ЦеныНоменклатурыСрезПоследних.ТипЦен,
    ЦеныНоменклатурыСрезПоследних.Цена,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход * ЦеныНоменклатурыСрезПоследних.Цена КАК ПриходСумма,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход * ЦеныНоменклатурыСрезПоследних.Цена КАК РасходСумма,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Производитель КАК Производитель,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор,
    ТоварыНаСкладахОстаткиИОбороты.ПериодМесяц КАК Период,
    ВЫБОР
        КОГДА ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
                ИЛИ ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.КорректировкаРеализации
            ТОГДА "Реализация"
        КОГДА ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
                ИЛИ ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.КорректировкаПоступления
            ТОГДА "Поступление"
    КОНЕЦ КАК ВидДвижения,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена КАК СуммаНачальныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена КАК СуммаКонечныйОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура

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

ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.Качество,
    ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры,
    ТоварыНаСкладахОстаткиИОбороты.СерияНоменклатуры,
    NULL,
    NULL,
    NULL,
    ЦеныНоменклатурыСрезПоследних.ТипЦен,
    ЦеныНоменклатурыСрезПоследних.Цена,
    NULL,
    NULL,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Производитель,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ВидНоменклатуры,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.НоменклатурнаяГруппа,
    NULL,
    NULL,
    NULL,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
8 Митяйский
 
30.06.17
13:39
(7) Если так, то тогда во второй таблице в поле ВидДвижения вместо null сделать "остаток", а в первой - в полях остатков поставить 0.

И в отборе по виду движения указать "Реализация", "Поступление" и "остаток".
9 тарам пам пам
 
30.06.17
14:24
добавь просто отдельные ресурсы и не парься с объединением:

ВЫБОР
    КОГДА ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
                ИЛИ ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.КорректировкаРеализации
            ТОГДА КоличествоПриход
    ИНАЧЕ 0
КОНЕЦ КАК КоличествоПриходПоРеализации

ВЫБОР
    КОГДА ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
                ИЛИ ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.КорректировкаРеализации
            ТОГДА КоличествоРасход
    ИНАЧЕ 0
КОНЕЦ КАК КоличествоРасходПоРеализации
10 Худой
 
30.06.17
14:39
Спасибо большое за советы.
11 Худой
 
30.06.17
14:40
Сейчас 1С не под рукой.
Как только отработаю, обязательно отпишусь
12 PiterPrg
 
30.06.17
15:32
Можно попробовать работать с таблицей остатки и обороты, а фильтровать не во всем отчете, а конкретно в группировке по регистратору. (Только в настройках группировки скрой отображение отбора, а то в каждой строке отображаться будет)
13 Худой
 
01.07.17
06:32
(12) Не совсем представляю, как это делается
14 mistеr
 
01.07.17
12:50
Может дело в ролях полей СКД. Когда у тебя не настоящие "остатки", роли нужно сбросить.
15 пипец
 
01.07.17
12:56
Худой, ты с 7-ки на 8 ку???
16 Худой
 
07.07.17
12:16
(9)По моему, наиболее оптимальное решение.
Как-то по поводу своих ресурсов не задумывался.
17 Худой
 
10.07.17
12:10
Никто не подскажет, как в СКД объединить колонки ресурсов?
Например,
Остатки на начало - Количество, Сумма
Приход - Количество, Сумма
Расход - Количество, Сумма
Остатки на конец - Количество, Сумма
Настройками, не программируя, такое реализуется?
18 Худой
 
10.07.17
14:42
апну
19 тарам пам пам
 
10.07.17
16:45
(17) Не очень понятно, что тебе нужно. Имеешь в виду общую шапку над количеством и суммой? Тогда добавь в выбранные поля группу колонок с именем "Остаток на начало" и перенеси туда нужные ресурсы.
20 Худой
 
10.07.17
17:02
(19)Все правильно.
Вот с созданием группы колонок не могу понять. Подозреваю, что это не так сложно. Но не могу понять как
21 Худой
 
10.07.17
17:50
Где в СКД можно добавлять в выбранные поля группы колонок со своими именами?
22 aleks_default
 
10.07.17
17:57
(9)Итоги будут кривые
23 Худой
 
10.07.17
18:20
(22) Что-то такое было. Поэтому отказался от этого варианта.
24 Худой
 
10.07.17
19:03
Все.
По поводу того, как запихать в группу колонки, нашел.
Спасибо автору ролика https://www.youtube.com/watch?v=tSMXlO49Yhk
Там на 13 минуте принцип показан. Может кому будет полезно.
25 Худой
 
12.07.17
13:21
Как достало то, что если в группировку добавляешь регистратор, слетает остаток на конец месяца!
Хотя входящий остаток следующего месяца, показывает все правильно.
Где-то я встречал информацию, что надо добавлять какую-то секунду если добавляешь регистратор.
Никто в СКД с таким поведением не сталкивался?
26 тарам пам пам
 
12.07.17
13:35
(22) с чего это итоги кривые будут? там обороты суммируются, с ними никогда проблем не было.

(25) роли значит криво настроены у полей
27 Худой
 
12.07.17
13:40
Добавил в отбор ПериодСекунда. Поставил этот реквизит в группировке перед Регистратором. Все показывает правильно.
Но нафига в отчете группировка ПериодСекунда?
(26) Похоже на то. Я там с ролями уже задолбался настраивать.
Сделал
Регистратор - роль "Период, 1"
ПериодСекунда - роль "Период, 2"
ПериодМесяц - роль "Период, 3"
28 тарам пам пам
 
12.07.17
14:31
(27) нужно еще запрос смотреть. Можно поставить у ПериодСекунда флаг "Обязательный", тогда скорее всего заработает.

Немного теории - смысл этих периодов такой - для того, чтобы корректно посчитать остатки, СКД должна взять первый начальный остаток и последний конечный остаток по регистратору/периоду (в зависимости от выбранных полей), после чего уже обычными суммированием получить остатки по измерениям. Первый и последний означает, что данные нужно каким-то образом отсортировать. Вот эти вот номера периодов и показывают, в каком порядке сортировать выборку. Т. е. поля сортировки должны быть такие: ПериодСекунда, Регистратор, ДопПериоды.

Из этого следует то, что в выборке не должно быть "лишних" записей - т. е. например если в запросе объединили остатки и обороты с чем-то и для одного регистратора, периода и остальной аналитики есть 2 записи - с корректными остатками и с нулевыми остатками, то СКД может вывести неправильный остаток, потому что после сортировки последней может оказаться либо корректная запись, либо запись с нулевыми остатками.

Второй вывод - регистратор должен идти после ПериодСекунда, т. к. один регистратор может делать движения в различных периодах.

Третий "вывод" - проще всего дать СКД сделать все самой и просто выбрать данные из таблицы остатки и обороты с периодичностью "Авто" и установить флаг "Автозаполнение". Я потому в (9) и написал, что лучше просто ресурсами сделать.
29 Худой
 
12.07.17
18:11
(28) Большое спасибо за разъяснение. Не думал, что там все так наворочено.
Поставил поля сортировки, как предложено, следующим образом : ПериодСекунда, Регистратор, ДопПериоды
Причем, ПеродМесяц - это колонки таблицы, чтобы вправо по месяцам было.
Так не работает. Итоги на конец каждого месяца неправильные. Только присутствие в отчете в явном виде ПериодСекунда перед Регистратором дает правильный результат.
30 Худой
 
18.07.17
07:44
(28)Я же так и не победил эту проклятую секунду.
Что еще можно попробовать?
31 тарам пам пам
 
18.07.17
11:07
(30) ну тогда хз, тут уже сам отчет смотреть надо, телепатия кончилась :)
32 LordCMEPTb
 
18.07.17
13:24
(30) Такая настройка не дает нужного результата?
http://s016.radikal.ru/i336/1707/44/a876c2956fcb.png
33 echo77
 
18.07.17
14:03
(0) Покажите как отчет должен выглядеть в итоге?
34 Худой
 
18.07.17
15:59
(32) Там третьим параметром у меня стоит Авто. Если без него, то выдает ошибку еще на этапе записи СКД.
И, кстати, у меня нет фигурных скобок. Это что такое?
(33)Отчет в итоге должен выглядеть, точно так-же, как отчет Остатки товаров на складах. Он так и выглядит и ему равняется, если не делать расшифровку по регистратору.
35 LordCMEPTb
 
19.07.17
08:23
(34) "Авто" - это принципиальная позиция? Т.е. сменить на "Регистратор", оставить в запросе только "Период, Регистратор" вместо всех доступных периодов не вариант?
По фигурным скобкам можно темы на мисте порыть, можно в гугле спросить. Что за конструкция в запросе {...}
36 Худой
 
20.07.17
03:42
(35) Для отчета нужна группировка по периодам Месяц, Квартал, Год. И расположение их должно быть в колонках. Такую возможность дает только установка Периодичность -> "Авто".
Тогда в колонках указываем, например, ПериодМесяц и получаем движения по месяцам.
Ошибка? Это не ошибка, это системная функция.