Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Амортизация основных средств (начисление износа) , Ошибка при изменении метода расчета амортизации 2 страниц V   1 2 >          
5_kopeek Подменю пользователя
сообщение 21.07.11, 18:04
Сообщение #1

Ветеран
*******
Женщине-одинэснику
Группа: Пользователи*
Сообщений: 940
Спасибо сказали: 285 раз
Рейтинг: 0

В релизе 7.70.287 начисление износа по прямолинейному методу в БУ поисходит по формуле:
(ПервСтоимость-ЛиквидСтоимость)/СрокИспользования
, где
ПервСтоимость -- первоначальная стоимость (сальдо по дебету счета учета) ОС без учета начисленного износа;
ЛиквидСтоимость -- ликвидационная стоимость (как задана в карточке ОС);
СрокИспользования -- срок использования (как задан в карточке ОС).
Такой расчет ошибочен в случае, если с 01.04.11 для ОС был изменен метод начисления амортизации с налогового на прямолинейный. Согласно утверждениям моих клиентов (бухгалтеров) и консультациям в бухгалтерских изданиях начисляемая за апрель 2011 (и последующие месяцы) сумма износа в БУ должна быть равной начисляемой сумме износа в НУ. Для изменения алгоритма расчета можно изменить модуль документа НачислениеИзноса следующим образом:

1. Добавить две процедуры в начале модуля:
// Добавлено 5_копеек (начало) 
//*********************************************************************
Функция КонтрольИзмененияМетода(ОС)
    Если ОС.ДатаВвода>Дата("01.04.11") Тогда
        Возврат 0;
    КонецЕсли; // ОС.ДатаВвода
    Попытка
        СтарМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДатаНачНУ));
        НовМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДобавитьМесяц(ДатаНачНУ,1)));
    Исключение  
        Метод=СоздатьОбъект("Периодический");
        Метод.ИспользоватьОбъект("МетодРасчетаИзноса",ОС);
        СтарМетод=Метод.ЗначениеНаДату(НачМесяца(ДатаНачНУ));
        НовМетод=Метод.ЗначениеНаДату(НачМесяца(ДобавитьМесяц(ДатаНачНУ,1)));
    КонецПопытки;
    Если СтарМетод=НовМетод Тогда
        Возврат 0;
    КонецЕсли; // СтарМетод=НовМетод
    Возврат 1;
КонецФункции //ПроверкаИзмененияМетода  

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

2. Изменить процедуру РассчитатьИзносПоЭлементу(...)
...
    Если (ИзношеноПолностью = 0) или (ИзношеноПолностьюНУ = 0) Тогда
        //ПрямолинейноеСписание
        Если Элемент.МетодРасчетаИзноса = Перечисление.МетодыРасчетаИзноса.ПрямолинейноеСписание Тогда
            Если Элемент.СрокИспользования = 0 Тогда
                глКомментарий(Строка(Элемент)+": не задан срок полезного использования. Износ не начислен!",0,,"!");
                Возврат;
            КонецЕсли;
            СуммаИзноса = Макс(Окр((ПервСтоимость - ЛиквидационнаяСтоимость)/Элемент.СрокИспользования,2),0);
            //налоговый учет
            СрокИспользованияНУ = РассчитатьСрокИспользования(Элемент.ДатаВвода,Элемент.СрокИспользования);
            // Добавлено 5_копеек (начало)
            // бухучет при изменении метода
            Если КонтрольИзмененияМетода(Элемент)=1 Тогда
                СуммаИзноса=0;
                Если (СрокИспользованияНУ<>0) Тогда
                    СуммаИзноса = Макс(Окр((ПервСтоимость - ЛиквидационнаяСтоимость)/СрокИспользованияНУ,2),0);
                КонецЕсли;    

            КонецЕсли; // КонтрольИзмененияМетода(Элемент)=1
            // Добавлено 5_копеек (конец)
            СуммаИзносаНУ = 0;
            Если (СрокИспользованияНУ<>0) Тогда
                СуммаИзносаНУ = Макс(Окр((ПервСтоимостьНУ - ЛиквидационнаяСтоимость)/СрокИспользованияНУ,2),0);
            КонецЕсли;    
                        
            //УменьшениеОстатка
