Каждый месяц находите расхождения в итогах регистров? Воспроизведем и поправим ошибку платформы

16.09.24

Разработка - Механизмы платформы 1С

С проблемой бухгалтерских итогов мы столкнулись в управленческой базе, использующей регистры бухгалтерии. От пользователей регулярно поступали жалобы о расхождении в итогах. Много ресурсов отнимал поиск расхождений и пересчет итогов. Неожиданно одним из виновников расхождений оказалась ошибка в платформе. Расскажем о том, как воспроизвести ошибку и исправить ее.

Для воспроизведения я подготовил тестовую демобазу 1С:Бухгалтерии со встроенным Тест-центром и тестовый сценарий, который портит итоги.

 

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

  • на конец 2016 года у нас остаток по регистру бухгалтерии в базе – 46 085,34

  • на начало 2017 года – тот же остаток, 46 085,34.

Запускаем тест, который портит итоги.

 

Пока тест выполняется, я расскажу, что он делает.

Суть теста в том, что во время перестановки границы итогов одновременно в цикле постоянно меняется сумма проводки.

Первая роль в цикле изменяет сумму проводки, меняя остаток.

  • Сначала сумма проводки уменьшается на 1000 рублей.

  • Потом в цикле 100 раз увеличивается на 10 рублей.

  • И в конце теста сумма проводки становится первоначальной – соответственно, остаток тоже должен быть первоначальным.

 

А вторая роль переставляет границу итогов.

  • Вначале она удаляет итоги на начало 2017 года.

  • Потом переставляет границу итогов таким образом, чтобы оборот тестовой проводки влиял на остаток.

 

При перестановке итогов вторая роль:

  • Считывает остаток на начало декабря;

  • Определяет оборот за декабрь,

  • Производит вычисления (к остатку на начало декабря прибавляет обороты за декабрь) и записывает новый остаток на начало 2017 года.

 

Тест у нас выполнился.

  • Мы видим, что на конец 2016-го года у нас была сумма 46 085 рублей 34 копейки.

  • И вдруг на начало 2017 года у нас сумма получилась на 10 рублей меньше – 46 075 рублей 34 копейки.

Будем разбираться, что произошло.

 

Мы выполнили перестановку границы итогов одновременно с изменением суммы проводки. Рассмотрим момент пересечения.

  • При очередной итерации сумма проводки увеличивается на 10 рублей, соответственно оборот увеличивается на 10 рублей, и в текущие итоги записывается итог больше на 10 рублей.

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

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

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

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

 

На слайде – две строчки из технологического журнала.

  • Первая строчка – это единственная управляемая блокировка, которая накладывается при перестановке границы итогов. Она накладывается по пространству итогов.

  • Вторая строка – блокировка по тому же пространству итогов, но при изменении суммы проводки.

Обе блокировки исключительные, разделители учета одинаковы, и период пересекается. Раз есть пересечение, параллельной работы не должно быть.

  • Период перестановки границы итогов – от пустой даты до начала 2017 года.

  • А при изменении проводки – блокировка по периоду от 1 декабря 2016 года и до бесконечности.

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

 

Мы сделали вывод о недостаточной блокировке, поэтому делаем второй тест, в котором:

  • заворачиваем нашу перестановку границы итогов в программную транзакцию;

  • и с запасом устанавливаем исключительную блокировку по всему пространству итогов.

Это должно помочь, потому что:

  • Во-первых, блокировки одного сеанса не конфликтуют друг с другом.

  • Во-вторых, блокировки снимаются только в конце транзакции – блокировка должна сохраниться и помочь.

Смотрим результаты теста – не помогло, каким-то чудесным образом блокировка снялась до окончания транзакции. Как такое возможно в платформе – непонятно.

 

У нас есть третий, точно исправленный сценарий, который использует другое пространство блокировок для регистра.

  • У нас есть еще одно пространство блокировок для регистров бухгалтерии и накопления – это пространство движений или регистраторов. Мы заменили пространство итогов на пространство наборов записей. Если мы не указываем регистратор, это значит, что блокируется движение всех регистраторов.

  • Так же заворачиваем блокировку в программную транзакцию и смотрим, что у нас получилось.

Теперь на начало 2017 года сумма у нас правильная – 46 085 рублей 34 копейки.

 

Выводы:

  • Борьба с последствиями ошибки при перестановке границы бухгалтерских итогов может отнять много ресурсов у пользователей и команд разработки.

  • Аналогичная ошибка зарегистрирована в фирме «1С» для регистра накопления https://bugboard.v8.1c.ru/error/000060448. Она уже исправлена в платформе, начиная с 8.3.17.1496. Здесь я приложил ссылку на GitHub, где можно скачать пример для воспроизведения ошибки для регистра накопления. Туда же я выгрузил сценарии из Тест-центра.

  • Есть обходное программное решение в виде дополнительной управляемой блокировки. Оно работает как для регистров накопления, так и для регистров бухгалтерии.

 

