Остатки на каждый день в запросе

06.12.16

Учетные задачи - Логистика, склад и ТМЦ

Запрос формирует остатки товаров на каждый день в пределах выбранного периода.

Скачать файлы

Наименование Файл Версия Размер
ОстаткиНаКаждыйДень
.epf 7,82Kb
29
.epf 7,82Kb 29 Скачать

Цель статьи - представить простой и удобочитаемый запрос формирующий остатки на каждый день в пределах выбранного периода, Вначале для этой цели предполагалось использовать запрос на основе генерации числовой последовательности и последовательности дат (подробнее здесь), однако благодаря трудам пользователя lidarovich был найден более оптимальный способ получения остатков. 

Обращаю внимание на то, что для работы данного запроса должен использоваться регистр сведений РегламентированныйПроизводственныйКалендарь. Даже если он не используется в организации, в нём должна быть хотя бы одна запись. Если записей нет, то их можно создать.

Полный код запроса

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

Еще раз следует подчеркнуть что особенностью данного запроса, на взгляд автора, является его простота и ненагруженность в сравнении со схожими запросами (к примеру из следующей статьи).

Буду рад конструктивной критике в комментариях, а также предложениям по улучшению запроса.

Остатки остатков запрос запросом товара товар товаров каждый на день получение по каждому дню продукта продукции

См. также

SALE! 15%

Автоматический заказ поставщику в 1С: загрузка прайсов и анализ цен поставщиков для УТ 10.3, УТ 11, КА2, УНФ, УПП, ERP, Розница 2

Бюджетирование и планирование Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Анализ продаж Платформа 1С v7.7 Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Система управления запасами для 1С помогает работать с запасами правильно: автоматически рассчитывает потребность и делает заказ поставщику, загружает прайсы, перемещает товары по филиалам, анализирует продажи и позволяет управлять ассортиментом.

33529 28500 руб.

21.04.2017    89865    105    39    

188

Модуль "Ответственное хранение" или фулфилмент (FBS / FBO) для 1С:УТ 11.5, КА 2.5, ERP 2.5

Логистика, склад и ТМЦ Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Модуль "Ответственное хранение" для 1С (УТ 11.5, КА 2.5, ERP 2.5) позволяет организовать учет ответственного хранения товаров с весовыми характеристиками, в том числе со сроком годности и личным кабинетом Поклажедателя. Модуль реализован в виде расширения конфигурации, устанавливается в режиме 1С:Предприятие 8 за 5 минут по инструкции, что позволяет оставить конфигурацию 1С на стандартной поддержке и продолжать получать стандартные обновления от фирмы "1С".

60000 руб.

09.06.2020    34048    27    57    

54

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 руб.

29.10.2014    209830    620    524    

438

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150385    365    375    

499

AS WMS: автоматизация склада с адресным хранением с помощью ТСД

Логистика, склад и ТМЦ Платформа 1С v8.3 Россия Платные (руб)

Подсистема управления складом AS WMS для конфигураций на платформе 1С 8. AS WMS – готовое решение для эффективного управления адресным складом. Внедрение системы AS WMS способствует быстрому отбору товара, ускорению инвентаризации, снижению зависимости от персонала, исключению пересорта. AS WMS встраивается в любую конфигурацию на платформе 1С 8 и работает как единая система без обменов. В учетной системе нет необходимости менять процессы под AS WMS (например, вводить ордерную схему), AS WMS использует стандартные документы по товародвижению вашей учетной системы.

40000 руб.

26.07.2023    3081    13    0    

8

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11 / КА 2 / ERP 2. Переносятся документы, справочники и остатки

Обмен между базами 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3 на УТ 11 / КА 2 / ERP 2. Перенос данных находится в продаже с 2015 года, постоянно развивается, им воспользовались уже более 240 компаний. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

50722 45650 руб.

24.04.2015    190292    268    238    

