// Рассчитывает сумму амортизации по указаному основному средству по бух учету // // Параметры // ОсновноеСредство - СправочникСсылка.ОсновныеСредства - ОС, по которому // нужно рассчитать амортизацию. // ДатаРасчета - Дата - Дата расчета амортизации // // Возвращаемое значение: // Число - Сумма начисленной амортизации // Функция РасчетАмортизацииБухРегл(ДатаРасчета, Организация, ОсновноеСредство = Неопределено, ВыдаватьСообщения = Истина) Экспорт ТаблицаАмортизации = Новый ТаблицаЗначений(); ТаблицаАмортизации.Колонки.Добавить("ОС", Новый ОписаниеТипов("СправочникСсылка.ОсновныеСредства")); ТаблицаАмортизации.Колонки.Добавить("СчетУчетаБУ", Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный")); ТаблицаАмортизации.Колонки.Добавить("СчетАмортизацииБУ", Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный")); ТаблицаАмортизации.Колонки.Добавить("ИмяСубконто", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(16))); ТаблицаАмортизации.Колонки.Добавить("НаправлениеАмортизации", Новый ОписаниеТипов("СправочникСсылка.СпособыОтраженияРасходовПоАмортизации")); ТаблицаАмортизации.Колонки.Добавить("Бух", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2))); Запрос = Новый Запрос(); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("ОсновноеСредство", ОсновноеСредство); Запрос.УстановитьПараметр("НачалоГода", Новый Граница(НачалоГода(ДатаРасчета))); Запрос.УстановитьПараметр("НачалоПериода", Новый Граница(НачалоМесяца(ДатаРасчета), ВидГраницы.Исключая)); Запрос.УстановитьПараметр("КонецПериода", Новый Граница(КонецМесяца(ДатаРасчета))); Запрос.УстановитьПараметр("Период", ДатаРасчета); УсловиеПоОС = ?( ОсновноеСредство = Неопределено, "", " И ОсновноеСредство В (&ОсновноеСредство) "); Запрос.Текст = "ВЫБРАТЬ | СостоянияОСОрганизаций.ОсновноеСредство КАК ОсновноеСредство |ПОМЕСТИТЬ | СнятыеСУчета |ИЗ | РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций |ГДЕ | СостоянияОСОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.СнятоСУчета) И | СостоянияОСОрганизаций.ДатаСостояния < &Период И | СостоянияОСОрганизаций.Организация = &Организация " + УсловиеПоОС + " |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | ПРЕДСТАВЛЕНИЕ(НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство) КАК ОсновноеСредствоПредставление, | НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство.Код КАК Код |ПОМЕСТИТЬ | СписокОС |ИЗ | РегистрСведений.НачислениеАмортизацииОСБухгалтерскийУчет.СрезПоследних(&НачалоПериода, Организация = &Организация " + УсловиеПоОС + " | И ОсновноеСредство НЕ В (ВЫБРАТЬ ОсновноеСредство ИЗ СнятыеСУчета)) КАК НачислениеАмортизацииБухгалтерскийУчетСрезПоследних |ГДЕ | НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.НачислятьАмортизацию = ИСТИНА |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ИнвентарныйНомер КАК ИнвентарныйНомер, | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.СпособНачисленияАмортизации КАК СпособНачисленияАмортизации, | ЕСТЬNULL(ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ПервоначальнаяСтоимость, 0) КАК ПервоначальнаяСтоимость, | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ПараметрВыработки КАК ПараметрВыработки |ПОМЕСТИТЬ | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних |ИЗ | РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&НачалоПериода, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВыработкаОСОбороты.ОсновноеСредство КАК ОсновноеСредство, | ВыработкаОСОбороты.ПараметрВыработки КАК ПараметрВыработки, | ЕСТЬNULL(ВыработкаОСОбороты.КоличествоОборот, 0) КАК ОбъемВыработки |ПОМЕСТИТЬ | ВыработкаОС |ИЗ | РегистрНакопления.ВыработкаОС.Обороты(&НачалоПериода, &КонецПериода,, ПараметрВыработки В (ВЫБРАТЬ ПараметрВыработки ИЗ ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних) | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК ВыработкаОСОбороты |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | ЕСТЬNULL(ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.СрокИспользованияДляВычисленияАмортизации, 0) КАК СрокИспользованияДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.СтоимостьДляВычисленияАмортизации, 0) КАК СтоимостьДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.ОбъемПродукцииРаботДляВычисленияАмортизации, 0) КАК ОбъемПродукцииРаботДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.КоэффициентАмортизации, 0) КАК КоэффициентАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.КоэффициентУскорения, 0) КАК КоэффициентУскорения, | ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.Период КАК Период |ПОМЕСТИТЬ | ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних |ИЗ | РегистрСведений.ПараметрыАмортизацииОСБухгалтерскийУчет.СрезПоследних(&НачалоПериода, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ГрафикиАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | ГрафикиАмортизацииБухгалтерскийУчетСрезПоследних.ГрафикАмортизации КАК ГрафикАмортизации |ПОМЕСТИТЬ | ГрафикиАмортизацииБухгалтерскийУчетСрезПоследних |ИЗ | РегистрСведений.ГрафикиАмортизацииОСБухгалтерскийУчет.СрезПоследних(&НачалоПериода, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК ГрафикиАмортизацииБухгалтерскийУчетСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СпособыОтраженияРасходовПоАмортизацииСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | СпособыОтраженияРасходовПоАмортизацииСрезПоследних.СпособыОтраженияРасходовПоАмортизации КАК СпособыОтраженияРасходовПоАмортизации |ПОМЕСТИТЬ | СпособыОтраженияРасходовПоАмортизацииСрезПоследних |ИЗ | РегистрСведений.СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет.СрезПоследних(&НачалоПериода, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК СпособыОтраженияРасходовПоАмортизацииСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | АмортизацияБухгалтерскийУчетОстаткиИОбороты.ОсновноеСредство КАК ОсновноеСредство, | ЕСТЬNULL(АмортизацияБухгалтерскийУчетОстаткиИОбороты.СтоимостьНачальныйОстаток, 0) КАК СтоимостьНачальныйОстаток, | ЕСТЬNULL(АмортизацияБухгалтерскийУчетОстаткиИОбороты.АмортизацияНачальныйОстаток, 0) КАК АмортизацияНачальныйОстаток, | ЕСТЬNULL(АмортизацияБухгалтерскийУчетОстаткиИОбороты.АмортизацияКонечныйОстаток, 0) КАК АмортизацияКонечныйОстаток, | ЕСТЬNULL(АмортизацияБухгалтерскийУчетОстаткиИОбороты.АмортизацияОборот, 0) КАК АмортизацияОборот, | ЕСТЬNULL(АмортизацияБухгалтерскийУчетОстаткиИОбороты.СтоимостьКонечныйОстаток, 0) КАК БалансоваяСтоимость |ПОМЕСТИТЬ | АмортизацияБухгалтерскийУчетОстаткиИОбороты |ИЗ | РегистрНакопления.СтоимостьОСБухгалтерскийУчет.ОстаткиИОбороты(&НачалоПериода, &КонецПериода,,, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК АмортизацияБухгалтерскийУчетОстаткиИОбороты |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.СчетУчета КАК СчетУчета, | СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.СчетНачисленияАмортизации КАК СчетНачисленияАмортизации |ПОМЕСТИТЬ | СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних |ИЗ | РегистрСведений.СчетаБухгалтерскогоУчетаОС.СрезПоследних(&КонецПериода, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | АмортизацияНаНачалоГода.ОсновноеСредство КАК ОсновноеСредство, | ЕСТЬNULL(АмортизацияНаНачалоГода.СтоимостьНачальныйОстаток, 0) - ЕСТЬNULL(АмортизацияНаНачалоГода.АмортизацияНачальныйОстаток, 0) КАК СтоимостьНаНачалоГода |ПОМЕСТИТЬ | АмортизацияНаНачалоГода |ИЗ | РегистрНакопления.СтоимостьОСБухгалтерскийУчет.ОстаткиИОбороты(&НачалоГода,,,, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК АмортизацияНаНачалоГода |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ОсновныеСредстваСписанныеНаЗатратыОрганизацииОстатки.ОсновноеСредство КАК ОсновноеСредство, | ЕСТЬNULL(ОсновныеСредстваСписанныеНаЗатратыОрганизацииОстатки.СтоимостьОстаток, 0) КАК СтоимостьОстаток |ПОМЕСТИТЬ | ОсновныеСредстваСписанныеНаЗатратыОрганизацииОстатки |ИЗ | РегистрНакопления.ОССписанныеНаЗатратыОрганизаций.Остатки(&КонецПериода, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК ОсновныеСредстваСписанныеНаЗатратыОрганизацииОстатки |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СписокОС.ОсновноеСредство КАК ОсновноеСредство, | СписокОС.ОсновноеСредствоПредставление КАК ОсновноеСредствоПредставление, | СписокОС.Код КАК Код, | ЕСТЬNULL(АмортизацияБухгалтерскийУчетОстаткиИОбороты.СтоимостьНачальныйОстаток, 0) КАК СтоимостьНачальныйОстаток, | ЕСТЬNULL(АмортизацияБухгалтерскийУчетОстаткиИОбороты.АмортизацияНачальныйОстаток, 0) КАК АмортизацияНачальныйОстаток, | ЕСТЬNULL(АмортизацияБухгалтерскийУчетОстаткиИОбороты.АмортизацияКонечныйОстаток, 0) КАК АмортизацияКонечныйОстаток, | ЕСТЬNULL(АмортизацияБухгалтерскийУчетОстаткиИОбороты.АмортизацияОборот, 0) КАК АмортизацияОборот, | ЕСТЬNULL(АмортизацияБухгалтерскийУчетОстаткиИОбороты.БалансоваяСтоимость, 0) КАК БалансоваяСтоимость, | ЕСТЬNULL(ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.СрокИспользованияДляВычисленияАмортизации, 0) КАК СрокИспользованияДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.СтоимостьДляВычисленияАмортизации, 0) КАК СтоимостьДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.ОбъемПродукцииРаботДляВычисленияАмортизации, 0) КАК ОбъемПродукцииРаботДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.КоэффициентАмортизации, 0) КАК КоэффициентАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.КоэффициентУскорения, 0) КАК КоэффициентУскорения, | ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.Период КАК Период, | ГрафикиАмортизацииБухгалтерскийУчетСрезПоследних.ГрафикАмортизации КАК ГрафикАмортизации, | СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.СчетУчета КАК СчетУчета, | СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.СчетНачисленияАмортизации КАК СчетНачисленияАмортизации, | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ИнвентарныйНомер КАК ИнвентарныйНомер, | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.СпособНачисленияАмортизации КАК СпособНачисленияАмортизации, | ЕСТЬNULL(ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ПервоначальнаяСтоимость, 0) КАК ПервоначальнаяСтоимость, | СпособыОтраженияРасходовПоАмортизацииСрезПоследних.СпособыОтраженияРасходовПоАмортизации КАК СпособыОтраженияРасходовПоАмортизации, | ЕСТЬNULL(АмортизацияНаНачалоГода.СтоимостьНаНачалоГода, 0) КАК СтоимостьНаНачалоГода, | ЕСТЬNULL(ОсновныеСредстваСписанныеНаЗатратыОрганизацииОстатки.СтоимостьОстаток, 0) КАК СтоимостьОстаток, | ЕСТЬNULL(ВыработкаОС.ОбъемВыработки, 0) КАК ОбъемВыработки // Начисление амортизации в рамках срока полезного использования { | ,ВЫБОР | КОГДА ЕСТЬNULL(СостоянияОСОрганизаций.ДатаСостояния, 0) = 0 | ТОГДА ДАТАВРЕМЯ(1, 1, 1) | ИНАЧЕ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(СостоянияОСОрганизаций.ДатаСостояния, МЕСЯЦ), МЕСЯЦ, ЕСТЬNULL(ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.СрокИспользованияДляВычисленияАмортизации, 0)) | КОНЕЦ КАК ПроверкаСрокаИспользования // Начисление амортизации в рамках срока полезного использования } |ИЗ | СписокОС | ЛЕВОЕ СОЕДИНЕНИЕ ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних | ПО СписокОС.ОсновноеСредство = ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ ВыработкаОС | ПО ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ОсновноеСредство = ВыработкаОС.ОсновноеСредство | И ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ПараметрВыработки = ВыработкаОС.ПараметрВыработки | ЛЕВОЕ СОЕДИНЕНИЕ ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних | ПО СписокОС.ОсновноеСредство = ПараметрыАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ ГрафикиАмортизацииБухгалтерскийУчетСрезПоследних | ПО СписокОС.ОсновноеСредство = ГрафикиАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ СпособыОтраженияРасходовПоАмортизацииСрезПоследних | ПО СписокОС.ОсновноеСредство = СпособыОтраженияРасходовПоАмортизацииСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ АмортизацияБухгалтерскийУчетОстаткиИОбороты | ПО СписокОС.ОсновноеСредство = АмортизацияБухгалтерскийУчетОстаткиИОбороты.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних | ПО СписокОС.ОсновноеСредство = СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ АмортизацияНаНачалоГода | ПО СписокОС.ОсновноеСредство = АмортизацияНаНачалоГода.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ ОсновныеСредстваСписанныеНаЗатратыОрганизацииОстатки | ПО СписокОС.ОсновноеСредство = ОсновныеСредстваСписанныеНаЗатратыОрганизацииОстатки.ОсновноеСредство // Начисление амортизации в рамках срока полезного использования { | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций | ПО СписокОС.ОсновноеСредство = СостоянияОСОрганизаций.ОсновноеСредство | И СостоянияОСОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.ПринятоКУчету) // Начисление амортизации в рамках срока полезного использования } |"; ВыборкаПоОС = Запрос.Выполнить().Выбрать(); ТаблицаГрафиков = ПолучитьТаблицуГрафиков(); Пока ВыборкаПоОС.Следующий() Цикл Если НЕ ВыборкаПоОС.СтоимостьОстаток = 0 Тогда Продолжить; // ОС списано на затраты - не обрабатывается. КонецЕсли; ТекстСообщения = "Бух. расчет амортизации: для основного средства " + СокрЛП(ВыборкаПоОС.ОсновноеСредствоПредставление) + " (" + СокрЛП(ВыборкаПоОС.Код) + "), инв. № " + СокрЛП(ВыборкаПоОС.ИнвентарныйНомер); Если (ВыборкаПоОС.СтоимостьНачальныйОстаток <= ВыборкаПоОС.АмортизацияНачальныйОстаток) Тогда Продолжить; // остаточная стоимость на начало месяца равна 0 КонецЕсли; Если НЕ ВыборкаПоОС.АмортизацияОборот = 0 Тогда Если ВыдаватьСообщения = Истина и не (ОсновноеСредство = Неопределено) Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " амортизация в этом месяце уже начислялась"); КонецЕсли; Продолжить; // по указанному ОС в этом месяце уже начисляли амортизацию КонецЕсли; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.СпособНачисленияАмортизации) Тогда Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " не указан способ амортизации"); КонецЕсли; Продолжить; КонецЕсли; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.СтоимостьДляВычисленияАмортизации) Тогда Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " стоимость равна 0"); КонецЕсли; Продолжить; КонецЕсли; Если (ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.Линейный ИЛИ ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПоСуммеЧиселЛетИспользования ИЛИ ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.УменьшаемогоОстатка) И НЕ ЗначениеЗаполнено(ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации) Тогда Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " срок использования равен 0"); КонецЕсли; Продолжить; КонецЕсли; СуммаАмортизации = 0; Если ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.Линейный Тогда СуммаГодовойАмортизации = ВыборкаПоОС.СтоимостьДляВычисленияАмортизации / ?(ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации = 0, 1, ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации) * 12; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.ГрафикАмортизации) Тогда СуммаАмортизации = СуммаГодовойАмортизации / 12; Иначе КоэффициентПериода = ПолучитьКоэффициентАмортизацииИзГрафика(ТаблицаГрафиков, ВыборкаПоОС.ГрафикАмортизации, ДатаРасчета); СуммаАмортизации = СуммаГодовойАмортизации * КоэффициентПериода; КонецЕсли; ИначеЕсли ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПропорциональноОбъемуПродукции Тогда Если ВыборкаПоОС.ОбъемВыработки = 0 Тогда Продолжить; КонецЕсли; СуммаАмортизации = ВыборкаПоОС.СтоимостьДляВычисленияАмортизации * ВыборкаПоОС.ОбъемВыработки / ?(ВыборкаПоОС.ОбъемПродукцииРаботДляВычисленияАмортизации = 0, 1, ВыборкаПоОС.ОбъемПродукцииРаботДляВычисленияАмортизации); ИначеЕсли ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПоЕНАОФ Тогда СуммаГодовойАмортизации = ВыборкаПоОС.СтоимостьДляВычисленияАмортизации * ВыборкаПоОС.КоэффициентАмортизации / 100; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.ГрафикАмортизации) Тогда СуммаАмортизации = СуммаГодовойАмортизации / 12; Иначе КоэффициентПериода = ПолучитьКоэффициентАмортизацииИзГрафика(ТаблицаГрафиков, ВыборкаПоОС.ГрафикАмортизации, ДатаРасчета); СуммаАмортизации = СуммаГодовойАмортизации * КоэффициентПериода; КонецЕсли; ИначеЕсли ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПоЕНАОФНа1000кмПробега Тогда Если ВыборкаПоОС.ОбъемВыработки = 0 Тогда Продолжить; КонецЕсли; СуммаАмортизации = ВыборкаПоОС.СтоимостьДляВычисленияАмортизации * ВыборкаПоОС.ОбъемВыработки * // % км. ВыборкаПоОС.КоэффициентАмортизации / 100 / 1000 ИначеЕсли ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.УменьшаемогоОстатка Тогда Если Год(ВыборкаПоОС.Период) = Год(ДатаРасчета) Тогда СтоимостьИтоговая = ВыборкаПоОС.СтоимостьДляВычисленияАмортизации; Иначе СтоимостьИтоговая = ВыборкаПоОС.СтоимостьНаНачалоГода; КонецЕсли; СуммаГодовойАмортизации = СтоимостьИтоговая / ?(ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации = 0, 1, ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации) * 12; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.ГрафикАмортизации) Тогда СуммаАмортизации = СуммаГодовойАмортизации / 12; Иначе КоэффициентПериода = ПолучитьКоэффициентАмортизацииИзГрафика(ТаблицаГрафиков, ВыборкаПоОС.ГрафикАмортизации, ДатаРасчета); СуммаАмортизации = СуммаГодовойАмортизации * КоэффициентПериода; КонецЕсли; КоэффициентУскорения = ВыборкаПоОС.КоэффициентУскорения; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.КоэффициентУскорения) Тогда КоэффициентУскорения = 1; Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " коэффициент ускорения не заполнен"); КонецЕсли; КонецЕсли; СуммаАмортизации = СуммаАмортизации * КоэффициентУскорения; ИначеЕсли ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПоСуммеЧиселЛетИспользования Тогда // Дата последнего изменения параметров Если ВыборкаПоОС.Период = NULL Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " не определилась дата начала использования (изменения параметров амортизации)!"); Продолжить; КонецЕсли; ДатаНачалаРасчета = НачалоМесяца(ДобавитьМесяц(ВыборкаПоОС.Период, 1)); ЧислоЛетПользования = ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации / 12; ЧислоЛетПользования = Цел(ЧислоЛетПользования) + ?(ЧислоЛетПользования - Цел(ЧислоЛетПользования) > 0, 1, 0); ЧислоЛетПрошедших = Цел(ОпределитьФактическийСрокИспользования(ДатаНачалаРасчета, ДатаРасчета) / 12); ЧислоЛетОставшихся = ЧислоЛетПользования - ЧислоЛетПрошедших; // Формула суммы чисел от 1 до N // S = (N + 1) * N / 2 СуммаЧиселЛет = (ЧислоЛетПользования + 1) * ЧислоЛетПользования / 2; ПроцентГодовойАмортизации = ЧислоЛетОставшихся / СуммаЧиселЛет; СуммаГодовойАмортизации = ВыборкаПоОС.СтоимостьДляВычисленияАмортизации * ПроцентГодовойАмортизации; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.ГрафикАмортизации) Тогда СуммаАмортизации = СуммаГодовойАмортизации / 12; Иначе КоэффициентПериода = ПолучитьКоэффициентАмортизацииИзГрафика(ТаблицаГрафиков, ВыборкаПоОС.ГрафикАмортизации, ДатаРасчета); СуммаАмортизации = СуммаГодовойАмортизации * КоэффициентПериода; КонецЕсли; КонецЕсли; Если КоэффициентПериода = 0 Тогда Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " коэффициент амортизации равен 0"); КонецЕсли; КонецЕсли; ВсегоОсталосьСписать = ВыборкаПоОС.БалансоваяСтоимость - ВыборкаПоОС.АмортизацияКонечныйОстаток; // Балансовая стоимость не может быть меньше 0 СуммаАмортизации = Макс( Мин( СуммаАмортизации, ВсегоОсталосьСписать), 0); СтрокаАмортизации = ТаблицаАмортизации.Добавить(); СтрокаАмортизации.ОС = ВыборкаПоОС.ОсновноеСредство; СтрокаАмортизации.СчетУчетаБУ = ВыборкаПоОС.СчетУчета; СтрокаАмортизации.СчетАмортизацииБУ = ВыборкаПоОС.СчетНачисленияАмортизации; СтрокаАмортизации.ИмяСубконто = "ОсновныеСредства"; СтрокаАмортизации.НаправлениеАмортизации = ВыборкаПоОС.СпособыОтраженияРасходовПоАмортизации; СтрокаАмортизации.Бух = СуммаАмортизации; // Начисление амортизации в рамках срока полезного использования { Если ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.Линейный И ЗначениеЗаполнено(ВыборкаПоОС.ПроверкаСрокаИспользования) И ЗначениеЗаполнено(ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации) Тогда Если ВыборкаПоОС.ПроверкаСрокаИспользования = НачалоМесяца(ДатаРасчета) Тогда Если ЗначениеЗаполнено(ВыборкаПоОС.АмортизацияКонечныйОстаток) И ЗначениеЗаполнено(ВыборкаПоОС.БалансоваяСтоимость) Тогда СтоимостьКрайняя = СуммаАмортизации + ВыборкаПоОС.АмортизацияКонечныйОстаток; БалансоваяСтоимость = ВыборкаПоОС.БалансоваяСтоимость; Если БалансоваяСтоимость > СтоимостьКрайняя Тогда Дельта = БалансоваяСтоимость - СтоимостьКрайняя; Сообщить("(БУ)ОС: " + ВыборкаПоОС.ОсновноеСредство + "(" + ВыборкаПоОС.ОсновноеСредство.Код + ")" + "истекает срок использования, остаток учтен: " + Дельта); СтрокаАмортизации.Бух = СтрокаАмортизации.Бух + Дельта; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; // Начисление амортизации в рамках срока полезного использования } Если СуммаАмортизации = 0 Тогда Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " амортизация равна 0"); КонецЕсли; КонецЕсли; КонецЦикла; Возврат ТаблицаАмортизации; КонецФункции // РасчетАмортизацииБухРегл() // Рассчитывает сумму амортизации по указаному основному средству по бух учету // // Параметры // ОсновноеСредство - СправочникСсылка.ОсновныеСредства - ОС, по которому // нужно рассчитать амортизацию. // ДатаРасчета - Дата - Дата расчета амортизации // // Возвращаемое значение: // Число - Сумма начисленной амортизации // Функция РасчетАмортизацииНалогРегл(Объект,ДатаРасчета,Организация,ОсновноеСредство = Неопределено, ВыдаватьСообщения = Истина) Экспорт ТаблицаАмортизации = Новый ТаблицаЗначений(); ТаблицаАмортизации.Колонки.Добавить("ОС", Новый ОписаниеТипов("СправочникСсылка.ОсновныеСредства")); ТаблицаАмортизации.Колонки.Добавить("СчетУчетаНУ", Новый ОписаниеТипов("ПланСчетовСсылка.Налоговый")); ТаблицаАмортизации.Колонки.Добавить("СчетАмортизацииНУ", Новый ОписаниеТипов("ПланСчетовСсылка.Налоговый")); ТаблицаАмортизации.Колонки.Добавить("ИмяСубконто", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(16))); ТаблицаАмортизации.Колонки.Добавить("НаправлениеАмортизации", Новый ОписаниеТипов("СправочникСсылка.СпособыОтраженияРасходовПоАмортизации")); ТаблицаАмортизации.Колонки.Добавить("Налог", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2))); ТаблицаАмортизации.Колонки.Добавить("СуммаКапитальныхВложенийВключаемыхВРасходы", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2))); Запрос = Новый Запрос(); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("НачалоПериодаУчетнойПолитики", НачалоМесяца(ДатаРасчета)); Запрос.УстановитьПараметр("НачалоПериода", Новый Граница(НачалоМесяца(ДатаРасчета), ВидГраницы.Исключая)); Запрос.УстановитьПараметр("КонецПериода", Новый Граница(КонецМесяца(ДатаРасчета))); Запрос.УстановитьПараметр("Период", ДатаРасчета); Запрос.УстановитьПараметр("ОсновноеСредство", ОсновноеСредство); Запрос.УстановитьПараметр("ДатаПереходаКЛинейномуМетоду", ПолучитьДатуПереходаКЛинейномуМетоду(ДатаРасчета, Организация)); УсловиеПоОС = ?(ОсновноеСредство = Неопределено, "", " И ОсновноеСредство В (&ОсновноеСредство) "); Запрос.Текст = "ВЫБРАТЬ | НачислениеАмортизацииНалоговыйУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | ПРЕДСТАВЛЕНИЕ(НачислениеАмортизацииНалоговыйУчетСрезПоследних.ОсновноеСредство) КАК ОсновноеСредствоПредставление, | НачислениеАмортизацииНалоговыйУчетСрезПоследних.ОсновноеСредство.Код КАК Код, | НачислениеАмортизацииНалоговыйУчетСрезПоследних.ОсновноеСредство.ГруппаОС КАК ГруппаОС, | НачислениеАмортизацииНалоговыйУчетСрезПоследних.ОсновноеСредство.АмортизационнаяГруппа КАК АмортизационнаяГруппа |ПОМЕСТИТЬ | СписокОС |ИЗ | РегистрСведений.НачислениеАмортизацииОСНалоговыйУчет.СрезПоследних(&НачалоПериода, Организация = &Организация " + УсловиеПоОС + ") КАК НачислениеАмортизацииНалоговыйУчетСрезПоследних |ГДЕ | НачислениеАмортизацииНалоговыйУчетСрезПоследних.НачислятьАмортизацию = ИСТИНА |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.МетодНачисленияАмортизации КАК МетодНачисленияАмортизации, | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.Период КАК ДатаПринятияКУчету |ПОМЕСТИТЬ | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних |ИЗ | РегистрСведений.ПервоначальныеСведенияОСНалоговыйУчет.СрезПоследних(&НачалоПериода, Организация = &Организация | И ПорядокВключенияСтоимостиВСоставРасходов = ЗНАЧЕНИЕ(Перечисление.ПорядокВключенияСтоимостиОСВСоставРасходовНУ.НачислениеАмортизации) | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПараметрыАмортизацииНалоговыйУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | ЕСТЬNULL(ПараметрыАмортизацииНалоговыйУчетСрезПоследних.СрокПолезногоИспользования, 0) КАК СрокПолезногоИспользования |ПОМЕСТИТЬ | ПараметрыАмортизацииНалоговыйУчетСрезПоследних |ИЗ | РегистрСведений.ПараметрыАмортизацииОСНалоговыйУчет.СрезПоследних(&НачалоПериода, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК ПараметрыАмортизацииНалоговыйУчетСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | АмортизацияНалоговыйУчетОстаткиИОбороты.ОсновноеСредство КАК ОсновноеСредство, | ЕСТЬNULL(АмортизацияНалоговыйУчетОстаткиИОбороты.АмортизацияПриход, 0) КАК АмортизацияВМесяце, | ЕСТЬNULL(АмортизацияНалоговыйУчетОстаткиИОбороты.СтоимостьНачальныйОстаток, 0) КАК СтоимостьНаНачалоМесяца, | ЕСТЬNULL(АмортизацияНалоговыйУчетОстаткиИОбороты.СтоимостьКонечныйОстаток, 0) КАК СтоимостьНаКонецМесяца, | ЕСТЬNULL(АмортизацияНалоговыйУчетОстаткиИОбороты.АмортизацияНачальныйОстаток, 0) КАК АмортизацияНачальныйОстаток, | ЕСТЬNULL(АмортизацияНалоговыйУчетОстаткиИОбороты.АмортизацияКонечныйОстаток, 0) КАК АмортизацияКонечныйОстаток |ПОМЕСТИТЬ | АмортизацияНалоговыйУчетОстаткиИОбороты |ИЗ | РегистрНакопления.СтоимостьОСНалоговыйУчет.ОстаткиИОбороты(&НачалоПериода, &КонецПериода,,, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК АмортизацияНалоговыйУчетОстаткиИОбороты |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СчетаНалоговогоУчетаОсновныхСредствСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | СчетаНалоговогоУчетаОсновныхСредствСрезПоследних.СчетНачисленияАмортизации КАК СчетНачисленияАмортизации, | СчетаНалоговогоУчетаОсновныхСредствСрезПоследних.СчетУчета КАК СчетУчета |ПОМЕСТИТЬ | СчетаНалоговогоУчетаОсновныхСредствСрезПоследних |ИЗ | РегистрСведений.СчетаНалоговогоУчетаОС.СрезПоследних(&НачалоПериода, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК СчетаНалоговогоУчетаОсновныхСредствСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СпециальныйКоэффициентДляАмортизацииНалоговыйУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | ЕСТЬNULL(СпециальныйКоэффициентДляАмортизацииНалоговыйУчетСрезПоследних.СпециальныйКоэффициент, 0) КАК СпециальныйКоэффициент |ПОМЕСТИТЬ | СпециальныйКоэффициентДляАмортизацииНалоговыйУчетСрезПоследних |ИЗ | РегистрСведений.НачислениеАмортизацииОССпециальныйКоэффициентНалоговыйУчет.СрезПоследних(&НачалоПериода, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК СпециальныйКоэффициентДляАмортизацииНалоговыйУчетСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НачислениеАмортизацииПоБазовойСтоимостиНалоговыйУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | НачислениеАмортизацииПоБазовойСтоимостиНалоговыйУчетСрезПоследних.ПризнакНачисленияПоБазовойСтоимости КАК ПризнакНачисленияПоБазовойСтоимости, | ЕСТЬNULL(НачислениеАмортизацииПоБазовойСтоимостиНалоговыйУчетСрезПоследних.СуммаНакопленнойАмортизации, 0) КАК СуммаНакопленнойАмортизации, | ЕСТЬNULL(НачислениеАмортизацииПоБазовойСтоимостиНалоговыйУчетСрезПоследних.ФактическийСрокполезногоИспользования, 0) КАК ФактическийСрокполезногоИспользования |ПОМЕСТИТЬ | НачислениеАмортизацииПоБазовойСтоимостиНалоговыйУчетСрезПоследних |ИЗ | РегистрСведений.НачислениеАмортизацииОСПоБазовойСтоимостиНалоговыйУчет.СрезПоследних(&НачалоПериода, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК НачислениеАмортизацииПоБазовойСтоимостиНалоговыйУчетСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НаправленияАмортизации.ОсновноеСредство КАК ОсновноеСредство, | НаправленияАмортизации.СпособыОтраженияРасходовПоАмортизации КАК НаправлениеАмортизации |ПОМЕСТИТЬ | НаправленияАмортизации |ИЗ | РегистрСведений.СпособыОтраженияРасходовПоАмортизацииОСНалоговыйУчет.СрезПоследних(&НачалоПериода, Организация = &Организация | И ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК НаправленияАмортизации |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НалоговыйОстатки.Субконто1 КАК ОсновноеСредство, | ЕСТЬNULL(НалоговыйОстатки.СуммаОстатокДт, 0) КАК СуммаКапитальныхВложенийВключаемыхВРасходы |ПОМЕСТИТЬ | НалоговыйОстатки |ИЗ | РегистрБухгалтерии.Налоговый.Остатки(&НачалоПериода, Счет = ЗНАЧЕНИЕ(ПланСчетов.Налоговый.РасходыНаКапитальныеВложения), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ОсновныеСредства), Организация = &Организация | И Субконто1 В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС)) КАК НалоговыйОстатки |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | УчетнаяПолитикаОрганизацийСрезПоследних.МетодНачисленияАмортизацииНУ КАК МетодНачисленияАмортизацииНУ |ПОМЕСТИТЬ | УчетнаяПолитикаОрганизацийСрезПоследних |ИЗ | РегистрСведений.УчетнаяПолитикаОрганизаций.СрезПоследних(&НачалоПериодаУчетнойПолитики, Организация = &Организация) КАК УчетнаяПолитикаОрганизацийСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СостоянияОСОрганизаций.ОсновноеСредство, | МАКСИМУМ(СостоянияОСОрганизаций.ДатаСостояния) КАК ДатаВводаВЭксплуатацию |ПОМЕСТИТЬ | СостоянияОСОрганизаций |ИЗ | РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций |ГДЕ | СостоянияОСОрганизаций.Организация = &Организация | И СостоянияОСОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.ВведеноВЭксплуатацию) |СГРУППИРОВАТЬ ПО | СостоянияОСОрганизаций.ОсновноеСредство |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | СписокОС.ОсновноеСредство КАК ОсновноеСредство |ПОМЕСТИТЬ | СписокОССОстаточнойСтоимостью |ИЗ | СписокОС | ЛЕВОЕ СОЕДИНЕНИЕ ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних | ПО СписокОС.ОсновноеСредство = ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ОсновноеСредство |ГДЕ | СписокОС.ОсновноеСредство НЕ В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОС ГДЕ | (СписокОС.АмортизационнаяГруппа В (ЗНАЧЕНИЕ(Перечисление.АмортизационныеГруппы.ВосьмаяГруппа), | ЗНАЧЕНИЕ(Перечисление.АмортизационныеГруппы.ДевятаяГруппа), | ЗНАЧЕНИЕ(Перечисление.АмортизационныеГруппы.ДесятаяГруппа)) | И СписокОС.ГруппаОС В (ЗНАЧЕНИЕ(Перечисление.ГруппыОС.Здания), | ЗНАЧЕНИЕ(Перечисление.ГруппыОС.Сооружения))) | ИЛИ (СписокОС.АмортизационнаяГруппа = ЗНАЧЕНИЕ(Перечисление.АмортизационныеГруппы.ОтдельнаяГруппа))) | И ВЫБОР КОГДА ГОД(&ДатаПереходаКЛинейномуМетоду) = 2009 ТОГДА | (ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.МетодНачисленияАмортизации = ЗНАЧЕНИЕ(Перечисление.МетодыНачисленияАмортизации.Нелинейный)) | ИНАЧЕ ИСТИНА КОНЕЦ | |ИНДЕКСИРОВАТЬ ПО | ОсновноеСредство |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | АмортизацияОСНачалоПериода.Субконто1 КАК ОсновноеСредство, | АмортизацияОСНачалоПериода.СуммаОстатокКт КАК АмортизацияНачальныйОстаток |ПОМЕСТИТЬ | АмортизацияОСПриПереходеКЛинейномуМетоду |ИЗ | РегистрБухгалтерии.Налоговый.Остатки(&ДатаПереходаКЛинейномуМетоду, | Счет В (ВЫБРАТЬ РАЗЛИЧНЫЕ СчетНачисленияАмортизации ИЗ СчетаНалоговогоУчетаОсновныхСредствСрезПоследних), | ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ОсновныеСредства), | Организация = &Организация | И ВидУчета = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаПоПБУ18.НУ)) КАК АмортизацияОСНачалоПериода | ВНУТРЕННЕЕ СОЕДИНЕНИЕ СписокОССОстаточнойСтоимостью | ПО СписокОССОстаточнойСтоимостью.ОсновноеСредство = АмортизацияОСНачалоПериода.Субконто1 |ДЛЯ ИЗМЕНЕНИЯ | РегистрБухгалтерии.Налоговый.Остатки |ИНДЕКСИРОВАТЬ ПО | ОсновноеСредство |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СписокОС.ОсновноеСредство КАК ОсновноеСредство, | СписокОС.ОсновноеСредствоПредставление КАК ОсновноеСредствоПредставление, | СписокОС.Код КАК Код, | СписокОС.АмортизационнаяГруппа КАК АмортизационнаяГруппа, | СчетаНалоговогоУчетаОсновныхСредствСрезПоследних.СчетНачисленияАмортизации КАК СчетНачисленияАмортизации, | СчетаНалоговогоУчетаОсновныхСредствСрезПоследних.СчетУчета КАК СчетУчета, | ЕСТЬNULL(ПараметрыАмортизацииНалоговыйУчетСрезПоследних.СрокПолезногоИспользования, 0) КАК СрокПолезногоИспользования, | ЕСТЬNULL(АмортизацияОСПриПереходеКЛинейномуМетоду.АмортизацияНачальныйОстаток, 0) КАК АмортизацияПриПереходеКЛинейномуМетоду, | ЕСТЬNULL(ПараметрыАмортизацииНалоговыйУчетСрезПоследних.СрокПолезногоИспользования, 0) - ((ГОД(&ДатаПереходаКЛинейномуМетоду) - ГОД(СостоянияОСОрганизаций.ДатаВводаВЭксплуатацию)) * 12 + (МЕСЯЦ(&ДатаПереходаКЛинейномуМетоду) - МЕСЯЦ(СостоянияОСОрганизаций.ДатаВводаВЭксплуатацию))) + 1 КАК ОстатокСрокаПриПереходеКЛинейномуМетоду, | ВЫБОР КОГДА (СписокОС.ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокОССОстаточнойСтоимостью) И ГОД(&Период) >= 2009) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ПереходКЛинейномуМетоду, | ВЫБОР КОГДА ГОД(&Период) < 2009 ТОГДА | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.МетодНачисленияАмортизации | ИНАЧЕ | ВЫБОР КОГДА (СписокОС.АмортизационнаяГруппа В (ЗНАЧЕНИЕ(Перечисление.АмортизационныеГруппы.ВосьмаяГруппа), ЗНАЧЕНИЕ(Перечисление.АмортизационныеГруппы.ДевятаяГруппа), ЗНАЧЕНИЕ(Перечисление.АмортизационныеГруппы.ДесятаяГруппа)) | И СписокОС.ГруппаОС В (ЗНАЧЕНИЕ(Перечисление.ГруппыОС.Здания), ЗНАЧЕНИЕ(Перечисление.ГруппыОС.Сооружения))) ИЛИ (СписокОС.АмортизационнаяГруппа = ЗНАЧЕНИЕ(Перечисление.АмортизационныеГруппы.ОтдельнаяГруппа)) ТОГДА | ЗНАЧЕНИЕ(Перечисление.МетодыНачисленияАмортизации.Линейный) | ИНАЧЕ | УчетнаяПолитикаОрганизацийСрезПоследних.МетодНачисленияАмортизацииНУ | КОНЕЦ | КОНЕЦ КАК МетодНачисленияАмортизации, | ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ДатаПринятияКУчету КАК ДатаПринятияКУчету, | ЕСТЬNULL(АмортизацияНалоговыйУчетОстаткиИОбороты.АмортизацияВМесяце, 0) КАК АмортизацияВМесяце, | ЕСТЬNULL(АмортизацияНалоговыйУчетОстаткиИОбороты.СтоимостьНаНачалоМесяца, 0) КАК СтоимостьНаНачалоМесяца, | ЕСТЬNULL(АмортизацияНалоговыйУчетОстаткиИОбороты.СтоимостьНаКонецМесяца, 0) КАК СтоимостьНаКонецМесяца, | ЕСТЬNULL(АмортизацияНалоговыйУчетОстаткиИОбороты.АмортизацияНачальныйОстаток, 0) КАК АмортизацияНачальныйОстаток, | ЕСТЬNULL(АмортизацияНалоговыйУчетОстаткиИОбороты.АмортизацияКонечныйОстаток, 0) КАК АмортизацияКонечныйОстаток, | ЕСТЬNULL(СпециальныйКоэффициентДляАмортизацииНалоговыйУчетСрезПоследних.СпециальныйКоэффициент, 0) КАК СпециальныйКоэффициент, | НачислениеАмортизацииПоБазовойСтоимостиНалоговыйУчетСрезПоследних.ПризнакНачисленияПоБазовойСтоимости КАК ПризнакНачисленияПоБазовойСтоимости, | ЕСТЬNULL(НачислениеАмортизацииПоБазовойСтоимостиНалоговыйУчетСрезПоследних.СуммаНакопленнойАмортизации, 0) КАК СуммаНакопленнойАмортизации, | ЕСТЬNULL(НачислениеАмортизацииПоБазовойСтоимостиНалоговыйУчетСрезПоследних.ФактическийСрокполезногоИспользования, 0) КАК ФактическийСрокполезногоИспользования, | НаправленияАмортизации.НаправлениеАмортизации КАК НаправлениеАмортизации, | ЕСТЬNULL(НалоговыйОстатки.СуммаКапитальныхВложенийВключаемыхВРасходы, 0) КАК СуммаКапитальныхВложенийВключаемыхВРасходы // Начисление амортизации в рамках срока полезного использования { | ,ВЫБОР | КОГДА ЕСТЬNULL(СостоянияОСОрганизацийПринятоКУчету.ДатаСостояния, 0) = 0 | ТОГДА ДАТАВРЕМЯ(1, 1, 1) | ИНАЧЕ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(СостоянияОСОрганизацийПринятоКУчету.ДатаСостояния, МЕСЯЦ), МЕСЯЦ, ЕСТЬNULL(ПараметрыАмортизацииНалоговыйУчетСрезПоследних.СрокПолезногоИспользования, 0)) | КОНЕЦ КАК ПроверкаСрокаИспользования // Начисление амортизации в рамках срока полезного использования } |ИЗ | СписокОС | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних | ПО СписокОС.ОсновноеСредство = ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ ПараметрыАмортизацииНалоговыйУчетСрезПоследних | ПО СписокОС.ОсновноеСредство = ПараметрыАмортизацииНалоговыйУчетСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ АмортизацияНалоговыйУчетОстаткиИОбороты | ПО СписокОС.ОсновноеСредство = АмортизацияНалоговыйУчетОстаткиИОбороты.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ СчетаНалоговогоУчетаОсновныхСредствСрезПоследних | ПО СписокОС.ОсновноеСредство = СчетаНалоговогоУчетаОсновныхСредствСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ СпециальныйКоэффициентДляАмортизацииНалоговыйУчетСрезПоследних | ПО СписокОС.ОсновноеСредство = СпециальныйКоэффициентДляАмортизацииНалоговыйУчетСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ НачислениеАмортизацииПоБазовойСтоимостиНалоговыйУчетСрезПоследних | ПО СписокОС.ОсновноеСредство = НачислениеАмортизацииПоБазовойСтоимостиНалоговыйУчетСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ НаправленияАмортизации | ПО СписокОС.ОсновноеСредство = НаправленияАмортизации.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ НалоговыйОстатки | ПО СписокОС.ОсновноеСредство = НалоговыйОстатки.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ УчетнаяПолитикаОрганизацийСрезПоследних | ПО ИСТИНА | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияОСОрганизаций | ПО СписокОС.ОсновноеСредство = СостоянияОСОрганизаций.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ АмортизацияОСПриПереходеКЛинейномуМетоду | ПО СписокОС.ОсновноеСредство = АмортизацияОСПриПереходеКЛинейномуМетоду.ОсновноеСредство // Начисление амортизации в рамках срока полезного использования { | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизацийПринятоКУчету | ПО СписокОС.ОсновноеСредство = СостоянияОСОрганизацийПринятоКУчету.ОсновноеСредство | И СостоянияОСОрганизацийПринятоКУчету.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.ПринятоКУчету) // Начисление амортизации в рамках срока полезного использования } |"; ВыборкаПоОС = Запрос.Выполнить().Выбрать(); Пока ВыборкаПоОС.Следующий() Цикл Если НЕ ВыборкаПоОС.АмортизацияВМесяце = 0 Тогда Продолжить; // по указанному ОС в этом месяце уже начисляли амортизацию КонецЕсли; Если ВыборкаПоОС.СтоимостьНаНачалоМесяца = 0 Тогда Продолжить; // стоимость на начало месяца равна нулю КонецЕсли; ТекстСообщения = "Налог. расчет амортизации: для основного средства " + СокрЛП(ВыборкаПоОС.ОсновноеСредствоПредставление) + " (" + СокрЛП(ВыборкаПоОС.Код) + ")"; Если ВыборкаПоОС.СтоимостьНаНачалоМесяца <= ВыборкаПоОС.АмортизацияНачальныйОстаток Тогда Продолжить; КонецЕсли; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.МетодНачисленияАмортизации) Тогда Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " не указан метод амортизации"); КонецЕсли; Продолжить; КонецЕсли; Если Год(ДатаРасчета) < 2009 ИЛИ ВыборкаПоОС.МетодНачисленияАмортизации = Перечисления.МетодыНачисленияАмортизации.Линейный Тогда Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.СрокПолезногоИспользования) Тогда Если ВыдаватьСообщения Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " не указан срок полезного использования"); КонецЕсли; Продолжить; КонецЕсли; Иначе Если ВыборкаПоОС.МетодНачисленияАмортизации = Перечисления.МетодыНачисленияАмортизации.Нелинейный И НЕ ЗначениеЗаполнено(ВыборкаПоОС.АмортизационнаяГруппа) Тогда Если ВыдаватьСообщения Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + "не указана амортизационная группа"); КонецЕсли; Продолжить; КонецЕсли; КонецЕсли; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.СчетНачисленияАмортизации) Тогда Если ВыдаватьСообщения Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " не указан счет для начисления амортизации"); КонецЕсли; Продолжить; КонецЕсли; СуммаАмортизации = 0; СтоимостьДляВычисления = ВыборкаПоОС.СтоимостьНаНачалоМесяца - ВыборкаПоОС.СуммаКапитальныхВложенийВключаемыхВРасходы - ?(ВыборкаПоОС.ПереходКЛинейномуМетоду, ВыборкаПоОС.АмортизацияПриПереходеКЛинейномуМетоду, 0); СрокИспользованияДляВычисления = Макс(1, ?(ВыборкаПоОС.ПереходКЛинейномуМетоду, ВыборкаПоОС.ОстатокСрокаПриПереходеКЛинейномуМетоду, ВыборкаПоОС.СрокПолезногоИспользования)); Если ВыборкаПоОС.МетодНачисленияАмортизации = Перечисления.МетодыНачисленияАмортизации.Линейный Тогда СуммаАмортизации = СтоимостьДляВычисления / СрокИспользованияДляВычисления * ?(ВыборкаПоОС.СпециальныйКоэффициент = 0, 1, ВыборкаПоОС.СпециальныйКоэффициент); ИначеЕсли ВыборкаПоОС.МетодНачисленияАмортизации = Перечисления.МетодыНачисленияАмортизации.Нелинейный Тогда Если Год(ДатаРасчета) < 2009 Тогда Если (ВыборкаПоОС.ПризнакНачисленияПоБазовойСтоимости = Истина) тогда СтоимостьДляВычисления = СтоимостьДляВычисления - ВыборкаПоОС.СуммаНакопленнойАмортизации; СрокИспользованияДляВычисления = Макс(1, СрокИспользованияДляВычисления - ВыборкаПоОС.ФактическийСрокполезногоИспользования); СуммаАмортизации = СтоимостьДляВычисления / СрокИспользованияДляВычисления * ?(ВыборкаПоОС.СпециальныйКоэффициент = 0, 1, ВыборкаПоОС.СпециальныйКоэффициент); Иначе СтоимостьДляВычисления = СтоимостьДляВычисления - ВыборкаПоОС.АмортизацияКонечныйОстаток; СуммаАмортизации = СтоимостьДляВычисления * 2 / СрокИспользованияДляВычисления * ?(ВыборкаПоОС.СпециальныйКоэффициент = 0, 1, ВыборкаПоОС.СпециальныйКоэффициент); СуммаАмортизации = Макс(0, Мин(ВыборкаПоОС.СтоимостьНаНачалоМесяца - ВыборкаПоОС.АмортизацияКонечныйОстаток, СуммаАмортизации)); //Перешли 20% барьер. Переходим к начислению по базовой стоимости. Если (ВыборкаПоОС.СтоимостьНаКонецМесяца - ВыборкаПоОС.АмортизацияКонечныйОстаток - СуммаАмортизации) <= (ВыборкаПоОС.СтоимостьНаКонецМесяца * 0.2) тогда //Определяем фактический срок использования основного средства. ДатаВводаВЭксплуатацию = ?(ЗначениеЗаполнено(ВыборкаПоОС.ДатаВводаВЭксплуатацию), ВыборкаПоОС.ДатаВводаВЭксплуатацию, ВыборкаПоОС.ДатаПринятияКУчету); Если НЕ ЗначениеЗаполнено(ДатаВводаВЭксплуатацию) Тогда ФактСрокИспользованияНУ = 0; Иначе ФактическийСрокПолезногоИспользования = ОпределитьФактическийСрокИспользования(ДатаВводаВЭксплуатацию, ДатаРасчета); КонецЕсли; ПереходКНачислениюПоБазовой = Объект.Движения.НачислениеАмортизацииОСПоБазовойСтоимостиНалоговыйУчет; СтрокаДвижения = ПереходКНачислениюПоБазовой.Добавить(); СтрокаДвижения.Период = ДатаРасчета; СтрокаДвижения.Регистратор = Объект; СтрокаДвижения.ОсновноеСредство = ВыборкаПоОС.ОсновноеСредство; СтрокаДвижения.ПризнакНачисленияПоБазовойСтоимости = Истина; СтрокаДвижения.Организация = Организация; СтрокаДвижения.СуммаНакопленнойАмортизации = ВыборкаПоОС.АмортизацияКонечныйОстаток + СуммаАмортизации; СтрокаДвижения.ФактическийСрокПолезногоИспользования = ФактическийСрокПолезногоИспользования; КонецЕсли; КонецЕсли; Иначе Если ВыборкаПоОС.АмортизационнаяГруппа = Перечисления.АмортизационныеГруппы.ПерваяГруппа Тогда НормаАмортизации = 14.3 ИначеЕсли ВыборкаПоОС.АмортизационнаяГруппа = Перечисления.АмортизационныеГруппы.ВтораяГруппа Тогда НормаАмортизации = 8.8 ИначеЕсли ВыборкаПоОС.АмортизационнаяГруппа = Перечисления.АмортизационныеГруппы.ТретьяГруппа Тогда НормаАмортизации = 5.6 ИначеЕсли ВыборкаПоОС.АмортизационнаяГруппа = Перечисления.АмортизационныеГруппы.ЧетвертаяГруппа Тогда НормаАмортизации = 3.8 ИначеЕсли ВыборкаПоОС.АмортизационнаяГруппа = Перечисления.АмортизационныеГруппы.ПятаяГруппа Тогда НормаАмортизации = 2.7 ИначеЕсли ВыборкаПоОС.АмортизационнаяГруппа = Перечисления.АмортизационныеГруппы.ШестаяГруппа Тогда НормаАмортизации = 1.8 ИначеЕсли ВыборкаПоОС.АмортизационнаяГруппа = Перечисления.АмортизационныеГруппы.СедьмаяГруппа Тогда НормаАмортизации = 1.3 ИначеЕсли ВыборкаПоОС.АмортизационнаяГруппа = Перечисления.АмортизационныеГруппы.ВосьмаяГруппа Тогда НормаАмортизации = 1.0 ИначеЕсли ВыборкаПоОС.АмортизационнаяГруппа = Перечисления.АмортизационныеГруппы.ДевятаяГруппа Тогда НормаАмортизации = 0.8 ИначеЕсли ВыборкаПоОС.АмортизационнаяГруппа = Перечисления.АмортизационныеГруппы.ДесятаяГруппа Тогда НормаАмортизации = 0.7 КонецЕсли; СуммаАмортизации = (ВыборкаПоОС.СтоимостьНаНачалоМесяца - ВыборкаПоОС.АмортизацияНачальныйОстаток - ВыборкаПоОС.СуммаКапитальныхВложенийВключаемыхВРасходы) * НормаАмортизации / 100 * ?((ВыборкаПоОС.СпециальныйКоэффициент = 0), 1, ВыборкаПоОС.СпециальныйКоэффициент); КонецЕсли; КонецЕсли; Остатки = ВыборкаПоОС.СтоимостьНаКонецМесяца - ВыборкаПоОС.АмортизацияКонечныйОстаток; СуммаАмортизации = Макс(0, Мин(Остатки, СуммаАмортизации)); СтрокаАмортизации = ТаблицаАмортизации.Добавить(); СтрокаАмортизации.ОС = ВыборкаПоОС.ОсновноеСредство; СтрокаАмортизации.СчетУчетаНУ = ВыборкаПоОС.СчетУчета; СтрокаАмортизации.СчетАмортизацииНУ = ВыборкаПоОС.СчетНачисленияАмортизации; СтрокаАмортизации.ИмяСубконто = "ОсновныеСредства"; СтрокаАмортизации.НаправлениеАмортизации = ВыборкаПоОС.НаправлениеАмортизации; СтрокаАмортизации.Налог = СуммаАмортизации; СтрокаАмортизации.СуммаКапитальныхВложенийВключаемыхВРасходы = ВыборкаПоОС.СуммаКапитальныхВложенийВключаемыхВРасходы; // Начисление амортизации в рамках срока полезного использования { Если ВыборкаПоОС.МетодНачисленияАмортизации = Перечисления.МетодыНачисленияАмортизации.Линейный И ЗначениеЗаполнено(ВыборкаПоОС.ПроверкаСрокаИспользования) И ЗначениеЗаполнено(ВыборкаПоОС.СрокПолезногоИспользования) Тогда Если ВыборкаПоОС.ПроверкаСрокаИспользования = НачалоМесяца(ДатаРасчета) Тогда АмортизацияНачальныйОстаток = ВыборкаПоОС.АмортизацияНачальныйОстаток; АмортизацияКонечныйОстаток = ВыборкаПоОС.АмортизацияКонечныйОстаток; СтоимостьНаНачалоМесяца = ВыборкаПоОС.СтоимостьНаНачалоМесяца; СтоимостьНаКонецМесяца = ВыборкаПоОС.СтоимостьНаКонецМесяца; Если ЗначениеЗаполнено(АмортизацияНачальныйОстаток) И ЗначениеЗаполнено(АмортизацияКонечныйОстаток) И ЗначениеЗаполнено(СтоимостьНаНачалоМесяца) И ЗначениеЗаполнено(СтоимостьНаКонецМесяца) Тогда Если АмортизацияНачальныйОстаток = АмортизацияКонечныйОстаток И СтоимостьНаНачалоМесяца = СтоимостьНаКонецМесяца Тогда СуммаАмортизацииРассчитанная = СтоимостьНаНачалоМесяца - АмортизацияНачальныйОстаток; Если СуммаАмортизации <> СуммаАмортизацииРассчитанная И СуммаАмортизацииРассчитанная > СуммаАмортизации Тогда Дельта = СуммаАмортизацииРассчитанная - СуммаАмортизации; Сообщить("(НУ)ОС: " + ВыборкаПоОС.ОсновноеСредство + "(" + ВыборкаПоОС.ОсновноеСредство.Код + ")" + "истекает срок использования, остаток учтен: " + Дельта); СтрокаАмортизации.Налог = СтрокаАмортизации.Налог + Дельта; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; // Начисление амортизации в рамках срока полезного использования } Если СуммаАмортизации = 0 Тогда Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " амортизация равна 0"); КонецЕсли; КонецЕсли; КонецЦикла; Возврат ТаблицаАмортизации; КонецФункции // РасчетАмортизацииНалогРегл // Рассчитывает сумму амортизации по указаному основному средству по упр учету // // Параметры // ОсновноеСредство - СправочникСсылка.ОсновныеСредства - ОС, по которому // нужно рассчитать амортизацию. // ДатаРасчета - Дата - Дата расчета амортизации // // Возвращаемое значение: // Число - Сумма начисленной амортизации // Функция РасчетАмортизацииУпр(ДатаРасчета,ОсновноеСредство = Неопределено, ВыдаватьСообщения = Истина) Экспорт ТаблицаАмортизации = Новый ТаблицаЗначений(); ТаблицаАмортизации.Колонки.Добавить("ОС"); ТаблицаАмортизации.Колонки.Добавить("Упр", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2))); ТаблицаАмортизации.Колонки.Добавить("НаправлениеАмортизации", Новый ОписаниеТипов("СправочникСсылка.СпособыОтраженияРасходовПоАмортизации")); Запрос = Новый Запрос(); Запрос.УстановитьПараметр("НачалоГода", НачалоГода(ДатаРасчета)); Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ДатаРасчета)); Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ДатаРасчета)); Запрос.УстановитьПараметр("ОсновноеСредство", ОсновноеСредство); УсловиеПоОС = ?( ОсновноеСредство = Неопределено, "", " ОсновноеСредство В (&ОсновноеСредство) "); Запрос.Текст = "ВЫБРАТЬ | ПервоначальныеСведенияОССрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | ПервоначальныеСведенияОССрезПоследних.ПараметрВыработки КАК ПараметрВыработки, | ПервоначальныеСведенияОССрезПоследних.СпособНачисленияАмортизации КАК СпособНачисленияАмортизации, | ЕСТЬNULL(ПервоначальныеСведенияОССрезПоследних.ПервоначальнаяСтоимость, 0) КАК ПервоначальнаяСтоимость |ПОМЕСТИТЬ | ПервоначальныеСведенияОССрезПоследних |ИЗ | РегистрСведений.ПервоначальныеСведенияОС.СрезПоследних(&КонецПериода, " + УсловиеПоОС + ") КАК ПервоначальныеСведенияОССрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НачислениеАмортизацииСрезПервых.ОсновноеСредство КАК ОсновноеСредство, | НачислениеАмортизацииСрезПервых.НачислятьАмортизацию КАК НачислятьАмортизацию, | НачислениеАмортизацииСрезПервых.НачислятьАмортизациюВТекущемМесяце КАК НачислятьАмортизациюВТекущемМесяце, | НачислениеАмортизацииСрезПервых.Период КАК Период |ПОМЕСТИТЬ | СрезПервых |ИЗ | РегистрСведений.НачислениеАмортизацииОС.СрезПоследних(&НачалоПериода, " + УсловиеПоОС + ") КАК НачислениеАмортизацииСрезПервых |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НачислениеАмортизацииСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | НачислениеАмортизацииСрезПоследних.НачислятьАмортизацию КАК НачислятьАмортизацию, | НачислениеАмортизацииСрезПоследних.НачислятьАмортизациюВТекущемМесяце КАК НачислятьАмортизациюВТекущемМесяце, | НачислениеАмортизацииСрезПоследних.Период КАК Период |ПОМЕСТИТЬ | СрезПоследних |ИЗ | РегистрСведений.НачислениеАмортизацииОС.СрезПоследних(&КонецПериода, " + УсловиеПоОС + ") КАК НачислениеАмортизацииСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПервоначальныеСведенияОССрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | СрезПервых.НачислятьАмортизацию КАК НачалоНачислятьАмортизацию, | СрезПоследних.НачислятьАмортизацию КАК КонецНачислятьАмортизацию, | СрезПоследних.НачислятьАмортизациюВТекущемМесяце КАК КонецНачислятьВТекущемМесяце |ПОМЕСТИТЬ | СписокАмортизируемыхОС |ИЗ | ПервоначальныеСведенияОССрезПоследних | ЛЕВОЕ СОЕДИНЕНИЕ СрезПервых | ПО СрезПервых.ОсновноеСредство = ПервоначальныеСведенияОССрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ СрезПоследних | ПО СрезПоследних.ОсновноеСредство = ПервоначальныеСведенияОССрезПоследних.ОсновноеСредство |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | АмортизацияОстаткиИОбороты.ОсновноеСредство КАК ОсновноеСредство, | ЕСТЬNULL(АмортизацияОстаткиИОбороты.СтоимостьНачальныйОстаток, 0) - ЕСТЬNULL(АмортизацияОстаткиИОбороты.АмортизацияНачальныйОстаток, 0) КАК СтоимостьНаНачалоГода |ПОМЕСТИТЬ | АмортизацияОстаткиИОбороты |ИЗ | РегистрНакопления.СтоимостьОС.ОстаткиИОбороты(&НачалоГода,,,, ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокАмортизируемыхОС)) КАК АмортизацияОстаткиИОбороты |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СтоимостьОС.ОсновноеСредство КАК ОсновноеСредство, | ЕСТЬNULL(СтоимостьОС.АмортизацияКонечныйОстаток, 0) КАК АмортизацияКонечныйОстаток, | ЕСТЬNULL(СтоимостьОС.АмортизацияОборот, 0) КАК АмортизацияОборот, | ЕСТЬNULL(СтоимостьОС.СтоимостьКонечныйОстаток, 0) КАК СтоимостьКонечныйОстаток, | ЕСТЬNULL(СтоимостьОС.СтоимостьНачальныйОстаток, 0) КАК СтоимостьНачальныйОстаток |ПОМЕСТИТЬ | СтоимостьОС |ИЗ | РегистрНакопления.СтоимостьОС.ОстаткиИОбороты(&НачалоПериода, &КонецПериода,,, ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокАмортизируемыхОС)) КАК СтоимостьОС |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ГрафикиАмортизацииСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | ГрафикиАмортизацииСрезПоследних.ГрафикАмортизации КАК ГрафикАмортизации |ПОМЕСТИТЬ | ГрафикиАмортизацииСрезПоследних |ИЗ | РегистрСведений.ГрафикиАмортизацииОС.СрезПоследних(&КонецПериода, ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокАмортизируемыхОС)) КАК ГрафикиАмортизацииСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СпособыОтраженияРасходовПоАмортизацииСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | СпособыОтраженияРасходовПоАмортизацииСрезПоследних.СпособыОтраженияРасходовПоАмортизации КАК СпособыОтраженияРасходовПоАмортизации |ПОМЕСТИТЬ | СпособыОтраженияРасходовПоАмортизацииСрезПоследних |ИЗ | РегистрСведений.СпособыОтраженияРасходовПоАмортизацииОС.СрезПоследних(&КонецПериода, ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокАмортизируемыхОС)) КАК СпособыОтраженияРасходовПоАмортизацииСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПараметрыАмортизацииСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | ПараметрыАмортизацииСрезПоследних.ПрименитьВТекущемМесяце КАК ПрименитьВТекущемМесяце, | ЕСТЬNULL(ПараметрыАмортизацииСрезПоследних.СрокИспользованияДляВычисленияАмортизации, 0) КАК СрокИспользованияДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииСрезПоследних.СтоимостьДляВычисленияАмортизации, 0) КАК СтоимостьДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииСрезПоследних.ОбъемПродукцииРаботДляВычисленияАмортизации, 0) КАК ОбъемПродукцииРаботДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииСрезПоследних.КоэффициентУскорения, 0) КАК КоэффициентУскорения, | ЕСТЬNULL(ПараметрыАмортизацииСрезПоследних.КоэффициентАмортизации, 0) КАК КоэффициентАмортизации, | ПараметрыАмортизацииСрезПоследних.Период КАК Период |ПОМЕСТИТЬ | ПараметрыАмортизацииСрезПоследних |ИЗ | РегистрСведений.ПараметрыАмортизацииОС.СрезПоследних(&КонецПериода, ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокАмортизируемыхОС)) КАК ПараметрыАмортизацииСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ГрафикиАмортизацииСрезПоследнихНачалоМесяца.ОсновноеСредство КАК ОсновноеСредство, | ГрафикиАмортизацииСрезПоследнихНачалоМесяца.ГрафикАмортизации КАК ГрафикАмортизации |ПОМЕСТИТЬ | ГрафикиАмортизацииСрезПоследнихНачалоМесяца |ИЗ | РегистрСведений.ГрафикиАмортизацииОС.СрезПоследних(&НачалоПериода, ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокАмортизируемыхОС)) КАК ГрафикиАмортизацииСрезПоследнихНачалоМесяца |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СпособыОтраженияРасходовПоАмортизацииСрезПоследнихНачалоМесяца.ОсновноеСредство КАК ОсновноеСредство, | СпособыОтраженияРасходовПоАмортизацииСрезПоследнихНачалоМесяца.СпособыОтраженияРасходовПоАмортизации КАК СпособыОтраженияРасходовПоАмортизации |ПОМЕСТИТЬ | СпособыОтраженияРасходовПоАмортизацииСрезПоследнихНачалоМесяца |ИЗ | РегистрСведений.СпособыОтраженияРасходовПоАмортизацииОС.СрезПоследних(&НачалоПериода, ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокАмортизируемыхОС)) КАК СпособыОтраженияРасходовПоАмортизацииСрезПоследнихНачалоМесяца |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПараметрыАмортизацииСрезПоследнихНачалоМесяца.ОсновноеСредство КАК ОсновноеСредство, | ЕСТЬNULL(ПараметрыАмортизацииСрезПоследнихНачалоМесяца.СрокИспользованияДляВычисленияАмортизации, 0) КАК СрокИспользованияДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииСрезПоследнихНачалоМесяца.СтоимостьДляВычисленияАмортизации, 0) КАК СтоимостьДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииСрезПоследнихНачалоМесяца.ОбъемПродукцииРаботДляВычисленияАмортизации, 0) КАК ОбъемПродукцииРаботДляВычисленияАмортизации, | ЕСТЬNULL(ПараметрыАмортизацииСрезПоследнихНачалоМесяца.КоэффициентУскорения, 0) КАК КоэффициентУскорения, | ЕСТЬNULL(ПараметрыАмортизацииСрезПоследнихНачалоМесяца.КоэффициентАмортизации, 0) КАК КоэффициентАмортизации |ПОМЕСТИТЬ | ПараметрыАмортизацииСрезПоследнихНачалоМесяца |ИЗ | РегистрСведений.ПараметрыАмортизацииОС.СрезПоследних(&НачалоПериода, ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокАмортизируемыхОС)) КАК ПараметрыАмортизацииСрезПоследнихНачалоМесяца |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ОсновныеСредстваСписанныеНаЗатратыОстатки.ОсновноеСредство КАК ОсновноеСредство, | ЕСТЬNULL(ОсновныеСредстваСписанныеНаЗатратыОстатки.СтоимостьОстаток, 0) КАК СтоимостьОстаток |ПОМЕСТИТЬ | ОсновныеСредстваСписанныеНаЗатратыОстатки |ИЗ | РегистрНакопления.ОССписанныеНаЗатраты.Остатки(&КонецПериода, ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокАмортизируемыхОС)) КАК ОсновныеСредстваСписанныеНаЗатратыОстатки |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВыработкаОСОбороты.ОсновноеСредство КАК ОсновноеСредство, | ВыработкаОСОбороты.ПараметрВыработки КАК ПараметрВыработки, | ЕСТЬNULL(ВыработкаОСОбороты.КоличествоОборот, 0) КАК ОбъемВыработки |ПОМЕСТИТЬ | ВыработкаОС |ИЗ | РегистрНакопления.ВыработкаОС.Обороты(&НачалоПериода, &КонецПериода,, ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокАмортизируемыхОС) | И ПараметрВыработки В (ВЫБРАТЬ ПараметрВыработки ИЗ ПервоначальныеСведенияОССрезПоследних)) КАК ВыработкаОСОбороты |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НачислениеАмортизацииСрезПоследних.ОсновноеСредство КАК ОсновноеСредство, | НачислениеАмортизацииСрезПоследних.НачислятьАмортизациюВТекущемМесяце КАК НачислятьАмортизациюВТекущемМесяце |ПОМЕСТИТЬ | НачислениеАмортизацииСрезПоследних |ИЗ | РегистрСведений.НачислениеАмортизацииОС.СрезПоследних(&КонецПериода, ОсновноеСредство В (ВЫБРАТЬ ОсновноеСредство ИЗ СписокАмортизируемыхОС)) КАК НачислениеАмортизацииСрезПоследних |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ИСТИНА) КАК ИзменениеНачислАморт, | НачислениеАмортизацииОС.ОсновноеСредство КАК ОсновноеСредство, | НачислениеАмортизацииСрезПоследних.НачислятьАмортизациюВТекущемМесяце КАК НачислятьВТекМесяце |ПОМЕСТИТЬ | ИзменениеПризнакаАмортизации |ИЗ | РегистрСведений.НачислениеАмортизацииОС КАК НачислениеАмортизацииОС | ВНУТРЕННЕЕ СОЕДИНЕНИЕ НачислениеАмортизацииСрезПоследних | ПО НачислениеАмортизацииОС.ОсновноеСредство = НачислениеАмортизацииСрезПоследних.ОсновноеСредство |ГДЕ | НачислениеАмортизацииОС.Период МЕЖДУ &НачалоПериода И &КонецПериода |СГРУППИРОВАТЬ ПО | НачислениеАмортизацииОС.ОсновноеСредство, | НачислениеАмортизацииСрезПоследних.НачислятьАмортизациюВТекущемМесяце |; | |///////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СписокАмортизируемыхОС.ОсновноеСредство КАК ОсновноеСредство, | ПРЕДСТАВЛЕНИЕ(СписокАмортизируемыхОС.ОсновноеСредство) КАК ОсновноеСредствоПредставление, | СписокАмортизируемыхОС.ОсновноеСредство.Код КАК Код, | СписокАмортизируемыхОС.НачалоНачислятьАмортизацию КАК НачалоНачислятьАмортизацию, | СписокАмортизируемыхОС.КонецНачислятьАмортизацию КАК КонецНачислятьАмортизацию, | СписокАмортизируемыхОС.КонецНачислятьВТекущемМесяце КАК КонецНачислятьВТекущемМесяце, | СтоимостьОС.АмортизацияКонечныйОстаток КАК АмортизацияКонечныйОстаток, | СтоимостьОС.АмортизацияОборот КАК АмортизацияОборот, | СтоимостьОС.СтоимостьКонечныйОстаток КАК БалансоваяСтоимость, | СтоимостьОС.СтоимостьНачальныйОстаток КАК СтоимостьНачальныйОстаток, | АмортизацияОстаткиИОбороты.СтоимостьНаНачалоГода КАК СтоимостьНаНачалоГода, | ПервоначальныеСведенияОССрезПоследних.СпособНачисленияАмортизации КАК СпособНачисленияАмортизации, | ПервоначальныеСведенияОССрезПоследних.ПервоначальнаяСтоимость КАК ПервоначальнаяСтоимость, | ПараметрыАмортизацииСрезПоследних.ПрименитьВТекущемМесяце КАК ПрименитьВТекущемМесяце, | ПараметрыАмортизацииСрезПоследних.Период КАК Период, | // параметры зависящие от ПрименитьВТекущемМесяце | ВЫБОР | КОГДА ПараметрыАмортизацииСрезПоследних.ПрименитьВТекущемМесяце | ТОГДА ГрафикиАмортизацииСрезПоследних.ГрафикАмортизации | ИНАЧЕ ГрафикиАмортизацииСрезПоследнихНачалоМесяца.ГрафикАмортизации | КОНЕЦ КАК ГрафикАмортизации, | | ВЫБОР | КОГДА ПараметрыАмортизацииСрезПоследних.ПрименитьВТекущемМесяце | ТОГДА СпособыОтраженияРасходовПоАмортизацииСрезПоследних.СпособыОтраженияРасходовПоАмортизации | ИНАЧЕ СпособыОтраженияРасходовПоАмортизацииСрезПоследнихНачалоМесяца.СпособыОтраженияРасходовПоАмортизации | КОНЕЦ КАК СпособыОтраженияРасходовПоАмортизации, | | ВЫБОР | КОГДА ПараметрыАмортизацииСрезПоследних.ПрименитьВТекущемМесяце | ТОГДА ПараметрыАмортизацииСрезПоследних.СрокИспользованияДляВычисленияАмортизации | ИНАЧЕ ПараметрыАмортизацииСрезПоследнихНачалоМесяца.СрокИспользованияДляВычисленияАмортизации | КОНЕЦ КАК СрокИспользованияДляВычисленияАмортизации, | | ВЫБОР | КОГДА ПараметрыАмортизацииСрезПоследних.ПрименитьВТекущемМесяце | ТОГДА ПараметрыАмортизацииСрезПоследних.СтоимостьДляВычисленияАмортизации | ИНАЧЕ ПараметрыАмортизацииСрезПоследнихНачалоМесяца.СтоимостьДляВычисленияАмортизации | КОНЕЦ КАК СтоимостьДляВычисленияАмортизации, | | ВЫБОР | КОГДА ПараметрыАмортизацииСрезПоследних.ПрименитьВТекущемМесяце | ТОГДА ПараметрыАмортизацииСрезПоследних.ОбъемПродукцииРаботДляВычисленияАмортизации | ИНАЧЕ ПараметрыАмортизацииСрезПоследнихНачалоМесяца.ОбъемПродукцииРаботДляВычисленияАмортизации | КОНЕЦ КАК ОбъемПродукцииРаботДляВычисленияАмортизации, | | ВЫБОР | КОГДА ПараметрыАмортизацииСрезПоследних.ПрименитьВТекущемМесяце | ТОГДА ПараметрыАмортизацииСрезПоследних.КоэффициентУскорения | ИНАЧЕ ПараметрыАмортизацииСрезПоследнихНачалоМесяца.КоэффициентУскорения | КОНЕЦ КАК КоэффициентУскорения, | | ВЫБОР | КОГДА ПараметрыАмортизацииСрезПоследних.ПрименитьВТекущемМесяце | ТОГДА ПараметрыАмортизацииСрезПоследних.КоэффициентАмортизации | ИНАЧЕ ПараметрыАмортизацииСрезПоследнихНачалоМесяца.КоэффициентАмортизации | КОНЕЦ КАК КоэффициентАмортизации, // конец параметры зависящие от ПрименитьВТекущемМесяце | | ОсновныеСредстваСписанныеНаЗатратыОстатки.СтоимостьОстаток КАК СтоимостьОстаток, | ВыработкаОС.ОбъемВыработки КАК ОбъемВыработки, | ВЫБОР КОГДА ИзменениеПризнакаАмортизации.ИзменениеНачислАморт ЕСТЬ NULL ТОГДА | Ложь | ИНАЧЕ | ИзменениеПризнакаАмортизации.ИзменениеНачислАморт | КОНЕЦ КАК ИзменениеНачислАморт, | ВЫБОР КОГДА ИзменениеПризнакаАмортизации.НачислятьВТекМесяце ЕСТЬ NULL ТОГДА | Ложь | ИНАЧЕ | ИзменениеПризнакаАмортизации.НачислятьВТекМесяце | КОНЕЦ КАК НачислятьВТекМесяце // Начисление амортизации в рамках срока полезного использования { | ,ВЫБОР | КОГДА ЕСТЬNULL(СостоянияОСОрганизаций.ДатаСостояния, 0) = 0 | ТОГДА ДАТАВРЕМЯ(1, 1, 1) | ИНАЧЕ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(СостоянияОСОрганизаций.ДатаСостояния, МЕСЯЦ), МЕСЯЦ, ВЫБОР КОГДА ПараметрыАмортизацииСрезПоследних.ПрименитьВТекущемМесяце ТОГДА ПараметрыАмортизацииСрезПоследних.СрокИспользованияДляВычисленияАмортизации ИНАЧЕ ПараметрыАмортизацииСрезПоследнихНачалоМесяца.СрокИспользованияДляВычисленияАмортизации КОНЕЦ) | КОНЕЦ КАК ПроверкаСрокаИспользования // Начисление амортизации в рамках срока полезного использования } |ИЗ | СписокАмортизируемыхОС | ЛЕВОЕ СОЕДИНЕНИЕ АмортизацияОстаткиИОбороты | ПО СписокАмортизируемыхОС.ОсновноеСредство = АмортизацияОстаткиИОбороты.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ СтоимостьОС | ПО СписокАмортизируемыхОС.ОсновноеСредство = СтоимостьОС.ОсновноеСредство | // начало параметры зависящие от "применить в текущем месяце" | ЛЕВОЕ СОЕДИНЕНИЕ ГрафикиАмортизацииСрезПоследних | ПО СписокАмортизируемыхОС.ОсновноеСредство = ГрафикиАмортизацииСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ СпособыОтраженияРасходовПоАмортизацииСрезПоследних | ПО СписокАмортизируемыхОС.ОсновноеСредство = СпособыОтраженияРасходовПоАмортизацииСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ ПервоначальныеСведенияОССрезПоследних | ПО СписокАмортизируемыхОС.ОсновноеСредство = ПервоначальныеСведенияОССрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ ПараметрыАмортизацииСрезПоследних | ПО СписокАмортизируемыхОС.ОсновноеСредство = ПараметрыАмортизацииСрезПоследних.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ ГрафикиАмортизацииСрезПоследнихНачалоМесяца | ПО СписокАмортизируемыхОС.ОсновноеСредство = ГрафикиАмортизацииСрезПоследнихНачалоМесяца.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ СпособыОтраженияРасходовПоАмортизацииСрезПоследнихНачалоМесяца | ПО СписокАмортизируемыхОС.ОсновноеСредство = СпособыОтраженияРасходовПоАмортизацииСрезПоследнихНачалоМесяца.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ ПараметрыАмортизацииСрезПоследнихНачалоМесяца | ПО СписокАмортизируемыхОС.ОсновноеСредство = ПараметрыАмортизацииСрезПоследнихНачалоМесяца.ОсновноеСредство // конец параметры зависящие от "применить в текущем месяце" | | ЛЕВОЕ СОЕДИНЕНИЕ ОсновныеСредстваСписанныеНаЗатратыОстатки | ПО СписокАмортизируемыхОС.ОсновноеСредство = ОсновныеСредстваСписанныеНаЗатратыОстатки.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ ВыработкаОС | ПО СписокАмортизируемыхОС.ОсновноеСредство = ВыработкаОС.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ ИзменениеПризнакаАмортизации | ПО СписокАмортизируемыхОС.ОсновноеСредство = ИзменениеПризнакаАмортизации.ОсновноеСредство // Начисление амортизации в рамках срока полезного использования { | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияОС КАК СостоянияОСОрганизаций | ПО СписокАмортизируемыхОС.ОсновноеСредство = СостоянияОСОрганизаций.ОсновноеСредство | И СостоянияОСОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.ПринятоКУчету) // Начисление амортизации в рамках срока полезного использования } |"; ВыборкаПоОС = Запрос.Выполнить().Выбрать(); ТипГодовой = Тип ("СправочникСсылка.ГодовыеГрафикиАмортизацииОС"); ТаблицаГрафиков = ПолучитьТаблицуГрафиков(); Пока ВыборкаПоОС.Следующий() Цикл // Если были изменения флага начисления амортизации, то анализируем // признак необходимости начисления амортизации в текущем месяце. Если ВыборкаПоОС.ИзменениеНачислАморт Тогда Если Не ВыборкаПоОС.НачислятьВТекМесяце Тогда Продолжить; КонецЕсли; Иначе Если ВыборкаПоОС.КонецНачислятьВТекущемМесяце = Истина Тогда Если ВыборкаПоОС.КонецНачислятьАмортизацию = NULL ИЛИ ВыборкаПоОС.КонецНачислятьАмортизацию = Ложь Тогда Продолжить; КонецЕсли; ИначеЕсли (ВыборкаПоОС.КонецНачислятьВТекущемМесяце = Ложь) И (ВыборкаПоОС.НачалоНачислятьАмортизацию = NULL) Тогда Продолжить; ИначеЕсли ВыборкаПоОС.КонецНачислятьВТекущемМесяце = Ложь Тогда Если ВыборкаПоОС.КонецНачислятьАмортизацию = Ложь Тогда Продолжить; КонецЕсли; КонецЕсли; КонецЕсли; ТекстСообщения = "Упр. расчет амортизации: для основного средства " + СокрЛП(ВыборкаПоОС.ОсновноеСредствоПредставление) + " (" + СокрЛП(ВыборкаПоОС.Код) + ")"; Если (ВыборкаПоОС.АмортизацияОборот <> 0) И (ВыборкаПоОС.АмортизацияОборот <> Null)Тогда Если ВыдаватьСообщения = Истина и не (ОсновноеСредство = Неопределено) Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " амортизация в этом месяце уже начислялась"); КонецЕсли; Продолжить; // по указанному ОС в этом месяце уже начисляли амортизацию КонецЕсли; Если ВыборкаПоОС.СтоимостьОстаток <> 0 И ВыборкаПоОС.СтоимостьОстаток <> Null Тогда Продолжить; // ОС списано на затраты - не обрабатывается. КонецЕсли; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.СпособНачисленияАмортизации) Тогда Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " не указан способ амортизации"); КонецЕсли; Продолжить; КонецЕсли; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.СтоимостьДляВычисленияАмортизации) Тогда Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " стоимость равна 0"); КонецЕсли; Продолжить; КонецЕсли; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации) И Не (ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПропорциональноОбъемуПродукции ИЛИ ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПоЕНАОФ ИЛИ ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПоЕНАОФНа1000кмПробега) Тогда Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " срок использования равен 0"); КонецЕсли; Продолжить; КонецЕсли; СуммаАмортизации = 0; Если ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.Линейный Тогда СуммаГодовойАмортизации = ?(ВыборкаПоОС.СтоимостьДляВычисленияАмортизации = NULL, 0, ВыборкаПоОС.СтоимостьДляВычисленияАмортизации) / ?((ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации = NULL ИЛИ ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации = 0), 1, ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации) * 12; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.ГрафикАмортизации) Тогда СуммаАмортизации = СуммаГодовойАмортизации / 12; Иначе КоэффициентАмортизации = ПолучитьКоэффициентАмортизацииИзГрафика(ТаблицаГрафиков, ВыборкаПоОС.ГрафикАмортизации, ДатаРасчета, ТипГодовой); СуммаАмортизации = СуммаГодовойАмортизации * КоэффициентАмортизации; КонецЕсли; ИначеЕсли ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПропорциональноОбъемуПродукции Тогда Если ВыборкаПоОС.ОбъемВыработки = NULL ИЛИ ВыборкаПоОС.ОбъемВыработки = 0 Тогда Продолжить; КонецЕсли; СуммаАмортизации = ?(ВыборкаПоОС.СтоимостьДляВычисленияАмортизации = NULL, 0, ВыборкаПоОС.СтоимостьДляВычисленияАмортизации) * ВыборкаПоОС.ОбъемВыработки / ?(ВыборкаПоОС.ОбъемПродукцииРаботДляВычисленияАмортизации = NULL, 1, ВыборкаПоОС.ОбъемПродукцииРаботДляВычисленияАмортизации); ИначеЕсли ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПоЕНАОФ Тогда СуммаГодовойАмортизации = ?(ВыборкаПоОС.СтоимостьДляВычисленияАмортизации = NULL, 0, ВыборкаПоОС.СтоимостьДляВычисленияАмортизации) * ?(ВыборкаПоОС.КоэффициентАмортизации = NULL, 0, ВыборкаПоОС.КоэффициентАмортизации) / 100; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.ГрафикАмортизации) Тогда СуммаАмортизации = СуммаГодовойАмортизации / 12; Иначе КоэффициентАмортизации = ПолучитьКоэффициентАмортизацииИзГрафика(ТаблицаГрафиков, ВыборкаПоОС.ГрафикАмортизации, ДатаРасчета, ТипГодовой); СуммаАмортизации = СуммаГодовойАмортизации * КоэффициентАмортизации; КонецЕсли; ИначеЕсли ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПоЕНАОФНа1000кмПробега Тогда Если ВыборкаПоОС.ОбъемВыработки = NULL ИЛИ ВыборкаПоОС.ОбъемВыработки = 0 Тогда Продолжить; КонецЕсли; СуммаАмортизации = ?(ВыборкаПоОС.СтоимостьДляВычисленияАмортизации = NULL, 0, ВыборкаПоОС.СтоимостьДляВычисленияАмортизации) * ВыборкаПоОС.ОбъемВыработки * // % км. ?(ВыборкаПоОС.КоэффициентАмортизации = NULL, 0, ВыборкаПоОС.КоэффициентАмортизации) / 100 / 1000; ИначеЕсли ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.УменьшаемогоОстатка Тогда Если Год(ВыборкаПоОС.Период) = Год(ДатаРасчета) Тогда СтоимостьИтоговая = ВыборкаПоОС.СтоимостьДляВычисленияАмортизации; Иначе СтоимостьИтоговая = ВыборкаПоОС.СтоимостьНаНачалоГода; КонецЕсли; СуммаГодовойАмортизации = ?(СтоимостьИтоговая = NULL, 0, СтоимостьИтоговая) / ?(ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации = NULL, 1, ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации) * 12; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.ГрафикАмортизации) Тогда СуммаАмортизации = СуммаГодовойАмортизации / 12; Иначе КоэффициентАмортизации = ПолучитьКоэффициентАмортизацииИзГрафика(ТаблицаГрафиков, ВыборкаПоОС.ГрафикАмортизации, ДатаРасчета, ТипГодовой); СуммаАмортизации = СуммаГодовойАмортизации * КоэффициентАмортизации; КонецЕсли; КоэффициентУскорения = ВыборкаПоОС.КоэффициентУскорения; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.КоэффициентУскорения) Тогда КоэффициентУскорения = 1; Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " коэффициент ускорения не заполнен"); КонецЕсли; КонецЕсли; СуммаАмортизации = СуммаАмортизации * КоэффициентУскорения; ИначеЕсли ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПоСуммеЧиселЛетИспользования Тогда // Дата последнего изменения параметров Если ВыборкаПоОС.Период = NULL Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " не определилась дата начала использования (изменения параметров амортизации)!"); Продолжить; КонецЕсли; ДатаНачалаРасчета = НачалоМесяца(ДобавитьМесяц(ВыборкаПоОС.Период, 1)); ЧислоЛетПользования = ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации / 12; ЧислоЛетПользования = Цел(ЧислоЛетПользования) + ?(ЧислоЛетПользования - Цел(ЧислоЛетПользования) > 0, 1, 0); ЧислоЛетПрошедших = Цел(ОпределитьФактическийСрокИспользования(ДатаНачалаРасчета, ДатаРасчета) / 12); ЧислоЛетОставшихся = ЧислоЛетПользования - ЧислоЛетПрошедших; // Формула суммы чисел от 1 до N // S = (N + 1) * N / 2 СуммаЧиселЛет = (ЧислоЛетПользования + 1) * ЧислоЛетПользования / 2; ПроцентГодовойАмортизации = ЧислоЛетОставшихся / СуммаЧиселЛет; СуммаГодовойАмортизации = ВыборкаПоОС.СтоимостьДляВычисленияАмортизации * ПроцентГодовойАмортизации; Если НЕ ЗначениеЗаполнено(ВыборкаПоОС.ГрафикАмортизации) Тогда СуммаАмортизации = СуммаГодовойАмортизации / 12; Иначе КоэффициентАмортизации = ПолучитьКоэффициентАмортизацииИзГрафика(ТаблицаГрафиков, ВыборкаПоОС.ГрафикАмортизации, ДатаРасчета, ТипГодовой); СуммаАмортизации = СуммаГодовойАмортизации * КоэффициентАмортизации; КонецЕсли; ИначеЕсли ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.ПоИндивидуальномуГрафику Тогда КоэффициентАмортизации = ПолучитьКоэффициентАмортизацииИзГрафика(ТаблицаГрафиков, ВыборкаПоОС.ГрафикАмортизации, ДатаРасчета, ТипГодовой); СуммаАмортизации = ?(ВыборкаПоОС.СтоимостьДляВычисленияАмортизации = NULL, 0, ВыборкаПоОС.СтоимостьДляВычисленияАмортизации) * КоэффициентАмортизации; КонецЕсли; Если КоэффициентАмортизации = 0 И ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " коэффициент амортизации равен 0"); КонецЕсли; ПервоначальнаяСтоимость = ВыборкаПоОС.ПервоначальнаяСтоимость; Если ПервоначальнаяСтоимость = NULL Тогда Если ВыдаватьСообщения = Истина Тогда ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + " первоначальная стоимость равна 0"); КонецЕсли; ПервоначальнаяСтоимость = 0; КонецЕсли; ВсегоОсталосьСписать = ?( ВыборкаПоОС.БалансоваяСтоимость = NULL, 0, ВыборкаПоОС.БалансоваяСтоимость) - ?( ВыборкаПоОС.АмортизацияКонечныйОстаток = NULL, 0, ВыборкаПоОС.АмортизацияКонечныйОстаток); // Балансовая стоимость не может быть меньше 0 СуммаАмортизации = Макс( Мин( СуммаАмортизации, ВсегоОсталосьСписать), 0); СтрокаАмортизации = ТаблицаАмортизации.Добавить(); СтрокаАмортизации.ОС = ВыборкаПоОС.ОсновноеСредство; СтрокаАмортизации.НаправлениеАмортизации = ВыборкаПоОС.СпособыОтраженияРасходовПоАмортизации; СтрокаАмортизации.Упр = СуммаАмортизации; // Начисление амортизации в рамках срока полезного использования { Если ВыборкаПоОС.СпособНачисленияАмортизации = Перечисления.СпособыНачисленияАмортизацииОС.Линейный И ЗначениеЗаполнено(ВыборкаПоОС.ПроверкаСрокаИспользования) И ЗначениеЗаполнено(ВыборкаПоОС.СрокИспользованияДляВычисленияАмортизации) Тогда Если ВыборкаПоОС.ПроверкаСрокаИспользования = НачалоМесяца(ДатаРасчета) Тогда Если ЗначениеЗаполнено(ВыборкаПоОС.АмортизацияКонечныйОстаток) И ЗначениеЗаполнено(ВыборкаПоОС.БалансоваяСтоимость) Тогда СтоимостьКрайняя = СуммаАмортизации + ВыборкаПоОС.АмортизацияКонечныйОстаток; БалансоваяСтоимость = ВыборкаПоОС.БалансоваяСтоимость; Если БалансоваяСтоимость > СтоимостьКрайняя Тогда Дельта = БалансоваяСтоимость - СтоимостьКрайняя; Сообщить("(УУ)ОС: " + ВыборкаПоОС.ОсновноеСредство + "(" + ВыборкаПоОС.ОсновноеСредство.Код + ")" + "истекает срок использования, остаток учтен: " + Дельта); СтрокаАмортизации.Упр = СтрокаАмортизации.Упр + Дельта; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; // Начисление амортизации в рамках срока полезного использования } КонецЦикла; Возврат ТаблицаАмортизации; КонецФункции // РасчетАмортизацииУпр()