Страницы: 1
RSS
FIFO. Расчет стоимости остатка товара на складе (условие скорректировано)
 
Задача  посчитать остатки товара по каждому виду на текущую дату при этом цена продажи (операция продажа) не имеет никакого значения, списывается в данном случае товар по цене первого по времени прихода , пока он не кончится , потом вторго и т.д. В результате надо посчитать кол-во единиц остатка и их общую себестоимость на Дату.
 
Господа спецы помогите девушке плиз , тут похоже макрос нужен формулами у меня не получается.
 
Господа специалисты, срочно нужна ваша помощь в решении этого вопроса.
 
{quote}{login=The_Prist}{date=26.02.2009 02:07}{thema=}{post}Написал функцию(FIFO). В файле описано подробней. Будут вопросы - пишите.{/post}{/quote}  
Ага а как стоимость остатка товара на складе подсчитать? Красненькие столбцы?
 
{quote}{login=The_Prist}{date=26.02.2009 02:23}{thema=}{post}Я именно над этим сейчас работаю. Не совсем понял как именно подсчитывать...{/post}{/quote}  
Насколько я понимаю метод ФИФО первым уходит товар который первым поступил , соответственно расход минусует первое поступление до 0, и переходит к следующему товар Б на 6/10 это 1 по 3 (4-3 продали) + 1 по 2 итого на  5 рублей товара . Пример не очень уудачный .. мне просто эта тема очень интересна
 
{quote}{login=The_Prist}{date=26.02.2009 02:23}{thema=}{post}Я именно над этим сейчас работаю. Не совсем понял как именно подсчитывать...{/post}{/quote  
 
Большое Вам спасибо, но мне необходимо подсчитать стоимость остатка на конец каждого дня. Стоимость расчитывается по методу FIFO - First In First Out.  
Т.е. необходимо автоматизировать "Очередь", а именно: при реализации конкретного наименования товара, со склада списывается товар первый поступивший товар, потом второй и т.д.
 
{quote}{login=The_Prist}{date=26.02.2009 02:07}{thema=}{post}Написал функцию(FIFO). В файле описано подробней. Будут вопросы - пишите.{/post}{/quote}  
 
Уважаемый Прайст, Вы все же поможете мне решить задачу по определению стоимости?    
Мне очень, очень, очень нужно.
 
{quote}{login=The_Prist}{date=26.02.2009 04:46}{thema=}{post}Вот. Условия те же. Добавил функцию подсчета сумм. Проверяйте.{/post}{/quote}  
Блеск вс е точно по моему а можно дин диапазоны использовать в ней или только абсолютные ссылки ?
 
{quote}{login=The_Prist}{date=26.02.2009 04:57}{thema=}{post}Пробуйте, как и с любой функцией должно получиться - но...{/post}{/quote}  
получилось с динамическим тоже спасибо ... надо зарегистрировать Ваше ноу хау.
 
{quote}{login=The_Prist}{date=26.02.2009 04:46}{thema=}{post}Вот. Условия те же. Добавил функцию подсчета сумм. Проверяйте.{/post}{/quote}  
Не логика не та не работает функция она должна списывать по цене закупки а не продажи... минусов не должно быть
 
{quote}{login=The_Prist}{date=26.02.2009 06:00}{thema=}{post}Микки - ты за проверяющего. Давай ломай дальше функцию, ищи косяки. :-){/post}{/quote}  
мне просто самому это нужно позарез .. теперь похоже все так.. но как это сделано...Спасибо .. дама сама скажет надеюсью.
 
{quote}{login=The_Prist}{date=26.02.2009 06:00}{thema=}{post}Микки - ты за проверяющего. Давай ломай дальше функцию, ищи косяки. :-){/post}{/quote}  
не опять сломал все ... по товару А
 
Имхо, но надо просто делать доп столбец и потихонько макросом "списывать" остатки, в верхней строчке. Возможно, как только остаток =0, строку можно в архив, на другой лист. А в конце дня просто сводной остаток на дату снимать. Как только будет пропуск - можно косячок получить.
 
