Включение проводок и нарушение агрегации   

В процессе работы с базами данных на платформе 1С-Предприятие 7.7 "Бухгалтерский учет", была диагностирована и подробно рассмотрена следующая проблема: ошибка при включении отключенных проводок операции, приводящая к удваиванию исходных данных в агрегатных таблицах. Проблема возникает в том случае, если разные пользователи в разных сессиях включат отключенные проводки в одной и той же операции. Данная последовательность действий, приводящая к ошибке, была протестирована на 21-м, 23-м и 25-м релизах платформы. По результатом тестирования было выяснено, что ошибка диагностируется в каждом из этих релизов платформы.

Как диагностировать ошибку:

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

Механизм повторения ошибки по шагам:

  1. Открыть два сеанса работы с базой в разделенном режиме.
  2. В каждом из сеансов увеличить время интервала опроса базы данных со стандартных 10 секунд на большую величину (например, 60). Это необходимо для того, чтобы при внесении изменений в одном сеансе, в другом не успела бы обновиться форма списка журнала операций.
  3. Открыть форму списка журнала операций в обоих сеансах, найти одну операцию с выключенными проводками, установить курсор в обоих сеансах на эту операцию.
  4. Включить проводки в первом сеансе.
  5. Во втором сеансе, пока статус операции не успел еще обновиться, нужно также включить проводки. Ошибка будет, только если статус не успел обновиться, для чего мы и увеличивали стандартный интервал до большей величины.

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

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

Оборотно-сальдовая ведомость в момент нормального состояния базы данных

Рисунок 2. Состояние базы данных после возникновения ошибки агрегации. Как видно, при единственной операции в базе, отчет показывает ненулевой начальный остаток и дублированный конечный.

Журнал операций и оборотно сальдовая ведомость после возникновения ошибки агрегации

Рисунок 3. Документ помечен на удаление, проводок у операции не существует, в отчете видна ошибка целостности - ненулевой начальный и конечный остаток на дату.

Журнал операций и оборотно-сальдновая ведомость после пометки документа на удаление

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

При желании можно использовать для теста более двух сессий, тогда агрегатные таблицы обновятся столько раз, сколько будет сессий, при условии соблюдения пунктов (2-5).

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

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

Негативные последствия возникновения данной ошибки:

  • Задвоение цифр по данному срезу счета и субконто. Диагностирование затрудняется тем, что различные отчеты могут выдавать различные данные в зависимости от варианта результирующего SQL-запроса к базе данных. Ошибаться будут отчеты, основанные на использовании таблиц _1SBKTTL и _1SBKTTLC, в то время как отчет, основанный на таблице _1SENTRY даст правильные результаты.
  • Проблема повторного изменения цифр, которые уже попали в бухгалтерскую отчетность, в результате пересчета итогов и исправления ошибки агрегации. В результате цифры вернутся в нормальное состояние, которое будут отличаться от зафиксированного отчетностью. Проблема также трудно диагностируется, и трудно поддается изменению.

В заключение хочется отметить, что компания "СофтПоинт" имеет свои средства и методики для диагностирования и исправления этой и других ошибок платформы 7.7.

 


 

Перепечатка, воспроизведение в любой форме, распространение, в том числе в переводе, любых материалов с сайта www.softpoint.ru возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").