268
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. lrs 27 27.04.16 16:15 Сейчас в теме
Указанный запрос не работает!
Виртуальную таблицу Остатков и оборотов Вы дополняете отсутствующими датами, но остатки на эти даты не дополняете!! Переделывайте)
2. arakelyan 468 27.04.16 23:39 Сейчас в теме
(1) lrs, Благодарю за комментарий. Скажите пожалуйста в какой конфигурации Вы использовали запрос? Мне очень интересна причина, по которой запрос у Вас не работает, но у меня пока недостаточно информации чтобы её понять. За прикрепленные снимки экрана тройная благодарность.
3. lrs 27 28.04.16 11:02 Сейчас в теме
Все очевидно, вы соединяете таблицы по дате, но за даты, за которые не было движений остаток отсутствует, поэтому в итоговой таблице у вас дырки (т.е. по сути нулевые остатки, которые на самом деле не нулевые)
Для примера смотрите картинку, где слева ведомомсть по товарам на складах с разворотом по дням, а справа итог выполнения вашего запроса. (например, 2,3го числа конечный остаток соответствует остатку за 1е число, но ваша таблица показывает 0 за эти дни...)
PS. Чтоб быстрее разобраться, сделайте отбор по одной номенклатуре, по одному складу. И выберите ту позицию для анализа, по которой хотябы один день не было движений.
Прикрепленные файлы:
4. arakelyan 468 28.04.16 12:31 Сейчас в теме
(3) lrs, понял что Вы имели в виду. Когда тестировал у себя такой проблемы не возникало. В приложении снимок моей ведомости и консоли, в запросе разумеется ничего не менял. Движение товаров также отсутствует за некоторые даты, но строк со значением NULL не появляется. Благодарю Вас за обратную связь, постараюсь разобраться с данной проблемой.
Прикрепленные файлы:
5. lrs 27 28.04.16 14:55 Сейчас в теме
(4) В итоге вы уже пришли ни к остаткам на каждый день, а просто к виртуальной таблице остатков и оборотов. Вы все дальше от решения поставленной задачи))
Даже на титульной картинке у вас пропущены даты (в основном это выходные), когда не было движений)))
Пропущенных дат в итоговой таблице Вы не видите, потому что делаете отбор по основному поставщику, обращаясь а элементам, которые отсутствуют в построенной таблице, либо перенесите отбор в условия таблицы остатков и оборотов (Вот сюда: РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(КОНЕЦПЕРИОДА(&Дата1), КОНЕЦПЕРИОДА(&Дата2), День, , Номенклатура.ОсновнойПоставщик = &ОсновнойПоставщик)), или уберите его на момент проверки..
6. arakelyan 468 28.04.16 18:49 Сейчас в теме
(5) lrs, запрос был переосмыслен. Новый запрос возвращает остатки на каждый день даже если не было движений.
7. schthaxe 53 27.01.17 01:01 Сейчас в теме
Добрый день! Решил переделать Ваш отчет так чтобы он показывал остатки по взаимозачетам на каждый месяц.
Регистр - ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов, Периодичность - Регистратор.
Таблицу календаря беру Кросс-запросом.
В итоге всё получилось, но выяснился прискорбный глюк, который я не смог устранить -
Были движения по документу на НачалоПериода, то есть КонечныйОстаток и Оборот не равны нулю. То есть допустим НачалоПериода = 01.06.2016 00:00:00, и в точности в это же время прошла оплата по реализации ну скажем за апрель, то есть есть скажем ПКО или платежка за 01.06.2016 00:00:00.
В этом случае у нас получается на 01.06.2016 00:00:00 два остатка которые 1С почему то складывает! Итог получается больше на размер остатка на НачалоПериода! Заставить 1С разделить остатки мне не удалось, поэтому я просто сдвинул НачалоПериода на секунду.
В прикрепленной таблице - пример без группировки на суммы.
Прикрепленные файлы:
Проблема с отчетом.xls
8. arakelyan 468 27.01.17 11:27 Сейчас в теме
(7) Здравствуйте, если Вам не сложно пришлите пожалуйста запрос, который получился в итоге. Я попробую у себя его исполнить и найти причину.
9. schthaxe 53 27.01.17 13:49 Сейчас в теме
|ВЫБРАТЬ
		|	Движения.Контрагент,
		|	Движения.ДоговорКонтрагента,
		|	Движения.ДокументРасчетовСКонтрагентом,
		|	ДНИ.ДатаКалендаря КАК ДатаКалендаря,
		|	СУММА(ВЫБОР
		|			КОГДА Движения.Период <= &НачалоПериода
		|				ТОГДА Движения.СуммаВзаиморасчетовКонечныйОстаток
		|			ИНАЧЕ ВЫБОР
		|					КОГДА Движения.Период <= ДНИ.ДатаКалендаря
		|						ТОГДА Движения.СуммаВзаиморасчетовОборот
		|					ИНАЧЕ 0
		|				КОНЕЦ
		|		КОНЕЦ) КАК СуммаВзаиморасчетовКонечныйОстаток
		|ПОМЕСТИТЬ тВзаиморасчеты
		|ИЗ
		|	ДНИ КАК ДНИ
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , {(ДоговорКонтрагента).*, (Сделка).*, (Контрагент).*, (Организация).*}) КАК Движения
		|		ПО (Движения.Период <= ДНИ.ДатаКалендаря)
		|
		|СГРУППИРОВАТЬ ПО
		|	Движения.Контрагент,
		|	Движения.ДоговорКонтрагента,
		|	ДНИ.ДатаКалендаря,
		|	Движения.ДокументРасчетовСКонтрагентом
		|;

