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

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


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

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

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

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

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

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

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

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

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

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

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