...

3. Изменить процедуру РассчитатьИзносПоСчету(...):
...
        ОстСтоимость = ПервСтоимость - Износ;
        ОстСтоимостьНУ = ПервСтоимостьНУ - ИзносНУ;
        Если (Сч = СчетПоКоду("10")) или (Сч = СчетПоКоду("100")) Тогда                                    
            ПервКво = 1;
        КонецЕсли;
        // Добавлено 5_копеек (начало)
        Если КонтрольИзмененияМетода(Ит.Субконто(1))=1 Тогда
            РассчитатьПервСтоимостьБУ(Ит.Субконто(1),ПервСтоимость,СчИзноса,Сч);
        КонецЕсли; // КонтрольИзмененияМетода(Ит.Субконто(1))=1    
        // Добавлено 5_копеек (конец)
        РассчитатьИзносПоЭлементу(Ит.Субконто(1),ПервСтоимость,ПервКво,ОстСтоимость,СчИзноса,Сч,ПервСтоимостьНУ,ОстСтоимость
НУ,СчИзносаНУ,СчНУ);
...

Рассматривался частный случай, поэтому на универсальность решение не претендует. Если есть возражения, дополнения или обнаружены ошибки, прошу комментировать.
____
добавлена проверка на ненулевое значение

Сообщение отредактировал 5_kopeek - 25.07.11, 15:46


alex1c Подменю пользователя
сообщение 23.07.11, 11:49
Сообщение #2

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 235
Спасибо сказали: 45 раз
Рейтинг: 40

В принципе правильно, но не слишком рационально...
Я пошел другим путем, взял остаточную стоимость отнял "ЛиквидационнаяСтоимость" и разделил на оставшееся количество месяцев (СрокИспользования - к-во месяцев за которые начислялся износ). Если кого-то затронуло...
//СуммаИзноса = Макс(Окр((ПервСтоимость - ЛиквидационнаяСтоимость)/Элемент.СрокИспользования,2),0);
// Начало(
// определим к-во мес. за которые начислялся износ
ДатаВвода = Элемент.ДатаВвода;
ДатаВвода = ?(ДатаЧисло(ДатаВвода)=1, ДатаВвода, КонМесяца(ДатаВвода)+1);
Годы = ДатаГод(ДатаДок)-ДатаГод(ДатаВвода);
Если Годы < 0 Тогда
    Годы = Годы + 100;
КонецЕсли;
РазницаМес = ДатаМесяц(ДатаДок) - ДатаМесяц(ДатаВвода) + Годы*12;
Если ДатаЧисло(ДатаДок) < ДатаЧисло(ДатаВвода) Тогда
    РазницаМес = РазницаМес-1;
КонецЕсли;
СуммаИзноса = Макс(Окр((ОстСтоимость - ЛиквидационнаяСтоимость)/(Элемент.СрокИспользования-РазницаМес),2),0);
// окончание)

единственное что подправил дату ввода на 1.04.11.

Спасибо сказали: Andrij-ko,

kostyabuh1971 Подменю пользователя
сообщение 23.07.11, 13:06
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 11
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(alex1c @ 23.07.11, 11:49) *
В принципе правильно, но не слишком рационально...
Я пошел другим путем, взял остаточную стоимость отнял "ЛиквидационнаяСтоимость" и разделил на оставшееся количество месяцев (СрокИспользования - к-во месяцев за которые начислялся износ). Если кого-то затронуло...
//СуммаИзноса = Макс(Окр((ПервСтоимость - ЛиквидационнаяСтоимость)/Элемент.СрокИспользования,2),0);
// Начало(
// определим к-во мес. за которые начислялся износ
ДатаВвода = Элемент.ДатаВвода;
ДатаВвода = ?(ДатаЧисло(ДатаВвода)=1, ДатаВвода, КонМесяца(ДатаВвода)+1);
Годы = ДатаГод(ДатаДок)-ДатаГод(ДатаВвода);
Если Годы < 0 Тогда
    Годы = Годы + 100;