Причина то понятна, я вам ее уже описал. В принципе наверно ее можно как то отфильтровывать отдельным запросом на началопериода... 
вот таким например - если данный запрос не пуст, значит беда.
ВЫБРАТЬ
	Вз.СуммаВзаиморасчетовНачальныйОстаток,
	Вз.СуммаВзаиморасчетовОборот,
	Вз.ДокументРасчетовСКонтрагентом
ИЗ
	РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты(&НачалоПериода, &НачалоПериода, , , ) КАК Вз
ГДЕ
	Вз.СуммаВзаиморасчетовНачальныйОстаток <> 0
	И Вз.СуммаВзаиморасчетовОборот <> 0
Показать
10. arakelyan 468 27.01.17 14:57 Сейчас в теме
(9) Прогнал запрос у себя. Да есть такое дело. Решение Вы уже описали. Если нужны остатки взаиморасчетов по дням например с 2.01.2017 по 1.27.2017 тогда параметр НачалоПериода устанавливаем на конец предыдущего дня, то есть 1.01.2017 23:59:59. В таком случае в результирующей таблице мы будем видеть корректные остатки начиная с 2.01.2017.

Это конечно не глюк, скорее специфика работы системы. Я когда-то разбирался, пытался понять из-за чего так происходит. Если память мне не изменяет, то такое поведение образуется из-за

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

