Список форумов Акцент Акцент
официальный форум разработчика программы Акцент
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Неправильный расчет аммортизации после перемещения ОС.

 
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.0
Предыдущая тема :: Следующая тема  
Автор Сообщение
Roman
Гость





СообщениеДобавлено: Чт Сен 24, 2009 8:57 am    Заголовок сообщения: Неправильный расчет аммортизации после перемещения ОС. Ответить с цитатой

Здравствуйте. Пожалуйста, подскажите куда копать.
На предприятии система Акцент 7.0 Build 0482, Акцент-администратор (SQL) 7.0 0480, VBS 5.6 build 6914. Есть рабочая форма по расчету аммортизации основных средств прямолинейным методом скорее всего самописная (досталась в тяжелое наследство). Аммортизация считается правильно до тех пор пока пока по ОС не было перемещений. Как только было перемещение с одного материально ответственного лица на другое МОЛ аммортизация начинает расчитываться заново по этому ОС. В самой форме обращение по сумме аммортизации идет к AmSum соответственно такие вопросы:

1) Где можно посмотреть процедуру или функцию расчета AmSum?
2) Можно ли безболезненно подключить стандартную форму для расчета аммортизации?
Вернуться к началу
Sergio



Зарегистрирован: 05.01.2009
Сообщения: 18

СообщениеДобавлено: Чт Сен 24, 2009 10:10 am    Заголовок сообщения: Ответить с цитатой

А можно увидеть код формы? И модулей, если они подключены...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
olimp
Site Admin


Зарегистрирован: 10.03.2005
Сообщения: 2661

СообщениеДобавлено: Чт Сен 24, 2009 10:24 am    Заголовок сообщения: Re: Неправильный расчет аммортизации после перемещения ОС. Ответить с цитатой

Roman писал(а):
Здравствуйте. Пожалуйста, подскажите куда копать.
На предприятии система Акцент 7.0 Build 0482, Акцент-администратор (SQL) 7.0 0480, VBS 5.6 build 6914. Есть рабочая форма по расчету аммортизации основных средств прямолинейным методом скорее всего самописная (досталась в тяжелое наследство). Аммортизация считается правильно до тех пор пока пока по ОС не было перемещений. Как только было перемещение с одного материально ответственного лица на другое МОЛ аммортизация начинает расчитываться заново по этому ОС. В самой форме обращение по сумме аммортизации идет к AmSum соответственно такие вопросы:

1) Где можно посмотреть процедуру или функцию расчета AmSum?
2) Можно ли безболезненно подключить стандартную форму для расчета аммортизации?


Если расчет в форме, то процедура либо внутри его, либо во внешнем файле, см. '#include <имя файла>

А проблема скорее всего в том, что при перемещении не передается начисленная аммортизация. Она должна быть в отдельной проводке с тем же ОС и м/о лицом.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Roman
Гость





СообщениеДобавлено: Чт Сен 24, 2009 10:25 am    Заголовок сообщения: Ответить с цитатой

Sergio писал(а):
А можно увидеть код формы?


Вот он
Код:
Option Explicit
'#include "b_UsrFunc.avb"
'#include "tm_usrfunc.avb"
'----------------------------------------------------
' Константы сообщений
Const msgSaveDoc                  = "Документ был изменен. Сохранить?"
Const msgDocNotInPeriod         = "Дата документа не в рабочем периоде. После сохранения документ не будет виден в папке и в журнале. Продолжать?"
Const strSavePrompt             = "Операция была изменена. Сохранить?"
Const strFillDoc                = "Заполнить документ?"



'----------------------------------------------------
Const DBpnKoeficient         = "Понижающий коеффициент"     
Const BaseAccOS               = "Основной счет"


'----------------------------------------------------
' Константы для кнопок тулбара
Const btnNew                     = 1
Const btnSave                     = 2
Const btnClose                     = 3
Const btnPreview                  = 4
Const btnPrint                     = 5
Const btnShowTrans               = 9
Const btnSelectTemplate         = 10
Const btnScale                     = 11

'----------------------------------------------------
Dim Op
Dim TmlInv
Dim AccCrId
Dim AccDbId   
Dim proc
Dim AccLst
Dim WC
Dim Mt

Dim ParDBpnKoeficient
Dim TotBegSum
Dim TotEndSum
Dim TotAmmSum


'---------------------------------------------------
' Инициализация элементов формы
'----------------------------------------------------
Sub Op_Init

   Dim i

   For i=1 To Op.TransCount
      Op.DeleteTransList(1)
   Next

   sgrdEnts.Clear()
   sgrdEnts.Rows = 1
   sgrdEnts.Enabled = False


   TotBegSum = 0.00
   TotEndSum = 0.00
   TotAmmSum = 0.00

   grdTotal.Cell(1, 4).Value = TotBegSum
   grdTotal.Cell(1, 5).Value = TotEndSum
   grdTotal.Cell(1, 6).Value = TotAmmSum

   Op.Modified = False

   ReCalc

End Sub

'---------------------------------------------------
' Вызывается после загрузки формы
'----------------------------------------------------
Sub Form_OnLoad

   Dim My
   Dim FrmName
   Dim i

   If Not WorkArea.Params.Exists(DBpnKoeficient) Then           
      WorkArea.Params.Create vbCurrency   , DBpnKoeficient           
   End If                                                                           
   
   If IsNull(Workarea.Params(DBpnKoeficient).Value) Then
      MsgBox "В свойствах базы данных установите значение параметра " + vbLf + _
                  DBpnKoeficient, vbOKOnly, "Внимание!"
      ParDBpnKoeficient = 1
   Else
      ParDBpnKoeficient = Workarea.Params(DBpnKoeficient).Value
   End If

   lbInfo.text = "Понижающий коеффициент - " + CStr(ParDBpnKoeficient) + vbLf + _
                     "Метод расчета - прямолинейный"


'   cbMetod


   TotBegSum = 0.00
   TotEndSum = 0.00
   TotAmmSum = 0.00

   grdTotal.Cell(1, 4).Value = TotBegSum
   grdTotal.Cell(1, 5).Value = TotEndSum
   grdTotal.Cell(1, 6).Value = TotAmmSum


   Set Op = CurrentOperation
   Set TmlInv   = Op.TemplateInvoker2
'MsgBox Month(Op.Date)

   TmlInv.FireOnRecalc
   sgrdEnts.Enabled = False

   If Op.Name <> "" Then   FrmName = Op.Name

   If Op.FormID <> 0 Then
      FrmName = WorkArea.ProjectItem(Op.FormID).Name
      grdTitle.Cell(1,1).Value = FrmName
   End If      

   Caption = FrmName


   If Op.IsNew Then

      Op.Modified = False
      sgrdEnts.Rows = 1

   Else

      Set WC = WaitCursor
      Set Mt = Meter

      Mt.Open "Расчет ... ", 0, Op.TransList(1).Rows
   
      TotBegSum = 0.00
      TotEndSum = 0.00
      TotAmmSum = 0.00

      Set proc = New StoredProcedure
      proc.Name = "tm_OpAverLeavAsset"
      proc.Parameter("@pAccIDB").Value   = Workarea.Template(Op.TemplateID).Params(BaseAccOS).Value
      proc.Parameter("@pAccIDA").Value   = Op.Trans(1).AccCrId
      proc.Parameter("@pDocId").Value      = Op.Id
      proc.Parameter("@pOnDate").Value   = Op.Date
      Set AccLst = proc.Execute

   
      'установим инвентарные номера
   If Not AccLst.EOF Then
      i = 1
      While Not AccLst.EOF
         If Op.Trans(1,i).EntId <0> 0 Then
         Op.Trans(1,i).EntId         = AccLst.Fields("EntId").Value
         Op.Trans(1,i).AgFromID   = AccLst.Fields("AgId").Value
         Op.Trans(1,i).AgToID      = Workarea.MyCompany.ID

         sgrdEnts.Rows = i

         'Recalc

         sgrdEnts.Cell(i,1).Value = Op.Trans(1, i).RowNo
         sgrdEnts.Cell(i,2).Value = AccLst.Fields("EntNom").Value
         sgrdEnts.Cell(i,3).Value = " " + AccLst.Fields("EntName").Value
         sgrdEnts.Cell(i,4).Value = " " + AccLst.Fields("AgName").Value
         sgrdEnts.Cell(i,5).Value = AccLst.Fields("UsefulLife").Value
         sgrdEnts.Cell(i,6).Value = AccLst.Fields("OsSum").Value
         sgrdEnts.Cell(i,7).Value = AccLst.Fields("OSSum").Value - AccLst.Fields("AmSum").Value
         sgrdEnts.Cell(i,8).Value = AccLst.Fields("AmmSum").Value

         Op.Trans(1,i).Sum =  AccLst.Fields("AmmSum").Value
         Op.Trans(1,i).Qty = 1


      If Not IsNull(AccLst.Fields("AccId").Value) Then
         If j = 0 Then
            j = 1
            Curr   = 0
            AccList(0) = AccLst.Fields("AccId").Value
            AccListInd(0) = 0
         End If

         If AccList(Curr) <> AccLst.Fields("AccId").Value Then
            For Curr = 0 To j-1
               If AccList(Curr) = AccLst.Fields("AccId").Value Then
                  Exit For
               End If
            Next
            If Curr = j Then
               j = j + 1
               ReDim Preserve AccList(j)
               ReDim Preserve AccListInd(j)
                  AccList(Curr) = AccLst.Fields("AccId").Value
               AccListInd(Curr) = 0
            End If
         End If

         AccListInd(Curr) = AccListInd(Curr) + 1

         If AccListInd(Curr) = 1 Then
            Op.TransCount = Op.TransCount + 1
            Op.Trans(Curr + 2, 1).AccCrId = Op.Trans(1, 1).AccDbId
            'If IsNull(AccLst.Fields("AccId").Value) Then
            '      Op.Trans(Curr + 2, 1).AccDbId = 591
            'Else
            Op.Trans(Curr + 2, 1).AccDbId = AccList(Curr)
            'End If
         End If

         Op.Trans(Curr + 2, AccListInd(Curr)).EntId         = AccLst.Fields("EntId").Value
         Op.Trans(Curr + 2, AccListInd(Curr)).AgToID      = Op.Trans(1,i).AgFromId'Workarea.MyCompany.ID
         Op.Trans(Curr + 2, AccListInd(Curr)).AgFromID         = Workarea.MyCompany.ID
         Op.Trans(Curr + 2, AccListInd(Curr)).Sum          = AccLst.Fields("AmSum").Value
         Op.Trans(Curr + 2, AccListInd(Curr)).Qty          = 1


