Разработка внешних обработок — это стандартный процесс для любого программиста 1С. Однако часто мы сталкиваемся с крайне раздражающей ситуацией: код изменен, файл сохранен, но при запуске в режиме «1С:Предприятие» система продолжает выполнять старую версию алгоритма. Многим приходится полностью закрывать сеанс и перезапускать отладчик, что существенно замедляет работу. В этой статье мы подробно разберем, почему это происходит, и рассмотрим все доступные способы решения этой проблемы.
Для начала выясним причину такого поведения системы. Платформа 1С:Предприятие активно использует кэширование для оптимизации производительности. Когда вы открываете внешнюю обработку (файл .epf), система считывает её содержимое и компилирует модули. В некоторых случаях скомпилированный образ обработки сохраняется в оперативной памяти или во временных файлах сеанса. Если платформа считает, что файл не изменился (или просто обращается к уже загруженному в память объекту), она игнорирует новую версию на диске.
Проанализируем интересное наблюдение опытных разработчиков. Часто мы открываем обработку через меню Файл — Открыть, выбирая её из списка «Последние открытые файлы» в нижней части меню. Оказывается, именно этот механизм часто приводит к использованию кэшированной копии.
Чтобы гарантированно запустить актуальную версию, попробуем следующий алгоритм:
Этот метод заставляет платформу выполнить повторное считывание файла с диска, что во многих случаях решает проблему без перезапуска всей системы.
Иногда нам кажется, что код не обновился, хотя на самом деле проблема в логике. Чтобы исключить человеческий фактор, рассмотрим методику визуального контроля:
Декорация (Надпись).Также стоит проверить свойство Имя в корне самой обработки (в окне свойств в Конфигураторе). Если это имя совпадает с именем какой-то встроенной обработки или другой обработки, уже открытой в сеансе, может возникнуть конфликт имен. Попробуем задать максимально уникальное имя объекту.
Если интерактивное открытие через меню не помогает, разберем более надежный метод. Мы можем создать небольшую обработку-«заглушку», которая будет открывать нашу рабочую обработку программно. Это исключает влияние интерфейсных механизмов кэширования Файл — Открыть.
Рассмотрим пример кода для такой кнопки:
ПутьКФайлу = "C:\MyDevelopments\MyProcessing.epf";
// Параметр Ложь во втором аргументе отключает безопасный режим,
// что иногда помогает избежать агрессивного кэширования
ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
Форма = ОбработкаОбъект.ПолучитьФорму();
Форма.Открыть();
Использование метода ВнешниеОбработки.Создать() заставляет систему создать новый объект на основе текущего состояния файла на диске.
Если вышеописанные методы не помогают, ситуация может быть серьезнее и связана с «засоренностью» временных папок. Проанализируем два уровня очистки:
1. Локальный кэш пользователя. Полностью очистим содержимое папки %TEMP%. Платформа 1С копирует туда внешние обработки перед запуском, создавая подпапки с префиксами v8_. Если из-за ошибок прав доступа старая копия не может быть удалена, 1С будет использовать её бесконечно.
2. Серверный кэш (для клиент-серверного варианта). В режиме клиент-сервера модули могут кэшироваться в рабочих процессах rphost. Попробуем в консоли администрирования серверов 1С временно ограничить количество рабочих процессов до одного или перезапустить службу агента сервера.
Выясним, как автоматизировать борьбу с кэшем при запуске отладки. В настройках вашей информационной базы в списке баз можно добавить специальный ключ:
/ClearCache.Важно: этот параметр заставляет систему игнорировать локальный кэш метаданных при каждом запуске. Это может немного замедлить загрузку программы, но гарантирует актуальность конфигурации и связанных с ней объектов.
В современных версиях платформы (8.3.х) отладка может работать через протокол HTTP или TCP/IP. Замечено, что при использовании HTTP-отладки связь между Конфигуратором и Предприятием иногда «зависает» в плане обновления модулей.
Попробуем изменить протокол:
Мы рассмотрели комплекс мер по борьбе с «залипанием» кода во внешних обработках. Начните с самого простого — открытия файла через Ctrl+O вместо списка последних файлов. Если это не помогает, используйте программное создание объекта через вспомогательную обработку. В самых сложных случаях поможет только очистка системной папки TEMP и использование параметра /ClearCache. Сочетание этих методов позволит вам комфортно работать без постоянных перезагрузок системы.