Показать сообщение отдельно
Старый 08.02.2011, 19:16   #5  
Индра is offline
Индра
Участник
 
56 / 59 (2) ++++
Регистрация: 31.05.2008
Адрес: СССР
Не знаю, может не в тему. Была у меня частная задача - в отчете посчитать плановую себестоимость продукции, когда известна покупная цена сырья. Реализовал целиком на SQL в одной хранимой процедуре. Несмотря на поддержку рекурсии в SQL, я от нее отказался - ведь не было задачи получить список сырья, надо было получить только цифру стоимости. Сделал так - выгрузил все (то есть вообще все) строки BOM во временную таблицу, добавив служебные поля, и запустил итеративный цикл вычисления себестоимости ГП/ПФ на основании строк (при условии что все строки имеют непустую себестоимость). При первом проходе стоимость могли получить только ПФ 1-го уровня, при втором проходе - ПФ 2-го уровня, и так далее. Цикл останавливался, когда очередная итерация не производила ни одного update - это означало что все, что можно вычислить - вычислено. Далее из полного массива ГП выбирал только интересующие позиции (в моем случае join с прогнозом продаж). На объеме порядка 20 000 строк BOM, расчет выполялся считанные секунды. Еще раз убедился, что итерации с последовательным приближением - быстрее рекурсии, да и по вычислительным ресурсам более прогнозируемо. Если кому интересно - могу подарить расчет. Там еще учитывались технологические отходы, потери сырья, и вторым проходом распределялись FIC - тоже в SQL. В итоге получались несколько составляющих себестоимости - материальная и полная. Конечно, код немного специфичен для заказчика, и поскольку полностью отсутствуют циклы по курсорам (все реализовано матричными операциями на чистом SQL), код не вполне очевиден, зато фантастически быстр. Я люблю SQL...

Последний раз редактировалось Индра; 08.02.2011 в 19:35.