Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Помогите разобраться с скд(точнее с запросами)

Помогите разобраться с скд(точнее с запросами)
Я
   ksenod
 
02.11.18 - 11:25
Хочу видеть все конечные остатки, и приходы-расходы номенклатуры за период(+ дату последнего поступления и текущую цену). Подскажите пожалуйста как мне их получить, если беру обороты из регистра оборотов, а остатки из регистра остатков то получаю не все данные(там где есть остатки но нет оборотов пустая номенклатура), если делаю как написал ниже получаю все остатки после каждого прихода-расхода, куча хлама. Так же буду благодарен всем кто укажет мне мои ошибки по оптимизации в коде.

Есть ли способ объединить таблицы в следующем виде:
товар1 1 2
товар2 1 1
+
товар1 Х
товар3 Х
=
Товар1 1 2 Х
Товар2 1 1
Товар3     Х


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

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

////////////////////////////////////////////////////////////////////////////////

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

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

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

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

СГРУППИРОВАТЬ ПО
    обороты.Номенклатура,
    обороты.КоличествоКонечныйОстаток,
    резервы.КоличествоОстаток,
    ценаа.Цена

УПОРЯДОЧИТЬ ПО
    Номенклатура,
    КоличествоОстаток
 
 
   ksenod
 
1 - 02.11.18 - 12:00
Тут неверный запрос на дату, забыл поправить, там тоже ВЫБОР КОГДА регистратор=ссылка док.пост.тов
   catena
 
2 - 02.11.18 - 12:08
>>там где есть остатки но нет оборотов пустая номенклатура

Чтобы так не было, используй конструкцию ЕстьNULL(ЛеваяТаблица.Номенклатура, ПраваяТаблица.Номенклатура)
   ksenod
 
3 - 02.11.18 - 12:15
(2) Спасибо! Ты лучший.
   ksenod
 
4 - 02.11.18 - 12:20
Лучшая*
   ksenod
 
5 - 02.11.18 - 12:29
Буду так же очень рад если мне подскажут полноценную документацию/книжку с хорошими примерами по запросам в 1с(находящуюся в свободном доступе).
   xXeNoNx
 
6 - 02.11.18 - 13:45
(0)а что мешает получить приходы/расходы по реальной таблице, исключая определенный вид регистратора, а остатки получить из регистра остатков?
   xXeNoNx
 
7 - 02.11.18 - 13:47
в ПОМЕСТИТЬ обороты написана ересь. Конечный остаток будет получаться на каждый движение регистра, соответственно фактический остаток не будит иметь с ним ничего общего

И переставай использовать вирт таблицу ОстаткиИОбороты
   ksenod
 
8 - 06.11.18 - 08:03
(7) С остатком я все понял, почему плохо использовать эту таблицу и какие есть альтернативы для получения приходов и расходов за период?
   xXeNoNx
 
9 - 06.11.18 - 08:06
(8) с детализацией по дате я за реальную таблицу
   Web00001
 
10 - 06.11.18 - 08:08
(8) Мне тоже очень интересно как получить остатки на каждое движение\дату не используя ОстаткиИОбороты
 
 Рекламное место пустует
   xXeNoNx
 
11 - 06.11.18 - 08:09
(8) не имеет смысла использовать таблицу оборотов с детализацией меньше месяца, т.к. результат будет вычисляться по реальной таблице.
   xXeNoNx
 
12 - 06.11.18 - 08:11
+(11) можно убедиться открыв профайлер, либо запустить консоль запроса с возможностью показывать план запроса
   ksenod
 
13 - 06.11.18 - 08:14
(9) Можете уточнить что вы подразумеваете под реальной таблицей? Имеете в виду делать конечный поиск по этому же регистру не использую вирт таблиц?
   MuxaH
 
14 - 06.11.18 - 11:08
СКД обязательно нужны парные поля остатков, и роли этим полям назначить надо. А если брать только конечный остаток, то при группировке она итоги хрен знает как посчитает. Так что выбрать в запросе Начальный остаток, Приход, Расход, Конечный остаток. Остаткам назначить роль. Ну а если поле начальный остаток никому не надо, то ограничить его использование галками.
   ksenod
 
15 - 06.11.18 - 12:34
(14) хм, вроде бы уже протестировал только с конечными остатками и все хорошо, итоги считал через вкладку ресурсов. Можете поподробнее рассказать как воспроизвести баг или я его уже случайно обошел?
Можете так же в двух словах рассказать про роли для полей для общего развития?
   ksenod
 
16 - 06.11.18 - 12:35
(15) (14) Про роли нашел, ушел изучать

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует