Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Распределение по партиям


Автор: wwall 9.11.2006, 19:32
Есть 3 таблицы
ПартияОстатки (КодТовара,КодПартии,Количество,СумммаЗакупа,СуммаПродажи)
ПартияДвижения
(КодТовара,КодПартии,Количество,СумммаЗакупа,СуммаПродажи)
и ТаблицаРасходнаяНакладная
(КодТовара, Количество,Сумма)


заполненены примерно так

ПартияОстатки 
КодТовара,КодПартии,Количество,СумммаЗакупа,СуммаПродажи
 1,         1,         2,          5,          0
 1,         2,         5,          20,         0

ТаблицаРасходнаяНакладная
КодТовара, Количество,Сумма
 1,          6,          100

Надо провести в Партии так

ПартияДвижения
КодТовара,КодПартии,Количество,СумммаЗакупа,СуммаПродажи
 1,          1,       2,             5,         (100/6)*2
 1,          2,       4,             (20/5)*4,  (100/6)*4

У меня только одна мысль - бежать по курсору. Но можно ли это сделать одним запросом? или нет? Если можно то как?

Автор: programador 10.11.2006, 00:06
Поправь меня, если ошибаюсь, но это не "чистая" MS SQL задача, смахивает на 1С. В последней не имеет принципиального значения SQL-версия это или нет. Важнее другое - про какие таблицы идет речь - "документы", "регистры" и пр.. Если я вдруг прав - уточни с какой конфой имеем дело и точную постановку задачи. Если конфа мне знакома без проблем напишу тебе запрос. Хотя, в принципе, из того что я вижу - тут дело не в запросе. Ты похоже пытаешся реализовать списание товара по методу FIFO -списывая товар сначала с более ранней партии, а потом с более поздней. Это можно сделать банальной итерацией с выборкой по партиям: получил очередную партию - проверил сколько осталось списать (больше чем в партии или меньше) - берешь меньшее значение из двух (остаток партии или остаток по списанию) и делаешь проводку по данной партии - уменьшаешь остаток по списанию и так до тех пор пока остаток количества для проведения не будет равен или меньше нуля...

Автор: wwall 10.11.2006, 08:27
Да. Вы правы это 1С. Конфа - торговля самописка. Но это не имееет никакого значение. Интересует решение именно на скуле. Если я правильно понял то нужно использовать курсор? И уже бегая по нему списывать? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)