Очистка таблиц итогов и остатков бухгалтерского учета от лишних записей

В предыдущей статье была рассмотрена проблема накопления нулевых записей по регистрам остатков в конфигурациях, использующих регистры оперативного учета. После написания ее было бы логично рассмотреть, компоненту бухгалтерского учета, чтобы выяснить, существуют ли и в бухгалтерских конфигурациях подобные явления. Как видно из файла описанию структуры базы данных – за хранение бухгалтерских итогов отвечают две основные таблицы.

Материал опубликован на сайте SoftPoint.ru/

В предыдущей статье была рассмотрена проблема накопления нулевых записей по регистрам остатков в конфигурациях, использующих регистры оперативного учета. После написания ее было бы логично рассмотреть, компоненту бухгалтерского учета, чтобы выяснить, существуют ли и в бухгалтерских конфигурациях подобные явления. Как видно из файла описанию структуры базы данных – за хранение бухгалтерских итогов отвечают две основные таблицы.

Антон Гусев

Первая таблица называется «Итоги». В ней поквартально хранятся обороты по синтетическим счетам плана счетов. При этом в каждой строке этой таблице обороты хранятся отдельно по 1-му, 2-му и 3-му месяцу квартала. Исходя из этих условий, данная таблица никогда не бывает большой по объему. Тем не менее, мы включим ее в список таблиц для тестирования и очистки.

Вторая таблица называется «Остатки». В ней, также поквартально, как и в первой таблице, хранится начальное сальдо, хранятся поквартально отдельно обороты по Дебету и по Кредиту по счетам в разрезе субконто. Для каждого месяца (имеется в виду 1-й, 2-й, 3-й по порядку) хранится отдельная пара (обороты по Дебету и Кредиту). Вот для этой таблицы объем избыточных данных тоже должен быть большим.

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

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

Обработка работает только для баз в формате SQL. Написана с использованием Rainbow. Если у вас нет компоненты Rainbow, то ее можно загрузить здесь. Используйте обработку на свой страх и риск.

Текст модуля можно посмотреть здесь:

Перем ТекМета;
Перем СтрокаСообщения;
//________________________________________________________
Процедура ЧиститьРегистры()
    Если Вопрос(СтрокаСообщения,4)=6 Тогда
        ЗапросРадуги=СоздатьОбъект("ODBCQuery");
        Для к=1 по Метаданные.Регистр() Цикл
            Если Метаданные.Регистр(к).ТипРегистра="Остатки" Тогда
                ТекИдентификатор=Метаданные.Регистр(к).Идентификатор;
                ТекСиноним=Метаданные.Регистр(к).Синоним;
                Если ТекСиноним="" Тогда
                    ТекСиноним=ТекИдентификатор;
                КонецЕсли;
                ИмяТаблицы=ТекМета.ИмяТаблицыИтогов(ТекИдентификатор);
                ТекстЗапроса="DELETE
                |FROM "+ИмяТаблицы+"
                |WHERE ";
                Для й=1 по Метаданные.Регистр(к).Ресурс() Цикл
                    ТекИдРесурса=Метаданные.Регистр(к).Ресурс(й).Идентификатор;
                    ТекстЗапроса=ТекстЗапроса+?(й=1,""," AND ")+"(SP"+ТекМета.ИдРесурсаРегистра(ТекИдентификатор,ТекИдРесурса)+"=0)";
                КонецЦикла;
                //Теперь выполняем запрос
                Если ЗапросРадуги.Prepare(ТекстЗапроса,1,1)=1 Тогда
                    Если ЗапросРадуги.Open()=1 Тогда
                        Сообщить("Обработан регистр <"+ТекСиноним+">","i");
                        ЗапросРадуги.Close();
                    Иначе
                        Предупреждение("Ошибка открытия запроса!",10);
                    КонецЕсли;
                    ЗапросРадуги.Reset();
                Иначе
                    Предупреждение("Ошибка выполнения запроса!",10);
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
        ЗапросРадуги="";
    КонецЕсли;
КонецПроцедуры
//________________________________________________________
Процедура ПосчитатьРегистры()
    ЗапросРадуги=СоздатьОбъект("ODBCQuery");
    Для к=1 по Метаданные.Регистр() Цикл
        Если Метаданные.Регистр(к).ТипРегистра="Остатки" Тогда
            ТекИдентификатор=Метаданные.Регистр(к).Идентификатор;
            ТекСиноним=Метаданные.Регистр(к).Синоним;
            Если ТекСиноним="" Тогда
                ТекСиноним=ТекИдентификатор;
            КонецЕсли;
            ИмяТаблицы=ТекМета.ИмяТаблицыИтогов(ТекИдентификатор);
            ТекстЗапроса="SELECT COUNT(*)
            |FROM "+ИмяТаблицы+"
            |WHERE ";
            Для й=1 по Метаданные.Регистр(к).Ресурс() Цикл
                ТекИдРесурса=Метаданные.Регистр(к).Ресурс(й).Идентификатор;
                ТекстЗапроса=ТекстЗапроса+?(й=1,""," AND ")+"(SP"+ТекМета.ИдРесурсаРегистра(ТекИдентификатор,ТекИдРесурса)+"=0)";
            КонецЦикла;
            //Выполняем запрос на общее количество
            ПолноеЧисло=0;
            Если ЗапросРадуги.Prepare("SELECT COUNT(*) FROM "+ИмяТаблицы,1,1)=1 Тогда
                Если ЗапросРадуги.Open()=1 Тогда
                    ЗапросРадуги.GotoNext();
                    Если ЗапросРадуги.IsOK()=1 Тогда
                        ПолноеЧисло=ЗапросРадуги.GetLong(0);
                    КонецЕсли;
                    ЗапросРадуги.Close();
                Иначе
                    Предупреждение("Ошибка открытия запроса!",10);
                КонецЕсли;
                ЗапросРадуги.Reset();
            Иначе
                Предупреждение("Ошибка выполнения запроса!",10);
            КонецЕсли;
            //Теперь выполняем запрос на количество пустых
            ПустоеЧисло=0;
            Если ЗапросРадуги.Prepare(ТекстЗапроса,1,1)=1 Тогда
                Если ЗапросРадуги.Open()=1 Тогда
                    ЗапросРадуги.GotoNext();
                    Если ЗапросРадуги.IsOK()=1 Тогда
                        ПустоеЧисло=ЗапросРадуги.GetLong(0);
                    КонецЕсли;
                    ЗапросРадуги.Close();
                Иначе
                    Предупреждение("Ошибка открытия запроса!",10);
                КонецЕсли;
                ЗапросРадуги.Reset();
            Иначе
                Предупреждение("Ошибка выполнения запроса!",10);
            КонецЕсли;
            Сообщить("Пустых строк итогов по регистру <"+ТекСиноним+"> : "+ПустоеЧисло+" из "+ ПолноеЧисло+" возможных.","i");
        КонецЕсли;
    КонецЦикла;
    ЗапросРадуги="";