КонецЕсли;
РазницаМес = ДатаМесяц(ДатаДок) - ДатаМесяц(ДатаВвода) + Годы*12;
Если ДатаЧисло(ДатаДок) < ДатаЧисло(ДатаВвода) Тогда
    РазницаМес = РазницаМес-1;
КонецЕсли;
СуммаИзноса = Макс(Окр((ОстСтоимость - ЛиквидационнаяСтоимость)/(Элемент.СрокИспользования-РазницаМес),2),0);
// окончание)

единственное что подправил дату ввода на 1.04.11.


Я делал так как в первом случае представлено. И вот что мне выдала программа
СтарМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДатаНачНУ<<?>>));
{Документ.НачислениеИзноса.Модуль Документа(8)}: Переменная не определена (ДатаНачНУ)
СтарМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДатаНачНУ)<<?>>);
{Документ.НачислениеИзноса.Модуль Документа(8)}: Неопознанный оператор
НовМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДобавитьМесяц(ДатаНачНУ<<?>>,1)));
{Документ.НачислениеИзноса.Модуль Документа(9)}: Переменная не определена (ДатаНачНУ)
НовМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДобавитьМесяц(ДатаНачНУ,1)<<?>>));
{Документ.НачислениеИзноса.Модуль Документа(9)}: Неопознанный оператор
НовМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДобавитьМесяц(ДатаНачНУ,1)))<<?>>;
{Документ.НачислениеИзноса.Модуль Документа(9)}: Ожидается ключевое слово 'КонецФункции' ('EndFunction')
Что то упустил?
"единственное что подправил дату ввода на 1.04.11." Это Вы где подправили? Всем объектам поставили 01.04.2011? А если я не хочу автоматом определям срок использования. В процессе инвентаризации просто определили срок полезного использования после 01.04.2011

alex1c Подменю пользователя
сообщение 23.07.11, 13:49
Сообщение #4

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 235
Спасибо сказали: 45 раз
Рейтинг: 40

У вас наверное комплексная, а в ней не определен параметр ДатаНачНУ. Ошибка...
Ну а если вы не хотите всем объектам ставить дату ввода 01.04.11, тогда ставьте срок использования, с даты ввода, а не с 1.04...

Сообщение отредактировал alex1c - 23.07.11, 13:49

Спасибо сказали: kostyabuh1971,

valeria Подменю пользователя
сообщение 23.07.11, 14:07
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 15
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(5_kopeek @ 21.07.11, 18:04) *
В релизе 7.70.287 начисление износа по прямолинейному методу в БУ поисходит по формуле:
(ПервСтоимость-ЛиквидСтоимость)/СрокИспользования
, где
ПервСтоимость -- первоначальная стоимость (сальдо по дебету счета учета) ОС без учета начисленного износа;
ЛиквидСтоимость -- ликвидационная стоимость (как задана в карточке ОС);
СрокИспользования -- срок использования (как задан в карточке ОС).
Такой расчет ошибочен в случае, если с 01.04.11 для ОС был изменен метод начисления амортизации с налогового на прямолинейный. Согласно утверждениям моих клиентов (бухгалтеров) и консультациям в бухгалтерских изданиях начисляемая за апрель 2011 (и последующие месяцы) сумма износа в БУ должна быть равной начисляемой сумме износа в НУ. Для изменения алгоритма расчета можно изменить модуль документа НачислениеИзноса следующим образом:


СПАСИБО ОГРОМНОЕ,ВСЕ РАБОТАЕТ!
Причина редактирования: Ну какая же кривизна рук должна быть, чтобы некорректно вставлять теги!!!

kostyabuh1971 Подменю пользователя
сообщение 23.07.11, 14:15
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 11
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(alex1c @ 23.07.11, 13:49) *
У вас наверное комплексная, а в ней не определен параметр ДатаНачНУ. Ошибка...
Ну а если вы не хотите всем объектам ставить дату ввода 01.04.11, тогда ставьте срок использования, с даты ввода, а не с 1.04...

