Имя: Пароль:
1C
 
Помогите с запросом
0 Zombi
 
21.11.25
09:10
Завис с запросом. Туплю уже час. Нужно получать себестоимость по складам за период по дням. Вот текст запроса:

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

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


Результат на скриншоте. Корректную себестоимость получает только на первый и последний день в периоде. Остальные дни сильно меньше. Что не так делаю?
1 Zombi
 
21.11.25
09:05
Проблема именно когда соединяю с РС "АналитикаУчетаНоменклатуры". Если соединения нет, общая себестоимость корректная на каждый день.
2 Ненавижу 1С
 
гуру
21.11.25
09:12
(0) сначала выбрать остатки по периодам и ключам в ВТ, потом сгруппировать по складам
3 RomanYS
 
21.11.25
09:13
(1) всё логично ОстаткиИОбороты выдают остатки только за те периоды и по тем аналитикам(!), когда были обороты.
4 Fedor-1971
 
21.11.25
09:13
(0) Убери Сумма и поищи где дублируются ключи аналитики
Хочешь запросом, хочешь руками и будет понятно, что не так
5 RomanYS
 
21.11.25
09:14
(2) Без соединения с таблицей дат не сработает
6 Fedor-1971
 
21.11.25
09:18
4+ И, таки, Левое соединение, если у тебя будут записи в остатках с отсутствующим ключом аналитики, погнётся выборка и ты об этом не узнаешь
7 maxab72
 
21.11.25
09:18
Если это СКД, то надо установить признак Обязательное для роли поля Период.
8 Fedor-1971
 
21.11.25
09:20
(5) Это если нужно показать за каждый календарный день, походу, ТС достаточно просто за дни движений
9 RomanYS
 
21.11.25
09:30
(8) " просто за дни движений "
Так в том-то и дело, что движения по отдельным аналитикам и остатки выдаются только по ним, а ему нужно всего по складу.
Таблицу дат можно взять из этого же запроса, если не нужно на каждый день. Но соединять с ней всё равно придётся, чтобы переносить "скользящие" остатки по недвижимым аналитикам
10 RomanYS
 
21.11.25
09:29
Кстати, возможно, проще посчитать нарастающим итогом остатки, взяв отдельно остатки и обороты. Тогда можно обойтись без внешних дат и можно оперировать свернутыми по складу таблицами
11 Zombi
 
21.11.25
09:29
Сделал вот так. Результат тот же.

ВЫБРАТЬ
    КалендарныеГрафики.ДатаГрафика КАК ДатаГрафика
ПОМЕСТИТЬ вт_Даты
ИЗ
    РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики
ГДЕ
    КалендарныеГрафики.ДатаГрафика >= &НачалоПериода
    И КалендарныеГрафики.ДатаГрафика <= &КонецПериода
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СУММА(вт_СебестоимостьДоГруппировки.Себестоимость) КАК Себестоимость,
    вт_СебестоимостьДоГруппировки.Период КАК Период,
    вт_СебестоимостьДоГруппировки.Склад КАК Склад
ИЗ
    вт_СебестоимостьДоГруппировки КАК вт_СебестоимостьДоГруппировки

СГРУППИРОВАТЬ ПО
    вт_СебестоимостьДоГруппировки.Период,
    вт_СебестоимостьДоГруппировки.Склад
12 Fedor-1971
 
21.11.25
09:31
(7) Если СКД, то нужно использовать пару ОстатокНаНачало + ОстаткоНаКонец - иначе может некорректно считать (это из старых установок по СКД, может что поменялось)
13 RomanYS
 
21.11.25
09:36
(11) нужно соединить таблицу саму с собой и получить фактические периоды действия остатков. Потом уже соединять её с датами чтобы дополнить пропущенные остатков
14 Zombi
 
21.11.25
10:12
(13) У меня что-то затык уже) Можете набросать как соединять?
15 Ненавижу 1С
 
гуру
21.11.25
09:47
(14) а почему вы не хотите сделать как в (2)?
16 Zombi
 
21.11.25
10:00
(15) В 11 же сделал.
17 lEvGl
 
гуру
21.11.25
10:05
эммм "остатки на каждый день" покажут на каждый день хоть был оборот хоть нет, потом лепить сбоку аналитику
18 RomanYS
 
21.11.25
10:05
(14) ВЫБРАТЬ ПЕРВЫЕ 99999999
    РН.Период КАК Период,
    РН.АналитикаУчетаНоменклатуры КАК Аналитика,
    РН.КоличествоКонечныйОстаток КАК Остаток,
    АВТОНОМЕРЗАПИСИ() КАК нпп
ПОМЕСТИТЬ ВТ
ИЗ
    РегистрНакопления.СебестоимостьТоваров.ОстаткиИОбороты(, , День, , ) КАК РН

УПОРЯДОЧИТЬ ПО
    РН.АналитикаУчетаНоменклатуры,
    Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Аналитика КАК Аналитика,
    ВТ.Остаток КАК Остаток,
    ВТ.Период КАК Период,
    ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ВТ1.Период, СЕКУНДА, -1), &Датакон) КАК ПериодПо