КонецПроцедуры
//________________________________________________________
Процедура ЧиститьБухучет()
    Если Метаданные.ОсновнойПланСчетов.Выбран()=0 Тогда
        Предупреждение("В данной конфигурации бухгалтерский учет не ведется!!!",20);
        Возврат;
    КонецЕсли;
    Если Вопрос(СтрокаСообщения,4)=6 Тогда
        ЗапросРадуги=СоздатьОбъект("ODBCQuery");
        ТекстЗапроса="DELETE
        |FROM _1SBKTTL
        |WHERE (OBDT1 = 0) AND (OBKT1 = 0) AND (OBDT2 = 0) AND (OBKT2 = 0) AND (OBDT3 = 0) AND (OBKT3 = 0) AND (SD = 0)";
        Если ЗапросРадуги.Prepare(ТекстЗапроса,1,1)=1 Тогда
            Если ЗапросРадуги.Open()=1 Тогда
                Сообщить("Обработана таблица остатков (сальдо и обороты по субконто)","i");
                ЗапросРадуги.Close();
            Иначе
                Предупреждение("Ошибка открытия запроса!",10);
            КонецЕсли;
            ЗапросРадуги.Reset();
        Иначе
            Предупреждение("Ошибка выполнения запроса!",10);
        КонецЕсли;
        ТекстЗапроса="DELETE
        |FROM _1SBKTTLC
        |WHERE (OB1 = 0) AND (OB2 = 0) AND (OB3 = 0)";
        Если ЗапросРадуги.Prepare(ТекстЗапроса,1,1)=1 Тогда
            Если ЗапросРадуги.Open()=1 Тогда
                Сообщить("Обработана таблица итогов (обороты по синтетическим счетам)","i");
                ЗапросРадуги.Close();
            Иначе
                Предупреждение("Ошибка открытия запроса!",10);
            КонецЕсли;
            ЗапросРадуги.Reset();
        Иначе
            Предупреждение("Ошибка выполнения запроса!",10);
        КонецЕсли;
        ЗапросРадуги="";
    КонецЕсли;
КонецПроцедуры
//________________________________________________________
Процедура ПосчитатьБухучет()
    Если Метаданные.ОсновнойПланСчетов.Выбран()=0 Тогда
        Предупреждение("В данной конфигурации бухгалтерский учет не ведется!!!",20);
        Возврат;
    КонецЕсли;
    ЗапросРадуги=СоздатьОбъект("ODBCQuery");
    //Сначала таблица остатков (обороты по субконто и сальдо)

    //Выполняем запрос на общее количество
    ПолноеЧисло=0;
    Если ЗапросРадуги.Prepare("SELECT COUNT(*) FROM _1SBKTTL",1,1)=1 Тогда
        Если ЗапросРадуги.Open()=1 Тогда
            ЗапросРадуги.GotoNext();
            Если ЗапросРадуги.IsOK()=1 Тогда
                ПолноеЧисло=ЗапросРадуги.GetLong(0);
            КонецЕсли;
            ЗапросРадуги.Close();
        Иначе
            Предупреждение("Ошибка открытия запроса!",10);
        КонецЕсли;
        ЗапросРадуги.Reset();
    Иначе
        Предупреждение("Ошибка выполнения запроса!",10);
    КонецЕсли;

    //Теперь выполняем запрос на количество пустых
    ПустоеЧисло=0;
    ТекстЗапроса="SELECT COUNT(*)
    |FROM _1SBKTTL
    |WHERE (OBDT1 = 0) AND (OBKT1 = 0) AND (OBDT2 = 0) AND (OBKT2 = 0) AND (OBDT3 = 0) AND (OBKT3 = 0) AND (SD = 0)";
    Если ЗапросРадуги.Prepare(ТекстЗапроса,1,1)=1 Тогда
        Если ЗапросРадуги.Open()=1 Тогда
            ЗапросРадуги.GotoNext();
            Если ЗапросРадуги.IsOK()=1 Тогда
                ПустоеЧисло=ЗапросРадуги.GetLong(0);
            КонецЕсли;
            ЗапросРадуги.Close();
        Иначе
            Предупреждение("Ошибка открытия запроса!",10);
        КонецЕсли;
        ЗапросРадуги.Reset();
    Иначе
        Предупреждение("Ошибка выполнения запроса!",10);
    КонецЕсли;
    Сообщить("Пустых строк в таблице остатков (сальдо и обороты по субконто): "+ПустоеЧисло+" из "+ ПолноеЧисло+" возможных.","i");

    //Теперь таблица итогов (обороты по синтетическим счетам)

    //Выполняем запрос на общее количество
    ПолноеЧисло=0;
    Если ЗапросРадуги.Prepare("SELECT COUNT(*) FROM _1SBKTTLC",1,1)=1 Тогда
        Если ЗапросРадуги.Open()=1 Тогда
            ЗапросРадуги.GotoNext();
            Если ЗапросРадуги.IsOK()=1 Тогда
                ПолноеЧисло=ЗапросРадуги.GetLong(0);
            КонецЕсли;
            ЗапросРадуги.Close();
        Иначе
            Предупреждение("Ошибка открытия запроса!",10);
        КонецЕсли;
        ЗапросРадуги.Reset();
    Иначе
        Предупреждение("Ошибка выполнения запроса!",10);
    КонецЕсли;

    //Теперь выполняем запрос на количество пустых
    ПустоеЧисло=0;
    ТекстЗапроса="SELECT COUNT(*)
    |FROM _1SBKTTLC
    |WHERE (OB1 = 0) AND (OB2 = 0) AND (OB3 = 0)";
    Если ЗапросРадуги.Prepare(ТекстЗапроса,1,1)=1 Тогда
        Если ЗапросРадуги.Open()=1 Тогда
            ЗапросРадуги.GotoNext();
            Если ЗапросРадуги.IsOK()=1 Тогда
                ПустоеЧисло=ЗапросРадуги.GetLong(0);
            КонецЕсли;
            ЗапросРадуги.Close();
        Иначе
            Предупреждение("Ошибка открытия запроса!",10);
        КонецЕсли;
        ЗапросРадуги.Reset();
    Иначе
        Предупреждение("Ошибка выполнения запроса!",10);
    КонецЕсли;
    Сообщить("Пустых строк в таблице итогов (обороты по синтетическим счетам): "+ПустоеЧисло+" из "+ ПолноеЧисло+" возможных.","i");
    ЗапросРадуги="";