End If
         TotBegSum = TotBegSum + AccLst.Fields("OSSum").Value
         TotEndSum = TotEndSum + AccLst.Fields("OsSum").Value - AccLst.Fields("AmmSum").Value
         TotAmmSum = TotAmmSum + AccLst.Fields("AmmSum").Value

         Mt.Pos = i
         i = i + 1
      End If
      AccLst.MoveNext
   Wend

   grdTotal.Cell(1, 4).Value = TotBegSum
   grdTotal.Cell(1, 5).Value = TotEndSum
   grdTotal.Cell(1, 6).Value = TotAmmSum

   Op.Sum = TotAmmSum

   Set proc = Nothing
   Mt.Close

   sgrdEnts.Enabled = True
   Op.Modified = True
   ReCalc

End Sub


'------------------------------------------------
'   Процедура обработки события "Сохранить"
'------------------------------------------------
Sub Op_SaveOperation
 Dim i

   Op.LockDate = True
   Op.Done = True

   With Op
      If (.Date <WorkArea> WorkArea.Period.End) Then
         If MsgBox(msgDocNotInPeriod, vbQuestion + vbYesNo) = vbNo Then Exit Sub
      End If
      .Save
   End With
   Form.ReCalc
   Op.Done = True
   If Op.done = False Then
      MsgBox "Не определены счета отнесения затрат", vbOKOnly, vbCritical
   End If
End Sub

'------------------------------------------------
'   Процедура обработки события "Выбрать шаблон"
'------------------------------------------------
Sub Op_SelectTemplate

   Dim NewTmlID

   With Op
      NewTmlID = WorkArea.Browse(acTemplate, .TemplateID, .FormID, 2)
      If NewTmlID <> 0 Then

         Op_Init

         .TemplateID = NewTmlID
         Set TmlInv = .TemplateInvoker(NewTmlID)
      
         If Not TmlInv Is Nothing Then
            TmlInv.FireOnApply
         End If
      End If
   End With

   Op.Modified = False

   Recalc

End Sub

'---------------------------------------------------------
'   Процедура выполняется после выбора пункта из выпадающего
'   меню
'---------------------------------------------------------
Sub Form_OnPopup(Command)

   If Command = 1 Then Op_New
   If Command = 2 Then Op_SaveOperation
   If Command = 10 Then Op_SelectTemplate
   If Command = 12 Then FillAccets(1)
   If Command = 13 Then FillAccets(2)
   If Command = 14 Then FillAccets(3)
'   If Command >=900 And Command < 905 Then frm_DoContMnuCommand Form, Op, Command
   
   Recalc

End Sub


А вот внешний вид самой формы

Вернуться к началу
Roman
Гость





СообщениеДобавлено: Чт Сен 24, 2009 10:58 am    Заголовок сообщения: Re: Неправильный расчет аммортизации после перемещения ОС. Ответить с цитатой

olimp писал(а):

Если расчет в форме, то процедура либо внутри его, либо во внешнем файле, см. '#include <имя файла>

А проблема скорее всего в том, что при перемещении не передается начисленная аммортизация. Она должна быть в отдельной проводке с тем же ОС и м/о лицом.


Спасибо, сейчас посмотрю внешние модули.

При перемещении вроде бы выполняются две проводки, например, по 103 счету первоначальная стоимость и по 1313 сумма износа (аммортизации). Сейчас бухгалтер проверит передались ли они по 1313 счету.
Вернуться к началу
Roman
Гость