Вопросы и ответы

 

По регистру включено разделение итогов?

Да.

А не думали, что результат неправильных остатков как раз в нем?

Нет. Разделение итогов работает корректно, потому что управляемая блокировка накладывается в разрезе разделителей. Причина ошибки не в этом.

Вы можете скачать примеры и воспроизвести, это не проблема. Лучше проверяйте.

В какой версии платформы это исправлено?

Ошибка для регистра накопления исправлена в релизе 8.3.17.1496. Для регистра бухгалтерии ошибка еще не исправлена. Этот пример и показывает, что в платформе 8.3.20.1710 ошибка сохранилась.

Лучше проверить проблему на своей базе, в своем режиме совместимости. Потому что помимо версии платформы, очень важен еще и режим совместимости конфигурации. Если у вас на УПП стоит режим совместимости 8.2.11, вам обновление на 8.3.20 вряд ли поможет. Это сочетание очень важно, потому что от уровня совместимости конфигурации зависит, будет ли исполняться новый код платформы или нет.

Как вы это выявляли, диагностировали?

Была очень большая проблема с тем, что итоги постоянно расходятся – надо было постоянно искать расхождения, пересчитывать их.

Я автоматизировал сверку итогов и автоматизировал перерасчет.

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

В результате расхождение получилось именно на сумму конкретного документа.

Дальше уже было дело техники это воспроизвести и найти решение.

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции Infostart Event 2022 Saint Petersburg.

 

Приглашаем на конференции Инфостарта 2025 года

INFOSTART TEAMLEAD EVENT

Не только для разработчиков, но и для руководителей отделов разработки, тимлидов и ИТ-директоров.
Место: Москва
Даты: 24-25 февраля 2025 г.

Подробнее

INFOSTART A&PM EVENT (Анализ & Управление проектами)

Практическая конференция для аналитиков и руководителей проектов 1С.
Место: Санкт-Петербург
Даты: 29-31 мая 2025 г.

Подробнее


См. также

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    31465    96    151    

69

Корректировка данных Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    109621    657    173    

696

Корректировка данных Зарплата Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Внешняя обработка предназначена для исправления самых различных ошибок, возникших по самым разным причинам. Общее проявление этих ошибок видно в различии данных между: проводками и различными отчетами по НДФЛ, заполнении ведомостей на выдачу зарплаты, неверным расчетом НДФЛ при начислении ЗП и т.д.

3600 руб.

09.02.2024    1500    11    5    

14

Корректировка данных Зарплата Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    3856    35    17    

43

Взаиморасчеты Корректировка данных Бухгалтер Пользователь Платформа 1С v8.3 Конфигурации 1cv8 Бухгалтерский учет Управленческий учет Платные (руб)

Вы наконец разобрались с закрытием месяцев и пора начать контролировать сроки оплаты поставщикам и задолженности клиентов, но в базе расчеты не идут из-за развернутого сальдо? Не беда, есть решение!

7200 руб.

02.11.2020    7125    5    0    

8

Закрытие периода Корректировка данных Бухгалтер Пользователь Платформа 1С v8.3 Оперативный учет 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

4800 руб.

27.10.2021    23578    240    35    

77
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user2072611 18.09.24 20:21 Сейчас в теме
Эта ошибка актуальна для 8.3.24/8.3.25 ?
Просто 20я платформа уже не актуальна, а последние релизы бухгалтерии 3.0.159/160 очень настойчиво требуют платформу не ниже 8.3.24.1667...
2. rinat_alp2 72 20.09.24 10:32 Сейчас в теме
(1) Добрый день, проверил на 8.3.24.1667 без режима совместимости, ошибка актуальна...
Обращение в 1С HL-565508, ошибка 60003456 зарегистрирована 20.10.2022, статус: на рассмотрении.
3. rinat_alp2 72 20.09.24 10:43 Сейчас в теме
Есть небольшая конфигурация на гитхабе для воспроизведения ошибки.

Ссылка на описание теста с файлами конфигурации https://github.com/RinatJulchurin/Infostart_2022#пример-конфигурации-для-воспроизведения-ошибки-при-перестановке-границы-итогов-для-регистров-бухгалтерии.

Создаете пустую базу соответствующей версии платформы со своим режимом совместимости и можете загрузить файлы конфигурации и проверить.
Оставьте свое сообщение