КонецПроцедуры
//________________________________________________________
Процедура ПриОткрытии()
    Попытка
        ЗагрузитьВнешнююКомпоненту("rainbow.dll");
        ТекМета=СоздатьОбъект("MetaDataWork");
    Исключение
        Форма.кнПосчитатьРегистры.Доступность(0);
        Форма.кнЧиститьРегистры.Доступность(0);
        Форма.кнПосчитатьБухучет.Доступность(0);
        Форма.кнЧиститьБухучет.Доступность(0);
    КонецПопытки;
    СтрокаСообщения="Удаление записей из таблицы итогов - необратимый процесс!
    |Отменить данную операцию после выполнения будет невозможно!
    |Вы уверены, что хотите продолжить?";
КонецПроцедуры

Начать дискуссию

Импорт

Финансовое сопровождение импортеров стало самой востребованной услугой ВЭД в первом полугодии 2024

Участники внешнеэкономической деятельности выбирают компании с официальным представительством в Китае, чтобы избежать проблем с оплатой поставок.

До конца недели скорость загрузки YouTube на стационарных компьютерах может снизиться до 40%, а к концу следующей — уже до 70%.

Мера затронет только десктопную версию. Мобильную замедлять пока не будут

Бесплатно с ФСБУ Документооборот

ФСБУ 27/2021 «Документы и документооборот в бухгалтерском учете»

Кто должен применять ФСБУ 27/2021, какие требования предъявляются к бухгалтерским документам и документообороту, как правильно составить документ и исправить ошибку.

ФСБУ 27/2021 «Документы и документооборот в бухгалтерском учете»

Курсы повышения
квалификации

18
Официальное удостоверение с занесением в госреестр Рособрнадзора
Реклама

Депутаты выступили против рекламы на запрещенных ресурсах

Ответственность за нарушение закона будут нести и рекламодатели, и распространители сообщений.

Как составить договор поручения: суть, условия и образец

Выполнение каких-либо работ иногда требуют привлечения сторонней компании или физического лица. Чтобы такое сотрудничество было официальным, заключают договор поручения. Разберемся, в чем заключается его суть, какие условия обычно вносят в текст, как оформляют документально в зависимости от ситуации.