В итоге у меня всё работает правильно и насколько я понял у Вас тоже, верно?
11. schthaxe 53 28.01.17 14:13 Сейчас в теме
Это однозначно глюк и вот почему. есть такое понятие как Граница. первый остаток дается на границу исключая данное время, а второй - включая. Система должна точно определить, если ей дается время - она остаток должна брать либо включая либо исключая, но никак не складывая одно с другим!
К сожалению в данном случае граница в качестве периода мне не подходит, так как с ней не работают запросные функции работы с датами
12. amazonka 25 17.11.17 11:49 Сейчас в теме
13. arakelyan 468 17.11.17 15:17 Сейчас в теме
(12)Не могу не согласиться)
14. palsergeich 16.01.18 23:12 Сейчас в теме
Спрашивают этот запрос на каждом 2м собеседовании. Или его или срез последних на каждый день.
Задача интересная, но чисто с точки зрения алгоритмики.
Но нужно понимать что на подзапросе вылететь в Out of memory - ну очень просто.
А есть еще вопрос со звездочкой: а что делать если нам постоянно надо обращаться к остаткам (оборотам) на каждый день (например реальная задача - план закупок для большой сети который актуализируется чуть ли не раз в 10 минут).
Правильный ответ: Храните их расчитанными. Ибо как не получай эти данные - или запрос в цикле (хардкод в коде, неявные запросы в цикле при помощи СКД) или гигантские промежуточные результаты. Нельзя получить быстро, что не хранится. Да минусы у этого подхода: 1) рост базы 2) отставание актуальности данных на частоту выполнения регламентного задания. Плюс другой - при частом выполнении данного запроса будет очень сильная нагрузка на базу. И если база большая, или не большая, но период большой, то время выполнения данного запроса будет или не удовлетворительным или начнутся технологические проблемы.
Из своей практики: В реальной жизни данный запрос получается объединением данных за прошлые числа из расчитанного регистра и данные вирт таблиц за сегодня. Все работает более чем быстро.
15. Lupeykin 5 26.07.19 07:03 Сейчас в теме
Остаток на каждый месяц по счету 02 для бух корп

ВЫБРАТЬ РАЗЛИЧНЫЕ
	НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.Дата, МЕСЯЦ) КАК Месяц
ПОМЕСТИТЬ ВТКалендарь
ИЗ
	РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
	РегламентированныйПроизводственныйКалендарь.Дата МЕЖДУ &Дата1 И &Дата2
;

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

СГРУППИРОВАТЬ ПО
	ХозрасчетныйОстатки.Организация,
	ХозрасчетныйОстатки.Субконто1,
	ВТКалендарь.Месяц
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ХозрасчетныйОбороты.Период КАК Период,
	ХозрасчетныйОбороты.Субконто1 КАК Субконто1,
	СУММА(ХозрасчетныйОбороты.СуммаОборот) КАК СуммаОборот
ПОМЕСТИТЬ ВтОбороты
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Обороты(&Дата1, &Дата2, Месяц, Счет В ИЕРАРХИИ (&Счет02), , Организация = &Организация, , ) КАК ХозрасчетныйОбороты

СГРУППИРОВАТЬ ПО
	ХозрасчетныйОбороты.Период,
	ХозрасчетныйОбороты.Субконто1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВтОстатки.Месяц КАК Месяц,
	ВтОстатки.СуммаОстатокНаНачало КАК СуммаОстатокНаНачало,
	СУММА(isnull(ВтОбороты.СуммаОборот,0)) КАК СуммаОборот,
	ВтОстатки.Организация КАК Организация,
	ВтОстатки.ОС.код КАК ИнвНомер,
	ВтОстатки.ОС КАК ОС, 
	
	ВтОстатки.СуммаОстатокНаНачало - (СУММА(isnull(ВтОбороты.СуммаОборот,0))*-1) как ОстаточнаяСтоимость
ИЗ
	ВтОстатки КАК ВтОстатки
		ЛЕВОЕ СОЕДИНЕНИЕ ВтОбороты КАК ВтОбороты
		ПО (ВтОстатки.Месяц >= ВтОбороты.Период)
			И (ВтОстатки.ОС = ВтОбороты.Субконто1)
ГДЕ
	ВтОстатки.ОС = &ОС

СГРУППИРОВАТЬ ПО
	ВтОстатки.Месяц,
	ВтОстатки.СуммаОстатокНаНачало,
	ВтОстатки.Организация,
	ВтОстатки.ОС
