Как исправить ошибку 404 при помещении конфигурации в хранилище после удаления объектов

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

В процессе коллективной разработки в среде 1С:Предприятие часто возникает ситуация, когда после удаления объектов метаданных (например, ПодпискиНаСобытия или ОбщиеМодули) попытка поместить изменения в хранилище заканчивается неудачей. Особенное недоумение вызывает ошибка «404 - файл или каталог не найден», если хранилище опубликовано на веб-сервере (IIS или Apache). На первый взгляд кажется, что сервер «потерял» базу хранилища, но на самом деле проблема кроется в особенностях передачи данных и настройках безопасности.

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

Метод 1. Рекурсивный захват и работа с корнем конфигурации

Часто ошибка возникает из-за того, что удаленные объекты оставили «фантомные» связи в корне конфигурации или связанных подсистемах. Если мы попытаемся положить изменения только по частям, сервер может не сопоставить структуру метаданных.

Рассмотрим алгоритм действий для корректной синхронизации:

  1. Отменим все текущие захваты объектов, если это возможно. Если система не дает «отпустить» объекты, попробуем выполнить Сравнение/объединение конфигурации с хранилищем.
  2. В окне «Хранилище конфигурации» выберем корневой элемент (самую верхнюю строку с названием конфигурации).
  3. Выполним команду «Захватить в хранилище». В появившемся диалоговом окне обязательно установим флаг «Захватывать рекурсивно». Это критически важно, так как при удалении подписок на события изменения затрагивают не только сами подписки, но и состав объектов, к которым они относятся.
  4. После успешного захвата корня попробуем снова произвести удаление объектов (если они вернулись после объединения) и выполним «Поместить в хранилище».

Метод 2. Очистка локального кэша хранилища

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

Выполним следующие шаги для очистки:

  1. Закроем все запущенные экземпляры Конфигуратора.
  2. Перейдем в каталог %AppData%\Local\1C\1cv8\.
  3. Найдем папки с идентификаторами баз (длинные буквенно-цифровые названия). Внутри них нас интересует каталог 1Cv8FTxt и любые папки, содержащие в названии слово storage.
  4. Удалим эти каталоги. При следующем подключении к хранилищу конфигуратор заново загрузит актуальное состояние метаданных с сервера.

Метод 3. Настройка фильтрации запросов в IIS (Allow Double Escaping)

Если первые два метода не помогли, значит, причина кроется в настройках веб-сервера IIS. Ошибка 404 в данном контексте часто означает не отсутствие файла, а то, что модуль Request Filtering заблокировал запрос от 1С, посчитав его опасным или некорректным.

Выясним причину: при удалении объектов или передаче длинных имен метаданных 1С формирует URL, который может содержать спецсимволы или последовательности, интерпретируемые IIS как попытка взлома. Посмотрим, как это исправить:

  1. Откроем Диспетчер служб IIS.
  2. Выберем в дереве слева наш сайт или виртуальное приложение, в котором опубликовано хранилище.
  3. В центральной части окна (раздел IIS) откроем пункт «Фильтрация запросов» (Request Filtering).
  4. В правой панели действий выберем «Изменить параметры функции» (Edit Feature Settings).
  5. Установим флажок «Разрешить двойное экранирование» (Allow double escaping).
  6. Также проверим параметры «Максимальная длина контента» (Maximum allowed content length). Для крупных конфигураций типа УПП или ERP рекомендуется установить значение не менее 104857600 (100 МБ) или выше.
  7. Перезапустим службу IIS (команда iisreset в командной строке).

Метод 4. Проверка логической целостности конфигурации

Иногда помещение в хранилище блокируется из-за «битых» ссылок внутри самой конфигурации. Удаленная подписка на событие могла оставить след в объекте-источнике. Перед помещением в хранилище обязательно выполним полную проверку.

Разберем шаги проверки:

  1. Зайдем в меню Конфигурация — Проверка конфигурации.
  2. Установим флажки:
    • Логическая целостность конфигурации;
    • Поиск некорректных ссылок.
  3. Нажмем «ОК» и дождемся завершения процесса. Если в списке ошибок появятся упоминания удаленных подписок, нам необходимо зайти в соответствующие объекты и вручную очистить ссылки.

Метод 5. Использование прямого файлового доступа (file://)

Для диагностики и разового исправления ситуации мы можем временно отказаться от протокола http://. Это позволит нам понять, связана ли проблема с веб-сервером или с самой базой хранилища 1cv8ddb.1cd.

  1. Если сервер хранилища доступен по локальной сети, попробуем подключиться к нему через сетевой путь (например, \\server\storage_folder).
  2. В Конфигураторе выберем Хранилище — Подключиться к хранилищу и укажем путь через file://.
  3. Если в файловом режиме удаление и помещение объектов проходят успешно, значит, проблема 100% в настройках IIS или прокси-сервера.
  4. После успешного помещения изменений в файловом режиме можно вернуться к работе через веб-сервер — структура метаданных на сервере уже будет обновлена, и ошибка 404, скорее всего, исчезнет.

Метод 6. Исправление целостности самого хранилища

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

  1. Запустим Конфигуратор без открытия основной базы.
  2. Зайдем в меню Администрирование — Хранилище конфигурации — Проверка целостности хранилища.
  3. Укажем путь к базе хранилища и запустим процесс восстановления. Это исправит возможные ошибки в таблицах истории и ссылках между версиями.

Важный совет: При работе с тяжелыми конфигурациями (УПП, ERP) старайтесь не удалять объекты «напрямую». Рекомендуется сначала захватить объект, переименовать его с префиксом Удалить_, очистить все его свойства и ссылки, поместить в хранилище, и только вторым этапом (желательно при монопольном захвате всей конфигурации) производить окончательное удаление.

← На главную