А как мне его добавить в мою конфигурацию?

Pepe Подменю пользователя
сообщение 23.07.11, 14:46
Сообщение #7

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Цитата(kostyabuh1971 @ 23.07.11, 15:15) *
А как мне его добавить в мою конфигурацию?

Пропишите ее в начале модуля документа как переменную и добавьте строку ДатаНачНУ="31.03.2011" в процедуру ОбработкаПроведения.

Спасибо сказали: kostyabuh1971,

kostyabuh1971 Подменю пользователя
сообщение 23.07.11, 15:19
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 11
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Pepe @ 23.07.11, 14:46) *
Пропишите ее в начале модуля документа как переменную и добавьте строку ДатаНачНУ="31.03.2011" в процедуру ОбработкаПроведения.

У меня все прописано, но ошибку продолжает выдавать. Что еще можно предпринять?

Pepe Подменю пользователя
сообщение 23.07.11, 15:53
Сообщение #9

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Воспользоваться отладчиком и посмотреть значение переменной.
Конфигурация?

kostyabuh1971 Подменю пользователя
сообщение 23.07.11, 16:06
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 11
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Pepe @ 23.07.11, 15:53) *
Воспользоваться отладчиком и посмотреть значение переменной.
Конфигурация?

Бух учет Проф 287

Цитата(Pepe @ 23.07.11, 15:53) *
Воспользоваться отладчиком и посмотреть значение переменной.
Конфигурация?

Вот какая у меня в отладчике процедура

[удалено т.к. пользователю впадлу прочесть правила]

Я правильно смотрю? Может не то смотрю?

Pepe Подменю пользователя
сообщение 23.07.11, 16:07
Сообщение #11

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Чудес не бывает. Возможно была допущена ошибка при внесении изменений. В конфигураторе Конфигурация-полный синтаксический контроль. Листинг в студию.

Спасибо сказали: kostyabuh1971,

kostyabuh1971 Подменю пользователя
сообщение 23.07.11, 16:13
Сообщение #12

Общительный
**
Группа: Пользователи
Сообщений: 11
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Pepe @ 23.07.11, 16:07) *
Чудес не бывает. Возможно была допущена ошибка при внесении изменений. В конфигураторе Конфигурация-полный синтаксический контроль. Листинг в студию.

Вот что выдало, то же самое, что и в программе
СтарМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДатаНачНУ<<?>>));
{Документ.НачислениеИзноса.Модуль Документа(8)}: Переменная не определена (ДатаНачНУ)
СтарМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДатаНачНУ)<<?>>);
{Документ.НачислениеИзноса.Модуль Документа(8)}: Неопознанный оператор
НовМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДобавитьМесяц(ДатаНачНУ<<?>>,1)));
{Документ.НачислениеИзноса.Модуль Документа(9)}: Переменная не определена (ДатаНачНУ)
НовМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДобавитьМесяц(ДатаНачНУ,1)<<?>>));
{Документ.НачислениеИзноса.Модуль Документа(9)}: Неопознанный оператор
НовМетод=ОС.МетодРасчетаИзноса.Получить(НачМесяца(ДобавитьМесяц(ДатаНачНУ,1)))<<?>>;
{Документ.НачислениеИзноса.Модуль Документа(9)}: Ожидается ключевое слово 'КонецФункции' ('EndFunction')
При проверке модуля обнаружены синтаксические ошибки!

А какие ошибки? Как исправить?

Pepe Подменю пользователя
сообщение 23.07.11, 16:22
Сообщение #13

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Начало модуля
Перем СпрНА, ДатаНачНУ;
Перем ОбщаяСуммаИзноса, СуммаИзноса, СуммаИзносаНУ;
.......

Спасибо сказали: kostyabuh1971,

kostyabuh1971 Подменю пользователя
сообщение 23.07.11, 16:42
Сообщение #14

Общительный
**
Группа: Пользователи
Сообщений: 11
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Pepe @ 23.07.11, 16:22) *
Начало модуля
Перем СпрНА, ДатаНачНУ;
Перем ОбщаяСуммаИзноса, СуммаИзноса, СуммаИзносаНУ;
.......

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

А за апрель вообще не начисляется износ, но у меня же основные фонды не новые.

Shahta27 Подменю пользователя
сообщение 30.07.11, 17:04
Сообщение #15

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 9 раз
Рейтинг: 0

Цитата(5_kopeek @ 21.07.11, 19:04) *
В релизе 7.70.287 начисление износа по прямолинейному методу в БУ поисходит по формуле:
(ПервСтоимость-ЛиквидСтоимость)/СрокИспользования
, где
ПервСтоимость -- первоначальная стоимость (сальдо по дебету счета учета) ОС без учета начисленного износа;
ЛиквидСтоимость -- ликвидационная стоимость (как задана в карточке ОС);
СрокИспользования -- срок использования (как задан в карточке ОС).
Такой расчет ошибочен в случае, если с 01.04.11 для ОС был изменен метод начисления амортизации с налогового на прямолинейный.


Этот глюк так и остался и после обновления на релиз 288. После проведения документа "Корректировка.." Налоговая амортизация считается правильно, а вот в бухгалтерском учете заметил, что для определения остаточной стоимости за базу берется первоначальная стоимость (при вводе в эксплуатацию) и делится на весь полезный срок использования, без учета периода эксплуатации. Пришлось воспользоваться кодом, выложенным постом выше 5_Копеек. Теперь начисленная сумма амортизации в налоговом = бухгалтерскому износу.
Спасибо 5_Копеек

Спасибо сказали: SirVolk,

Andrij-ko Подменю пользователя
сообщение 06.08.11, 14:59
Сообщение #16

Говорящий
***
Группа: Пользователи
Сообщений: 52
Спасибо сказали: 4 раз
Рейтинг: 0

Цитата(5_kopeek @ 21.07.11, 19:04) *
В релизе 7.70.287 начисление износа по прямолинейному методу в БУ поисходит по формуле:
...
Такой расчет ошибочен в случае, если с 01.04.11 для ОС был изменен метод начисления амортизации с налогового на прямолинейный. ...
а у 288 релізі ці помилка виправлена?

5_kopeek Подменю пользователя
сообщение 06.08.11, 15:07
Сообщение #17

Ветеран
*******
Женщине-одинэснику
Группа: Пользователи*
Сообщений: 940
Спасибо сказали: 285 раз
Рейтинг: 0

Цитата(Andrij-ko @ 06.08.11, 14:59) *
а у 288 релізі ці помилка виправлена?

В 288 релизе алгоритм начисления износа по прямолинейному методу в бухгалтерском учете не изменился.

Спасибо сказали: Andrij-ko, bob210250,

Andrij-ko Подменю пользователя
сообщение 08.08.11, 14:00
Сообщение #18

Говорящий
***
Группа: Пользователи
Сообщений: 52
Спасибо сказали: 4 раз
Рейтинг: 0

Зробив по методу Alex1c:
Цитата(alex1c @ 23.07.11, 12:49) *
Я пошел другим путем, взял остаточную стоимость отнял "ЛиквидационнаяСтоимость" и разделил на оставшееся количество месяцев (СрокИспользования - к-во месяцев за которые начислялся износ).
При проведенні документа видається помилка, і документ не проводиться.
"СуммаИзноса = Макс(Окр((ОстСтоимость - ЛиквидационнаяСтоимость)/(Элемент.СрокИспользования-РазницаМес),2),0);
{Документ.НачислениеИзноса.Модуль Документа(100)}: Деление на 0"

Я так зрозумів, що це у місяці, в якому повинно нарахуватися 100% зносу. Як виправити?

vadim007 Подменю пользователя
сообщение 07.09.11, 11:01
Сообщение #19

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Цитата(5_kopeek @ 21.07.11, 19:04) *
Рассматривался частный случай, поэтому на универсальность решение не претендует. Если есть возражения, дополнения или обнаружены ошибки, прошу комментировать.

У меня половина ОС по этому алгоритму не проводится. Протрассировал для одного элемента: НА = ARC BACK UPC CS 350 EI НА.ДатаВвода = '25.02.02' НА.СрокИспользования = 12

1. Перед вызовом РассчитатьПервСтоимостьБУ(НА,ПервСтоимость,СчИзноса,Сч): ( из РассчитатьИзносПоСчету() )
ПервСтоимость = 415
ОстСтоимость = 40.63
ПервСтоимостьНУ = 40.63
ОстСтоимостьНУ = 40.63

2. После вызова РассчитатьПервСтоимостьБУ(НА,ПервСтоимость,СчИзноса,Сч): ( из РассчитатьИзносПоСчету() )
ПервСтоимость = 40.63
ОстСтоимость = 40.63
ПервСтоимостьНУ = 40.63
ОстСтоимостьНУ = 40.63

3. Вызов РассчитатьИзносПоЭлементу(НА,ПервСтоимость,ПервКво,ОстСтоимость,СчИзноса,Сч,Перв
СтоимостьНУ,ОстСтоимостьНУ,СчИзносаНУ,СчНУ);
      Если (ИзношеноПолностью = 0) или (ИзношеноПолностьюНУ = 0) Тогда
             // ПрямолинейноеСписание
             Если Элемент.МетодРасчетаИзноса = Перечисление.МетодыРасчетаИзноса.ПрямолинейноеСписание Тогда
                  Если Элемент.СрокИспользования = 0 Тогда
                       глКомментарий(Строка(Элемент)+": не задан срок полезного использования. Износ не начислен!",0,,"!");
                       Возврат;
                  КонецЕсли;
                  СуммаИзноса = Макс(Окр((ПервСтоимость - ЛиквидационнаяСтоимость)/Элемент.СрокИспользования,2),0);
точка1
                  // Налоговый учет
                  СрокИспользованияНУ = РассчитатьСрокИспользования(Элемент.ДатаВвода,Элемент.СрокИспользования);
                  //! Бухучет при изменении метода
                  Если КонтрольИзмененияМетода(Элемент) = 1 Тогда
                      СуммаИзноса=0;
                      Если СрокИспользованияНУ <> 0 Тогда
                          СуммаИзноса = Макс(Окр((ПервСтоимость - ЛиквидационнаяСтоимость)/СрокИспользованияНУ,2),0);
                      КонецЕсли;
точка2
                  КонецЕсли;
                  СуммаИзносаНУ = 0;
                  Если СрокИспользованияНУ <> 0 Тогда
                      СуммаИзносаНУ = Макс(Окр((ПервСтоимостьНУ - ЛиквидационнаяСтоимость)/СрокИспользованияНУ,2),0);
                  КонецЕсли;
точка3

точка1:
СуммаИзноса = 3.39
СрокИспользованияНУ = 0
точка2:
СуммаИзноса = 0
СрокИспользованияНУ = 0
точка3
СуммаИзноса = 0
СрокИспользованияНУ = 0