Как составить договор поручения: суть, условия и образец

Маркетплейсы будут размещать ссылки на сертификаты качества

В карточках товаров на маркетплейсах будут указывать ссылки на сертификаты и декларации. Это позволит потребителям убедиться в качестве продукции.

Опытом делятся эксперты-практики, без воды
НДС

Все коды видов операций по НДС: таблица

Чтобы отчетность по НДС была корректной, нужно верно отражать данные о действиях, произведенных с этим налогом. Такие действия иначе называют операциями по НДС. Они должны быть документально зафиксированы. Для этого используется специальное обозначение в виде кода вида операции или сокращенно КВО. В материале повествуется о том, что это такое, как оно применяется и какие недавно произошли изменения.

Все коды видов операций по НДС: таблица

Нейросеть для бухгалтеров или психиатр для нейросети

Наблюдаем прям бум какой то по теме «Нейросеть для бухгалтеров». Каждый второй зовет на какие то совершенно волшебные курсы, после которых можно смело заваливаться на диван с тазиком черешни смотреть Грисельду. А работать будет нейросеть.

Нейросеть для бухгалтеров или психиатр для нейросети

Товар просрочен и подлежит утилизации: как учитывать расходы

Продажа товаров с истекшим сроком годности запрещена. Она изымается из оборота и в дальнейшем подлежит утилизации или уничтожению. При каких условиях понесенные при этом расходы можно учесть при расчете налога на прибыль?

Товар просрочен и подлежит утилизации: как учитывать расходы

О подозрительных операциях нотариусы и майнеры будут сообщать в Росфинмониторинг

Майнеров криптовалют и нотариусов обязали соблюдать антиотмывочный закон 115-ФЗ.

Застройщиков обяжут рядом с ЖК возводить школы

Вместе с жилищными комплексами застройщики будут стоить объекты социальной и транспортной инфраструктуры.

⚡️ Итоги дня: ФАС раскрыла картель на торгах соцтоварами, активисты приклеили себя к взлетной полосе, а спортсмены жалуются на еду в Олимпийской деревне

Подготовили обзор главных событий дня — 25 июля 2024 года. Все самое интересное, что писали и обсуждали в сети, в одной подборке.

Банки

У ВТБ появился сервис покупки автомобилей частями

Сервис «ВТБ Авто» позволяет разделить покупку машины на части: сначала взять авто в аренду, а в конце срока выкупить его по остаточной стоимости.

Штрафы ГАИ

Сервисы по аренде электросамокатов наказали нарушителей больше 400 тысяч раз

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

НДС

Сегодня последний день сдачи отчетности по НДС без штрафов

25 июля это крайний срок сдачи декларации НДС организациями и ИП на ОСНО, а также на ЕСХН.

👉 Приняты поправки в НК, разработанные еще до налоговой реформы-2025: обзор всех изменений для бухгалтера

Отменят свидетельства об ИНН, сдавать ЕУД надо будет один раз, а не ежеквартально, изменят минимальный срок владения для квартир после перепланировки и многое другое.

1
Банки

Банки ближнего зарубежья стали на 30% чаще отказывать в проведении платежей

Денежные переводы идут больше двух недель, а некоторые платежи отклоняют без объяснения причин.

Общество

Цифра дня. Про новогодние каникулы

Минтруд опубликовал проект постановления о рабочих и праздничных днях в 2025 году.

Цифра дня. Про новогодние каникулы

Предпринимателям окажут поддержку при открытии бизнеса на автомаршрутах

Бизнес, который хочет работать в сфере туризма по пути следования автомобильных маршрутов для путешествий, получит поддержку от Корпорации МСП и Минэка.

Интересные материалы

Роструд: работодатель не вправе удерживать из зарплат штрафы

В рамках трудового законодательства работодатель не вправе налагать на работников штрафы.