| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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С. Конфа - торговля самописка. Но это не имееет никакого значение. Интересует решение именно на скуле. Если я правильно понял то нужно использовать курсор? И уже бегая по нему списывать? |