СообщениеДобавлено: Чт Сен 24, 2009 1:30 pm    Заголовок сообщения: Re: Неправильный расчет аммортизации после перемещения ОС. Ответить с цитатой

Посмотрела бухгалтер. Проводки переноса амортизации с лица на лицо происходят правильно. Скорее всего дело в подключаемых модулях.

Вот tm_usrfunc.avb

Код:
Option Explicit
'#include "tm_global.avb"


'---------------------------------------------
' факты ОС
Const groupOS            = "Группа ОС"
Const typeOS            = "Вид ОС"
Const accountOS         = "Счет отнесения затрат"
Const LikvidPriceOS      =   "Ликвидационная стоимость"
Const propertiOS         = "Госимущество"
Const enterOS            = "Производственное ОС"
Const stateOS            = "Состояние ОС"
'факты ГП
'----------------------------------------------
Const FPCostprice      = "Фактическая себестоимость"
Const FPExpense          = "Материальные затраты по ГП"
'----------------------------------------------
'параметры БД
Const pnStateOS         = "Папка для состояний ОС"
Const pnGroupOS         = "Папка для групп ОС"
Const pnMetal            = "Папка для драгметаллов"   
Const pnTypeOS            = "Папка для вида ОС"
Const pnSAcc             = "Счет учета ОС"
Const pnAmAcc            = "Счет учета амортизации"   
Const pnMEP               = "Папка с МОЛ"
Const pnCapInvest      = "Счет капитальные инвестиции"
Const pnFPRealizAcc      = "Счет реализации ГП"
Const pnFPAcc            = "Счет готовая продукция"
Const pnFinRezAcc      = "Счет себестоимость релизованной ГП"
Const pnFPOutAcc         = "Счет возврат ГП"
Const pnFPPriceList      = "Прайс-лист внутренний"
Const pnFPExpense      = "Прайс-лист налоговый"
Const pnAccBuyer         = "Счет расчеты с покупателями"
Const pnFPFld            = "Папка Готовая продукция"
Const pnPrdAcc             = "Счет - <Const> 1 Then
         iMiscId = .Trans(4, 1).MiscId(iMiscNo)
         If iMiscId > 0 Then   
            For i = 2 To .TransCount
               With .TransList(i)
                  If .Item(1).AccDbId = iAccID Or .Item(1).AccCrId = iAccID Then .SetMisc iMiscNo, iMiscId
               End With
            Next
         End If
      End If
   End With
End Sub

'-------------------------------------------------------------
'получаем группу налогового учета
'------------------------------------------------------------
Function tmusr_TaxGroup (EntId, OnDate, ByRef GroupId)
'Dim IdAmAcc
   With WorkArea.Entity(EntId)
      If Not .Facts.Exists(GroupOS)Then .Facts.CreateRef GroupOS, acMisc
      GroupId = .Facts(GroupOS).Value2
      If AmAcc = 0 Then
         MsgBox "Введите значение параметра " & pnAmAcc & " для счета " & WorkArea.Account(OSAcc).Code , vbOKOnly + vbCritical, "Настройка приложения"
      End If
   End With
End Function


и tm_global.avb
Код:
Option Explicit

'--------------------------------------------------------------------------
Class StoredProcedure

   Private f_cmd
   Private cnn

   Public Property Get Name
      Name = f_cmd.CommandText
   End Property

   Public Property Let Name( value)
      Set cnn = WorkArea.AdoConnection
      cnn.Execute "set nocount on"
      cnn.CommandTimeOut = 10000
      Set f_cmd = CreateObject("ADODB.Command")
      f_cmd.ActiveConnection = cnn
      f_cmd.CommandType = 4
      f_cmd.CommandText = value
      f_cmd.CommandTimeOut = 10000
      f_cmd.Parameters.Refresh
   End Property

   Public Property Get Parameter( ParamName)
      Set Parameter = f_cmd.Parameters( ParamName)
   End Property

   Public Property Get Execute
      Set Execute = f_cmd.Execute
   End Property

   Public Sub Help
      Dim HelpText
      HelpText = _
         "Name - имя процедуры" & Chr(13) & Chr(10) &_
         "Parameters('<имя параметра>').Value - присвоить значение параметра" & Chr(13) & Chr(10) &_
         "Set r = Execute - выполнить" & Chr(13) & Chr(10) & _
         "Help - вывести это сообщение" & Chr(13) & Chr(10) & Chr(13) & Chr(10)
      
      If Not IsEmpty( f_cmd) Then
         HelpText = HelpText & "Параметры текущей SQL процедуры : " & Chr(13) & Chr(10)
         For Each p In f_cmd.Parameters
            HelpText = HelpText & _
               p.Name & Chr(13) & Chr(10)
         Next
      End If
      MsgBox HelpText,,"Help for class StoredProcedure"
   End Sub

End Class
Вернуться к началу
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.0 Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group