Иногда мы вынуждены пойти на такой шаг, как отрицательное сальдо на складе. Это, конечно, очень трудно себе представить, как на полке лежит, например, минус 7 пачек чая. То ли это такая маленькая чёрная дыра, в которую кладёшь пачку чая, а она тут же исчезает, то ли это какая-то антиматерия и при соприкосновении с положительным количеством товара они взаимно уничтожаются (только без каких-то страшных последствий) 🙂
Обычно в пользу такого решения выступает непрерывный процесс расхода, когда оформление прихода по какой-то причине может запаздывать, а процесс отгрузки не должен при этом останавливаться. Scala/iScala при следующем приходе сама корректирует отрицательную партию, так что подобные действия не вносят каких-либо отрицательных последствий в учёт. Но есть нюансы. Давайте на конкретном примере рассмотрим возможные последствия отрицательных партий, вызванных разными типами расхода.
Дано:
склад 01 — склад закупки/производства. Здесь формируется себестоимость закупки или производства с учётом дополнительных затрат.
склад 02 — склад продажи. Сюда запасы перемещаются после того, как на складе 01 сформировалась правильная себестоимость.
Для тестового примера вводятся 2 позиции запасов с разрешённым отрицательным сальдо:
NEG-TRANSFER — Test Negative Balance from Transfer Transaction — с помощью этой позиции запаса мы будем тестировать сценарий отрицательной партии, созданной в результате перемещения «в минус»
NEG-ISSUE — Test Negative Balance from Issue Transaction — с помощью этой позиции запаса мы будем тестировать сценарий отрицательной партии, созданной в результате продажи «в минус»
Сценарий:
На складе 01 вводится приход обеих позиций запаса в количестве 600 единиц по цене 10 за единицу
Затем одну из них мы перемещаем на склад 02 в количестве 1000 единиц (остаётся на складе 01 минус 400), а вторую в количестве 600 единиц (на складе остаётся 0 единиц)
После этого продаём со склада 02 обе позиции в равных количествах, в один день 100 единиц, другой — 200, третий — 400, четвёртый — 150
Далее вводим приход на 01 склад по 500 единиц каждой позиции, но уже по цене 20 за единицу и перемещение на склад 02 полного остатка, так, чтобы на складе 01 количества обеих позиций осталось равным нулю.
А теперь посмотрим что за проводки создались в Скале:
[Test] Test Company 2025 * * Stock Transaction List * * 05052025 23:33:16 Page 1 01 - Main Warehouse Company T4 Fin.Year 25=====================================================================================================/iScala/SC0061/3.4 Stock Code-- Description-------------- Purchases/Sales----------------------------- Balance----------------------------- Date-- Wareh TT CT Batch Number Batch ID---- Bt Order----- Amount------------ Qty---------- Price/Ea-- Qty--------- Amount--- Price/EA--- ============================================================================================================================================= NEG-ISSUE Test Negative Balance from Issue Transaction 010425 01 00 000000018186 000000018186 00 RECEIPT1 6000.00 600.000 10.00 600.000 6000.00 10.0000 150425 01 04 000000018186 000000018186 00 TRANSFER1 6000.00- 600.000- 10.00 0.000 0.00 0.0000 300425 01 00 000000018191 000000018191 00 RECEIPT2 10000.00 500.000 20.00 500.000 10000.00 20.0000 300425 01 04 000000018191 000000018191 00 TRANSFER2 10000.00- 500.000- 20.00 0.000 0.00 0.0000 ------------ ---------- ----------- Sub Total 0.000 0.00 0.0000 Stock Value: 0.0000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NEG-TRANSFER Test Negative Balance from Transfer Transaction 010425 01 00 000000018187 000000018187 00 RECEIPT1 6000.00 600.000 10.00 600.000 6000.00 10.0000 150425 01 04 000000018187 000000018187 00 TRANSFER1 6000.00- 600.000- 10.00 0.000 0.00 0.0000 150425 01 04 ******000001 ******000001 00 TRANSFER1 4000.00- 400.000- 10.00 400.000- 4000.00- 10.0000 300425 01 00 000000018192 000000018192 00 RECEIPT2 10000.00 500.000 20.00 100.000 6000.00 60.0000 300425 01 01 ******000001 ******000001 00 TRANSFER1 4000.00 400.000 10.00 500.000 10000.00 20.0000 300425 01 01 000000018192 000000018192 00 TRANSFER1 8000.00- 400.000- 20.00 100.000 2000.00 20.0000 300425 01 04 000000018192 000000018192 00 TRANSFER2 2000.00- 100.000- 20.00 0.000 0.00 0.0000 ------------ ---------- ----------- Sub Total 0.000 0.00 0.0000 Stock Value: 0.0000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Total for Warehouse 0.000 0.00 0.0000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [Test] Test Company 2025 * * Stock Transaction List * * 05052025 23:33:16 Page 2 02 - Test Warehouse 02 Company T4 Fin.Year 25=====================================================================================================/iScala/SC0061/3.4 Stock Code-- Description-------------- Purchases/Sales----------------------------- Balance----------------------------- Date-- Wareh TT CT Batch Number Batch ID---- Bt Order----- Amount------------ Qty---------- Price/Ea-- Qty--------- Amount--- Price/EA--- ============================================================================================================================================= NEG-ISSUE Test Negative Balance from Issue Transaction 150425 02 04 000000018186 000000018188 00 TRANSFER1 6000.00 600.000 10.00 600.000 6000.00 10.0000 200425 02 01 000000018186 000000018188 00 ISSUE1 1000.00- 100.000- 10.00 500.000 5000.00 10.0000 210425 02 01 000000018186 000000018188 00 ISSUE2 2000.00- 200.000- 10.00 300.000 3000.00 10.0000 220425 02 01 000000018186 000000018188 00 ISSUE3 3000.00- 300.000- 10.00 0.000 0.00 0.0000 220425 02 01 ******000001 ******000001 00 ISSUE3 1000.00- 100.000- 10.00 100.000- 1000.00- 10.0000 230425 02 01 ******000002 ******000002 00 ISSUE4 1500.00- 150.000- 10.00 250.000- 2500.00- 10.0000 300425 02 04 000000018191 000000018193 00 TRANSFER2 10000.00 500.000 20.00 250.000 7500.00 30.0000 300425 02 01 ******000001 ******000001 00 ISSUE3 1000.00 100.000 10.00 350.000 8500.00 24.2857 300425 02 01 000000018191 000000018193 00 ISSUE3 2000.00- 100.000- 20.00 250.000 6500.00 26.0000 300425 02 01 ******000002 ******000002 00 ISSUE4 1500.00 150.000 10.00 400.000 8000.00 20.0000 300425 02 01 000000018191 000000018193 00 ISSUE4 3000.00- 150.000- 20.00 250.000 5000.00 20.0000 ------------ ---------- ----------- Sub Total 250.000 5000.00 20.0000 Stock Value: 20.0000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NEG-TRANSFER Test Negative Balance from Transfer Transaction 150425 02 04 000000018187 000000018189 00 TRANSFER1 6000.00 600.000 10.00 600.000 6000.00 10.0000 150425 02 04 000000018190 000000018190 00 TRANSFER1 4000.00 400.000 10.00 1000.000 10000.00 10.0000 200425 02 01 000000018187 000000018189 00 ISSUE1 1000.00- 100.000- 10.00 900.000 9000.00 10.0000 210425 02 01 000000018187 000000018189 00 ISSUE2 2000.00- 200.000- 10.00 700.000 7000.00 10.0000 220425 02 01 000000018187 000000018189 00 ISSUE3 3000.00- 300.000- 10.00 400.000 4000.00 10.0000 220425 02 01 000000018190 000000018190 00 ISSUE3 1000.00- 100.000- 10.00 300.000 3000.00 10.0000 230425 02 01 000000018190 000000018190 00 ISSUE4 1500.00- 150.000- 10.00 150.000 1500.00 10.0000 300425 02 04 000000018192 000000018194 00 TRANSFER2 2000.00 100.000 20.00 250.000 3500.00 14.0000 ------------ ---------- ----------- Sub Total 250.000 3500.00 14.0000 Stock Value: 14.0000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Total for Warehouse 500.000 8500.00 17.0000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Сначала посмотрим как выглядит движение на складе 01:
Для позиции NEG-ISSUE ничего необычного — приход 600 по 10, перемещение, приход 500 по 20 и перемещение, на складе 0
Для позиции NEG-TRANSFER при перемещении «в минус» перемещаемые 1000 единиц разделились на 600 из реальной партии и 400 из отрицательной партии ******000001 (номера отрицательных партий всегда начинаются на ******).
Когда после этого мы делаем приход 500 единиц по цене 20 за единицу, iScala делает проводку прихода и вслед за ней возвращает отрицательную партию ******000001 (она была по цене 10 за единицу) и делает расход из реальной, только что оприходованной партии 000000018192 по цене 20 за единицу.
Далее идёт перемещение оставшихся 100 единиц по цене 20 за единицу — ничего необычного.
Теперь посмотрим, что произошло на складе 02 (складе продажи).
Начнём с позиции NEG-TRANSFER. Как можно видеть, здесь нет никаких отрицательных партий. Всё как обычно. Приход (по перемещению), расход (обычный, не в минус), повторный приход (по перемещению). Если сложить отдельные проводки расхода, то видно, что все они по цене (себестоимости) 10 за единицу. То есть никаких корректировок себестоимости продаж не произошло. Иное дело с позицией запаса NEG-ISSUE. Здесь мы видим 2 отрицательные партии — ******000001 и ******000002. Одна 100 единиц (400 минус имевшийся на складе остаток в 300 единиц), другая — 150. Когда мы сделали перемещение новой партии в количестве 500 единиц по цене 20 за единицу, iScala помимо проводки по перемещению сделала сторно обеих отрицательных партий на общее количество 250 единиц (напомню, они были по цене 10 за единицу) и расход из новой партии также двумя отдельными проводками в 100 и 150 единиц, но уже по цене 20 за единицу. Таким образом, если сложить проводки расхода, то фактически мы получим, что 600 единиц были проданы с себестоимостью 10 за единицу, а 250 единиц с себестоимостью 20 за единицу.
Вывод: на мой взгляд, контролировать следует именно себестоимость продаж (или иных видов расхода). Именно поэтому допустимо иметь отрицательное сальдо при продажах и ни в коем случае не попускать отрицательное сальдо, образующееся в результате перемещения «в минус».
Для знатоков телевизионной рекламы: «Вот если бы был тогда ВТВ…» 🙂 🙂 🙂
Если бы iScala выполняла «каскадную» корректировку при сторно отрицательной партии, образовавшейся при перемещении, когда была бы сторнирована не только партия на складе 01, но и соответствующая партия на складе 02, тогда другое дело. Но она для Скалы не является отрицательной партией, поэтому и никакой каскадной корректировки не происходит.
Надеюсь, это конкретный пример поможет вам разобраться, как это работает