К статье
Практический материал

Администрирование · 11 мин

Кэшированные значения в 1С: для чего нужны и как с ними работать

Что такое кэшированные значения в 1С, зачем они нужны, где хранятся и когда их нужно очищать. Разбор механизмов кэша, типичных ошибок и способов обновления.

Кэшированные значения в 1С — это данные, которые платформа или прикладной код сохраняет во временном хранилище, чтобы не вычислять и не запрашивать их заново при каждом обращении. Кэш есть на нескольких уровнях: метаданные конфигурации на клиенте и сервере, таблицы СУБД, результаты запросов, сеансовые данные, а также значения, которые разработчик намеренно сохраняет в хранилищах значений или параметрах сеанса.

Главная цель кэширования — скорость. Повторное обращение к базе данных или пересчёт сложного значения занимает в разы больше времени, чем чтение готового результата из памяти. Поэтому платформа 1С активно кэширует структуру метаданных, а типовые конфигурации — курсы валют, настройки пользователей, результаты отчётов и другие часто используемые данные.

Обратная сторона — устаревание. Если исходные данные изменились, а кэш не обновился, пользователь видит старые значения: неверные остатки в отчёте, неактуальные настройки, ошибки после обновления конфигурации. Поэтому администратору и разработчику важно понимать, где именно лежит кэш и как его корректно сбросить.

Какие виды кэша существуют в 1С

Кэш в 1С не единый — это несколько независимых механизмов, и путать их нельзя, потому что очищаются они по-разному.

  • Кэш метаданных на клиенте. Тонкий и толстый клиент сохраняют описание конфигурации локально, чтобы ускорить запуск. Хранится в профиле пользователя, в папках вида ...\1cv8\... с идентификатором информационной базы.
  • Кэш на сервере 1С:Предприятия. Рабочие процессы кластера держат в памяти метаданные, сеансовые данные и служебные структуры.
  • Кэш СУБД. MS SQL Server, PostgreSQL и другие СУБД кэшируют страницы данных и планы запросов — это уровень вне самой 1С.
  • Прикладной кэш конфигурации. Программное кэширование в коде: повторное использование значений, хранилища общих настроек, параметры сеанса, регистры сведений с предвычисленными данными.

Отдельно стоит механизм «Повторное использование возвращаемых значений» у функций общих модулей. Он позволяет платформе запомнить результат функции на время вызова или на время сеанса и не выполнять тело функции повторно. Это самый частый способ сознательного кэширования в коде.

Для чего платформа и конфигурация кэшируют данные

Основной сценарий — ускорение типовых операций. Например, при открытии формы списка клиенту нужна структура метаданных: состав реквизитов, типы, настройки. Читать её каждый раз с сервера было бы долго, поэтому описание конфигурации кэшируется локально при первом подключении.

В прикладном коде кэшируют то, что дорого получать и что редко меняется: функциональные опции, права пользователя, курсы валют на дату, настройки обмена. В типовых конфигурациях для этого есть подсистема «Повторное использование возвращаемых значений» из БСП — обращения вида ОбщегоНазначения.ЗначениеРеквизитаОбъекта() внутри используют кэшированные вызовы.

Ещё одна цель — снижение нагрузки на СУБД. Каждый лишний запрос — это блокировки, чтение страниц и сетевой трафик. Когда сотни пользователей одновременно открывают документы, кэширование справочных данных заметно разгружает сервер баз данных.

Где кэш хранится и как его найти

Клиентский кэш метаданных находится в каталоге пользователя операционной системы. Типичные пути для Windows: %APPDATA%\1C\1cv8\ и %LOCALAPPDATA%\1C\1cv8\. Внутри — папки с длинными буквенно-цифровыми именами, каждая соответствует конкретной информационной базе.

Серверный кэш живёт в каталоге служебных файлов кластера (обычно srvinfo в каталоге установки или в данных службы агента сервера) и в памяти рабочих процессов rphost. Напрямую его редактировать не нужно — сброс выполняется перезапуском службы или штатными средствами.

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

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

Очистить кэш у конкретного пользователя и проверить повторно

Ошибка только у одного пользователя, у остальных всё работаетЛокальный кэш на его компьютере

Удалить папку кэша базы в профиле пользователя

Отчёт показывает старые данные после изменения документовПрикладной кэш или кэшированный результат

Проверить регламентные задания обновления и настройки отчёта

Медленный первый запуск, дальше быстроНормальное поведение: кэш заполняется

Это не ошибка, вмешательство не требуется

Когда и как очищать кэш

Очистка клиентского кэша — стандартный первый шаг при странных ошибках после обновления: «поле объекта не обнаружено», ошибки компоновки, не открываются формы. Самый безопасный способ — удалить базу из списка в окне запуска и добавить заново: при этом платформа создаст новый каталог кэша. Альтернатива — вручную удалить папку кэша в профиле пользователя при закрытых сеансах 1С.

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

Прикладной кэш очищается средствами конфигурации: кнопками «Обновить кэш» в настройках, регламентными заданиями, либо программно — например, методом ОбновитьПовторноИспользуемыеЗначения(), который сбрасывает кэш повторно используемых значений без перезапуска сеанса.

