EN · DE · RU · FR · ES

#785: Buchungssatz.java

projectforge-business/src/main/java/org/projectforge/reporting/Buchungssatz.java Интерфейс Java — контракт бухгалтерской записи (учётной проводки) для слоя отчётности. Исходник: projectforge-business/src/main/java/org/projectforge/reporting/Buchungssatz.java 86 строк · 23 кода · 43 комментария · 20 пустых
Определяет контракт «только для чтения» для отдельной бухгалтерской записи (Buchungssatz) в финансовых отчётах. Реализуется BuchungssatzDO (JPA-сущность) и BuchungssatzImpl (адаптер отчётности). Интерфейс представляет собой шаблон «Адаптер» между слоем персистентности (DO) и слоем отчётности (BWA, отчёты Kost): он извлекает только поля, необходимые для отчётности, скрывая внутренности JPA от потребителей отчётов.

Поля

МетодТипНазначение
getId()LongСуррогатный ключ базы данных
getYear()IntegerГод проводки
getMonth()IntegerМесяц проводки (1–12)
getFormattedMonth()StringМесяц с ведущим нулём (01–12)
getSatznr()IntegerПорядковый номер в пределах месяца
getDatum()LocalDateДата проводки
getBetrag()BigDecimalДенежная сумма
getSh()SHTypeФлаг дебета/кредита (Soll/Haben)

Шаблон «Адаптер»

Интерфейс находится между BuchungssatzDO (JPA-сущность с аннотациями Hibernate, ленивой загрузкой и проблемами персистентности) и механизмами отчётности (ReportBwa, KostReportSenior). Определяя чистый интерфейс «только для чтения», слой отчётности никогда не взаимодействует напрямую с JPA-сущностями — он видит только этот контракт. Это предотвращает случайную ленивую загрузку при генерации отчётов (которая вызвала бы LazyInitializationException вне транзакции) и отделяет логику отчётности от особенностей ORM.

Ключевой коммит: 4c04cfd65 — миграция int→Long

Тип возвращаемого значения getId() был изменён с Integer на Long в рамках МАЖОРНОЙ миграции идентификаторов. Это потребовало обновления всех реализаций (BuchungssatzDO, BuchungssatzImpl) и всех генераторов отчётов, вызывавших getId(). Интерфейс выступил в роли границы контракта: изменение типа возвращаемого значения здесь принудительно (через компилятор) обновило все вызывающие места, предотвратив скрытые поломки.

История Git

868d6abb7 2025→2026 | 63081666f 2024→2025 | 4c04cfd65 MAJOR: миграция int→Long | b6092df09 2023→2024 | a6a7aece4 Оптимизация импортов | 57761f2a2 Удаление лишних ключевых слов public | 9456bbb6c Month→Integer с основанием 1 | 8c31eba2a Массовая миграция Calendar/DateHolder | 9ebb88522 Первоначальный коммит

Ключевой коммит: 9456bbb6c — месяц с основанием 1

Изменено представление месяца с 0-основного (стиль Calendar) на 1-основной (человекочитаемый). Был добавлен метод getFormattedMonth() для предоставления строк с ведущим нулём («01»–«12») для единообразного отображения и сортировки. Это было частью более широкой работы по устранению путаницы с 0-основными месяцами во всей кодовой базе (затронуты EmployeeSalary, VacationServiceImpl, AccountingRecord и MonthlyEmployeeFilter).