Показать
28. mikl79 118 29.07.22 11:50 Сейчас в теме
(15)
ВЫБРАТЬ РАЗЛИЧНЫЕ
НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.Дата, МЕСЯЦ) КАК Месяц
ПОМЕСТИТЬ ВТКалендарь
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
РегламентированныйПроизводственныйКалендарь.Дата МЕЖДУ &Дата1 И &Дата2
;

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

СГРУППИРОВАТЬ ПО
ХозрасчетныйОстатки.Организация,
ХозрасчетныйОстатки.Субконто1,
ВТКалендарь.Месяц
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
ХозрасчетныйОбороты.Период КАК Период,
ХозрасчетныйОбороты.Субконто1 КАК Субконто1,
СУММА(ХозрасчетныйОбороты.СуммаОборот) КАК СуммаОборот
ПОМЕСТИТЬ ВтОбороты
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&Дата1, &Дата2, Месяц, Счет В ИЕРАРХИИ (&Счет02), , Организация = &Организация, , ) КАК ХозрасчетныйОбороты

СГРУППИРОВАТЬ ПО
ХозрасчетныйОбороты.Период,
ХозрасчетныйОбороты.Субконто1
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
ВтОстатки.Месяц КАК Месяц,
ВтОстатки.СуммаОстатокНаНачало КАК СуммаОстатокНаНачало,
СУММА(isnull(ВтОбороты.СуммаОборот,0)) КАК СуммаОборот,
ВтОстатки.Организация КАК Организация,
ВтОстатки.ОС.код КАК ИнвНомер,
ВтОстатки.ОС КАК ОС,

ВтОстатки.СуммаОстатокНаНачало - (СУММА(isnull(ВтОбороты.СуммаОборот,0))*-1) как ОстаточнаяСтоимость
ИЗ
ВтОстатки КАК ВтОстатки
ЛЕВОЕ СОЕДИНЕНИЕ ВтОбороты КАК ВтОбороты
ПО (ВтОстатки.Месяц >= ВтОбороты.Период)
И (ВтОстатки.ОС = ВтОбороты.Субконто1)
ГДЕ
ВтОстатки.ОС = &ОС

СГРУППИРОВАТЬ ПО
ВтОстатки.Месяц,
ВтОстатки.СуммаОстатокНаНачало,
ВтОстатки.Организация,
ВтОстатки.ОС
Показать
29. mikl79 118 29.07.22 11:50 Сейчас в теме
(28), некорректно работает!
16. user640247 03.09.19 13:13 Сейчас в теме
спасибо, вроде получилось
17. user1296016 18.10.19 17:20 Сейчас в теме
Для чего конструкция
ВЫБОР
КОГДА Движения.Период <= ДНИ.ДатаКалендаря
ТОГДА Движения.КоличествоОборот
ИНАЧЕ 0
КОНЕЦ

когда соединение идёт
ПО (Движения.Период <= ДНИ.ДатаКалендаря)


Может просто Движения.КоличествоОборот?
18. mih_mah 09.12.19 14:48 Сейчас в теме
Вот простой запрос по взаиморасчетам, все работает как надо
ВЫБРАТЬ РАЗЛИЧНЫЕ
	НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК ПериодРегистрации
ПОМЕСТИТЬ ВТ_Периоды
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаОкончания
;

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

ОБЪЕДИНИТЬ ВСЕ

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

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

СГРУППИРОВАТЬ ПО
	ВТ_Взаиморасчеты.Сотрудник,
	ВТ_Периоды.ПериодРегистрации,
	ВТ_Взаиморасчеты.Подразделение
Показать
19. _df_ 05.11.20 13:23 Сейчас в теме
ни запрос из статьи ни запрос из (18) не работают в случае отсутствия товара на остатках на НачалоПериода, но его появления на остатках потом. Такой возможностью не стоит пренебрегать

вот вроде рабочий запрос
ВЫБРАТЬ
	СпрНоменклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ ТЗНоменклатур
ИЗ
	Справочник.Номенклатура КАК СпрНоменклатура