Очистка клиентского кэша
  1. 1
    Завершите все сеансы 1С у пользователя
  2. 2
    Найдите идентификатор базы: в списке баз или в папке %APPDATA%\1C\1cv8 по дате изменения
  3. 3
    Удалите папку кэша с этим идентификатором (или удалите базу из списка и добавьте заново)
  4. 4
    Запустите 1С и проверьте, исчезла ли ошибка
  5. 5
    Если ошибка осталась — проблема не в клиентском кэше, проверяйте серверный уровень и код

Кэширование в коде: как использовать осознанно

Для разработчика основной инструмент — свойство «Повторное использование возвращаемых значений» в общих модулях. Вариант «На время вызова» подходит для значений, актуальных в рамках одного серверного вызова; «На время сеанса» — для редко меняющихся данных вроде функциональных опций. Размещать такие функции нужно в общих модулях с соответствующими флагами (сервер, вызов сервера, привилегированный режим — по ситуации).

Ошибка проектирования — кэшировать на время сеанса данные, которые пользователь может изменить в течение этого сеанса. Тогда до перезахода или вызова ОбновитьПовторноИспользуемыеЗначения() система будет работать со старым значением. Правильный приём: после записи данных, от которых зависит кэш, явно сбрасывать его в коде.

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

bsl
// Сброс кэша повторно используемых значений после изменения настроек
ОбновитьПовторноИспользуемыеЗначения();

Типичные ошибки и ограничения

Самая частая ошибка администратора — чистить клиентский кэш при любой проблеме, не разобравшись в причине. Если ошибка воспроизводится у всех пользователей и на разных компьютерах, клиентский кэш ни при чём: ищите проблему в коде, данных или на сервере. Бесполезная очистка только замедляет первый запуск у всех пользователей.

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

Ограничение, о котором забывают: кэш СУБД и кэш сервера 1С не контролируются из конфигуратора. Если запрос стал медленным из-за устаревшего плана в СУБД, очистка кэша 1С не поможет — нужна работа с базой данных: обновление статистики, перестроение индексов.

Типичные ошибки
01
Чистить кэш вслепую при любой ошибке — теряется время, а причина остаётся
02
Удалять весь каталог 1cv8 вместо папки одной базы — страдают все базы пользователя
03
Кэшировать на время сеанса изменяемые данные — пользователи видят устаревшие значения до перезахода
04
Перезапускать службу сервера в рабочее время — обрываются сеансы и несохранённые данные
05
Забывать вызвать ОбновитьПовторноИспользуемыеЗначения() после записи настроек — код работает со старым кэшем

Как проверить результат после очистки

После очистки клиентского кэша признак успеха — исчезновение ошибки, которая была причиной очистки, и нормальное открытие форм. Первый запуск будет заметно дольше обычного: платформа заново скачивает метаданные. Это ожидаемо и не является проблемой.

Если после очистки кэша на клиенте и перезапуска сервера ошибка сохраняется, значит, источник не в кэше. Дальнейшая диагностика — технологический журнал, журнал регистрации, проверка кода и данных. Не повторяйте очистку многократно: это не лечит проблему, а только маскирует её.

Контрольные точки

Как проверить результат

Запуск базы после очистки кэша
Норма

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

Тревожный признак

Ошибка воспроизводится сразу после запуска

Ошибка у одного пользователя
Норма

После очистки его кэша ошибка исчезла

Тревожный признак

Ошибка осталась — причина не в клиентском кэше

Данные в отчётах после обновления кэша
Норма

Отображаются актуальные значения

Тревожный признак

Старые данные — проверяйте регламентные задания и прикладной кэш

Итог

Что важно запомнить

Кэш в 1С ускоряет работу, но может хранить устаревшие данные. Клиентский кэш чистится удалением папки базы в профиле пользователя, серверный — перезапуском службы, прикладной — средствами конфигурации. Очищайте осознанно и только после того, как убедились, что проблема именно в кэше.

Частые вопросы

Замедлит ли работу 1С очистка кэша?

Только один раз — при первом запуске после очистки платформа заново загружает метаданные, и это занимает заметное время. Дальше кэш наполняется, и скорость возвращается к обычной. Постоянного замедления очистка не вызывает.

Можно ли настроить автоматическую очистку кэша?

Штатного механизма автоматической очистки клиентского кэша в платформе нет. Администраторы обычно используют скрипты, удаляющие папки кэша при выходе пользователя из системы или по расписанию. Такой подход безопасен, если скрипт не трогает работающие сеансы.

Чем очистка кэша отличается от тестирования и исправления базы?

Это разные операции. Очистка кэша удаляет временные копии метаданных и не затрагивает сами данные. Тестирование и исправление проверяет целостность информационной базы и может изменять данные. При ошибках вида «поле не обнаружено» после обновления сначала пробуют кэш, а не ТиИ.

Почему после обновления конфигурации ошибки только у части пользователей?

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

Что делает команда /ClearCache в параметрах запуска?

Параметр командной строки /ClearCache очищает кэш метаданных клиентского приложения при запуске. Это удобно для разовой диагностики, но не заменяет понимания причины: если ошибка не в кэше, параметр не поможет.

Нужно ли чистить кэш на сервере после каждого обновления?

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