ИЗ
    ВТ КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ1
        ПО ВТ.Аналитика = ВТ1.Аналитика
            И (ВТ.нпп + 1 = ВТ1.нпп)
19 Ненавижу 1С
 
гуру
21.11.25
10:30
(16) нет
20 Zombi
 
21.11.25
10:35
(18) Сделал так:

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

УПОРЯДОЧИТЬ ПО
    РН.АналитикаУчетаНоменклатуры,
    Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Аналитика КАК Аналитика,
    ВТ.Остаток КАК Остаток,
    ВТ.Период КАК Период,
    ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ВТ1.Период, СЕКУНДА, -1), &Датакон) КАК ПериодПо
ПОМЕСТИТЬ вт_Движения
ИЗ
    ВТ КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ1
        ПО ВТ.Аналитика = ВТ1.Аналитика
            И (ВТ.нпп + 1 = ВТ1.нпп)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    вт_Движения.Остаток КАК Остаток,
    вт_Движения.Период КАК Период,
    АналитикаУчетаНоменклатуры.Склад КАК Склад
ПОМЕСТИТЬ втСАналитикой
ИЗ
    вт_Движения КАК вт_Движения
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
        ПО вт_Движения.Аналитика = АналитикаУчетаНоменклатуры.КлючАналитики
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СУММА(втСАналитикой.Остаток) КАК Остаток,
    втСАналитикой.Период КАК Период,
    втСАналитикой.Склад КАК Склад
ПОМЕСТИТЬ вт_Сгруппировано
ИЗ
    втСАналитикой КАК втСАналитикой

СГРУППИРОВАТЬ ПО
    втСАналитикой.Период,
    втСАналитикой.Склад

Результат тот же.
21 Zombi
 
21.11.25
10:36
(19) Как надо?
22 lEvGl
 
гуру
21.11.25
10:47
ВЫБРАТЬ РАЗЛИЧНЫЕ
    КалендарныеГрафики.Период
ПОМЕСТИТЬ Дни
ИЗ
    РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики
ГДЕ
    КалендарныеГрафики.Период МЕЖДУ &НачалоПериода И &КонецПериода
;

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

СГРУППИРОВАТЬ ПО
    Движения.Номенклатура,
    ДНИ.Период

Если после внутреннего соединения с аналитикой сумма уменьшается - ну значит нет связей
23 RomanYS
 
21.11.25
11:09
(21) ВЫБРАТЬ ПЕРВЫЕ 99999999
    РН.Период КАК Период,
    РН.АналитикаУчетаНоменклатуры КАК Аналитика,
    РН.КоличествоКонечныйОстаток КАК Остаток,
    АВТОНОМЕРЗАПИСИ() КАК нпп
ПОМЕСТИТЬ ВТ
ИЗ
    РегистрНакопления.СебестоимостьТоваров.ОстаткиИОбороты(, , День, , ) КАК РН

УПОРЯДОЧИТЬ ПО
    РН.АналитикаУчетаНоменклатуры,
    Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Аналитика КАК Аналитика,
    ВТ.Остаток КАК Остаток,
    ВТ.Период КАК Период,
    ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ВТ1.Период, СЕКУНДА, -1), &Датакон) КАК ПериодПо
ПОМЕСТИТЬ ВТПериодами
ИЗ
    ВТ КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ1
        ПО ВТ.Аналитика = ВТ1.Аналитика
            И (ВТ.нпп + 1 = ВТ1.нпп)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТ.Период КАК Дата
ПОМЕСТИТЬ Даты
ИЗ
    ВТ КАК ВТ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Даты.Дата КАК Дата,
    СУММА(ВТ.Остаток) КАК Остаток,
    ВТ.Аналитика.МестоХранения КАК АналитикаМестоХранения
ИЗ
    Даты КАК Даты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПериодами КАК ВТ
        ПО (Даты.Дата МЕЖДУ ВТ.Период И ВТ.ПериодПо)

СГРУППИРОВАТЬ ПО
    Даты.Дата,
    ВТ.Аналитика.МестоХранения
24 Zombi
 
21.11.25
11:38
(23) Не так у меня. У меня в РН только ключ аналитики. Чтобы саму аналитику получить и склад через нее, нужно соединение с РС "СтоимостьКонечныйОстаток". Вот когда соединяю, начинаются чудеса с остатками по дням. Корректно только в первый и последний день периода. Если с РС не соединять, общие остатки правильные по всем дням. Но нужна разбивка по складам.
25 Fedor-1971
 
21.11.25
11:42
(24) Ключ аналитики, в норме, это справочник. И для поиска аналитик есть РС КлючиАналитикиНоменклатуры (или как-то так)

Для эксперимента: попробуй свой склад тупо достать из Аналитики через точку
26 Zombi
 
21.11.25
11:54
(25) Здесь ключ аналитики это справочник, но все данные хранятся в РС. В самом справочнике реквизитов нет:
AdBlock убивает бесплатный контент. 1Сергей