Поздние затраты

Автор Сообщение
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 02.11.2004 20:33 Заголовок сообщения: Поздние затраты
Коллеги,

Те, кто меня знает достаточно давно, скажут «а вшивый — о бане». Собственно, моё представительство в Интернете 4.5 года назад началось именно с этой темы (читайте материал здесь). Однако, несмотря на то, что спустя 4 года отдел разработки таки сделал 20% от того, что я просил, 80% остаются несделанными. Таким образом, чисто арифметическими расчетами получаем, что, если эту тему не подымать, через 16 лет сделают остальное, когда либо эмир, либо ишак отдадут-таки концы Wink
А теперь подробнее:
Как известно, если у нас был приход 100 единиц запаса по цене 100 рублей, затем расход 20 из них, а затем начисление затрат в сумме 1000 рублей, Скала создаст проводки:
* типа 00: 100 штук * 100 рублей
* типа 01: минус 20 штук * 100 рублей
* типа 03: 1000 рублей
* типа 10: минус 200 рублей
Однако проблема состоит в том, что никак не отслеживается какой тип расхода привел к появлению складских проводок типа 10, а этих типов может быть 3: проводки типа 01 (расход/продажа), проводки типа 02 (инвентаризационная разница), проводки типа 04 (перемещение на другой склад). Что касается последних, то именно это — те самые 20%, о которых я писал выше. В iScala 2.2 проводка типа 03 будет создана для склада, куда перемещена часть партии. А вот с остальным плохо. Во-первых, проводка 10 типа будет создана суммарно и для расхода с типом проводки 01, и для расхода с типом проводки 02. Во-вторых, те учетные измерения и учетные коды, которые были у исходных расходных проводок, не будут учтены. Таким образом, нам придется «вручную» анализировать ситуацию и распределять появившуюся на неком контрольном счете сумму также «вручную».
Что я предлагал около 5 лет назад?
Я предлагал заменить один тип проводки (10), на 3 разных типа:
собственно тип 10 — проводки, базирующиеся на расходных проводках типа 01
тип 11 — проводки, базирующиеся на проводках типа 02
тип 12 — проводки, базирующиеся на проводках типа 04
Кроме этого, учетные коды и учетные измерения в этих проводках должны соответствовать исходным «расходным» проводкам.

Что Вы об этом думаете?

Алексей Васильев

Juri
Заслуженный форумщик

Зарегистрирован: 18.10.2004
Сообщения: 99
Откуда: Tallinn Estonia

Добавлено: 03.11.2004 11:59 Заголовок сообщения:
Алексей, в принципе я с вами солидарен. Мы тоже сталкивались и сталкиваемся с этими проблемами. Кроме этого, можно добавить еще две: 1) в случае расхода в разные периоды (например 31.10 и 01.11) после ввода доп затрат проводка тип 10 образутся вся на 31.10
2) тип 10 не отражается в статистике по продажам. Однако, на мой взгляд, решение всех этих вопросов может существенно утяжелить программу. Все-таки максимальный уход от ввода доп.затрат задним числом самый правильный метод Smile У себя в фирмах, занимающихся бизнесом «купи-продай», мы в основном используем вариант, близкий к шведскому — доп. затраты либо списываются все, либо как-то оцениваются, но по номенклатурным позициям не разбрасываются. Там, где есть учет готовой продукции, проблема есть, думаем по поводу изменения методы учета затрат… Впрочем, что касается вашего конкретного предложения — я за!
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 28.12.2006 13:48 Заголовок сообщения: Re: Поздние затраты
Вчера сделал для бухгалтерии отчет с дебетами и кредитами (только на основе проводок, уже оправленных в Главную Книгу), думаю, многим тоже может пригодиться. Привожу процедуру, выдающую данные для этого отчета:

Код:
/*
Процедура для распределения складских проводок типа 10 в соответствии с исходными
проводками по расходу для iScala 2.2

Пример:
exec AAV_BASE_FOR_TT10_DT_CT ‘20061001’, ‘20061031’

Процедура не выполняет никаких обновлений, а только выводит отчет.
****************************************************************************************
Автор: Алексей Васильев
Дата создания/последнего изменения:   15.10.2003/27.12.2006
****************************************************************************************
*/

CREATE PROCEDURE [dbo].[AAV_BASE_FOR_TT10_DT_CT]
@d1 datetime, @d2 datetime
AS

