Имя: Пароль:
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) Здесь ключ аналитики это справочник, но все данные хранятся в РС. В самом справочнике реквизитов нет:
27 RomanYS
 
21.11.25
11:57
(24) ну замени на соединение с РС

"Вот когда соединяю, начинаются чудеса с остатками по дням"
"Чудеса" начинаются когда аналитику из виртуальной таблицы запросил, а вовсе не при соединении.

Если не изучать физику, то мир будет полон чудес)
28 Zombi
 
21.11.25
12:18
Вот 2 запроса и вот 2 разных результата.
(27) Да я уже не из виртуальной таблицы запрашивал. В отдельную вт собирал остатки и соединял с РС с аналитикой.
29 Rovan
 
гуру
21.11.25
12:20
зачем соединение ? вот так нельзя ?
ВЫБРАТЬ
ОстаткиНоменклатурыВСебестоимостиОстаткиИОбороты.АналитикаУчетаНоменклатуры.Склад
...
30 Zombi
 
21.11.25
12:24
(29) Нет. АналитикаУчетаНоменклатуры это измерение - справочник. У него нет реквизитов.
31 Zombi
 
21.11.25
12:26
Вот
32 Zombi
 
21.11.25
12:35
ВЫБРАТЬ
    ОстаткиНоменклатурыВСебестоимостиОстаткиИОбороты.СтоимостьКонечныйОстаток КАК Себестоимость,
    ОстаткиНоменклатурыВСебестоимостиОстаткиИОбороты.Период КАК Период,
    ОстаткиНоменклатурыВСебестоимостиОстаткиИОбороты.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
ПОМЕСТИТЬ вт_Остатки
ИЗ
    РегистрНакопления.ОстаткиНоменклатурыВСебестоимости.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ОстаткиНоменклатурыВСебестоимостиОстаткиИОбороты
;

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

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

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

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

Вот так уже делал. Все равно не так. Период с 10 по 16, 10 правильный остаток, 16 правильный, остальные дни неправильный. Период делаю с 11 по 16, правильными становятся 11 и 16, остальные нет.
33 Timon1405
 
21.11.25
12:51
(30)(31) бред пишете, а скрин из расширения какой-то стоит. или фильтр вверху в дереве конфигуратора наложен.
реквизиты в справочнике есть, а РС рядом такой же сделан потому в справочнике нет составного индекса по 2+ реквизитам сразу, а в РС есть. с появлением в 27 версии(не помню точно в какой) платформенных составных индексов от таких РС разработчики типовых постепенно должны начать избавляться.
34 Zombi
 
21.11.25
13:20
(33) Заняться мне больше нечем, ставить фильтры и скриншоты из расширений слать. Это не расширение и фильтров нет:
35 СвинТуз
 
21.11.25
13:30
.ОстаткиИОбороты(, , День, ДвиженияИГраницыПериода, )
36 Ненавижу 1С
 
гуру
21.11.25
13:54
как-то так:

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

Выбрать
СУММА(Себестоимость),
Период,
АналитикаУчетаНоменклатуры.Склад КАК Склад
ИЗ ТЗ
СГРУППИРОВАТЬ ПО Период, АналитикаУчетаНоменклатуры.Склад
37 RomanYS
 
21.11.25
13:56
(35) Это только добавит записи на границы периодов. Проблему не решит.
Что случилось то? Спустя 20+ лет одинесники разучились РН пользоваться. Это же даже не тема УФ. Народ с клюшек начал переходить?
38 RomanYS
 
21.11.25
13:59
(28) Всё правильно: ты запросил у виртуальной таблицы аналитику (в соединении - но это не важно) и она ВТ тебе выдала остатки по аналитикам
39 Zombi
 
21.11.25
14:18
(36) Так не сработает. у меня в "АналитикаУчетаНоменклатуры" нету "Склад"
40 Zombi
 
21.11.25
14:20
(38) Ну я уже пробовал не с ВТ соединять. Помещал в таблицу и с ней соединял. Все равно не так.
41 Timon1405
 
21.11.25
14:25
(34) понятно, запишем в блокнот "разработчики ДАЛИОН ТРЕНД не разобрались как работают ключи в типовых"
Так тоже не работает?
  ВЫБРАТЬ
    ОстаткиНоменклатурыВСебестоимостиОстаткиИОбороты.СтоимостьКонечныйОстаток КАК Себестоимость,
    ОстаткиНоменклатурыВСебестоимостиОстаткиИОбороты.Период КАК Период,
    АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
    Поместить Т
ИЗ
    РегистрНакопления.ОстаткиНоменклатурыВСебестоимости.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ОстаткиНоменклатурыВСебестоимостиОстаткиИОбороты
    ;
    Выбрать
    АналитикаУчетаНоменклатурыСБ.Склад,
    Сумма(Т.Себестоимость),
    Т.Период
    ИЗ Т как Т
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатурыСБ
        ПО Т.АналитикаУчетаНоменклатуры = АналитикаУчетаНоменклатурыСБ.КлючАналитики
СГРУППИРОВАТЬ ПО
    Т.Период,
    АналитикаУчетаНоменклатурыСБ.Склад
42 RomanYS
 
21.11.25
14:33
(40) возьми (23) и добавь соединение с РС ключей в последнем запросе. Делов даже не на 5 минут
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн