Имя: Пароль:
1C
1С v8
Алгоритм списания партий по FIFO, есть ли ошибка?
0 devlabnn
 
13.07.13
01:35
Алгоритм предназначен для поиска набора партий, из которых должен списаться товар.


Суть алгоритма очень проста: имеем на входе  
- номенклатуру (+ набор аналитик типа склад, организация - не суть важно)
- дату списания
- количество списания.
- Остаток товара на момент до списания
- таблицу приходов (партий) товара с ценой партии, упорядоченную по убыванию даты

1) Ищем партию, с которой начинается списание, исходя из остатка товара на момент списания. Искомая партия - та строка таблицы приходов, где сумма предидущих приходов, включая текущий приход (нарастающий итог) впервые превысила или стала равной остатку товара на заданную дату.

Например, остаток товара 10 шт, таблица прихода такая:

Партия      Цена      Количество  Количество (нар. итог)
Партия3    10          2                  2
*Партия2   20          9                  11
Партия1    10          15                26


искомая партия -Партия2 (т.к. 11>=10). С этой партии начнется списание.

2) Обрезаем таблицу партий: оставляем только партии до нашей искомой  включительно (незабываем, что партии упорядочены по убыванию даты). Получим

Партия      Цена      Количество  Количество (нар. итог)
Партия3    10          2                  2
*Партия2   20          9                  11

3) Отсечем количество из искомой партии, которое нельзя использовать: сумма партий - остаток.
Количество в искомой партии = (Количество в искомой партии) - (сумма партий) + (остаток)

в нашем примере: 9 - 11 + 10 = 8. получим:

Партия      Цена      Количество
Партия3    10          2                  
*Партия2   20          8  

На данном этапе фактически получены остатки по партиям на дату списания без использования регистра остатков партий. Осталось лишь оставить в этой таблице самые старые партии, исходя из требуемого кол-ва списания. Кстати, на этом этапе мы знаем себестоимость товара - (10*2 + 20*8)/10 = 18

4) Отсортируем таблицу в обратном порядке:

Партия      Цена      Количество      Количество (нарастающий итог)
Партия2    20          8                      8
Партия3    10          2                      10

Оставим в таблице только те партии, где нарастающий итог по кол-ву не превысит списываемое кол-во + 1 партию. В последней партии изменим кол-во на разность между нарастающим итогом и списываемым кол-вом.
Предположим, требуется списать 9 единиц товара:

Партия      Цена      Количество      
Партия2    20          8                      
Партия3    10          1 (10-9)

Таблица списания партий получена.

6
Плюсы
- не требуется (не используется) регистр остатков по партиям товара, в следствие чего предидущие ошибки парт учета не влияют на будущее списание себестоимости (известная ситуация, когда приход на час позже, чем расход, и весь последующий парт. учет полетел)
- быстрое восстановление парт. учета
- быстрый подсчет себестоимости, когда нет остатков по партиям
1 Aleksey
 
13.07.13
01:38
а что делать с доп.расходами?
2 devlabnn
 
13.07.13
01:43
(1) как видите, они не учитываются - не было необходимости. Но, уверен, их можно прикрутить
3 ХомаБрут
 
13.07.13
01:50
а как без регистра партий мы увидим, что уже попользовались данной партией раньше?
4 Darych
 
13.07.13
01:52
(3)+ и ты попробуй про сроки годности товаров подумать
5 Aleksey
 
13.07.13
01:57
(3) никак, предполагаться что в прошлый раз списано все "правильно"


Правда я несовсем понимаю
1. как в возврате от покупателя определить партию
2. Как оприходования будет влиять на партии? Порождать свои новые текущей датой?
6 devlabnn
 
13.07.13
02:33
(5) 1. В моей организации возврат от покупателя является партией (с ценой партии равной цене возврата). В противном случае добавляем возвратны в таблицу поступлений с ценой партии, из которой был возврат
2. Оприходования - это партии
7 Reaper_1c
 
13.07.13
07:38
кг.
1. При работе задним числом учет становится неконтролируемой кашей.
2. Алгоритмы, построенные на базе расчета нарастающих итогов, работают медленнее, чем нормальное списание остатка партий.
3. Блокировки ласково улыбаются автору и предвкушают самосуд.

В результате от проблем обычного партионного учета не избавились, а новых понаделали.
8 shuhard
 
13.07.13
07:42
(0) минус один и жирный - производительность, которая будет падать с удлинением цепочки документов
9 Aleksey
 
13.07.13
10:12
(7) А блокировка на что?
10 Reaper_1c
 
13.07.13
10:27
(9) Видимо на все документы, образующие партии.
11 Aleksey
 
13.07.13
11:09
(10) Не понял. список партий - это обычный РС, При поступлении туд добавляется одна строчка, при списании идет чтения. В каком месте и когда блокировка возникнет?

P.S. У меня просто по похожему принципу организовано "подбор" партий при оприходования.
12 MKZM
 
13.07.13
11:14
Вместо того, чтобы заставить пользователей не класть прибор на работу, придумываем всякую велосипед.
13 Reaper_1c
 
13.07.13
13:00
(11) Да какая разница, если чтение должно быть блокирующим?
14 Aleksey
 
13.07.13
23:37
(13) это ненужно
15 RomanYS
 
14.07.13
00:58
Не вижу плюсов.
"- не требуется (не используется) регистр остатков по партиям товара, в следствие чего предидущие ошибки парт учета не влияют на будущее списание себестоимости (известная ситуация, когда приход на час позже, чем расход, и весь последующий парт. учет полетел)"
То, что ошибки нельзя выявить, не значит, что их нет. При твоем алгоритме ты узнаешь, только когда склад обнулится, а стоимость прихода и расхода не совпадет.

Единственное применение подобным алгоритмам: когда детальный учет не ведется, а заказчик очень хочет "детальный" отчет, а прикручивать новый регистр нецелесообразно. Например, классификация задолженности по срокам, когда нет учета по документам.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn