Полигон 1С
08 Сентябрь 2010, 21:49:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: НОВЫЕ РАЗДЕЛЫ НА ФОРУМЕ: РАБОТА И ОБРАЗОВАНИЕ, КЛУБ ПУТЕШЕСТВЕННИКОВ, БЫТОВАЯ ТЕХНИКА, ПОЛИТИКА И ЭКОНОМИКА, ЗДОРОВЬЕ, БИБЛИОТЕКА, КУХНЯ, БАРНАЯ СТОЙКА
Расширенный поиск  
Страниц: [1]   Вниз
Печать
Автор Тема: ПеремещениеОС  (Прочитано 2119 раз)
0 Пользователей и 1 Гость смотрят эту тему.
newfantom
Пользователь
**

Карма: +0/-0
Offline Offline

Сообщений: 57


« : 21 Февраль 2008, 15:09:05 »

Доброго времени суток всем!!!
Подскажите пожалуйста, в 1С бухгалтерии из запаса в эксплуатацию
в документе ПеремещениеОС на вкладке бухгалтерском учете стоит дата от 17.01.2008. При расчете амортизации требуется, чтобы рассчитывал с 01.02.2008(так сказала бухгалтер), а программа считает с января. Как быть.
Записан
JEKA
Администратор
*****

Карма: +67/-2
Offline Offline

Сообщений: 4483


ГЫ-ГЫ


WWW
« Ответ #1 : 21 Февраль 2008, 15:29:37 »

Насколько я знаю, амортизация на ОС должна начать начисляться с месяца, следующего за месяцев ввода в эксплуатацию и в 1С так и реализовано.
Записан

newfantom
Пользователь
**

Карма: +0/-0
Offline Offline

Сообщений: 57


« Ответ #2 : 21 Февраль 2008, 15:44:02 »

newfantom
Такой вопрос лучше пиши в личку Подмигивающий..
Т.е. не огочайся что отредактировал Подмигивающий.
alexey
« Последнее редактирование: 21 Февраль 2008, 16:31:05 от alexey » Записан
alexey
Администратор
*****

Карма: +27/-0
Offline Offline

Сообщений: 1956


Hell Ain't A Bad Place To Be..


WWW
« Ответ #3 : 22 Февраль 2008, 08:06:20 »

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

alexey
Администратор
*****

Карма: +27/-0
Offline Offline

Сообщений: 1956


Hell Ain't A Bad Place To Be..


WWW
« Ответ #4 : 22 Февраль 2008, 08:07:15 »

Вот кусок из Начисление Амортизации:
Процедура НачислениеАмортизацииОС()   
   ПЗАмортизацияОС = глПЗ("АмортизацияОС");

   Если (ОсновныеСредства_01 = 1) или (ОсновныеСредства_03 = 1) или (ДляЦелейНалогообложения = 1) Тогда
      
      Ном = 0;
      ОС = СоздатьОбъект("Справочник.ОсновныеСредства");
      ОС.ВыбратьЭлементы();
      Пока ОС.ПолучитьЭлемент() = 1 Цикл
         Если (ОС.ЭтоГруппа() = 1) или (ОС.ПометкаУдаления() = 1) Тогда
             Продолжить;
         КонецЕсли;
         
         Состояние("Начисление амортизации: " + ОС);
         
         Если (ОС.СпособНачисленияАмортизации = Перечисление.СпособыНачисленияАмортизацииОС.ПропорциональноОбъемуПродукцииРабот)
            И (ОС.СпособУказанияОбъемаПродукции.Получить(ДатаДок) = Перечисление.СпособыУказанияОбъемаПродукции.РассчитываетсяАвтоматически) Тогда
            РассчитатьФактическийВыпуск(ОС.ТекущийЭлемент());
         КонецЕсли;
         
         НачислятьАмортизациюБух = 1;
         СведенияОбОС = глРасчетАмортизацииОС(ОС.ТекущийЭлемент(), ДатаДок);
         СчетУчета = СведенияОбОС.Получить("СчетУчета");
         Если ПустоеЗначение(СчетУчета) = 0 Тогда
            Если (СчетУчета.Родитель() = СчетПоКоду("01")) и (ОсновныеСредства_01 = 0) Тогда
                НачислятьАмортизациюБух = 0;
               
            ИначеЕсли (СчетУчета.Родитель() = СчетПоКоду("03")) и (ОсновныеСредства_03 = 0) Тогда
                НачислятьАмортизациюБух = 0;
            КонецЕсли;
         Иначе
            НачислятьАмортизациюБух = 0;
         КонецЕсли;
            
         Если НачислятьАмортизациюБух = 1 Тогда
            Ном = Ном + 1;
            БалансоваяСтоимость         = СведенияОбОС.Получить("БалансоваяСтоимостьНач");
            АмортизацияНаНачалоМесяца    = СведенияОбОС.Получить("НачисленнаяАмортизацияНач");
            РассчитаннаяАмортизацияБух    = СведенияОбОС.Получить("РассчитаннаяАмортизацияБух");
            СчетНачисленияАмортизации    = СведенияОбОС.Получить("СчетНачисленияАмортизации");
            ОстаточнаяСтоимость = БалансоваяСтоимость - АмортизацияНаНачалоМесяца;
            
            Если РассчитаннаяАмортизацияБух > 0 Тогда
               Если СчетНачисленияАмортизации.Забалансовый = 1 Тогда
                  Операция.НоваяПроводка();
                  Операция.НомерЖурнала = "ОС";                  
                  Операция.СодержаниеПроводки = "Износ за " + ДатаГод(ДатаДок) + " г.";
                  Операция.ПервичныйДокумент  = глПредставлениеПервичногоДокумента(Контекст);
                  Операция.Дебет.Счет = СчетНачисленияАмортизации;
                  Операция.Дебет.ОсновныеСредства = ОС.ТекущийЭлемент();
                  Операция.Сумма = РассчитаннаяАмортизацияБух;
                  Продолжить;
                  
               Иначе
                  Если ОС.СчетЗатрат.Получить(ДатаДок).Выбран() = 0 Тогда
                     ТекстСообщения = "Не указан счет отнесения затрат по начисленной амортизации для ОС: "
                        + ОС.Наименование + ", инв.№" + ОС.Код + ".";
                     глНеПроводить(ТекущийДокумент(), ТекстСообщения);
                     Возврат;
                  КонецЕсли;
                  СчетНачисленияАмортизации = СведенияОбОС.Получить("СчетНачисленияАмортизации");
                  Операция.НоваяПроводка();
                  Операция.НомерЖурнала = "ОС";
                  Операция.СодержаниеПроводки = "Аморт.за " + Формат(ДатаДок, "Д ММММГГГГ");
                  Операция.ПервичныйДокумент  = глПредставлениеПервичногоДокумента(Контекст);
                  
                  СчетЗатрат = ОС.СчетЗатрат.Получить(ДатаДок);
                  Операция.Дебет.Счет = СчетЗатрат;
                  Если (ВедениеАналитикиНаСчетах = 1) и (СчетЗатрат = СчетПоКоду("20")) Тогда
                     Операция.Дебет.Субконто(1, "");
                     Операция.Дебет.Субконто(2, ПЗАмортизацияОС);
                     Операция.Дебет.Субконто(3, ОС.Субконто3.Получить(ДатаДок));
                  Иначе
                     Операция.Дебет.Субконто(1, ОС.Субконто1.Получить(ДатаДок));
                     Операция.Дебет.Субконто(2, ОС.Субконто2.Получить(ДатаДок));
                     Операция.Дебет.Субконто(3, ОС.Субконто3.Получить(ДатаДок));
                  КонецЕсли;
                  Операция.Кредит.Счет = СчетНачисленияАмортизации;
                  Операция.Кредит.ОсновныеСредства = ОС.ТекущийЭлемент();
                  Операция.Сумма = РассчитаннаяАмортизацияБух;
               КонецЕсли;
               СуммаОперации = СуммаОперации + РассчитаннаяАмортизацияБух;
               
               // Списание постоянных разниц.
               Если СчетНачисленияАмортизации.Забалансовый <> 1 Тогда
                  Если ПрименяетсяПБУ18 = Да Тогда
                      ВсегоПостоянныхРазниц = БухИт.СНД("НПР.01",,, ОС.ТекущийЭлемент());
                     Если ВсегоПостоянныхРазниц <> 0 Тогда
                         СписатьПостоянныхРазниц = ВсегоПостоянныхРазниц * (РассчитаннаяАмортизацияБух / ОстаточнаяСтоимость);
                        Если СписатьПостоянныхРазниц <> 0 Тогда
                           СчетДт = ОС.СчетЗатрат.Получить(ДатаДок);
                           СчетНПР = глПолучитьСчетДебетаНПР(СчетДт, ОС.Субконто1.Получить(ДатаДок));
                           
                           Операция.НоваяПроводка();
                           Операция.НомерЖурнала = "ПР";
                           Операция.СодержаниеПроводки = "Списание постоянных разниц";
                           Если ПустоеЗначение(СчетНПР) = 0 Тогда
                              Операция.Дебет.Счет = СчетНПР;
                              Операция.Дебет.Субконто(1, ОС.Субконто1.Получить(ДатаДок));
                              Операция.Дебет.Субконто(2, ОС.Субконто2.Получить(ДатаДок));
                              Операция.Дебет.Субконто(3, ОС.Субконто3.Получить(ДатаДок));
                           КонецЕсли;
                           Операция.Кредит.Счет = СчетПоКоду("НПР.01");
                           Операция.Кредит.ОсновныеСредства = ОС.ТекущийЭлемент();
                           Операция.Сумма = СписатьПостоянныхРазниц;
                        КонецЕсли;
                     КонецЕсли;
                  КонецЕсли;
               КонецЕсли;
            КонецЕсли;
            
            // Если объект был модернизирован в этом месяце,
            // то необходимо записать остаточную стомиость объекта
            // на конец того месяца, в котором была произведена модернизация.
            Если БылаМодернизация(ОС) = 1 Тогда
               
               // Установить остаточную стоимость для целей бухгалтерского учета
                БалансоваяСтоимостьКон    = СведенияОбОС.Получить("БалансоваяСтоимостьКон");
               АмортизацияНаКонецМесяца = СведенияОбОС.Получить("НачисленнаяАмортизацияКон");
               РассчитаннаяАмортизация  = СведенияОбОС.Получить("РассчитаннаяАмортизацияБух");
               ОстаточнаяСтоимость      = БалансоваяСтоимостьКон - АмортизацияНаКонецМесяца - РассчитаннаяАмортизация;
               УстановитьРеквизитСправочника(ОС, "ОстаточнаяСтоимостьПослеМодернизации", ОстаточнаяСтоимость, ДатаДок);
            КонецЕсли;
         КонецЕсли;
         
         Если ДатаДок < '01.01.2002' Тогда
            Если (ДляЦелейНалогообложения = 1) и
                (ОС.ДатаВводаВЭксплуатацию < НачМесяца(ДатаДок)) и
                (ОС.ПодлежитАмортизации = 1) Тогда
               РассчитаннаяАмортизацияНалог = СведенияОбОС.Получить("РассчитаннаяАмортизацияНалог");
               БалансоваяСтоимость = СведенияОбОС.Получить("БалансоваяСтоимостьНалог");
               АмортизацияНаНачалоМесяца = СведенияОбОС.Получить("НачисленнаяАмортизацияНалог");
               
               Если НачислятьАмортизациюБух = 0 Тогда
                  Ном = Ном + 1;
               КонецЕсли;
               
               Если РассчитаннаяАмортизацияНалог > 0 Тогда
                  Операция.НоваяПроводка();
                  Операция.НомерЖурнала = "ОС";
                  Операция.СодержаниеПроводки = "Аморт.за " + Формат(ДатаДок, "Д ММММГГГГ");
                  Операция.ПервичныйДокумент  = глПредставлениеПервичногоДокумента(Контекст);
                  Операция.Кредит.Счет = СчетПоКоду("АОС");
                  Операция.Кредит.ОсновныеСредства = ОС.ТекущийЭлемент();
                  Операция.Сумма = РассчитаннаяАмортизацияНалог;
               КонецЕсли;
            КонецЕсли;
            
         Иначе
            Если ДляЦелейНалогообложения = 1 Тогда
               БалансоваяСтоимостьНач        = СведенияОбОС.Получить("БалансоваяСтоимостьНалог");
               БалансоваяСтоимостьКон       = СведенияОбОС.Получить("БалансоваяСтоимостьНалогКон");
               АмортизацияНаНачалоМесяца    = СведенияОбОС.Получить("НачисленнаяАмортизацияНалог");
               РассчитаннаяАмортизацияНалог = СведенияОбОС.Получить("РассчитаннаяАмортизацияНалог");
               ПрименяетсяБазоваяСтоимость  = СведенияОбОС.Получить("ПрименяетсяБазоваяСтоимость");
                              
               // Документ записывать базовую стоимость, только в том случае, если:
               //  - ранее базовая стоимость не определена;
               //  - на начало месяца остаточная стоимость > 20% от первоначальной;
               //  - на конец месяца остаточная стоимость <= 20% от первоначальной.
               Если ОС.МетодНачисленияАмортизации = Перечисление.МетодыНачисленияАмортизации.Нелинейный Тогда
                  Если ОС.НачислятьАмортизацию.Получить(ДатаДок) = 1 Тогда
                     Если ПрименяетсяБазоваяСтоимость = 0 Тогда // если уже применяется базовая стоимость, то больше не надо ее определять
                        ОстаточнаяСтоимостьНач = БалансоваяСтоимостьНач - АмортизацияНаНачалоМесяца;
                        Если ОстаточнаяСтоимостьНач > (0.2 * БалансоваяСтоимостьНач) Тогда
                           ОстаточнаяСтоимостьКон = БалансоваяСтоимостьКон - АмортизацияНаНачалоМесяца - РассчитаннаяАмортизацияНалог;
                           Если ОстаточнаяСтоимостьКон <= (0.2 * БалансоваяСтоимостьКон) Тогда
                              УстановитьРеквизитСправочника(ОС, "БазоваяСтоимость", ОстаточнаяСтоимостьКон, ДатаДок);
                           КонецЕсли;
                        КонецЕсли;
                     КонецЕсли;
                  КонецЕсли;
               КонецЕсли;

               Если РассчитаннаяАмортизацияНалог > 0 Тогда
                  ВидРасхода = ОС.ВидРасхода.Получить(ДатаДок);
                  Объект = ОС.Объект.Получить(ДатаДок);
                  Если (НовыеПравилаВеденияНУ = 2) и (ВидРасхода = Перечисление.ВидыРасходов.ПрямыеРасходы) Тогда
                     Объект = "";
                  КонецЕсли;
                  СчетИАналитикаДляОтнесенияРасходов = глПолучитьСчетРасходовДляЦелейНалоговогоУчета(ВидРасхода, ОС.ЭлементРасхода.Получить(ДатаДок), Объект, ДатаДок);
                  СчетРасходов = СчетИАналитикаДляОтнесенияРасходов.Получить("Счет");
                  Если ПустоеЗначение(СчетРасходов) = 1 Тогда
                     ТекстСообщения = "На закладке ""Налоговый учет"" неверно указано направление отнесения расходов по начисленной амортизации для ОС: "
                        + ОС.Наименование + ", инв.№" + ОС.Код + ".";
                     глНеПроводить(Контекст, ТекстСообщения);
                     Возврат;
                  КонецЕсли;
                  СчетРасходов = глПолучитьСчетУчетаКосвенныхРасходовНУ(ДатаДок, ОС.СчетЗатрат.Получить(ДатаДок), ОС.Субконто1.Получить(ДатаДок), СчетРасходов);

                  Операция.НоваяПроводка();
                  Операция.НомерЖурнала = "ОС";                  
                  Операция.СодержаниеПроводки = "Аморт.за " + Формат(ДатаДок, "Д ММММГГГГ");
                  Операция.ПервичныйДокумент  = глПредставлениеПервичногоДокумента(Контекст);
                  Если ПустоеЗначение(СчетРасходов) = 0 Тогда                  
                     Операция.Дебет.Счет = СчетРасходов;
                     Операция.Дебет.Субконто(1, СчетИАналитикаДляОтнесенияРасходов.Получить("Субконто1"));
                     Операция.Дебет.Субконто(2, СчетИАналитикаДляОтнесенияРасходов.Получить("Субконто2"));
                     Операция.Дебет.Субконто(3, СчетИАналитикаДляОтнесенияРасходов.Получить("Субконто3"));
                  КонецЕсли;   
                  Операция.Кредит.Счет = СчетПоКоду("Н05.02");
                  Операция.Кредит.ОсновныеСредства = ОС.ТекущийЭлемент();
                  Операция.Сумма = РассчитаннаяАмортизацияНалог;
               КонецЕсли;
            КонецЕсли;
         КонецЕсли;
      КонецЦикла;
   КонецЕсли   
КонецПроцедуры
Записан

alexey
Администратор
*****

Карма: +27/-0
Offline Offline

Сообщений: 1956


Hell Ain't A Bad Place To Be..


WWW
« Ответ #5 : 22 Февраль 2008, 08:13:39 »

Мельком взглянув думаю тебе пригодиться еще это функция глРасчетАмортизацииОС, вот она:
Функция глРасчетАмортизацииОС(ОС, ДатаРасчета, РассчитыватьДанныеПоНалоговомуУчету = 1) Экспорт   
   Перем СведенияОбОС;
   Перем СчетУчета;
   Перем БалансоваяСтоимостьНач;
   Перем БалансоваяСтоимостьКон;
   Перем БалансоваяСтоимостьНалог;
   Перем БалансоваяСтоимостьНалогКон;
   Перем СчетНачисленияАмортизации;
   Перем НачисленнаяАмортизацияНач;
   Перем НачисленнаяАмортизацияКон;
   Перем НачисленнаяАмортизацияНалог;
   Перем РассчитаннаяАмортизацияБух;
   Перем РассчитаннаяАмортизацияНалог;
   Перем ПрименяетсяБазоваяСтоимость;
   Перем БухИт;
   БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
   БухИт.Актуальность(1);
   БухИт.ПериодМ(ДатаРасчета);   
   СписокСчетовУчета = СоздатьОбъект("СписокЗначений");
   СписокСчетовУчета.ДобавитьЗначение(СчетПоКоду("01.1"));
   СписокСчетовУчета.ДобавитьЗначение(СчетПоКоду("03.1"));
   СписокСчетовУчета.ДобавитьЗначение(СчетПоКоду("03.2"));
   СписокСчетовУчета.ДобавитьЗначение(СчетПоКоду("03.3"));
   СписокСчетовУчета.ДобавитьЗначение(СчетПоКоду("03.4"));   
   СчетУчета = ПолучитьПустоеЗначение("Счет");
   СчетУчетаНач = ПолучитьПустоеЗначение("Счет");
   Индекс = 1;
   БалансоваяСтоимостьНач = 0;
   БалансоваяСтоимостьКон = 0;   
   // Определение счета на котором объект учитывался на
   // начало месяца и счета учета на конец месяца.
   Пока (Индекс <= СписокСчетовУчета.РазмерСписка())
      и ((ПустоеЗначение(СчетУчета) = 1) или (ПустоеЗначение(СчетУчетаНач) = 1)) Цикл // цикл крутится до тех пока не конец списка и пока не определены счета учета на конец периода и на начало         
      СчетУчетаИзСписка = СписокСчетовУчета.ПолучитьЗначение(Индекс);      
      СтоимостьНач = БухИт.СНД(СчетУчетаИзСписка,,, ОС);
      СтоимостьКон = БухИт.СКД(СчетУчетаИзСписка,,, ОС);
      БалансоваяСтоимостьНач = БалансоваяСтоимостьНач + СтоимостьНач;
      БалансоваяСтоимостьКон = БалансоваяСтоимостьКон + СтоимостьКон;      
      Если СтоимостьКон > 0 Тогда
          СчетУчета = СчетУчетаИзСписка;
      КонецЕсли;                       
      Если СтоимостьНач > 0 Тогда
          СчетУчетаНач = СчетУчетаИзСписка;
      КонецЕсли;
      Индекс = Индекс + 1;
   КонецЦикла;                                
   Если ПустоеЗначение(СчетУчетаНач) = 1 Тогда
       СчетУчетаНач = СчетУчета;
   КонецЕсли;   
   СчетНачисленияАмортизации = ПолучитьПустоеЗначение("Счет");
   НачисленнаяАмортизацияНач = 0;
   НачисленнаяАмортизацияКон = 0;
   Если ОС.ПодлежитАмортизации = 0 Тогда
       СчетНачисленияАмортизации = СчетПоКоду("010");
      НачисленнаяАмортизацияНач = БухИт.СНД(СчетНачисленияАмортизации,,, ОС);
      НачисленнаяАмортизацияКон = БухИт.СКД(СчетНачисленияАмортизации,,, ОС);      
   ИначеЕсли ПустоеЗначение(СчетУчетаНач) = 0 Тогда
      Если СчетУчетаНач.Родитель() = СчетПоКоду("01") Тогда
         СчетНачисленияАмортизации = СчетПоКоду("02.1");         
      ИначеЕсли СчетУчетаНач.Родитель() = СчетПоКоду("03") Тогда
         СчетНачисленияАмортизации = СчетПоКоду("02.2");
      КонецЕсли;
      НачисленнаяАмортизацияНач = БухИт.СНК("02",,, ОС);
      НачисленнаяАмортизацияКон = БухИт.СКК("02",,, ОС);
   КонецЕсли;   
   БалансоваяСтоимостьНалог       = 0;
   БалансоваяСтоимостьНалогКон    = 0;
   НачисленнаяАмортизацияНалог    = 0;
   РассчитаннаяАмортизацияБух     = 0;
   РассчитаннаяАмортизацияНалог   = 0;
   НачисленнаяАмортизацияНалогКон = 0;
   ПрименяетсяБазоваяСтоимость    = 0;
   КапВложенияНаправленныеНаРасходы = 0;
   Если ОС.ПодлежитАмортизации = 1 Тогда
      ДатаНачалаМесяца = БухИт.НачПериода();
      ДатаРеквизитов   = БухИт.КонПериода();                                                       
      // Анализируется была ли модернизация
      ОбъектМодернизирован = ОС.ОбъектМодернизирован.Получить(ДатаНачалаМесяца-1);
      ДатаМодернизации = ПолучитьПустоеЗначение("Дата");
      Если ОбъектМодернизирован = 1 Тогда // была модернизация
         ДатаМодернизации = глДатаНаКоторуюУстановленоЗначение(ОС, "ОбъектМодернизирован", ДатаНачалаМесяца-1);
      КонецЕсли;      
      // Амортизация начисляется в том случае, если на начало месяца объект
      // уже был принят к учету и для него установлен флажок начисления амортизации.
      Если (ОС.НачислятьАмортизацию.Получить(ДатаРеквизитов) = 1) и (ПустоеЗначение(СчетУчета) = 0) Тогда
         Если БухИт.СКД(СчетУчета,,, ОС) <> 0 Тогда
            ПервоначальнаяСтоимость = БалансоваяСтоимостьНач;
            ОстаточнаяСтоимостьБух = БалансоваяСтоимостьНач - НачисленнаяАмортизацияНач;
            СрокПолезногоИспользования = ОС.СрокПолезногоИспользования.Получить(ДатаНачалаМесяца-1);
            
            // Если объект был модернизирован (реконструирован), то при расчете суммы
            // амортизации вместо первоначальной стоимости будет использоваться остаточная
            // стоимость на момент модернизации с учетом расходов по модернизации.
            Если ОбъектМодернизирован = 1 Тогда // была модернизация
               ОставшийсяСрокПолезногИспользованияПослеМодернизации = 0;
               ОстаточнаяСтоимостьПослеМодернизации = ОС.ОстаточнаяСтоимостьПослеМодернизации.Получить(ДатаНачалаМесяца-1);               
               // Рассчитаем оставшийся срок полезного использования на дату модернизации ОС
               Если (ПустоеЗначение(ДатаМодернизации) = 0)
                  и (ПустоеЗначение(ОС.ДатаВводаВЭксплуатацию) = 0) Тогда
                  ОставшийсяСрокПолезногИспользованияПослеМодернизации = СрокПолезногоИспользования -                         (ДатаГод(КонМесяца(ДатаМодернизации)) - ДатаГод(КонМесяца(ОС.ДатаВводаВЭксплуатацию))) * 12
                        - (ДатаМесяц(КонМесяца(ДатаМодернизации)) - ДатаМесяц(КонМесяца(ОС.ДатаВводаВЭксплуатацию)));
               КонецЕсли;                                                                                                  
               // Установим новые значение первоначальной стоимости и срока полезного использования
               ПервоначальнаяСтоимость = ОстаточнаяСтоимостьПослеМодернизации;
               СрокПолезногоИспользования = ОставшийсяСрокПолезногИспользованияПослеМодернизации;
            КонецЕсли;            
            Если ОС.СпособНачисленияАмортизации = Перечисление.СпособыНачисленияАмортизацииОС.Линейный Тогда
               Если СрокПолезногоИспользования > 0 Тогда
                  РассчитаннаяАмортизацияБух = ПервоначальнаяСтоимость / СрокПолезногоИспользования;
               КонецЕсли;         
            ИначеЕсли ОС.СпособНачисленияАмортизации = Перечисление.СпособыНачисленияАмортизацииОС.УменьшаемогоОстатка Тогда               
               // Сумма амортизации за месяц рассчитывается как:
               // остаточной стоимость /  количество месяцев полезного использования * коэффициент ускорения.
               // В первый год эксплуатации остаточная стоимость - это первоначальная
               // стоимость объекта основных средств на дату ввода в эксплуатацию
               // (из реквизита первоначальная стоимость), а количество месяцев
               // полезного использования берется на дату ввода объекта в эксплуатацию.
               // В последующие годы остаточная стоимость - СНД по всевозможным
               // счетам учета ОС СНК по счету 02 на 1 января года, в котором происходи расчет
               // амортизации, количество месяцев полезного так же берется на 1 января.
               Если ДатаГод(ДатаРасчета) = ДатаГод(ДатаМодернизации) Тогда // первый год, когда была произведена модернизация
                  ОстаточнаяСтоимость =  ПервоначальнаяСтоимость;
                  
               ИначеЕсли ДатаГод(ДатаРасчета) = ДатаГод(ОС.ДатаВводаВЭксплуатацию) Тогда // первый год эксплуатации
                  ОстаточнаяСтоимость =  ОС.ПервоначальнаяСтоимость.Получить(ОС.ДатаВводаВЭксплуатацию);                  
               Иначе
                  ДатаНачалаГода = НачГода(ДатаРасчета);                  
                  // Рассчитаем балансовую стоимость объекта на начало года.
                  БухИтОстаточнаяСтоимость = СоздатьОбъект("БухгалтерскиеИтоги");
                  БухИтОстаточнаяСтоимость.ПериодМ(ДатаНачалаГода);
                  БалансоваяСтоимость = 0;
                  Индекс = 1;
                  Пока Индекс <= СписокСчетовУчета.РазмерСписка() Цикл
                     СчетУчетаИзСписка = СписокСчетовУчета.ПолучитьЗначение(Индекс);
                     БалансоваяСтоимость = БалансоваяСтоимость + БухИтОстаточнаяСтоимость.СНД(СчетУчетаИзСписка,,, ОС);
                     Индекс = Индекс + 1;
                  КонецЦикла;                                                                
                  // Рассчитаем сумму начисленной аморизации на начало года.
                  НачисленнаяАморизация = БухИтОстаточнаяСтоимость.СНК("02",,, ОС);            
                  ОстаточнаяСтоимость = БалансоваяСтоимость - НачисленнаяАморизация;
               КонецЕсли;               
               Если СрокПолезногоИспользования > 0 Тогда
                  РассчитаннаяАмортизацияБух = ОстаточнаяСтоимость / СрокПолезногоИспользования * ОС.КоэффициентУскорения;
               КонецЕсли;         
            ИначеЕсли ОС.СпособНачисленияАмортизации = Перечисление.СпособыНачисленияАмортизацииОС.ПоСуммеЧиселЛет Тогда
               Если СрокПолезногоИспользования > 0 Тогда
                  КоличествоЛетЭксплуатации = Цел(СрокПолезногоИспользования / 12);
                  Если (СрокПолезногоИспользования / 12) > КоличествоЛетЭксплуатации Тогда
                     КоличествоЛетЭксплуатации = КоличествоЛетЭксплуатации + 1;
                  КонецЕсли;            
                  СуммаЧиселЛет = 0;
                  Для i=1 По КоличествоЛетЭксплуатации Цикл
                     СуммаЧиселЛет = СуммаЧиселЛет + i;
                  КонецЦикла;                       
                  ДатаНачалаРасчета = ?(ОбъектМодернизирован = 0, ОС.ДатаВводаВЭксплуатацию, ДатаМодернизации);                  
                  ГодЭксплуатации = ДатаГод(ДатаРасчета) - ДатаГод(ДатаНачалаРасчета);            
                  ГодовщинаВводаВЭксплуатацию = Дата(ДатаГод(ДатаРасчета), ДатаМесяц(ДатаНачалаРасчета), ДатаЧисло(ДатаНачалаРасчета));
                  Если КонМесяца(ДатаРасчета) > КонМесяца(ГодовщинаВводаВЭксплуатацию) Тогда
                     ГодЭксплуатации = ГодЭксплуатации + 1;
                  КонецЕсли;                      
                  РассчитаннаяАмортизацияБух = ПервоначальнаяСтоимость * (КоличествоЛетЭксплуатации - ГодЭксплуатации + 1) / СуммаЧиселЛет / 12;
               КонецЕсли;         
            ИначеЕсли ОС.СпособНачисленияАмортизации = Перечисление.СпособыНачисленияАмортизацииОС.ПропорциональноОбъемуПродукцииРабот Тогда                  
               ОбщийОбъемВыпускаПродукции = ОС.ОбщийОбъемПродукцииРабот.Получить(ДатаНачалаМесяца-1);               
               // Если была модернизация, то амортизация будет рассчитваться
               // исходя из оставшегося общего объема выпуска продукции после
               // модернизации.
               Если ОбъектМодернизирован = 1 Тогда
                  Если ПустоеЗначение(ОС.ДатаВводаВЭксплуатацию) = 0 Тогда
                     ДатаНачисленияАмортизации = КонМесяца(ДобавитьМесяц(ОС.ДатаВводаВЭксплуатацию, 1)); // дата окончания первого месяца, в котором начисляется амортизация
