Можно ли как-то запросом получить корректные начальные и конечные остатки из регистра накопления, если у РН несколько регистраторов, а нужно взять записи, например, только по двум: 1) приобретениеТУ(приход) и 2) реализацияТУ(расход)?
пример:
тек.период:
нач.ост = 0
приход по ПТУ = 10
расход по РТУ =3
кон.ост = 7
остатки на след.период:
нач.ост = 7
приход = 0
расход = 0
кон.ост = 7
т.е. не учитывать записи др.регистраторов - перемещение товаров, возвраты и т.п.
пример:
тек.период:
нач.ост = 0
приход по ПТУ = 10
расход по РТУ =3
кон.ост = 7
остатки на след.период:
нач.ост = 7
приход = 0
расход = 0
кон.ост = 7
т.е. не учитывать записи др.регистраторов - перемещение товаров, возвраты и т.п.
По теме из базы знаний
Найденные решения
(1) Если уж очень хочется, при этом Вы уверены в корректности результата, а на производительность можно не обращать внимание, то просто не используйте виртуальную таблицу итогов, а собирайте данные "вручную":
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ТоварыНаСкладе.Период, МЕСЯЦ) КАК Период,
ТоварыНаСкладе.Склад КАК Склад,
ТоварыНаСкладе.Номенклатура КАК Номенклатура,
СУММА(ВЫБОР
КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ТОГДА ТоварыНаСкладе.Количество
ИНАЧЕ 0
КОНЕЦ) КАК КоличествоПриход,
СУММА(ВЫБОР
КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
ТОГДА ТоварыНаСкладе.Количество
ИНАЧЕ 0
КОНЕЦ) КАК КоличествоРасход,
СУММА(ВЫБОР
КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ТОГДА ТоварыНаСкладе.Количество
ИНАЧЕ -ТоварыНаСкладе.Количество
КОНЕЦ) КАК КоличествоОборот
ПОМЕСТИТЬ ВтВсеОбороты
ИЗ
РегистрНакопления.ТоварыНаСкладе КАК ТоварыНаСкладе
ГДЕ
ТоварыНаСкладе.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
ИЛИ ТоварыНаСкладе.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(ТоварыНаСкладе.Период, МЕСЯЦ),
ТоварыНаСкладе.Склад,
ТоварыНаСкладе.Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыНаСкладе.Период КАК Период,
ТоварыНаСкладе.Склад КАК Склад,
ТоварыНаСкладе.Номенклатура КАК Номенклатура,
ЕСТЬNULL(СУММА(СтарыеОбороты.КоличествоОборот), 0) КАК КоличествоНачальныйОстаток,
ТоварыНаСкладе.КоличествоПриход КАК КоличествоПриход,
ТоварыНаСкладе.КоличествоРасход КАК КоличествоРасход,
ТоварыНаСкладе.КоличествоОборот КАК КоличествоОборот,
ЕСТЬNULL(СУММА(СтарыеОбороты.КоличествоОборот), 0) + ТоварыНаСкладе.КоличествоОборот КАК КоличествоКонечныйОстаток
ИЗ
ВтВсеОбороты КАК ТоварыНаСкладе
ЛЕВОЕ СОЕДИНЕНИЕ ВтВсеОбороты КАК СтарыеОбороты
ПО ТоварыНаСкладе.Период > СтарыеОбороты.Период
И ТоварыНаСкладе.Склад = СтарыеОбороты.Склад
И ТоварыНаСкладе.Номенклатура = СтарыеОбороты.Номенклатура
ГДЕ
ТоварыНаСкладе.Период МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО
ТоварыНаСкладе.Период,
ТоварыНаСкладе.Склад,
ТоварыНаСкладе.Номенклатура,
ТоварыНаСкладе.КоличествоПриход,
ТоварыНаСкладе.КоличествоРасход,
ТоварыНаСкладе.КоличествоОборот
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Если уж очень хочется, при этом Вы уверены в корректности результата, а на производительность можно не обращать внимание, то просто не используйте виртуальную таблицу итогов, а собирайте данные "вручную":
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ТоварыНаСкладе.Период, МЕСЯЦ) КАК Период,
ТоварыНаСкладе.Склад КАК Склад,
ТоварыНаСкладе.Номенклатура КАК Номенклатура,
СУММА(ВЫБОР
КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ТОГДА ТоварыНаСкладе.Количество
ИНАЧЕ 0
КОНЕЦ) КАК КоличествоПриход,
СУММА(ВЫБОР
КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
ТОГДА ТоварыНаСкладе.Количество
ИНАЧЕ 0
КОНЕЦ) КАК КоличествоРасход,
СУММА(ВЫБОР
КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ТОГДА ТоварыНаСкладе.Количество
ИНАЧЕ -ТоварыНаСкладе.Количество
КОНЕЦ) КАК КоличествоОборот
ПОМЕСТИТЬ ВтВсеОбороты
ИЗ
РегистрНакопления.ТоварыНаСкладе КАК ТоварыНаСкладе
ГДЕ
ТоварыНаСкладе.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
ИЛИ ТоварыНаСкладе.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(ТоварыНаСкладе.Период, МЕСЯЦ),
ТоварыНаСкладе.Склад,
ТоварыНаСкладе.Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыНаСкладе.Период КАК Период,
ТоварыНаСкладе.Склад КАК Склад,
ТоварыНаСкладе.Номенклатура КАК Номенклатура,
ЕСТЬNULL(СУММА(СтарыеОбороты.КоличествоОборот), 0) КАК КоличествоНачальныйОстаток,
ТоварыНаСкладе.КоличествоПриход КАК КоличествоПриход,
ТоварыНаСкладе.КоличествоРасход КАК КоличествоРасход,
ТоварыНаСкладе.КоличествоОборот КАК КоличествоОборот,
ЕСТЬNULL(СУММА(СтарыеОбороты.КоличествоОборот), 0) + ТоварыНаСкладе.КоличествоОборот КАК КоличествоКонечныйОстаток
ИЗ
ВтВсеОбороты КАК ТоварыНаСкладе
ЛЕВОЕ СОЕДИНЕНИЕ ВтВсеОбороты КАК СтарыеОбороты
ПО ТоварыНаСкладе.Период > СтарыеОбороты.Период
И ТоварыНаСкладе.Склад = СтарыеОбороты.Склад
И ТоварыНаСкладе.Номенклатура = СтарыеОбороты.Номенклатура
ГДЕ
ТоварыНаСкладе.Период МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО
ТоварыНаСкладе.Период,
ТоварыНаСкладе.Склад,
ТоварыНаСкладе.Номенклатура,
ТоварыНаСкладе.КоличествоПриход,
ТоварыНаСкладе.КоличествоРасход,
ТоварыНаСкладе.КоличествоОборот
Показать
это делал, только если были приходы - расходы по др.регистраторам , то они тоже отражаются по строке , например :
когда-то был приход по перемещениям =10.
тогда если отбор сделать по ПТУ будет:
нач.ост = 10
приход ПТУ = 10
расход РТУ = 3
кон.ост = 17
а такой результат мне не нужен.
когда-то был приход по перемещениям =10.
тогда если отбор сделать по ПТУ будет:
нач.ост = 10
приход ПТУ = 10
расход РТУ = 3
кон.ост = 17
а такой результат мне не нужен.
(3) это только если заморочиться или в запросе или уже после результаты запроса пересчитать для каждой строки
по условию регистратора
если регистратор такой-то то начальный\конечный остаток = начальный\конечный остаток минус\плюс приход\расход (в зависимости от движения по регистратору)
тогда получите, что хотите
по условию регистратора
если регистратор такой-то то начальный\конечный остаток = начальный\конечный остаток минус\плюс приход\расход (в зависимости от движения по регистратору)
тогда получите, что хотите
(6) ЕСТЬNULL(СУММА(СтарыеОбороты.КоличествоОборот), 0) КАК КоличествоНачальныйОстаток
приравнивает начальный остаток к нулю, однако, в общем случае, это совершенно нет так.
Или в качестве начала периода нужно использовать ДАТАВРЕМЯ(1,1,1) и тащить абсолютно все записи регистра.
приравнивает начальный остаток к нулю, однако, в общем случае, это совершенно нет так.
Или в качестве начала периода нужно использовать ДАТАВРЕМЯ(1,1,1) и тащить абсолютно все записи регистра.
Можно еще выбирать колонки количество и сумма в приходных, расходных накладных, перемещениях и списаниях, только отчеты при записи документов будут притормаживать.
А если в качестве начального остатка в произвольный момент времени брать ближайший пересчет остатков (инвентаризацию), и данные суммировать с этого момента, то при работе бухгалтера ничего не летит и не ломается.
Но отчеты по движениям на складе выглядеть будут немного экзотически.
И еще остатки от инвентаризации до инвентаризации (а не от даты до даты) были бы логичным продолжением времени документа в 8ке, но обычно их пишут с начала дня по конец дня и это не совсем то, что ожидается.
А если в качестве начального остатка в произвольный момент времени брать ближайший пересчет остатков (инвентаризацию), и данные суммировать с этого момента, то при работе бухгалтера ничего не летит и не ломается.
Но отчеты по движениям на складе выглядеть будут немного экзотически.
И еще остатки от инвентаризации до инвентаризации (а не от даты до даты) были бы логичным продолжением времени документа в 8ке, но обычно их пишут с начала дня по конец дня и это не совсем то, что ожидается.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот