При разработке и отладке внешних отчетов или обработок в 1С:Предприятии 8.3 мы часто сталкиваемся с ситуацией, когда внесенные изменения не сразу отражаются в программе, даже после сохранения файла. Пользователь может столкнуться с тем, что, изменив запрос в отчете на Системе Компоновки Данных (СКД) или логику в обработке, и затем открыв обновленный файл через меню «Файл» – «Открыть», результаты остаются прежними. Это особенно досадно, когда мы уже внесли правки, как в нашем случае, добавив проверку на КорСчет в запросе СКД, а ошибочные суммы продолжают появляться.
// Исходный запрос
ВЫБОР
КОГДА ХозрасчетныйОбороты.Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамВыданным)
ТОГДА ХозрасчетныйОбороты.СуммаОборотДт
КОНЕЦ
// Запрос с добавленной проверкой на КорСчет
ВЫБОР
КОГДА ХозрасчетныйОбороты.Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамВыданным)
И ХозрасчетныйОбороты.КорСчет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)
ТОГДА ХозрасчетныйОбороты.СуммаОборотДт
КОНЕЦ
Давайте разберем причины такого поведения системы и рассмотрим эффективные методы решения этой проблемы.
Понимание проблемы: кэш 1С и дополнительные обработки
Основная причина, по которой изменения во внешнем отчете или обработке не видны сразу, кроется в механизмах кэширования 1С и способах работы с внешними файлами. 1С:Предприятие активно использует кэш – временные файлы, содержащие статическую информацию о базе данных, включая конфигурацию, настройки пользователя, формы и отчеты. Это делается для ускорения работы, чтобы каждый раз не считывать одни и те же данные с диска или сервера.
Проблемы с кэшем могут возникать по ряду причин:
Сбойные файлы кэша: Из-за программных ошибок, сбоев питания, некорректного завершения работы 1С или обновлений конфигурации, файлы кэша могут быть записаны с ошибками. Это приводит к некорректному поведению программы, зависаниям или отображению устаревшей информации.
Дополнительные обработки и ссылки в процессе сервера: Если ваш внешний отчет или обработка были ранее добавлены в список «Дополнительные отчеты и обработки» (через раздел «Администрирование» -> «Печатные формы, отчеты и обработки» в конфигурации), то при последующих открытиях этого файла через «Файл» – «Открыть» система может не считывать его заново. Вместо этого, на него может оставаться ссылка в процессе сервера (даже для файловых баз), и 1С просто активирует уже существующий в памяти объект, который был загружен ранее. Это означает, что вы видите старую версию, хранящуюся в кэше или памяти процесса, а не новую, только что сохраненную на диске.
Проблемы с обновлением справочника «Варианты отчета»: В некоторых случаях, если отчет использует варианты, сохраненные в соответствующем справочнике, и этот справочник не обновляется корректно, может подтягиваться устаревшая версия варианта.
Циклические ссылки: В самой обработке могут присутствовать циклические ссылки между объектами или ссылки объекта на самого себя, что также может приводить к проблемам с обновлением и некорректной работой.
Признаки того, что пора чистить кэш:
Программа зависает, формы не открываются или выдается сообщение «Ошибка формата потока».
Интерфейс «подвисает», формы открываются с ошибками или выглядят странно после сбоев (например, перебоев с электричеством или обрыва связи).
База данных ведет себя некорректно у одного пользователя, в то время как у остальных все работает штатно.
Решение проблемы: шаги по обновлению отчета и очистке кэша
Теперь давайте рассмотрим конкретные действия, которые мы можем предпринять для решения описанной проблемы. Мы будем двигаться от простых и быстрых решений к более радикальным методам очистки кэша.
1. Перезапуск клиента 1С
Самый простой и часто помогающий шаг – это перезапуск клиентского приложения 1С. Если проблема связана с тем, что на внешний отчет есть ссылка в процессе сервера, перезапуск клиента принудительно завершит этот процесс и при следующем запуске 1С загрузит файл отчета с диска заново. Этот метод актуален и для файловых баз, как в нашем случае, и для клиент-серверных.
2. Обновление дополнительной обработки
Если отчет был добавлен в информационную базу как «Дополнительная внешняя обработка» или «Дополнительный внешний отчет», то для его обновления необходимо использовать специализированный механизм 1С. Мы не просто открываем файл, а указываем системе, что нужно обновить уже зарегистрированный объект.
Перейдите в раздел «Администрирование».
Найдите пункт «Печатные формы, отчеты и обработки».
Откройте список «Дополнительные отчеты и обработки».
Найдите ваш отчет в списке, выделите его.
Нажмите кнопку «Обновить из файла». Это принудительно загрузит новую версию файла в базу данных.
После этого вам, возможно, потребуется снова перезапустить клиент 1С, чтобы убедиться, что новая версия отчета подтянулась корректно.
3. Использование метода «Пометить на удаление»
Еще один эффективный способ для внешних обработок, которые были добавлены в базу, но не обновляются стандартным методом. Этот подход позволяет "обмануть" систему, заставив ее думать, что старой версии объекта больше нет:
В списке «Дополнительные отчеты и обработки» найдите ваш отчет.
Пометьте его на удаление (обычно это кнопка с крестиком или соответствующий пункт в контекстном меню).
Затем удалите помеченный объект из базы (через меню «Функции для технического специалиста» -> «Стандартные» -> «Удаление помеченных объектов» или дождаться автоматического удаления).
Теперь вы можете снова открыть ваш отчет через «Файл» – «Открыть», и система будет вынуждена загрузить его как абсолютно новый файл.
Если вы хотите снова добавить его как дополнительную обработку, сделайте это после того, как убедитесь, что отчет работает корректно при открытии из файла.
4. Создание нового отчета из сохраненной схемы СКД
В случае, когда речь идет о модификации схемы СКД, и предыдущие методы не помогают, мы можем пойти по пути, который уже использовал автор сообщения:
Сохраните обновленную схему компоновки данных в отдельный файл (например, через конфигуратор или непосредственно из формы отчета, если такая возможность предусмотрена).
Создайте новый внешний отчет, загрузите в него сохраненную схему.
Сохраните этот новый отчет под другим именем.
Откройте этот новый файл отчета через «Файл» – «Открыть». Поскольку это новый объект с новым именем, система не будет иметь его в кэше или в ссылках серверного процесса.
5. Глубокая очистка кэша 1С
Если проблема носит более системный характер и связана с общими глюками кэша, нам потребуется выполнить его полную очистку. Рассмотрим несколько способов:
Удаление базы из списка информационных баз и повторное добавление:
Этот способ прост и безопасен. Он "отвязывает" старые временные файлы кэша от базы, заставляя 1С при следующем запуске создать новый кэш. Старые файлы при этом с диска не удаляются, но перестают использоваться.
Закройте все запущенные сеансы 1С.
Откройте окно запуска 1С:Предприятия.
Выделите информационную базу, с которой возникают проблемы.
Нажмите кнопку «Удалить».
Затем нажмите кнопку «Добавить» и добавьте ту же базу, указав ее путь к каталогу.
Ручное удаление файлов кэша из каталогов пользователя:
Это наиболее надежный, но требующий осторожности метод. Он полностью очищает все временные файлы кэша для всех информационных баз, запускавшихся под текущим пользователем.
КРИТИЧНО: Перед выполнением этого шага убедитесь, что все сеансы 1С на вашем компьютере закрыты!
Откройте проводник Windows.
Перейдите в следующие каталоги (введите их в адресную строку проводника):
%AppData%\1C\1Cv8
%AppData%\1C\1Cv82 (если использовались более старые версии платформы)
%userprofile%\AppData\Roaming\1C\1Cv8
%userprofile%\AppData\Local\1C\1cv8
Внутри этих папок вы найдете подпапки с длинными, непонятными именами (например, «706b492a-3c5e-4e8a-8b1b-9d4f6c7a8e9f»). Каждая такая папка представляет собой кэш одной из информационных баз, с которыми вы работали.
Удалите все эти подпапки. Не удаляйте сами папки 1Cv8 или 1Cv82, только их содержимое.
При первом запуске 1С после очистки программа автоматически создаст новые файлы кэша. Это может занять немного больше времени.
Использование параметра запуска ClearCache:
Мы можем настроить 1С так, чтобы кэш очищался автоматически при каждом запуске для конкретной информационной базы. Этот метод удобен для разработчиков, но может незначительно снижать производительность, так как кэш каждый раз формируется заново.
В окне запуска 1С:Предприятия выберите нужную информационную базу и нажмите кнопку «Изменить».
На следующем шаге снова нажмите «Изменить», чтобы перейти к параметрам запуска.
В поле «Дополнительные параметры запуска» добавьте строку /ClearCache.
Сохраните изменения. Теперь при каждом запуске этой базы кэш будет очищаться.
Использование сторонних утилит и скриптов:
Существуют специализированные утилиты (например, OneCleaner) или самописные скрипты (.bat, .ps1), которые автоматизируют процесс очистки кэша. Они могут быть особенно полезны в корпоративной среде или для частого использования.
Рекомендации по разработке внешних отчетов
При активной разработке внешних отчетов и обработок, старайтесь избегать добавления их в список дополнительных обработок до тех пор, пока они не будут стабилизированы. Лучше открывать их через «Файл» – «Открыть».
Если отчет все же добавлен как дополнительная обработка, всегда помните о необходимости использования функции «Обновить из файла» в списке дополнительных отчетов для применения изменений.
Избегайте циклических ссылок между объектами вашей обработки или отчета, так как это может привести к непредсказуемым проблемам с обновлением и выполнением.
Для отладки сложных СКД-отчетов используйте консоль запросов и консоль СКД в конфигураторе, что позволяет проверять запросы и схемы без постоянного сохранения и открытия внешнего файла.
Проблема с «глючным» кэшем в 1С – это распространенное явление, с которым сталкивается каждый разработчик. Понимание механизмов работы кэша и дополнительных обработок, а также знание эффективных способов его очистки, позволит нам оперативно решать возникающие сложности и повысить продуктивность нашей работы.