В процессе администрирования баз данных 1С специалисты часто сталкиваются с необходимостью управления итогами. Этот механизм критически важен для производительности системы: итоги позволяют платформе быстро получать остатки и обороты на определенные моменты времени, не пересчитывая все записи регистра с самого начала времен. Однако иногда стандартное окно «Управление итогами» ведет себя непредсказуемо, сбрасывая установленную дату на старое значение (например, на 01.01.2017). Разберем по шагам, почему это происходит и как правильно управлять этим процессом.
Для начала проанализируем интерфейс, с которым работает пользователь в классических конфигурациях (на обычных формах). Окно управления итогами позволяет установить границу, по которую система будет хранить предварительно рассчитанные данные в специальных таблицах базы данных. Если мы устанавливаем дату «по 31.10.2023», это означает, что при формировании отчетов за октябрь 1С возьмет готовые цифры. Если же мы запросим данные за ноябрь, системе придется динамически вычислять их, прибавляя движения ноября к итогам октября.
Рассмотрим стандартный способ изменения этой даты. Обычно пользователю достаточно выбрать нужные регистры в списке, ввести дату в поле «установить с» (или «установить по») и нажать кнопку «Выполнить». Но что делать, если после выполнения операции и перезапуска окна дата упорно возвращается к значению многолетней давности?
Выясним причину «самопроизвольного» возврата даты. В современных или кастомизированных конфигурациях часто настроены автоматические механизмы обслуживания базы. Одним из таких механизмов является регламентное задание «Установка периода рассчитанных итогов».
Проанализируем ситуацию: если в коде этого задания жестко прописан алгоритм (например, всегда устанавливать итоги на начало прошлого года или на фиксированную дату 01.01.2017 для целей сопоставимости данных), то любые ваши ручные изменения будут затираться. Система выполняет задание по расписанию (например, ночью), и утром вы видите старую дату. Чтобы решить эту проблему, необходимо проверить список регламентных заданий в консоли администрирования и изучить программный код, который они выполняют.
Посмотрим на техническую сторону вопроса. Дату итогов можно изменять программно. Если в вашей конфигурации предусмотрены процедуры «Закрытия месяца» или специализированные обработки по ускорению системы, они могут содержать вызовы методов встроенного языка. Основным методом здесь является УстановитьПериодРассчитанныхИтогов().
Разберем пример кода, который может принудительно устанавливать дату:
// Установка периода итогов для конкретного регистра накопления
РегистрыНакопления.Продажи.УстановитьПериодРассчитанныхИтогов(Дата("20170101"));
// Или установка для всех регистров системы сразу
МетаданныеРегистров = Метаданные.РегистрыНакопления;
Для Каждого Регистр Из МетаданныеРегистров Цикл
РегистрыНакопления[Регистр.Имя].УстановитьПериодРассчитанныхИтогов(НоваяДатаИтогов);
КонецЦикла;
Если такой код встроен в процедуру ПриНачалеРаботыСистемы или выполняется при проведении определенных документов, ручная корректировка через интерфейс будет бесполезна. Необходимо найти это место в глобальном поиске по конфигурации и скорректировать логику.
Проанализируем влияние настроек самой платформы. Если ваша конфигурация создана давно (например, в 2007 году) и до сих пор работает в режиме совместимости с версиями 8.1 или ранними 8.2, механизмы управления итогами могут быть ограничены. В старых версиях платформы разделение итогов работало иначе, и платформа могла некорректно обрабатывать даты, выходящие за границы определенных интервалов.
В современных версиях 8.3 расчет итогов возможен «наперед», но старый режим совместимости может блокировать эту возможность, откатывая дату к последней «безопасной» точке, которую он считает корректной. Проверьте свойство «Режим совместимости» в корне конфигурации в режиме Конфигуратор.
Важно понимать, как работает общее окно управления итогами в обычном приложении. Оно часто отображает некую «общую» дату для всей группы выбранных регистров. Если вы выбрали 50 регистров и пытаетесь установить дату 2023 год, но при этом хотя бы один из этих регистров «завис» или заблокирован (например, из-за повреждения таблиц _Totals в SQL), система может показать дату по самому «старому» регистру.
Рассмотрим, как это проверить. Попробуйте изменять дату не для всех регистров сразу, а по одному. Таким образом вы сможете вычислить конкретный регистр накопления или бухгалтерии, который не дает сдвинуть общую границу итогов.
Если проблема касается бухгалтерских итогов, стоит обратить внимание на План счетов. В 1С управление итогами по бухгалтерским счетам часто неразрывно связано с настройкой «Период рассчитанных итогов» в самом плане счетов. Если в базе используется несколько планов счетов, и по одному из них итоги рассчитаны только по 2017 год, это может влиять на общую видимость данных в консоли управления. Проверьте настройки периодичности и актуальности итогов в свойствах планов счетов.
Иногда невозможность сдвинуть дату связана с физическими или логическими ошибками в таблицах базы данных. Итоги хранятся в таблицах с суффиксом _Totals (для накопления) или _BuhTotals (для бухгалтерии). Если данные «расползлись» (например, итоги не соответствуют движениям в таблице _AccumReg), система может блокировать установку новой даты во избежание еще больших расхождений.
В таких случаях рекомендуется выполнить следующие действия:
После полного пересчета платформа обновит все агрегатные таблицы, и фиксация новой даты в окне управления итогами должна пройти успешно.
Подводя итог, можно сказать, что если дата сбрасывается на 01.01.2017, это не баг интерфейса, а результат работы внутренних алгоритмов системы. Для решения задачи мы рекомендуем сначала попробовать изменить дату для каждого регистра по отдельности, затем проверить наличие регламентных заданий и программного кода с методом УстановитьПериодРассчитанныхИтогов(), и в крайнем случае прибегнуть к полному пересчету итогов через тестирование и исправление.