gifts2017

Расчет амортизации основных средств в Бухгалтерии 7.7. Проблема учета модернизированных объектов

Опубликовал Сергей Коробейников (Sergey1CSpb) в раздел Программирование - Ошибки в отраслевых решениях

Об обнаруженной проблеме при амортизации модернизированных ОС. Приведен код для исправления проблемы.

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

Недавно наткнулись на новый «амортизационный сюрприз» от 1С. Хочу предупредить пользователей о существовании данной проблемы и предложить вариант решения.

Расчет амортизации элемента ОС при «классическом» линейном способе осуществляется по известной всем формуле:

Амортизация за месяц =(Первоначальная стоимость)/(Срок полезного использования (кол.месяцев) )

Первоначальная стоимость определяется как сальдо по счету учета ОС (напр. 01.1) на начало месяца. Срок полезного использования (СПИ) в месяцах содержится в карточке ОС.

1С: Бухгалтерия 7.7 предоставляет возможность отражения операций модернизации ОС. В случае проведения этой операции изменяются стоимость и/или срок полезного использования за счет проведения улучшений объекта ОС. Принцип расчета амортизации при этом, разумеется, не изменяется, но параметры формулы определяются иначе. После модернизации на закладке «Модернизация» карточки ОС устанавливается флажок «Объект модернизирован» и заполняется рассчитанный параметр «остаточная стоимость после модернизации»

Именно этот параметр, а не сальдо по счету учета, будет применяться при расчете амортизации (в формуле параметр «Первоначальная стоимость»).

 

Параметр «СПИ» в формуле вычисляется на основании нового срока использования, назначенного при модернизации. 1С рассчитывает СПИ следующим образом:

СПИ=СПИ после модернизации-Количество месяцев начисленной амортизации до модернизации

Параметр Количество месяцев уже начисленной амортизации определяется как разность между датами модернизации и ввода в эксплуатацию, выраженная в месяцах.

 

В глобальном модуле 1С Бухгалтерии имеется функция глРасчетАмортизацииОС. На 116 (строке относительно заголовка функции) реализован описываемый расчет

 ОставшийсяСрокПолезногИспользованияПослеМодернизации = СрокПолезногоИспользования - (ДатаГод(КонМесяца(ДатаМодернизации)) - ДатаГод(КонМесяца(ОС.ДатаВводаВЭксплуатацию))) * 12         - (ДатаМесяц(КонМесяца(ДатаМодернизации)) - ДатаМесяц(КонМесяца(ОС.ДатаВводаВЭксплуатацию)));

Кроме непонятно для какой цели упорно повторяемых функций КонМесяца() (думаю, всем очевидно, что результат исполнения функций ДатаМесяц() и ДатаГод() будет одинаков для любого дня месяца) данный код не учитывает довольно важный момент.

До модернизации средство могло консервироваться, а иногда и по нескольку раз. В периоды консервации амортизация не начисляется, и расчет срока полезного использования по данной формуле будет ошибочным.

Для правильного расчета придется перебирать все периоды начисления амортизации с учетом возможных перерывов. Для этого приведенные выше строки кода следует заменить следующими строками.

ОставшийсяСрокПолезногИспользованияПослеМодернизации = СрокПолезногоИспользования
        КоличествоМесяцевИспользованияДоМодернизаци(ОС,ДатаМодернизации,ОС.ДатаВводаВЭксплуатацию);

В модуль выше по тексту добавить функцию КоличествоМесяцевИспользованияДоМодернизаци:

//*******************************************
Функция КоличествоМесяцевИспользованияДоМодернизаци(ОС,ДатаМодернизации,ДатаВвода)
 
 Использовано = (ДатаГод(ДатаМодернизации) - ДатаГод(ДатаВвода)) * 12
 + (ДатаМесяц(ДатаМодернизации) - ДатаМесяц(ДатаВвода));
 ПериодАмортизации = СоздатьОбъект("Периодический");
 
 ПериодАмортизации.ИспользоватьОбъект("НачислятьАмортизацию",Ос);
 ПериодАмортизации.ВыбратьЗначения(ДатаВвода,ДатаМодернизации);
 Начисляется = 1;
 ДатаН = ДатаМодернизации;
 Пока ПериодАмортизации.ПолучитьЗначение()=1 Цикл
 Если ПериодАмортизации.Значение = 0 Тогда
 ДатаН = ПериодАмортизации.ДатаЗнач;
 Начисляется = 0;
ИначеЕсли Начисляется = 0 Тогда //ВновьНачисляется
ДатаК = ПериодАмортизации.ДатаЗнач;
 Использовано = Использовано - (ДатаГод(ДатаК) - ДатаГод(ДатаН)) * 12
 - (ДатаМесяц(ДатаК) - ДатаМесяц(ДатаН));
 Начисляется = 1;
 КонецЕсли;
КонецЦикла;
Возврат Использовано;
КонецФункции
//*****************************************************************************

ПС: Данное решение должно успешно функционировать для любого способа начисления амортизации, а не только для линейного.

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа