При работе в конфигурации 1С:Бухгалтерия КОРП 2.0 пользователи нередко сталкиваются с неприятной ошибкой: в отчете «Ведомость по амортизации ОС» начинают задваиваться суммы. Чаще всего эта проблема проявляется при передаче основных средств между филиалами с помощью документов Авизо. Давайте подробно разберем эту ситуацию, выясним техническую причину такого поведения базы и рассмотрим варианты надежного решения проблемы.
Как правило, пользователи замечают проблему после того, как основное средство (ОС) было принято к учету (или введено через остатки), а затем передано в другой филиал. В отчете суммы начисленной амортизации или первоначальной стоимости умножаются на два.
Корень проблемы кроется в несовершенстве запроса самого типового отчета и механике работы виртуальных таблиц платформы 1С. Ошибка возникает при обращении к виртуальной таблице СрезПоследних регистра сведений ПервоначальныеСведенияОСБухгалтерскийУчет.
Если в информационной базе существуют документы, проведенные в один день и с абсолютно одинаковым временем (чаще всего это начало дня 00:00:00 или конец дня 23:59:59), платформа отрабатывает специфически. При совпадении времени вплоть до секунды, срез последних не может определить, какая запись действительно "последняя", и возвращает сразу два значения. В результате, при соединении таблиц в запросе отчета, происходит классическое декартово произведение — строки дублируются, и суммы задваиваются.
В ходе обсуждения был выявлен еще один интересный нюанс. Например, основное средство было передано через Авизо в июне. В итоге в ведомости по амортизации за июнь в колонке «Начисление амортизации» сумма появляется сразу в обоих филиалах (передающем и принимающем).
Выясним причину. По правилам бухгалтерского учета, в месяце передачи основного средства амортизация за этот месяц должна начисляться только в передающем филиале. Принимающий начнет начислять ее со следующего месяца. Однако документ «Авизо» передает не только первоначальную стоимость, но и уже накопленную амортизацию. Если время проведения входящего или исходящего Авизо совпадает со временем регламентной операции закрытия месяца АмортизацияИИзносОС, отчет путается. Запрос ошибочно выводит переданный по Авизо оборот как свеженачисленный в текущем периоде в принимающем филиале.
Вместо того чтобы заставлять бухгалтеров вручную исправлять секунды каждый день, мы автоматизируем этот процесс. Это наиболее "безболезненный" вариант, так как он не требует снятия типового отчета с поддержки.
Реализуем автоматический сдвиг времени проведения с помощью подписки на событие перед записью документа. Наш алгоритм будет проверять документы «Ввод в эксплуатацию» и «Авизо по ОС». Если время документа равно 00:00:00, мы программно добавим к нему 1 секунду.
Посмотрим на пример того, как это можно реализовать в коде обработчика подписки:
Процедура ПередЗаписьюДокументаОС(Источник, Отказ, РежимЗаписи, РежимПроведения)
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
НачалоДняДокумента = НачалоДня(Источник.Дата);
// Если время равно 00:00:00, сдвигаем на 1 секунду
Если Источник.Дата = НачалоДняДокумента Тогда
Источник.Дата = Источник.Дата + 1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Благодаря этому простому коду обеспечивается хронологическая последовательность записей в регистре сведений. Типовой срез последних начнет отрабатывать корректно, выбирая строго одну актуальную запись, и задвоение сумм прекратится.
Если по каким-то причинам изменять время документов нельзя (например, строгие корпоративные стандарты учета), рассмотрим второй вариант — доработку самого отчета. Для этого потребуется открыть схему компоновки данных (СКД) отчета «Ведомость по амортизации ОС» в конфигураторе.
ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних.Максимум(Период) и Максимум(Регистратор), чтобы жестко отсечь дубли и оставить только одну запись для каждого ОС на выбранную дату.Этот метод более трудоемкий и усложняет дальнейшее обновление конфигурации, однако он решает проблему глобально для всех уже введенных исторических данных без необходимости их перепроведения. Если у вас в базе уже накопились тысячи проблемных документов Авизо, доработка запроса будет более предпочтительным вариантом, чем массовое перепроведение закрытых периодов.
Резюме: проблема задвоения сумм носит исключительно технический характер и связана с особенностями работы виртуальных таблиц 1С с совпадающим временем. В зависимости от вашей ситуации, вы можете выбрать как корректировку данных (сдвиг времени), так и корректировку алгоритма чтения этих данных (доработка отчета).