При обновлении конфигурации 1С:Бухгалтерия предприятия 3.0 (начиная с релизов 3.0.65.х) пользователи часто сталкиваются с критической ошибкой, которая прерывает процесс обновления или не дает работать в программе. Проблема обычно сопровождается сбоем при обработке плана счетов Хозрасчетный. Дополнительно, после обновления платформы до версий 8.3.12 и выше, может возникнуть вторая проблема: программа закрывается сама по себе через 5–10 минут работы без каких-либо сообщений об ошибках. Разберем подробно, как решить обе эти задачи.
Проанализируем ситуацию: начиная с версии 3.0.65.69, разработчики 1С изменили структуру учета земельных участков. Предопределенный счет 08.01 («Приобретение земельных участков») был разделен на два субсчета:
08.01.1 — Приобретение земельных участков с дополнительными расходами.08.01.2 — Приобретение земельных участков без дополнительных расходов.Ошибка возникает в процедуре ОбновитьПараметрыСчетов08_1 модуля обновления. Программа пытается программно обратиться к новым субсчетам, но если в базе данных нарушена связь между объектами метаданных и предопределенными данными, система выдает ошибку, так как не может найти эти счета. Это часто происходит в базах, которые ранее переносились между версиями (например, из Базовой в ПРОФ) или подвергались некорректному тестированию и исправлению.
Если стандартное обновление не проходит, мы можем принудительно восстановить связи предопределенных данных. Рассмотрим пример кода, который помогает системе «увидеть» новые счета и сопоставить их с конфигурацией. Эту обработку следует запустить в контексте вашей информационной базы:
М = Метаданные.ПланыСчетов.Хозрасчетный.ПолучитьИменаПредопределенных();
Для каждого Имя Из М Цикл
Попытка
Ссылка = ПланыСчетов.Хозрасчетный[Имя].Ссылка;
ОбновляемыйОбъект = Ссылка.ПолучитьОбъект();
// Принудительно устанавливаем соответствие имени
ОбновляемыйОбъект.ИмяПредопределенныхДанных = Имя;
ОбновляемыйОбъект.ОбменДанными.Загрузка = Истина;
ОбновляемыйОбъект.Записать();
Исключение
// Если счет не найден, создаем его программно
ОбновляемыйОбъект = ПланыСчетов.Хозрасчетный.СоздатьСчет();
ОбновляемыйОбъект.ИмяПредопределенныхДанных = Имя;
ОбновляемыйОбъект.ОбменДанными.Загрузка = Истина;
ОбновляемыйОбъект.Записать();
КонецПопытки;
КонецЦикла;
Проанализируем работу данного кода: мы обходим все предопределенные имена в метаданных плана счетов и проверяем их наличие в базе. Если объект существует, мы обновляем его свойство ИмяПредопределенныхДанных. Если же объект отсутствует, мы создаем его вручную, что позволяет процедурам обновления 1С корректно завершить свою работу.
Выясним причину, по которой некоторые программисты рекомендуют использовать расширения. Если база находится на полной поддержке и вы не хотите вносить изменения в код через конфигуратор, можно создать расширение и переопределить процедуру обновления. Рассмотрим этот вариант:
ОбновлениеИнформационнойБазыБП.ОбновитьПараметрыСчетов08_1 и используем аннотацию &Вместо.Важно: этот метод является временным «патчем». После успешного завершения обновления расширение желательно отключить и проверить план счетов вручную.
Разберем вторую проблему, упомянутую в теме: после перехода на новую платформу (8.3.12.1412 и старше) программа начинает закрываться без предупреждений. Посмотрим на ситуацию глазами системного администратора: это не баг платформы, а работа обновленной системы защиты целостности.
Проанализируем механизмы проверки 1С. Новые версии платформы сканируют компьютер на наличие остаточных файлов старых эмуляторов ключей защиты (даже если сейчас вы используете легальную программную лицензию). Если система находит «хвосты» драйверов типа haspfrud.sys, mkey.sys или vusbbus.sys, она принудительно завершает сеанс через фиксированный промежуток времени (обычно 5 минут).
Чтобы избавиться от самопроизвольных вылетов, необходимо выполнить следующие действия:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ на наличие служб, связанных с hasp.backbas.dll) были изменены сторонними программами, необходимо полностью переустановить платформу 1С, предварительно удалив папку с установленной версией.Рассмотрим случай из практики: часто помогает полная переустановка лицензии через меню «Получение лицензии». Если программа закрывается только на сетевом компьютере, значит, именно на этой локальной машине остались следы старого ПО для обхода защиты. Очистка кэша 1cv8 и временных файлов профиля пользователя также является обязательным этапом диагностики.
Подведем итог нашего анализа. Ошибки при обновлении часто вызваны несоответствием данных в плане счетов, что решается программным восстановлением предопределенных объектов ПланыСчетов.Хозрасчетный. Проблемы с закрытием программы чаще всего связаны с усиленной защитой платформы 8.3.13+, требующей «чистоты» операционной системы от старых драйверов защиты.
Соблюдение этих инструкций позволит вам успешно обновить 1С:Бухгалтерию до актуального релиза и обеспечить стабильную работу пользователей в сети.