{quote}{login=The_Prist}{date=26.02.2009 06:00}{thema=}{post}Микки - ты за проверяющего. Давай ломай дальше функцию, ищи косяки. :-){/post}{/quote}  
А-а-а сказали архангельские лесорубы (анекдот) ..Вас видимо путает цена продажи на мой взгляд она просто лишняя тут .. ффактически это должна быть цена списания товар по пресловутому ФИФО.
 
{quote}{login=Микки}{date=27.02.2009 09:18}{thema=Re: }{post}{quote}{login=The_Prist}{date=26.02.2009 06:00}{thema=}{post}Микки - ты за проверяющего. Давай ломай дальше функцию, ищи косяки. :-){/post}{/quote}  
А-а-а сказали архангельские лесорубы (анекдот) ..Вас видимо путает цена продажи на мой взгляд она просто лишняя тут .. ффактически это должна быть цена списания товар по пресловутому ФИФО.{/post}{/quote}  
 
Я на цену продажи даже не обращаю внимания. Просто надо попробовать учесть все варианты.
 
Всем большое спасибо за участие в решении моей проблемы. Но все же очень хочется достичь правильного результата. Это возможно?
 
{quote}{login=Stepa}{date=27.02.2009 09:27}{thema=}{post}Всем большое спасибо за участие в решении моей проблемы. Но все же очень хочется достичь правильного результата. Это возможно?{/post}{/quote}  
 
Щаз именно над этим работаю.  
Присоединяйтесь к выявлению и решению проблем.
 
{quote}{login=}{date=27.02.2009 09:48}{thema=Re: }{post}{quote}{login=Stepa}{date=27.02.2009 09:27}{thema=}{post}Всем большое спасибо за участие в решении моей проблемы. Но все же очень хочется достичь правильного результата. Это возможно?{/post}{/quote}  
 
Щаз именно над этим работаю.  
Присоединяйтесь к выявлению и решению проблем.{/post}{/quote}  
 
Дальше написания формулы по расчету количества у меня дело не пошло, потому надеюсь на Вас.
 
{quote}{login=The_Prist}{date=27.02.2009 01:11}{thema=Re: }{post}{quote}{login=The_Prist}{date=27.02.2009 01:09}{thema=}{post}Очередная доработка.{/post}{/quote}  
 
Я еще критерий добавил - Qantity: Количество оставшегося товара.  
Выбрать кол-во товара, рассчитанного функцией FIFO_Count.{/post}{/quote}  
 
Ураа, большое спасибо. Смотрю.
 
{quote}{login=The_Prist}{date=27.02.2009 01:11}{thema=Re: }{post}{quote}{login=The_Prist}{date=27.02.2009 01:09}{thema=}{post}Очередная доработка.{/post}{/quote}  
 
Я еще критерий добавил - Qantity: Количество оставшегося товара.  
Выбрать кол-во товара, рассчитанного функцией FIFO_Count.{/post}{/quote}  
Ур-р-рр-а заработало Прайст вы гений.... но формула не персчитывается при обновленни данных надо протягивать это почемУ?
 
{quote}{login=The_Prist}{date=27.02.2009 01:11}{thema=Re: }{post}{quote}{login=The_Prist}{date=27.02.2009 01:09}{thema=}{post}Очередная доработка.{/post}{/quote}  
 
Я еще критерий добавил - Qantity: Количество оставшегося товара.  
Выбрать кол-во товара, рассчитанного функцией FIFO_Count.{/post}{/quote}  
 
Prist, скажите, пожалуйста, почему не меняется кол-во и соответственно стоимость если я меняю кол-во в основной таблице?
 
{quote}{login=The_Prist}{date=27.02.2009 01:35}{thema=}{post}Особенность пользовательских функций. Не всегда рассчитываются автоматом. Просто скопируйте формулу в одной ячейке и протяните по всем. Они пересчитаются.{/post}{/quote}  
 
