Расчёт бухгалтерских остатков
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Расчёт бухгалтерских остатков
Доброй пятницы, уважаемые. Подскажите, кто в курсе- есть ли в системе функциональность для быстрого расчёта бух. остатков? По аналогии с объектом Store, рассчитывающим складские остатки. Не хочется с нуля всё это писать..
Задача такая- при формировании ордеров производственной накладной (НВС, АСС и т.п.) проверять остатки на 20-м и 23-м счетах.
Задача такая- при формировании ордеров производственной накладной (НВС, АСС и т.п.) проверять остатки на 20-м и 23-м счетах.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Расчёт бухгалтерских остатков
Код: Выделить всё
//определяем дату сальдо
var CalcSaldo : word;
if wGetTune('DOC.VISIBLE')=0
{ CalcSaldo := cgCS_NoDesGr //+cgCS_MakeZero
}
else
{ CalcSaldo :=0// cgCS_MakeZero
}
MyPlansNo:=coGetTune('FIN.USER.CPLANSSCH')
dt_ost:=dte //sub_day(dtb,1)
dt_ost1:=dt_ost;
if dt_ost1>dgettune('DAT_M_OT')
dt_ost1:= dgettune('DAT_M_OT');
if day(dt_ost1)<>1
dt_ost1:=date(1,month(dt_ost1),year(dt_ost1))
if (Calc_NewSaldo( CalcSaldo // способ расчета сальдо - с учетом групп дексрипторов или без оного (0)
, MyPlansNo // ссылка на план счетов
, coSaldoNM // индетификатор таблицы для расчета
,ww_sch // счет с кодом плана счетов
, ww_sub// субсчет
, filtr_cPodr //ссылка на подразделение в сальдо
,0 //kau1
,0 //kau2
,0 //kau3
,0 //kau4
,0 //kau5
,0 //kau6
,dt_ost1 // дата с которой начинать сбор сальдо - то есть берется сальдо на эту дату и к ней добавляются обороты
,dt_ost
) )
{ rereadrecord(#saldonm)
StopVisual('',0)
StartNewVisual(vtIndicatorVisual,vfTimer+vfBreak,'Идет печать...', recordsintable(#saldonm)*2);
mylog('================= Группируем данные ====================')
iNextVisual ('Группируем данные')
_LOOP fullcache SALDONM
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Расчёт бухгалтерских остатков
Ок, спасибо, Эдвард. По параметрам CalcSaldo, coSaldoNM, filtr_cPodr можно комментарии? Так понимаю, что какая- то таблица должна заполниться?
Да, всё понятно теперь
Да, всё понятно теперь
Последний раз редактировалось zna 19 авг 2016, 13:32, всего редактировалось 1 раз.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Расчёт бухгалтерских остатков
Код: Выделить всё
// Перерасчет сальдо на начало месяца - для вызова из Vip
function Calc_NewSaldo( ModeCulc : word;
cPlans : comp;
coPutTab : integer;
Sch : tSchet3;
Sub : tSubSch;
Podr : tNRec;
Kau1, Kau2, Kau3, Kau4, Kau5, Kau6 : tKodKau;
dStart,dEnd : Date) : boolean;
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Расчёт бухгалтерских остатков
а рассчитывать зачем ,если проверить только нужно ?при формировании ордеров производственной накладной (НВС, АСС и т.п.) проверять остатки на 20-м и 23-м счетах
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Расчёт бухгалтерских остатков
А как проверить остатки на произвольную дату на бух.счёте без расчёта? К сальдо на 1 число месяца добавляем обороты этого месяца до данной даты - это и есть остаткиDen писал(а):а рассчитывать зачем ,если проверить только нужно ?при формировании ордеров производственной накладной (НВС, АСС и т.п.) проверять остатки на 20-м и 23-м счетах
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Расчёт бухгалтерских остатков
Ну если так, то да, нужно считать логический остаток от даты бух контора (т.е. подразумевается что в этой точки отсчета лежат правильные остатки) + все обороты от сальдо по нужной даты посредством Calc_NewSaldo через SaldoNm. А что этим добиваетесь то ? Вроде все ли складские движения отражены по регистру учета ?
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Расчёт бухгалтерских остатков
Да, типа того. Бухгалтера хотят доп.контроль по накладным.Den писал(а):... А что этим добиваетесь то ? Вроде все ли складские движения отражены по регистру учета ?
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Расчёт бухгалтерских остатков
Для этого, логичнее сверять отчетность из складского учета с оборотно-сальдовыми по счету учета движения материалов по итогам месяца например.
А вешать на каждую проводимую операцию в складе еще такой чек, не знаю..сомнительно как то. Ну или если складское движение небольшое совсем то может и оправдано
А вешать на каждую проводимую операцию в складе еще такой чек, не знаю..сомнительно как то. Ну или если складское движение небольшое совсем то может и оправдано
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Расчёт бухгалтерских остатков
Вот как раз они и не хотят откладывать сверку БУ и КОУ на конец месяца. Зачем копить ошибки? Даже странно, что стандартом такой чек не предусмотрен.
-
- Местный житель
- Сообщения: 1044
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Иркутская область
Re: Расчёт бухгалтерских остатков
А как можно проверку такую предусмотреть, если каждое предприятие по-своему работает? В бухгалтерию может только в конце месяца/начале следующего месяца документы попадут.
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Расчёт бухгалтерских остатков
Да, Мария, по- разному- в части субсчетов/ аналитики, но некоторые общие правила есть. Учёт МЦ на складе- это 10 счёт, на производство- 20 и 23. Когда бухгалтер привязывает ТХО к акту на списание МЦ в производстве, к примеру, он не контролирует остатки 20/23 бухсчёта, которые получатся в результате проведения ТХО. Получать аналитический отчёт после каждой накладной бухгалтера не хотят- долго. Краснота на счёте обнаружится позже, когда они месяц в целом будут смотреть.
Поэтому есть мысль сделать так: бухгалтер привязывает ТХО и открывается browse, в котором отражаются обороты и остатки по счёту по данной ТХО. Пока только для просмотра, а позже можно какие- нить действия сделать..
Поэтому есть мысль сделать так: бухгалтер привязывает ТХО и открывается browse, в котором отражаются обороты и остатки по счёту по данной ТХО. Пока только для просмотра, а позже можно какие- нить действия сделать..
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Расчёт бухгалтерских остатков
Получилось в первом варианте:
Код: Выделить всё
interface CheckOborot 'Обороты и остатки по счётам';
Show at (1,1,200,40);
table struct tmain //Таблица
(
cmc : comp
,cpodr: comp
,mc : string
,kod : string
,edizm: string
,kolsopr: double //Количество из накладной
,sumsopr: double //Сумма из накладной
,schet: string
,subsch:string
,podr : string
,kauall: string
,ckauks1: comp
,ckauks2: comp
,ckauks3: comp
,sumbeg : double //Cумма на начало
,kolbeg: double //Количество на начало
,sumobr: double //Сумма проводки
,kolobr: double //Количество проводки
,sumend: double //Сумма на конец
,kolend: double //Количество на конец
,nrec: comp
) with index ( i1 = mc, i2 = cmc
);
create view
var
wVidSopr : longint; //параметр
stmt,stmt_str,frmHandle,i : longint ;
atrkod, cCotv, cNazn, cMySopr: comp;
as select *
from tmain
,katsopr, soprhoz, spsopr, pick, katpodr, katmc, kated, oborot, saldonm
order oMc by tmain.mc
;
Parameters wVidSopr, cMySopr;
Panel Panel_ ;
Table tmain;
Screen scMain_
show at (, , , 2);
Buttons
cmRaspr,,,;
cmCalc,,,;
cmGo,,,;
<<
<.1..> <.2..> <.3..>
>>
end;
browse bmnpl (,,sci178InsPM) ;
show at (, 3, , );
fields
tmain.Mc 'Матценность','сортировка' : [30], protect;
tmain.kod 'Код Мц' : [10], protect;
tmain.edizm 'Единица','измерения','учётная' :[8], protect;
tmain.kolsopr 'Количество','по накладной' :[10.4] , noprotect;
tmain.sumsopr 'Сумма', 'по накладной':[10.4], protect;
tmain.schet 'Счёт' : [5], protect;
tmain.subsch 'Субсчёт' : [5], protect;
tmain.podr 'Подразделение' : [20], protect;
tmain.kauall 'КАУ' : [50], protect;
tmain.sumbeg 'Сумма','на начало' :[10.4] , protect;
tmain.kolbeg 'Количество', 'на начало':[10.4], protect;
tmain.sumobr 'Сумма', 'проводки' :[5], protect;
tmain.kolobr 'Количество', 'проводки' :[5], protect;
tmain.sumend 'Сумма', 'на конец' :[10.4] , noprotect;
tmain.kolend 'Количество', 'на конец':[10.4], protect;
// string(tmain.nrec) 'Nrec' :[12], protect;
end;
end;
HandleEvent
CmInit:{ if getfirst katsopr where((cMySopr == katsopr.nrec)) <> tsOk {message('Not katsopr..'); exit;}
var sChetk, MyPlansNo: string;
sChetk:= '823';
mtclear(#tmain,fmNormal);
stmt := sqlAllocStmt;
sqlbindparam(stmt,1,wVidSopr);
sqlbindparam(stmt,2,sChetk);
sqlbindparam(stmt,3,cMySopr);
sqlAddStr(stmt_str, ' select spsopr.cmcusl as cmc, katsopr.cpodrfrom as cpodr,');
sqlAddStr(stmt_str, ' katmc.name as mc ');
sqlAddStr(stmt_str, ' ,katmc.barkod as kod ');
sqlAddStr(stmt_str, ' ,case when spsopr.cotped = #comp(0) then kated.name else katotped.name end as edizm ');
sqlAddStr(stmt_str, ' ,case when spsopr.cotped = #comp(0) then spsopr.kolfact else spsopr.kolfact * katotped.koef end as kolsopr ');
sqlAddStr(stmt_str, ' ,spsopr.kolfact * spsopr.rprice as sumsopr ');
sqlAddStr(stmt_str, ' ,oborot.schetk as schet, oborot.subschk as subsch, katpodr.name as podr ');
sqlAddStr(stmt_str, ' ,coalesce(katmc_kau1.name, '''') || ''\'' || coalesce(spkau.name, '''') || ''\'' || coalesce(izdel.name, '''') as kauall ');
sqlAddStr(stmt_str, ' ,oborot.kauks[1] as ckauks1, oborot.kauks[2] as ckauks2, oborot.kauks[3] as ckauks3 ');
sqlAddStr(stmt_str, ' ,0 as sumbeg, 0 as kolbeg, coalesce(oborot.sumob,0) as sumobr, coalesce(oborot.kol, 0) as kolobr, 0 as sumend, 0 as kolend, izdel.nrec as crec ');
sqlAddStr(stmt_str, ' from spsopr inner join katmc on spsopr.cmcusl = katmc.nrec ');
sqlAddStr(stmt_str, ' left join katotped on spsopr.cmcusl = katotped.cmcusl and 1 = katotped.prmc and spsopr.cotped = katotped.nrec ');
sqlAddStr(stmt_str, ' inner join kated on katmc.ced = kated.nrec ');
sqlAddStr(stmt_str, ' inner join katsopr on spsopr.csopr = katsopr.nrec ');
sqlAddStr(stmt_str, ' inner join katpodr on katsopr.cpodrfrom = katpodr.nrec ');
sqlAddStr(stmt_str, ' left join soprhoz on katsopr.nrec = soprhoz.csoprdoc and soprhoz.tipdoc = ?');
sqlAddStr(stmt_str, ' left join oborot on spsopr.csopr = oborot.csoprdoc AND soprhoz.nrec = oborot.csoprhoz and spsopr.cmcusl = oborot.kauks[1] ');
sqlAddStr(stmt_str, ' and oborot.schetk = ? ');
sqlAddStr(stmt_str, ' left join katmc katmc_kau1 on oborot.kauks[1] = katmc_kau1.nrec ');
sqlAddStr(stmt_str, ' left join spkau on oborot.kauks[2] = spkau.nrec');
sqlAddStr(stmt_str, ' left join katmc izdel on oborot.kauks[3] = izdel.nrec ');
sqlAddStr(stmt_str, ' ');
sqlAddStr(stmt_str, ' where spsopr.prmc = 1 and spsopr.csopr = ? ');
sqlAddStr(stmt_str, ' order by katmc.name ');
sqlPrepare(stmt,stmt_str);
sqlExecute(stmt);
if (sqlFetchInto(stmt,#tmain) != tsOk)
Message('not tsOk select (');
sqlFreeStmt(stmt);
if RecordsInTable(#tmain)=0
{
Message('Не нашлось спецификации в накладной !');
exit;
}
//определяем дату сальдо
MyPlansNo:=coGetTune('FIN.USER.CPLANSSCH')
var dt_ost,dt_ost1: date;
dt_ost:=katsopr.dsopr; //sub_day(dtb,1)
dt_ost1:=dt_ost;
if dt_ost1>dgettune('DAT_M_OT')
dt_ost1:= dgettune('DAT_M_OT');
if day(dt_ost1)<>1
dt_ost1:=date(1,month(dt_ost1),year(dt_ost1))
delete all saldonm;
if getfirst tmain = tsOk {}
if (Calc_NewSaldo( 0//CalcSaldo // способ расчета сальдо - с учетом групп дексрипторов или без оного (0)
, MyPlansNo // ссылка на план счетов
, coSaldoNM // индетификатор таблицы для расчета
,sChetk // счет с кодом плана счетов -823
, '011'// субсчет
, katsopr.cpodrfrom //ссылка на подразделение в сальдо
,0 //kau1- Мц
,tmain.ckauks2 //kau2- Статьи затрат
,tmain.ckauks3 //kau3- изделия собственного производства
,0 //kau4
,0 //kau5
,0 //kau6
,dt_ost1 // дата с которой начинать сбор сальдо - то есть берется сальдо на эту дату и к ней добавляются обороты
,dt_ost
) )
rereadrecord(#saldonm)
if getfirst saldonm = tsOk
{
_loop saldonm ordered by index SALDONM01
{
if getfirst tmain where((saldonm.kauos[1] == tmain.cmc)) = tsOk
{
if saldonm.viob = 1 {if (update current tmain set tmain.sumend := saldonm.sums, tmain.kolend := saldonm.kol, //Остаток дебетовый
tmain.sumbeg := saldonm.sums + tmain.sumobr, tmain.kolbeg := saldonm.kol + tmain.kolobr) = tsOk {}}
else {if (update current tmain set tmain.sumend := -saldonm.sums, tmain.kolend := -saldonm.kol,
tmain.sumbeg := -saldonm.sums + tmain.sumobr, tmain.kolbeg := -saldonm.kol + tmain.kolobr) = tsOk {}}
}
}
}
RunInterface('F_Saldo::Saldonm');
SetOrder(tioMc);
reScanPanel(#tmain);
}
cmCancel:
{
CloseInterface(cmDone);
mtChangeRefCount( #tmain, -1 );
}
end;
end.
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
Re: Расчёт бухгалтерских остатков
Если на преприятии используется платформа Oracle или MS SQL, то лучше использовать для расчета остатков БУ функциональность DSQL.
Жду выхода Вселенная 2.12!
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Расчёт бухгалтерских остатков
А пример можно, для MS SQL.Max_Fin писал(а):Если на преприятии используется платформа Oracle или MS SQL, то лучше использовать для расчета остатков БУ функциональность DSQL.