ГДЕ
	СпрНоменклатура.Ссылка В ИЕРАРХИИ(&Номенклатура)
	И НЕ СпрНоменклатура.ЭтоГруппа
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
ПОМЕСТИТЬ Дни
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &Дата1 И &Дата2
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТЗНоменклатур.Номенклатура,
	Дни.ДатаКалендаря
ПОМЕСТИТЬ НоменклатураИДни
ИЗ
	ТЗНоменклатур КАК ТЗНоменклатур,
	Дни КАК Дни
;

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

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

УПОРЯДОЧИТЬ ПО
	Номенклатура,
	ДатаКалендаря
Показать
user798852; ev-pak; manlak; Ryo3000; AlxPop; ilnurmi; MrFlanker; usercool; user594251_deryabina_ann; LomayaZakat; +10 Ответить
23. alex-pro 04.05.21 00:57 Сейчас в теме
Спасибо, это и искал)
Как починить и так знал, но писать было в лом))
20. improg 568 06.01.21 16:04 Сейчас в теме
21. andrey1508 107 15.03.21 12:25 Сейчас в теме
22. andrey1508 107 15.03.21 12:26 Сейчас в теме
24. user1004898 28 10.06.21 09:27 Сейчас в теме
переписал запрос под свою конфу. в принципе все хорошо.
25. Serg O. 224 23.07.21 17:13 Сейчас в теме
таким же образом (казалось бы!) можно получить и Начальный остаток... и Приход/ Расход
но тут есть свои подводные камни...

1-ый далеко НЕ во всех конфигурациях есть РегистрСведений.РегламентированныйПроизводственныйКалендарь
"легко" заменяем на Таблицу Значений... не забывая определить тип поля и правильно посчитав число нужных дней!

2-ой Совсем не такие условия нужны для Начального остатка... помучаться придётся... чтоб ещё 2-ое условие добавить

3-ий остатки и движения по Товарам на складах (о ужас!) не всегда совпадают с движениями по Партиям товаров на складах, а нам, например, надо сравнивать эти движения с Продажами и Поступлениями!
(при ордерной схеме, как "обычно" и бывает у многих, Закупка и Продажи НЕ совпадают с движением по складу!)

4-ый подводный камень - отрицательный расход - это приход! (как в Бухгалтерии) и так же отрицательный приход - это расход! так надо показывать для Бухгалтерии или в выгрузках для поставщиков...

5-ый подводный камень - отрицательные остатки... их надо исключать...
и записи с нулевыми остатками и движениями 0 0 0 0 записями тоже!

Итоговая функция (рабочая) - получается вот такая (кто с таким столкнётся - оценит)

кто не хочет партии - легко заменить в выборке - ПартииТоваровНаСкладах >> ТоварыНаСкладах
кто не хочет параметр (СтруктураПараметров)
- легко заменить на 3 параметра ( ДатаНач , ДатаКон, Поставщик )
только не забудьте ДатаКон = должна быть на КонецДня()

	
Функция ПолучитьОстаткиИДвиженияПоДням( СтруктураПараметров )
ТЗ = Неопределено;
	сутки = 86400;
	ДатаНач = НачалоДня(СтруктураПараметров.ДатаНач);
	ДатаКон = КонецДня(СтруктураПараметров.ДатаКон);
	Поставщик = СтруктураПараметров.Поставщик; //отбор товаров по Поставщику/Бренду !

	N = ( ДатаКон+1 - ДатаНач )/сутки;  //число суток
	
	табл = новый ТаблицаЗначений;
	КД = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя);
	ОписаниеТиповДата = Новый ОписаниеТипов("Дата", , , КД);
	табл.Колонки.Добавить("ДатаКалендаря", ОписаниеТиповДата );
	для i=0 по N-1 цикл
		стр1 = табл.Добавить();
		стр1.ДатаКалендаря = ДатаНач + i*сутки;
	КонецЦикла;	

