Почему задваиваются суммы в отчете «Ведомость по амортизации ОС» в 1С:Бухгалтерия КОРП и как это исправить?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При работе в конфигурации 1С:Бухгалтерия КОРП 2.0 пользователи нередко сталкиваются с неприятной ошибкой: в отчете «Ведомость по амортизации ОС» начинают задваиваться суммы. Чаще всего эта проблема проявляется при передаче основных средств между филиалами с помощью документов Авизо. Давайте подробно разберем эту ситуацию, выясним техническую причину такого поведения базы и рассмотрим варианты надежного решения проблемы.

Проанализируем суть проблемы

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

Корень проблемы кроется в несовершенстве запроса самого типового отчета и механике работы виртуальных таблиц платформы 1С. Ошибка возникает при обращении к виртуальной таблице СрезПоследних регистра сведений ПервоначальныеСведенияОСБухгалтерскийУчет.

Если в информационной базе существуют документы, проведенные в один день и с абсолютно одинаковым временем (чаще всего это начало дня 00:00:00 или конец дня 23:59:59), платформа отрабатывает специфически. При совпадении времени вплоть до секунды, срез последних не может определить, какая запись действительно "последняя", и возвращает сразу два значения. В результате, при соединении таблиц в запросе отчета, происходит классическое декартово произведение — строки дублируются, и суммы задваиваются.

Разберем частный случай: начисление в двух филиалах одновременно

В ходе обсуждения был выявлен еще один интересный нюанс. Например, основное средство было передано через Авизо в июне. В итоге в ведомости по амортизации за июнь в колонке «Начисление амортизации» сумма появляется сразу в обоих филиалах (передающем и принимающем).

Выясним причину. По правилам бухгалтерского учета, в месяце передачи основного средства амортизация за этот месяц должна начисляться только в передающем филиале. Принимающий начнет начислять ее со следующего месяца. Однако документ «Авизо» передает не только первоначальную стоимость, но и уже накопленную амортизацию. Если время проведения входящего или исходящего Авизо совпадает со временем регламентной операции закрытия месяца АмортизацияИИзносОС, отчет путается. Запрос ошибочно выводит переданный по Авизо оборот как свеженачисленный в текущем периоде в принимающем филиале.

Решение 1: Программный сдвиг времени документов (рекомендуется)

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

Реализуем автоматический сдвиг времени проведения с помощью подписки на событие перед записью документа. Наш алгоритм будет проверять документы «Ввод в эксплуатацию» и «Авизо по ОС». Если время документа равно 00:00:00, мы программно добавим к нему 1 секунду.

Посмотрим на пример того, как это можно реализовать в коде обработчика подписки:


Процедура ПередЗаписьюДокументаОС(Источник, Отказ, РежимЗаписи, РежимПроведения)
    
    Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        
        НачалоДняДокумента = НачалоДня(Источник.Дата);
        
        // Если время равно 00:00:00, сдвигаем на 1 секунду
        Если Источник.Дата = НачалоДняДокумента Тогда
            Источник.Дата = Источник.Дата + 1;
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Благодаря этому простому коду обеспечивается хронологическая последовательность записей в регистре сведений. Типовой срез последних начнет отрабатывать корректно, выбирая строго одну актуальную запись, и задвоение сумм прекратится.

Решение 2: Доработка запроса в типовом отчете

Если по каким-то причинам изменять время документов нельзя (например, строгие корпоративные стандарты учета), рассмотрим второй вариант — доработку самого отчета. Для этого потребуется открыть схему компоновки данных (СКД) отчета «Ведомость по амортизации ОС» в конфигураторе.

  1. Найдите место в запросе, где происходит получение данных из регистра ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних.
  2. Оберните обращение к регистру во вложенный запрос.
  3. Добавьте группировку по основному средству и филиалу.
  4. Используйте агрегатную функцию Максимум(Период) и Максимум(Регистратор), чтобы жестко отсечь дубли и оставить только одну запись для каждого ОС на выбранную дату.

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

Резюме: проблема задвоения сумм носит исключительно технический характер и связана с особенностями работы виртуальных таблиц 1С с совпадающим временем. В зависимости от вашей ситуации, вы можете выбрать как корректировку данных (сдвиг времени), так и корректировку алгоритма чтения этих данных (доработка отчета).

← На главную