При разработке отчетов на платформе 1С:Предприятие 7.7 с использованием объекта БухгалтерскиеИтоги часто возникают ситуации, когда результаты запроса становятся нестабильными. В частности, отчет может корректно работать при монопольном режиме доступа, но выдавать «битые» или неполные данные, когда в базе активно работают другие пользователи. Рассмотрим, как проанализировать эту ситуацию и устранить причину неточностей.
Основная причина такого поведения кроется в механизме работы файловой системы 1С 7.7. Платформа хранит рассчитанные итоги в отдельных файлах (группа файлов 1SACC...), чтобы ускорить получение данных. В процессе работы пользователей проводки постоянно меняются, и система должна актуализировать эти файлы.
Если в момент интенсивной работы пользователей происходит сетевой сбой, некорректное завершение сеанса или конфликт блокировок при записи проводки, файлы итогов могут прийти в состояние рассинхронизации с реальными данными в журнале операций. В итоге объект БухгалтерскиеИтоги при выполнении запроса обращается к некорректным записям, что приводит к «плавающему» результату.
Первым и самым важным этапом в решении данной проблемы является процедура пересчета итогов. Она принудительно заставляет 1С просканировать журнал операций заново и восстановить соответствие между проводками и рассчитанными оборотами/сальдо.
После выполнения этой операции данные в отчетах должны стать актуальными. Мы настоятельно рекомендуем проводить эту процедуру периодически, если вы замечаете «расхождения» в стандартных отчетах.
Если штатный пересчет не помог, возможно, файлы итогов были повреждены физически (появились «битые» блоки). В таком случае стоит прибегнуть к радикальному методу — полной очистке файлов итогов.
Важно: Перед выполнением этих действий обязательно сделайте копию базы данных.
.DBF, .CDX, названия которых начинаются с 1SACC (например, 1SACCVAL.DBF, 1SACCDEF.DBF, 1SACCSS.DBF).Давайте проанализируем ваш код формирования отчета. При работе с БухгалтерскиеИтоги важно помнить о порядке вызовов методов. Рассмотрим правильный шаблон работы с этим объектом:
// Создание объекта и настройка параметров
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
// Указываем параметры субконто
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Орг, 2);
// Выполнение запроса за период
Ит.ВыполнитьЗапрос(Дата1, Дата2, Счет,,,, 3);
// Обход результатов
Ит.ВыбратьСубконто();
Пока Ит.ПолучитьСубконто() = 1 Цикл
// Вывод информации по субконто
Ит.ВыбратьПериоды();
Пока Ит.ПолучитьПериод() = 1 Цикл
// Обработка конкретных операций/документов
Док = Ит.Операция.Документ;
КонецЦикла;
КонецЦикла;
При использовании Ит.ВыполнитьЗапрос(...) убедитесь, что вы не используете устаревшие методы или неактуальные параметры. Если проблема повторяется даже после пересчета итогов, проверьте целостность самой базы данных с помощью внешней утилиты chdbfl.exe, которая входит в комплект поставки платформы. Она поможет найти повреждения в таблицах базы, которые могут быть причиной того, что БухгалтерскиеИтоги «не видят» часть документов за определенные даты.
Разбирая проблему, мы пришли к выводу, что стабильность работы отчетов в 1С 7.7 в файловом режиме напрямую зависит от качества обслуживания базы: регулярной индексации и пересчета итогов. Если вы будете выполнять эти действия в рамках регламентных работ, количество ошибок при формировании отчетов сведется к минимуму.