Запрос = Новый Запрос;	
Запрос.УстановитьПараметр("ДатаНач", ДатаНач);	
Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
Запрос.УстановитьПараметр("Поставщик", Поставщик);
Запрос.УстановитьПараметр("табл", табл);	

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

|	СУММА(ВЫБОР
|			КОГДА Движения.Период = ДНИ.ДатаКалендаря 
|				ТОГДА выбор когда Движения.КоличествоПриход>0 тогда Движения.КоличествоПриход иначе 0 конец
|					+ выбор когда Движения.КоличествоРасход<0 тогда -Движения.КоличествоРасход иначе 0 конец
|			ИНАЧЕ 0
|		КОНЕЦ) КАК КоличествоПриход,

|	СУММА(ВЫБОР
|			КОГДА Движения.Период = ДНИ.ДатаКалендаря
|				ТОГДА выбор когда Движения.КоличествоПриход<0 тогда -Движения.КоличествоПриход иначе 0 конец
|					+ выбор когда Движения.КоличествоРасход>0 тогда Движения.КоличествоРасход иначе 0 конец
|			ИНАЧЕ 0
|		КОНЕЦ) КАК КоличествоРасход,

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

|ПОМЕСТИТЬ ВТ_ДвиженияТов
|ИЗ
|	Дни КАК ДНИ
|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
|				&ДатаНач,
|				&ДатаКон,
|				День,
|				,
|				Номенклатура.Поставщик = &Поставщик ) КАК Движения
|		ПО ДНИ.ДатаКалендаря >= Движения.Период
|
|СГРУППИРОВАТЬ ПО
|	Движения.Номенклатура,
|	Движения.Номенклатура.Код,
|	ДНИ.ДатаКалендаря" ;
	ТЗ = Запрос.Выполнить().Выгрузить();
	Возврат ТЗ;	
КонецФункции
Показать
user1310411; user682948_rusmaxval; Svb84; franceman; dezzarr; SQV0; dynnikov; AlexKRSN; avgreen; +9 Ответить
27. IronSamael 16.02.22 00:47 Сейчас в теме
(25)
| СУММА(ВЫБОР
| КОГДА Движения.Период = &ДатаНач
| ТОГДА ЕстьNull(Движения.КоличествоКонечныйОстаток,0)
| Иначе выбор КОГДА Движения.Период <= ДНИ.ДатаКалендаря
| ТОГДА Движения.КоличествоОборот
| ИНАЧЕ 0 Конец
| КОНЕЦ) КАК КоличествоКонечныйОстаток



Спасибо большое!
30. dsident 22.09.22 14:10 Сейчас в теме
(25) Низкий Вам поклон, умный человек, условие на начальный/конечный остатки помогло
26. MrFlanker 219 14.12.21 05:09 Сейчас в теме
ВЫБОР 
    КОГДА Движения.Период = &НачалоПериода
    ТОГДА Движения.КоличествоКонечныйОстаток
    ИНАЧЕ ВЫБОР КОГДА Движения.Период <= ДНИ.ДатаКалендаря
        ТОГДА Движения.КоличествоОборот
        ИНАЧЕ 0
    КОНЕЦ
КОНЕЦ
Показать


По моему вторая проверка тут лишняя "ВЫБОР КОГДА Движения.Период <= ДНИ.ДатаКалендаря" всегда ИСТИНА

Тогда можно записать короче
ВЫБОР 
    КОГДА Движения.Период = &НачалоПериода
    ТОГДА Движения.КоличествоКонечныйОстаток
    ИНАЧЕ Движения.КоличествоОборот
КОНЕЦ
31. Stas-ch 35 31.10.22 12:07 Сейчас в теме
(26) А если Движение.Период = null?
32. FlySphinx 21.12.22 14:59 Сейчас в теме
Вообще для этих целей есть и штатные средства, без дополнительных регистров сведений.

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


