Ситуация, когда при каждом запуске 1С:Предприятие 7.7 конфигурация «Торговля и Склад» пытается выполнить автоматическое обновление, является классической технической проблемой, связанной с аварийным завершением работы системы. Рассмотрим подробно, почему это происходит, как работает механизм проверки релиза и какими способами можно вернуть систему в рабочее состояние, чтобы пользователи могли заходить в базу без прав администратора.
Для начала проанализируем, как платформа 1С 7.7 понимает, что базе данных требуется программное обновление. В типовой конфигурации «Торговля и Склад» (ТиС) эта логика жестко прописана в Глобальном модуле. При каждом запуске программы срабатывает предопределенная процедура ПриНачалеРаботыСистемы. Внутри этой процедуры система сравнивает текущее значение константы НомерРелиза с тем номером, который указан разработчиком в свойствах самой конфигурации (поле «Комментарий»).
Давайте посмотрим на пример кода, который обычно отвечает за этот процесс в глобальном модуле:
// Если пустое значение Константа.НомерРелиза, то это первый запуск конфигурации
ЭтоПервыйЗапуск = ПустаяСтрока(Константа.НомерРелиза);
Если Константа.НомерРелиза <> Лев(Метаданные.Комментарий, 8) Тогда
ФлагЗапускаНастроек = 0;
Если ПравоДоступа("Использование","Обработка.ОбновлениеИБ") = 1 Тогда
ОткрытьФормуМодально("Обработка.ОбновлениеИБ", ФлагЗапускаНастроек);
Иначе
Предупреждение("Первый запуск программы для обновления информационной базы |должен произвести пользователь с правами администратора!", 60);
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЕсли;
Если эти значения не совпадают, система делает вывод: структура данных (метаданные) изменилась, а сами данные еще не были обработаны соответствующими скриптами. В этот момент запускается специализированная обработка ОбновлениеИБ. Именно поэтому обычные пользователи (продавцы, кассиры) не могут войти в программу — у них просто нет прав на запуск этой обработки или на изменение системных констант, которые она перезаписывает.
Проанализируем ситуацию автора: компьютер выключился прямо во время загрузки 1С. Это критический момент. Процесс обновления в 1С 7.7 состоит из последовательных шагов. Система обновляет константу НомерРелиза только после успешного завершения всех процедур модификации документов и справочников. Если в процессе произошел сбой (выключился свет или возникла ошибка «Номер не уникален»), константа остается старой. Следовательно, при следующем запуске проверка в ПриНачалеРаботыСистемы снова видит несоответствие и снова пытается запустить обновление. Получается замкнутый круг.
Прежде чем вносить изменения в код или константы, мы обязаны убедиться, что файлы базы данных не повреждены. Аварийное выключение часто приводит к порче индексных файлов (*.cdx). Рассмотрим последовательность действий в Конфигураторе:
Важно: Реиндексация исправит ошибки, из-за которых система может выдавать сообщение о «неуникальности номера» при попытке модификации документов в ходе обновления.
Если после реиндексации обновление все равно прерывается с ошибкой уникальности номера, нам нужно понять, какой именно объект вызывает конфликт. Чаще всего при обновлении ТиС происходит перенумерация или программное создание новых видов документов. Если в базе уже есть документы с «кривыми» номерами (например, введенными вручную с лишними префиксами или символами), автонумератор 1С может споткнуться.
Рассмотрим, как найти виновника:
Журнал документов.Если мы понимаем, что обновление не несет в себе критических изменений учетной политики, а лишь «зависло» из-за технического сбоя, можно применить метод ручного исправления. Это позволит пользователям войти в систему немедленно. Посмотрим, как это сделать:
Номер релиза.7.70.985).Внимание: Этот способ считается «грязным», так как если обновление должно было изменить алгоритмы расчета налогов или движений по регистрам, эти действия выполнены не будут, что может привести к ошибкам в учете в будущем. Используйте этот метод только в крайнем случае, если уверены в стабильности данных.
Программисту рекомендуется открыть обработку ОбновлениеИБ (она находится в дереве метаданных на вкладке «Обработки»). Рассмотрим её основной модуль. Ищите процедуру глОбновитьИнформационнуюБазу. Именно здесь прописаны условия, которые выполняются при переходе с одной версии на другую.
Иногда полезно временно закомментировать участок кода, вызывающий ошибку «Номер не уникален», если этот участок не критичен для текущего учета, дать обновлению завершиться, а затем вернуть код обратно и исправить данные вручную. Однако, это требует глубокого понимания логики Trade and Warehouse.
Чтобы избежать подобных ситуаций в будущем, проанализируем необходимые меры профилактики:
1cv7.md) должен выполнять только администратор в монопольном режиме. Необходимо дождаться окна с надписью «Обновление информационной базы успешно завершено».Таким образом, мы выяснили, что корень проблемы лежит в проверке константы НомерРелиза в глобальном модуле. Выполнив последовательно тестирование и исправление, обеспечив вход под администратором и, при необходимости, скорректировав константу вручную, мы сможем восстановить работу торговых точек в кратчайшие сроки.