Почему 1С:Предприятие 8.3 зависает при помещении объектов в хранилище и как это исправить

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

В процессе коллективной разработки на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с неприятной ситуацией: после завершения процесса передачи изменений («помещения») объектов, Конфигуратор намертво зависает. Это происходит в тот момент, когда прогресс-бар уже дошел до конца, и система должна вернуть управление пользователю. Особенно часто данная проблема проявлялась на релизах ветки 8.3.17, в частности 8.3.17.1496.

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

Очистка локального кэша и оптимизация хранилища

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

Выполним следующие действия:

  1. Закроем все сеансы 1С.
  2. Удалим содержимое временных папок в профиле пользователя (AppData\Local\1C и AppData\Roaming\1C).
  3. Особое внимание уделим папке configcfg — именно там хранятся вспомогательные данные конфигуратора, очистка которых часто решает проблему «бесконечного» ожидания.
  4. Проведем оптимизацию хранилища. Для этого в Конфигураторе выберем пункт меню Конфигурация — Хранилище конфигурации — Администрирование, нажмем кнопку «Оптимизировать». Это позволит пересчитать индексы внутри файла 1cv8ddb.1cd.

Проверка целостности файла хранилища

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

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

  1. Убедимся, что все пользователи отключены от хранилища.
  2. Найдем в каталоге установки платформы (папка bin) утилиту chdbfl.exe.
  3. Запустим её и укажем путь к файлу 1cv8ddb.1cd, который находится в корневом каталоге вашего хранилища.
  4. Установим флаг «Исправлять обнаруженные ошибки» и запустим проверку. Для регулярной профилактики автоматическое тестирование и архивирование баз 1С удобно запускать по расписанию в фоновом режиме без участия пользователя.

Важно помнить, что зависание на этапе фиксации транзакции часто сигнализирует о невозможности корректно закрыть запись в таблицу History из-за фрагментации или битых ссылок внутри файла.

Смена протокола подключения: от SMB к TCP

Проанализируем способ подключения к хранилищу. Если вы используете прямой путь к сетевой папке (например, \\Server\1c_repo), то вы работаете через протокол SMB. Этот протокол крайне чувствителен к задержкам сети и блокировкам со стороны антивирусов. При помещении объектов 1С блокирует файл целиком, и если в этот момент сеть «моргнет», Конфигуратор может уйти в бесконечное ожидание ответа от файловой системы.

Рассмотрим переход на сервер хранилища конфигурации:

  1. Установим на сервере службу crserver.exe (входит в стандартную поставку платформы).
  2. Запустим службу и создадим в ней базу хранилища.
  3. Подключимся к ней по протоколу tcp://ИмяСервера/ПутьКХранилищу.

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

Проблемы специфических релизов платформы

Выясним причину, связанную с версией 8.3.17.1496. В данной ветке был зафиксирован ряд багов, связанных с утечкой памяти и некорректной десериализацией метаданных при работе с хранилищем. Если несколько разработчиков используют разные минорные версии платформы (например, один 8.3.16, а другой 8.3.17), формат записываемых данных может конфликтовать.

В такой ситуации мы рекомендуем:

  1. Обновить платформу на всех рабочих станциях до последнего актуального релиза (например, переход на 8.3.18 или более поздние патчи 8.3.17).
  2. Если проблема сохраняется, стоит пересоздать хранилище. Выгрузите актуальную конфигурацию в файл .cf, создайте абсолютно новое пустое хранилище и загрузите конфигурацию туда. Это «обнулит» историю и устранит накопленные ошибки формата метаданных.

Диагностика через Технологический журнал

Если ни один из способов не помог, нам необходимо «заглянуть под капот» процесса. Для этого настроим сбор Технологического журнала (ТЖ). Нам интересны события исключительных ситуаций и блокировок.

Создадим файл logcfg.xml в папке conf со следующим содержанием:


<config xmlns="http://v8.1c.ru/7.4/config/logcfg">
  <log location="C:\LOGS\1C" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <event>
      <eq property="name" value="LOCK"/>
    </event>
    <event>
      <eq property="name" value="SDBL"/>
    </event>
    <property name="all"/>
  </log>
</config>

После воспроизведения зависания проанализируем логи. Если мы увидим записи WaitConnections или длительные события SDBL, это будет прямым подтверждением проблем на уровне взаимодействия с СУБД (в случае файлового хранилища — с файлом базы данных) или сетевых ожиданий.

Заключение

Подводя итог, можно сказать, что зависание в конце помещения объектов — это комплексная проблема. Чаще всего она лечится очисткой кэша и оптимизацией файла хранилища. Однако для профессиональной командной разработки наиболее надежным решением будет переход на протокол TCP/HTTP через сервер хранилища и регулярный контроль целостности базы хранилища утилитой chdbfl.exe.

← На главную