2. Если это запрос для СКД, то в настройках полей группировки СКД следует использовать дополнение периодами "ТипДополненияПериодаКомпоновкиДанных.День"
Вот тут на ИТС есть статься на эту тему Дополнение периодов в СКД
есть правда и нюансы: в самом запросе нужно выбрать не только конечный остаток, но и начальный и оборот, в "наборе данных СКД" для полей Начальный и Конечный Остаток нужно в Роли указать Роль - "Остатки" с типом Начальный и Конечный остаток соответственно, а также для обеих полей там же в Роли задать одинаковое имя.
siamagic; +1 Ответить
33. siamagic 15.03.23 13:53 Сейчас в теме
(32) Тоже сижу офигеваю сколько статей комментов на очевидно решение.
37. dezzarr 5 10.05.23 16:23 Сейчас в теме
(33) Потому что это очевидное решение не подходит для поставленной задачи. Если по товару в какой-то день не было движений, то не будет и строки в таблице.
34. dgonson 177 16.03.23 12:44 Сейчас в теме
Тот же запрос, но без календаря

ВЫБРАТЬ
	0 КАК День
ПОМЕСТИТЬ втКоличествоДней

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	9

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	10
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	втКоличествоДней3.День * 1000 + втКоличествоДней2.День * 100 + втКоличествоДней1.День * 10 + втКоличествоДней.День КАК ПорядокДней
ПОМЕСТИТЬ втСписокДней
ИЗ
	втКоличествоДней КАК втКоличествоДней,
	втКоличествоДней КАК втКоличествоДней1,
	втКоличествоДней КАК втКоличествоДней2,
	втКоличествоДней КАК втКоличествоДней3
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	втСписокДней.ПорядокДней КАК ПорядокДней,
	ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, втСписокДней.ПорядокДней) КАК ДатаКалендаря
ПОМЕСТИТЬ Дни
ИЗ
	втСписокДней КАК втСписокДней
ГДЕ
	втСписокДней.ПорядокДней <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;

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

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

УПОРЯДОЧИТЬ ПО
	Номенклатура,
	ДатаКалендаря
Показать
35. Moto45 2 19.03.23 15:27 Сейчас в теме
(32) Все равно не выходят остатки на каждый день, а только за те дни, когда есть обороты/
Запрос:
ВЫБРАТЬ
	ОтложенныеКурсовыеРазницыОстаткиИОбороты.Период КАК Период,
	ОтложенныеКурсовыеРазницыОстаткиИОбороты.РасходНачальныйОстаток КАК РасходНачальныйОстаток,
	ОтложенныеКурсовыеРазницыОстаткиИОбороты.РасходКонечныйОстаток КАК РасходКонечныйОстаток,
	ОтложенныеКурсовыеРазницыОстаткиИОбороты.РасходОборот КАК РасходОборот
ИЗ
	РегистрНакопления.ОтложенныеКурсовыеРазницы.ОстаткиИОбороты(&Дата1, &Дата2, День, ДвиженияИГраницыПериода, ) КАК ОтложенныеКурсовыеРазницыОстаткиИОбороты
ИТОГИ
	СУММА(РасходКонечныйОстаток)
ПО
	Период ПЕРИОДАМИ(ДЕНЬ, &Дата1, &Дата2)
Показать


Результат:
Прикрепленные файлы:
36. Moto45 2 19.03.23 15:39 Сейчас в теме
(35) А нет, виноват. Их просто в консоли не видно, потому что:
Заметим, что так как для дополненных периодов в результате запроса отсутствуют детальные записи, то дополненные записи будут получаться из выборки только в том случае, если при обходе выборки будут получаться все периоды, участвующие в запросе, что достигается установкой третьего параметра функции "Выбрать" результата запроса.


https://its.1c.ru/db/metod8dev/content/2660/hdoc
Оставьте свое сообщение