Ага, поняла. Вобщем все просто супер! Буду пользовать. Еще раз спасибо.
 
Чтобы пересчитывались ячейки, от которых зависит результат, достаточно в декларации функции добавить последний виртуальный параметр ParamArray Dependences():  
 
Function FIFO_Count(MyDate, Criteria, DateRange, ParamArray Dependences())  
'... (все что было раньше)  
End Function  
 
Function FIFO_Summ(MyDate, Criteria, DateRange, Qantity, ParamArray Dependences())  
'... (все что было раньше)  
End Function  
 
А в вызове функции добавить диапазоны ячеек, изменения которых должны вызывать пересчет функции.  
 
Например, так можно добавить автопересчет при изменении ячеек номенклатуры и количества С3:D10:  
=FIFO_Count(H3;$I$1;$A$3:$A$10;С3:D10)  
или так:  
=FIFO_Count(H3;$I$1;$A$3:$A$10;С3:С10;D3:D10)  
 
А здесь добавлены зависимости диапазона ячеек от номенклатуры C3:C10 до стоимости F3:F10:  
=FIFO_Summ(H3;$I$1;$A$3:$A$10;O3;C3:F10)  
или можно ограничиться только ячейками номенклатуры C3:C10 и стоимости F3:F10:  
=FIFO_Summ(H3;$I$1;$A$3:$A$10;O3;C3:C10;F3:F10)
 
{quote}{login=ZVI}{date=27.02.2009 10:30}{thema=Как добавить автопересчет в пользовательскую функцию}{post}Чтобы пересчитывались ячейки, от которых зависит результат, достаточно в декларации функции добавить последний виртуальный параметр ParamArray Dependences(){/post}{/quote}  
 
Спасибо за полезную (думаю не только мне) информацию!
 
{quote}{login=The_Prist}{date=27.02.2009 01:09}{thema=}{post}Очередная доработка.{/post}{/quote}  
 
Добрый вечер, не могли бы вы пояснить макрос комментариями, что куда и зачем пишется, чтобы понять используемые объекты.  
Спасибо.
 
Господа, искренне благодарю! Разобрался, адаптировал под себя, все отлично. Кроме одного: быстродействие на больших объемах данных оставляет желать лучшего. Подскажите как можно ускорить функцию? Первое, что приходит на ум - это построить логику так, чтобы получать данные в один проход по циклу вместо двух (например использовать массивы). Второе - это вообще отказать от цикла и переходить по артикулам с помощью поиска, например. Насколько это возможно и целесообразно?
 
Т.е. вариант:  
 
В одном цикле проходим по всем записям и сохраняем данные по нужному артикулу в массив. Потом запускаем цикл по массиву.  
 
будет быстрее текущего варианта?  
 
А вариант:  
 
Заменить оба цикла на перебор значений по артикулу с помощью Find.  
 
будет медленнее всех?  
 
Я просто с VBA на Вы, кодить могу, а вот понять на что повлияет выбор того или иного варианта не знаю как. Кодить все варианты, чтобы сравнить не хочется (опять же потому что с VBA на Вы). :)
 
Попробуйте вариант FIFO_Count() на массиве.  
Еще, говорят, для убыстрения кода целесообразно не использовать and при проверке. а делить условия и проверять их по очереди.  
 
Function FIFO_Count(MyDate, Criteria, DateRange As Range)  
   Dim arrDate(), i As Long, arrCriteria(), arrValue()  
   arrDate = DateRange.Value  
   arrCriteria = DateRange.Offset(0, 2).Value  
   arrValue = DateRange.Offset(0, 3).Value  
   iCount = 0  
   For i = 1 To UBound(arrDate)  
       If DateValue(arrDate(i, 1)) <= DateValue(MyDate) Then  
           If Criteria = arrCriteria(i, 1) Then  
               iCount = iCount + arrValue(i, 1)  
           End If  
       End If  
   Next  
   FIFO_Count = iCount  
End Function
Страницы: 1
Читают тему
Наверх