Остатки На Произвольную Дату

Allexei

Well-Known Member
02.05.2008
322
1
#1
Здравствуйте.Вопрос такой. У меня есть документ заказа клиента. В ТЧ документа для каждого товара ставятся даты отгрузки. Вариант контроля остатков по складу - просто остатки, без резервов и графиков движений. Так вот вопрос как одним запросом(запрос в цикле не предлагать) получить срез остатков по товарам в ТЧ и датам их отгрузки?
 

puh14

Well-Known Member
11.07.2008
1 412
0
#3
Ну из разряда извращений - пожалуйста. Загоняем наш фильтр по товарам (или партиям) и датам отгрузки в временную таблицу (назовем её первая) - она будет нужна для кейсов в запросах. Берем виртуальную таблицу остатков и вычисляем начальные остатки на минимальную дату отгрузки по всем позициям из первой таблицы, помещяем результат в времянку под названием вторая. Берем виртуальную таблицу оборотов и вычисляем обороты по позициям из первой таблицы. Параметры начала / конца периода - минимальная/максимальная дата отгрузки соответственно, тут же можно добавить условие на дату в джойне, типа Первая.Номенклатура = Обороты.Номенклатура и Первая.Датаотгрузки >= Обороты.Период.
также тут можно уже выдать приход как например Сумма(Сумма(Количествоприход) - Сумма(КоличествоРасход)) Как Полныйприход.

Что получаем в итоге?
нас интересуют две таблицы - в одной начальные остатки по нужным позициям, во второй - обороты за период с отсечкой по дате отгрузки для позиции по нужным позициям. Джойним или объединяем их, суммируем по номенклатуре и вуоля.

апдейт - туплю, первую таблицу проще получить запросом из документа, чем с менеджером мучаться.
 

Allexei

Well-Known Member
02.05.2008
322
1
#4
Извиняюсь за тупизм, но все же...

-Берем виртуальную таблицу остатков и вычисляем начальные остатки на минимальную дату отгрузки по всем позициям из первой таблицы
Минимальную дату передаем в запрос как параметр?

Параметры начала / конца периода - минимальная/максимальная дата отгрузки
максимальная дата отгрузки это есть максимальная дата по все таблице документа?

А так идея понятна. Огромный плюс, и респект!
 

Allexei

Well-Known Member
02.05.2008
322
1
#5
зы
Запрос получился такой:
Код:
ВЫБРАТЬ
ЗаказКлиентаТовары.Склад,
ЗаказКлиентаТовары.Номенклатура,
ЗаказКлиентаТовары.ДатаОтгрузки
ПОМЕСТИТЬ ТоварыПоЗаказу
ИЗ
Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
ГДЕ
ЗаказКлиентаТовары.Ссылка = &ЗаказКлиента
;

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

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

СГРУППИРОВАТЬ ПО
ТоварыПоЗаказу.Склад,
ТоварыПоЗаказу.Номенклатура
;

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

Darlock

Well-Known Member
04.01.2008
560
1
#6
Комрады, а не проще ли собрать текст запроса динамически, обходя циклом всю ТЧ? Т.е. пускаем цикл по ТЧ, в конструкторе собираем шапку запроса, а в теле цикла добавляем необходимы е нам поля ручками, попутно указывая параметр и значение параметра. Посе цикла весь полученый текст пихаем в текст запроса и выполняем.
 

Allexei

Well-Known Member
02.05.2008
322
1
#7
Не, не не. "Шурик, это не наш метод". Задачка как раз и состоит в том что бы сделать это одним запросом ибо на СКД. А формировать в ручную для СКД текст запроса это долго и не интересно.
 

Darlock

Well-Known Member
04.01.2008
560
1
#8
Не, не не. "Шурик, это не наш метод". Задачка как раз и состоит в том что бы сделать это одним запросом ибо на СКД. А формировать в ручную для СКД текст запроса это долго и не интересно.
Классная формулировка...надо взять на вооружение :offtop: а если серьезно.... тогда только вложенные запросы могут помочь, и соединять их с регистром остатков
 

Allexei

Well-Known Member
02.05.2008
322
1
#9
Задачка решена.Запрос выложен выше.Все работает.Все счастливы.Спасибо всем :offtop: