Перенос данных из старых редакций программных продуктов 1С (например, переход с 1С:Бухгалтерии предприятия 2.0 на редакцию 3.0) — это процесс, который нередко сопровождается скрытыми трудностями. С одной стороны, перенос завершается успешно, документы проводятся, регламентные операции выполняются. Но с другой стороны, при очередном обновлении релиза или при попытке закрыть сложный период бухгалтеры внезапно сталкиваются с ошибками начисления амортизации основных средств (ОС).
В этой статье мы подробно разберем, почему возникает популярная ошибка «Не указаны способы отражения расходов по амортизации для объекта...», заглянем «под капот» системы с помощью отладчика, проанализируем поведение механизмов платформы 1С и рассмотрим три практических способа решения этой проблемы: от быстрого исправления в коде до корректных штатных методик в пользовательском режиме.
При выполнении регламентной операции «Амортизация и износ основных средств» в процедуре закрытия месяца программа собирает сведения о состоянии каждого объекта ОС. Ключевым регистром, из которого система считывает правила распределения затрат, является периодический регистр сведений СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет.
Когда основные средства переносятся из редакции 2.0 в редакцию 3.0, они часто заносятся в систему без полноценных документов Принятие к учету ОС. Вместо этого остатки вводятся либо через специализированный документ ввода остатков, либо обычными ручными операциями (бухгалтерскими проводками по дебету счета 01 и кредиту счета 00). При таком «ручном» или упрощенном переносе записи в специализированных регистрах сведений по основным средствам могут отсутствовать или быть неполными.
До определенного момента база данных может успешно функционировать за счет «старых» механизмов обратной совместимости. Однако после очередного обновления конфигурации алгоритмы закрытия месяца становятся более строгими. Программа обращается к регистру сведений за актуальным способом отражения расходов, не находит его и прерывает закрытие месяца с ошибкой:
«Не указаны способы отражения расходов по амортизации для объекта "..." Укажите эти данные в документах принятия к учету и изменения параметров начисления амортизации».
Первое интуитивное действие пользователя при возникновении такой ошибки — создать документ Изменение отражения амортизации ОС на начало закрываемого месяца (например, на 1 июля 2017 года). Но при повторном запуске закрытия месяца ошибка всё равно повторяется. Почему так происходит?
Давайте выясним причину с помощью отладки. Проанализируем, как система запрашивает данные из регистра сведений. В коде конфигурации начисление амортизации происходит на определенную дату расчета. При этом срез последних данных регистра сведений берется на начало расчетного месяца, но с использованием специального объекта платформы — Граница.
В запросе параметр начала периода устанавливается следующим образом:
// Пример логики инициализации границы периода в типовом решении
Запрос.УстановитьПараметр("НачалоПериода", Новый Граница(НачалоМесяца(Реквизиты.ДатаРасчета), ВидГраницы.Исключая));
Использование свойства ВидГраницы.Исключая означает, что сама точка времени 1-е число месяца 00:00:00 из выборки исключается. Программа ищет записи, сделанные строго до начала расчетного месяца. С точки зрения методологии бухгалтерского учета это абсолютно верно: любые изменения параметров амортизации, внесенные в текущем месяце, должны начать действовать только со следующего месяца.
Таким образом, если мы вводим документ изменения параметров 1 июля, система при расчете амортизации за июль его просто «не видит», так как граница установлена на 1 июля «Исключая». Если же мы попытаемся ввести документ концом предыдущего месяца (30 июня), то программа потребует перепровести и перезакрыть июнь, нарушая последовательность и грозя изменением уже сданной отчетности.
Давайте рассмотрим, как выйти из этого замкнутого круга.
Если вы столкнулись с ситуацией, когда штатные механизмы блокируют закрытие месяца из-за жесткой привязки к границе периода, и у вас есть возможность вносить изменения в конфигурацию (или создать расширение), можно скорректировать логику запроса.
В модуле расчета амортизации найдем функцию получения текста запроса параметров отражения в учете (например, ПолучитьТекстЗапросаАмортизацияОСПараметрыОтраженияВУчете). В оригинальном коде срез последних берется по параметру &НачалоПериода, который передает границу с видом «Исключая».
Мы можем заменить этот параметр на обычную дату начала периода &НачалоПериодаДата (без использования исключающей границы). В этом случае документы, введенные в первый секунду месяца (01.07.2017 00:00:00), попадут в расчет за этот же месяц.
Ниже представлен пример изменения текста запроса:
Функция ПолучитьТекстЗапросаАмортизацияОСПараметрыОтраженияВУчете()
ТекстЗапроса =
"ВЫБРАТЬ
| СпособыОтраженияРасходовБУ.ОсновноеСредство КАК ОсновноеСредство,
| СпособыОтраженияРасходовБУ.СпособыОтраженияРасходовПоАмортизации КАК СпособыОтраженияРасходовПоАмортизации
|ПОМЕСТИТЬ СпособыОтраженияРасходовБУ
|ИЗ
| РегистрСведений.СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет.СрезПоследних(
// Корректировка разработчика: заменяем границу на чистую дату
//| &НачалоПериода,
| &НачалоПериодаДата,
| Организация = &Организация
| И ОсновноеСредство В
| (ВЫБРАТЬ
| СписокОС.ОсновноеСредство
| ИЗ
| СписокОС КАК СписокОС)) КАК СпособыОтраженияРасходовБУ
|
|ИНДЕКСИРОВАТЬ ПО
| ОсновноеСредство";
Возврат ТекстЗапроса;
КонецФункции
Важное предупреждение: Данный способ является вынужденной мерой и не рекомендуется для постоянного использования. Внесение изменений в типовые механизмы расчета амортизации усложняет последующие обновления конфигурации и потенциально может нарушить методологию учета ФСБУ 6/2020 при штатном изменении параметров ОС в будущем.
Наиболее правильным и безопасным способом является наведение порядка в исторических данных. Нам необходимо сделать так, чтобы на дату начала ведения учета в базе 1С:Бухгалтерия 3.0 в регистре сведений уже содержались нужные записи. Для этого не требуется перепроводить старые периоды или менять код конфигурации.
Разберем по шагам, как внести записи в регистр прошлым периодом:
Операция. Дату документа установим на один день ранее даты начала учета в новой базе (например, если учет ведется с 01.01.2017, то дату операции ставим 31.12.2016).Способы отражения расходов по амортизации ОС (бухгалтерский учет), установим напротив него флаг и нажмем ОК.Поскольку записи внесены датой ввода остатков (в «глубоком прошлом»), они не окажут никакого влияния на финансовые результаты уже закрытых месяцев. При этом при закрытии любого последующего месяца (включая июль 2017 года) механизм среза последних успешно получит данные по способу отражения расходов, и ошибка будет полностью устранена.
Если вам нужно оперативно запустить начисление амортизации по новому способу с июля 2017 года, но вы не хотите погружаться в ручное заполнение регистров за прошлые годы, можно воспользоваться обходом контроля последовательности закрытия месяца.
Давайте проанализируем этот сценарий:
Изменение отражения амортизации ОС и датируем его последним числом предыдущего месяца — 30.06.2017. В табличной части укажем проблемные ОС и новый способ отражения расходов.Мы подробно рассмотрели проблему закрытия месяца при расчете амортизации перенесенных ОС в программе 1С:Бухгалтерия. Столкнувшись с ошибкой отсутствия способов отражения расходов, не спешите сразу менять конфигурацию. Использование штатных инструментов работы с регистрами (Решение №2) или корректный ввод документов с временным пропуском перепроведения (Решение №3) позволяют быстро, надежно и без рисков для будущих обновлений решить эту проблему.