CREATE TABLE [dbo].[#TT10] (
   [SC07003] [nvarchar] (35) COLLATE Cyrillic_General_CS_AS NOT NULL ,
   [SC07005] [numeric](28, 8) NOT NULL ,
   [SC07008] [nvarchar] (2) COLLATE Cyrillic_General_CS_AS NOT NULL ,
   [SC07011] [nchar] (2) COLLATE Cyrillic_General_CS_AS NOT NULL ,
   [SC07012] [nvarchar] (50) COLLATE Cyrillic_General_CS_AS NOT NULL ,
   [SC07021] [nvarchar] (12) COLLATE Cyrillic_General_CS_AS NOT NULL ,
   [SC07022] [nchar] (8) COLLATE Cyrillic_General_CS_AS NOT NULL,
   [SC07028] [numeric](28, 8) NOT NULL
) ON [PRIMARY]

INSERT INTO [dbo].[#TT10]
SELECT
SC07003, —Код запаса
SC07005, —Цена
SC07008, —Тип затрат
SC07011, —Учетный код
SC07012, —Учетная строка
SC07021, —Номер партии
SC07022, —Уникальный идентификатор строки проводки
SC07028  —Цена в валюте консолидации
FROM SC070100 (nolock)
WHERE SC07001 = ’10’ and SC07002 between @d1 and @d2

CREATE TABLE [dbo].[#TOTALQTYOFTT10BASE] (
   [TotalQty] [numeric](20, 8) NOT NULL ,
   [FIFOBatchID] [nvarchar] (12) COLLATE Cyrillic_General_CS_AS NOT NULL ,
   [SearchIndex] [nchar] (8) COLLATE Cyrillic_General_CS_AS NOT NULL
) ON [PRIMARY]

INSERT INTO [dbo].[#TOTALQTYOFTT10BASE]
SELECT
SUM(SC07.SC07004) AS TotalQty,
SC07.SC07021 AS FIFOBatchID,
[dbo].[#TT10].SC07022 AS SearchIndex
FROM SC070100 SC07 (nolock)
   INNER JOIN [dbo].[#TT10]
   ON SC07.SC07021 = [dbo].[#TT10].SC07021
   AND SC07.SC07003 = dbo.#TT10.SC07003
   AND SC07.SC07022 < [dbo].[#TT10].SC07022
WHERE
((SC07.SC07001 = ’01’) OR (SC07.SC07001 = ’02’))
AND (SC07.SC07004 < 0)
GROUP BY SC07.SC07021, [dbo].[#TT10].SC07022

SELECT
[dbo].[#TOTALQTYOFTT10BASE].SearchIndex AS [ID Пр.Типа 10],
SC07.SC07022 + [dbo].[#TOTALQTYOFTT10BASE].SearchIndex AS [Уникальный ID],
SC07.SC07003 AS [Код запаса],
abs(SC07.SC07004 / [dbo].[#TOTALQTYOFTT10BASE].TotalQty * [dbo].[#TT10].SC07005) AS [Сумма к распредел.],
GLDTTT10.SCGL006 as [Дебет проводки типа 10],
GLCTTT10.SCGL006 as [Кредит проводки типа 10],
GLDT.SCGL006 as [Дебет правильной проводки],
GLCT.SCGL006 as [Кредит правильной проводки],
SC07.SC07001 AS [Тип исх.пр.],
SC07.SC07002 AS [Дата],
SC07.SC07004 AS [Кол-во исх.пров.],
SC07.SC07005 AS [Цена в исх.пров.],
SC07.SC07006 AS Ссылка,
SC07.SC07007 AS [Номер заказа],
SC07.SC07021 as [BatchID]
FROM [dbo].[#TOTALQTYOFTT10BASE]
INNER JOIN SC070100 SC07 (nolock)
INNER JOIN [dbo].[#TT10]
   ON SC07.SC07021 = [dbo].[#TT10].SC07021
   AND SC07.SC07003 = [dbo].[#TT10].SC07003
   AND SC07.SC07022 < [dbo].[#TT10].SC07022
   ON [dbo].[#TOTALQTYOFTT10BASE].SearchIndex = [dbo].[#TT10].SC07022
   AND [dbo].[#TOTALQTYOFTT10BASE].FIFOBatchID = SC07.SC07021
— Для вывода поля "Дебет правильной проводки"
inner join SCGL0100 GLDT (nolock)
   on GLDT.SCGL033=SC07.SC07022
— Меняем дебет и кредит исходной проводки в зависимости от знака проводки 10 типа
   and sign([dbo].[#TT10].SC07005)*GLDT.SCGL007<0
— Для вывода поля "Кредит правильной проводки"
inner join SCGL0100 GLCT (nolock)
   on GLCT.SCGL033=SC07.SC07022
— Меняем дебет и кредит исходной проводки в зависимости от знака проводки 10 типа
   and sign([dbo].[#TT10].SC07005)*GLCT.SCGL007>0
— Для вывода поля "Дебет проводки типа 10"
inner join SCGL0100 GLDTTT10 (nolock)
   on GLDTTT10.SCGL033=[dbo].[#TT10].SC07022
   and GLDTTT10.SCGL007>0
— Для вывода поля "Кредит проводки типа 10"
inner join SCGL0100 GLCTTT10 (nolock)
   on GLCTTT10.SCGL033=[dbo].[#TT10].SC07022
   and GLCTTT10.SCGL007<0
WHERE (SC07.SC07001 = ’01’ OR SC07.SC07001 = ’02’)
AND (SC07.SC07004 < 0)
and round(abs(SC07.SC07004 / [dbo].[#TOTALQTYOFTT10BASE].TotalQty * [dbo].[#TT10].SC07005),2)>=0.01
ORDER BY
SC07.SC07003,
[dbo].[#TOTALQTYOFTT10BASE].SearchIndex + SC07.SC07022


Collate, разумеется, надо указать в соответствии с Вашими настройками Скальской БД. Публикуется "как есть" без принятия каких-либо претензий. Пожелания принимаются, однако без гарантий немедленного ответа. Желаю успеха!

Maxim
Заслуженный форумщик

Зарегистрирован: 09.03.2005
Сообщения: 77
Откуда: Москва

Добавлено: 28.12.2006 18:57 Заголовок сообщения:
Отличная работа, спасибо.
_________________
"Я люблю работу, она очаровывает меня. Я могу сидеть и смотреть на неё часами." © Джером К. Джером.
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 29.12.2006 15:39 Заголовок сообщения: Спасибо за оценку

Maxim писал(а):
Отличная работа, спасибо.

Спасибо на добром слове! Very Happy

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 10.04.2007 11:58 Заголовок сообщения: Re: Поздние затраты

aav писал(а):

Код:
Дата создания/последнего изменения:   15.10.2003/27.12.2006

Вот уж не думал, что у нас появятся проводки 10 типа, порожденные возвратом поставщику. Ан, жизнь богаче…
Выделенное выше меняем на:

Код:
Дата создания/последнего изменения:   15.10.2003/09.04.2007


aav писал(а):

Код:
WHERE
((SC07.SC07001 = ’01’) OR (SC07.SC07001 = ’02’))
AND (SC07.SC07004 < 0)
GROUP BY SC07.SC07021, [dbo].[#TT10].SC07022

Меняем на:

Код:
WHERE
((SC07.SC07001 = ’01’) OR (SC07.SC07001 = ’02’) OR (SC07.SC07001 = ’00’))
AND (SC07.SC07004 < 0)
GROUP BY SC07.SC07021, [dbo].[#TT10].SC07022

aav писал(а):

Код:
— Для вывода поля "Кредит проводки типа 10"
inner join SCGL0100 GLCTTT10 (nolock)
   on GLCTTT10.SCGL033=[dbo].[#TT10].SC07022
   and GLCTTT10.SCGL007<0
WHERE (SC07.SC07001 = ’01’ OR SC07.SC07001 = ’02’)
AND (SC07.SC07004 < 0)
and round(abs(SC07.SC07004 / [dbo].[#TOTALQTYOFTT10BASE].TotalQty * [dbo].[#TT10].SC07005),2)>=0.01

Меняем на:

Код:
— Для вывода поля "Кредит проводки типа 10"
inner join SCGL0100 GLCTTT10 (nolock)
   on GLCTTT10.SCGL033=[dbo].[#TT10].SC07022
   and GLCTTT10.SCGL007<0
WHERE (SC07.SC07001 = ’01’ OR SC07.SC07001 = ’02’ OR SC07.SC07001 = ’00’)
AND (SC07.SC07004 < 0)
and round(abs(SC07.SC07004 / [dbo].[#TOTALQTYOFTT10BASE].TotalQty * [dbo].[#TT10].SC07005),2)>=0.01