Т.е. в точке1 износ правильный, а после точки2 = нулевой.
По моему, это не верно, т.к. у этого ОС до 01.04.2011г. метод расчета износа был налоговый, а с 01.04.2011г. - прямолин.списание. И срок использования нужно считать не от даты ввода ОС в эксплуатация, с 01.04.2011г.
Для своей конфы я пока решил проблему след. образом:
                Если Элемент.ДатаВвода < '01.04.2011' Тогда
                    Если СпрНА.МетодРасчетаИзноса.Получить('30.03.2011') = Перечисление.МетодыРасчетаИзноса.ПрямолинейноеСписание Тогда
                        ОставшийсяСрокИспользования = Месяцев(Элемент.ДатаВвода, ДатаДок)-1;
                    Иначе
                        ОставшийсяСрокИспользования = Месяцев('01.04.2011', ДатаДок);
                    КонецЕсли
                Иначе
                    Если ДатаДок < Элемент.ДатаВвода Тогда
                        //! Этого не может быть!
                        Сообщить("Ошибка: попытка расчета амортизации для '"+СокрЛП(Элемент)+"', введенного позже даты текущего документа: "+СокрЛП(Элемент.ДатаВвода));
                        ОставшийсяСрокИспользования = 0;
                    ИначеЕсли ДатаДок > Элемент.ДатаВвода Тогда
                        ОставшийсяСрокИспользования = Месяцев(Элемент.ДатаВвода, ДатаДок);
                    Иначе
                        ОставшийсяСрокИспользования = Элемент.СрокИспользования;
                    КонецЕсли;
                КонецЕсли;
                //! Найдем количество месяцев, оставшихся до конца эксплуатации
                ОставшийсяСрокИспользования = Элемент.СрокИспользования - ОставшийсяСрокИспользования;
                СуммаИзноса = Макс(Окр((ОстСтоимость-ЛиквидационнаяСтоимость)/ОставшийсяСрокИспользования,2),0);
                //налоговый учет
                СрокИспользованияНУ = РассчитатьСрокИспользования(Элемент.ДатаВвода,Элемент.СрокИспользования);
                СуммаИзносаНУ = 0;
                Если (СрокИспользованияНУ<>0) Тогда
                    СуммаИзносаНУ = Макс(Окр((ПервСтоимостьНУ - ЛиквидационнаяСтоимость)/СрокИспользованияНУ,2),0);
                КонецЕсли;

Где функция Месяцев(..) следующая:
Функция Месяцев(ДатаН, ДатаК)
        //! Возвращает количество полных месяцев между датами
    Если ДатаН < ДатаК Тогда
        ТекДата=НачМесяца(ДатаН);
          Значение=0;
          Пока ТекДата<НачМесяца(ДатаК) Цикл
            ТекДата=ДобавитьМесяц(ТекДата,1);
            Значение=Значение+1;
          КонецЦикла;
          Возврат(Значение);
    Иначе
          Возврат(0);
    КонецЕсли;
КонецФункции

Для расчета СуммаИзносаНУ остался старый алгоритм, и СуммаИзносаНУ не совпадает с СуммаИзноса по бух.учету. Наверное вместо СрокИспользованияНУ надо использовать ОставшийсяСрокИспользования.

Andrij-ko Подменю пользователя
сообщение 26.10.11, 12:21
Сообщение #20

Говорящий
***
Группа: Пользователи
Сообщений: 52
Спасибо сказали: 4 раз
Рейтинг: 0

Цитата(Andrij-ko @ 08.08.11, 15:00) *
При проведенні документа видається помилка, і документ не проводиться.
"СуммаИзноса = Макс(Окр((ОстСтоимость - ЛиквидационнаяСтоимость)/(Элемент.СрокИспользования-РазницаМес),2),0);
{Документ.НачислениеИзноса.Модуль Документа(100)}: Деление на 0"
завдяки Alex1c ця проблема з нарахуванням зносу в останньому місяці вирішилась таким чином:
Если (ИзношеноПолностью = 0) Тогда
//СуммаИзноса = Макс(Окр((ПервСтоимость - ЛиквидационнаяСтоимость)/Элемент.СрокИспользования,2),0);
// определим к-во мес. за которые начислялся износ
ДатаВвода = Элемент.ДатаВвода;
ДатаВвода = ?(ДатаЧисло(ДатаВвода)=1, ДатаВвода, КонМесяца(ДатаВвода)+1);
Годы = ДатаГод(ДатаДок)-ДатаГод(ДатаВвода);
Если Годы < 0 Тогда
Годы = Годы + 100;
КонецЕсли;
РазницаМес = ДатаМесяц(ДатаДок) - ДатаМесяц(ДатаВвода) + Годы*12;
Если ДатаЧисло(ДатаДок) < ДатаЧисло(ДатаВвода) Тогда
РазницаМес = РазницаМес-1;
КонецЕсли;
СрокИспользования = Элемент.СрокИспользования-РазницаМес;
СуммаИзноса = ?(СрокИспользования=0, 0, Макс(Окр((ОстСтоимость - ЛиквидационнаяСтоимость)/СрокИспользования,2),0));
КонецЕсли;

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 11.05.24, 21:31
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!