//продолжение далее                     
Записан

alexey
Администратор
*****

Карма: +27/-0
Offline Offline

Сообщений: 1956


Hell Ain't A Bad Place To Be..


WWW
« Ответ #6 : 22 Февраль 2008, 08:13:52 »

Пока  ДатаНачисленияАмортизации <= КонМесяца(ДатаМодернизации) Цикл
                        ОбщийОбъемВыпускаПродукции = ОбщийОбъемВыпускаПродукции - ОС.ФактическийОбъемПродукцииРаботЗаМесяц.Получить(ДатаНачисленияАмортизации + 1);
                        ДатаНачисленияАмортизации = КонМесяца(ДатаНачисленияАмортизации + 1);
                     КонецЦикла;
                  КонецЕсли;
               КонецЕсли;
               
               Если ОбщийОбъемВыпускаПродукции > 0 Тогда
                  РассчитаннаяАмортизацияБух = ПервоначальнаяСтоимость * ОС.ФактическийОбъемПродукцииРаботЗаМесяц.Получить(ДатаРеквизитов) / ОбщийОбъемВыпускаПродукции;
               КонецЕсли;
               
            ИначеЕсли ОС.СпособНачисленияАмортизации = Перечисление.СпособыНачисленияАмортизацииОС.ПоЕдинымНормам Тогда
               РассчитаннаяАмортизацияБух = ПервоначальнаяСтоимость * ОС.КоэффициентАмортизации.Получить(ДатаРеквизитов) / 1200;
               
            КонецЕсли;
            РассчитаннаяАмортизацияБух = Мин(РассчитаннаяАмортизацияБух, ОстаточнаяСтоимостьБух);
         КонецЕсли;
      КонецЕсли;
       
      Если РассчитыватьДанныеПоНалоговомуУчету = 1 Тогда
         // Формируем данные по налоговому учету
         Если ДатаРасчета < '01.01.2002' Тогда
            Если БалансоваяСтоимостьНач = 0 Тогда
                БалансоваяСтоимостьНалог = ОС.ПервоначальнаяСтоимость.Получить(ДатаНачалаМесяца);
            Иначе
               БалансоваяСтоимостьНалог = БалансоваяСтоимостьНач;
            КонецЕсли;
             НачисленнаяАмортизацияНалог = БухИт.СНК(СчетПоКоду("АОС"),,, ОС);
            ОстаточнаяСтоимостьНалог = БалансоваяСтоимостьНалог - НачисленнаяАмортизацияНалог;
            
         Иначе
            Если (ДатаРасчета>='01.01.2006') И (ПустоеЗначение(ОС.МатериалДляОтраженияВСоставеМПЗ)=0) Тогда
               БалансоваяСтоимостьНалог       = БухИт.СНД("Н05.МЦ",,, ОС);
               БалансоваяСтоимостьНалогКон    = БухИт.СКД("Н05.МЦ",,, ОС); 
            Иначе
               БалансоваяСтоимостьНалог       = БухИт.СНД("Н05.01",,, ОС);
               БалансоваяСтоимостьНалогКон    = БухИт.СКД("Н05.01",,, ОС);
            КонецЕсли;
             НачисленнаяАмортизацияНалог    = БухИт.СНК("Н05.02",,, ОС);
            НачисленнаяАмортизацияНалогКон = БухИт.СКК("Н05.02",,, ОС);
            КапВложенияНаправленныеНаРасходы = БухИт.СНД("Н05.КВ",,, ОС);
            БалансоваяСтоимостьНалог = БалансоваяСтоимостьНалог - КапВложенияНаправленныеНаРасходы;
            Если БалансоваяСтоимостьНалог <> 0 Тогда
               ОстаточнаяСтоимостьНалог = БалансоваяСтоимостьНалог - НачисленнаяАмортизацияНалог;
            КонецЕсли;
         КонецЕсли;
         
         // Определим должна ли в этом месяце быть начислена амортизация
         НачислятьАмортизацию = ОС.НачислятьАмортизацию.Получить(ДатаРасчета);
         Если НачислятьАмортизацию = 0 Тогда
            Если ОС.ДатаВыбытия = ДатаРасчета Тогда
               Если глНовыеПравилаВеденияНУ(ДатаРасчета) <> 1 Тогда
                  // Т.к. налоговый учет ведется отдельными документами, то
                  // на момент отражения выбытия в налоговом учете флажок
                  // "Начислять амортизацию" уже сброшен документом, отражающим
                  // выбытие объекта в бухгалтерском учете.
                  НачислятьАмортизацию = ОС.НачислятьАмортизацию.Получить(ОС.ДатаВыбытия - 1);   
               КонецЕсли;
            КонецЕсли;
         КонецЕсли;
         
         // Для ОС в составе МПЗ начисляем амортизацию только при установленной дате ввода в эксплуатацию.
         ДатаВводаВЭксплуатациюУстановлена = 1;
         Если (ПустоеЗначение(ОС.МатериалДляОтраженияВСоставеМПЗ) = 0) и
             ((КонМесяца(ОС.ДатаВводаВЭксплуатацию) >= КонМесяца(ДатаРасчета)) или
              (ПустоеЗначение(ОС.ДатаВводаВЭксплуатацию) = 1)) Тогда
            ДатаВводаВЭксплуатациюУстановлена = 0;
         КонецЕсли;
         
         // Рассчитаем для целей налогового учета амортизацию, если это необходимо.
         Если (НачислятьАмортизацию = 1) и (ДатаВводаВЭксплуатациюУстановлена = 1) Тогда   
            Если ДатаРасчета < '01.01.2002' Тогда
               Если (ОС.КоэффициентАмортизации.Получить(ДатаРеквизитов) > 0) и (ОС.ДатаВводаВЭксплуатацию < БухИт.НачПериода()) Тогда
                   РассчитаннаяАмортизацияНалог = БалансоваяСтоимостьНалог * ОС.КоэффициентАмортизации.Получить(ДатаРеквизитов) / 1200;
               КонецЕсли;
               
            Иначе
               Если БалансоваяСтоимостьНалог <> 0 Тогда
                  ПервоначальнаяСтоимость = БалансоваяСтоимостьНалог;
                  СрокПолезногоИспользования = ОС.СрокПолезногоИспользованияН.Получить(ДатаНачалаМесяца-1);
                  ДатаВводаВЭксплуатацию = Макс(ОС.ДатаВводаВЭксплуатацию, '31.12.2001');
                  
                  // Линейный метод
                  Если ОС.МетодНачисленияАмортизации = Перечисление.МетодыНачисленияАмортизации.Линейный Тогда
                     Если СрокПолезногоИспользования > 0 Тогда
                        РассчитаннаяАмортизацияНалог = ПервоначальнаяСтоимость * ОС.СпециальныйКоэффициент.Получить(ДатаРеквизитов) / СрокПолезногоИспользования;
                     КонецЕсли;
                                   
                  // Нелинейный метод
                  ИначеЕсли ОС.МетодНачисленияАмортизации = Перечисление.МетодыНачисленияАмортизации.Нелинейный Тогда
                     Если СрокПолезногоИспользования > 0 Тогда
                        
                        БазоваяСтоимость = ОС.БазоваяСтоимость.Получить(ДатаРеквизитов);
                        ДатаНачалаПримененияБазовойСтоимости = глДатаНаКоторуюУстановленоЗначение(ОС, "БазоваяСтоимость", ДатаРеквизитов);
                                       
                        Если БазоваяСтоимость = 0 Тогда // базовая стоимость не определена
                            ПрименяетсяБазоваяСтоимость = 0;
                           
                        ИначеЕсли ДатаВводаВЭксплуатацию > ДатаНачалаПримененияБазовойСтоимости Тогда // не понятно с какого момента применять базовую стоимость
                           Если ОстаточнаяСтоимостьНалог > (БалансоваяСтоимостьНалог  * 0.2) Тогда //если остаточная cтоимость > 20% от первоначальной
                              ПрименяетсяБазоваяСтоимость = 0;
                           Иначе
                              ПрименяетсяБазоваяСтоимость = 1;
                           КонецЕсли;
                              
                        Иначе
                           ПрименяетсяБазоваяСтоимость = 1;
                        КонецЕсли;
                                                           
                        
                        Если ПрименяетсяБазоваяСтоимость = 0 Тогда
                           РассчитаннаяАмортизацияНалог = ОстаточнаяСтоимостьНалог * 2 * ОС.СпециальныйКоэффициент.Получить(ДатаРеквизитов) / СрокПолезногоИспользования;
                           
                        Иначе   
                           // Если объект введен в эксплуатацию до 01.01.2002, то к налоговому учету он принят после 01.01.2002.
                           КоличествоПолныхМесяцев = (ДатаГод(КонМесяца(ДатаРасчета)) - ДатаГод(КонМесяца(ДатаВводаВЭксплуатацию)+1)) * 12
                                                + ДатаМесяц(КонМесяца(ДатаРасчета)) - ДатаМесяц(КонМесяца(ДатаВводаВЭксплуатацию)+1);
                           ОставшийсяСрокПолезногоИспользования = ОС.СрокПолезногоИспользованияН.Получить(ДатаНачалаМесяца-1) - КоличествоПолныхМесяцев;
                           Если ОставшийсяСрокПолезногоИспользования > 0 Тогда
                              РассчитаннаяАмортизацияНалог = ОстаточнаяСтоимостьНалог/ОставшийсяСрокПолезногоИспользования
                              
                           Иначе
                              РассчитаннаяАмортизацияНалог = ОстаточнаяСтоимостьНалог;
                           КонецЕсли;
                           
                        КонецЕсли;
                     КонецЕсли;
                  КонецЕсли;
               КонецЕсли;
            КонецЕсли;
            РассчитаннаяАмортизацияНалог = Мин(РассчитаннаяАмортизацияНалог, ОстаточнаяСтоимостьНалог);
         КонецЕсли;
      КонецЕсли;

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

Страниц: [1]   Вверх
Печать
 
Перейти в:  

�������@Mail.ru Rambler Top100
 
Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC | © 2008 Полигон 1С