Переход с редакции 2.0 на 3.0 в 1С:Бухгалтерия предприятия — это не просто обновление конфигурации, а сложная процедура миграции данных, в ходе которой старые объекты метаданных трансформируются в новые. Одной из наиболее неприятных проблем, с которой сталкиваются специалисты, является ошибка в общем модуле ВзаиморасчетыССотрудникамиБазовый, возникающая уже после успешного технического обновления при первом запуске базы в тонком клиенте. Рассмотрим подробно, почему это происходит и как довести обновление до конца.
Давайте проанализируем текст ошибки, которую выдает система:
{ОбщийМодуль.ВзаиморасчетыССотрудникамиБазовый.Модуль(19)}: Поле объекта не обнаружено (БухгалтерскиеВзаиморасчетыССотрудниками)
Эта ошибка возникает в момент работы обработчика обновления ЗарплатаКадрыОбновлениеСПредыдущейРедакции.ЗарплатаКадрыОбновлениеС20. Суть процесса заключается в том, что система пытается программно создать записи в новом регистре накопления БухгалтерскиеВзаиморасчетыССотрудниками. Этот объект отсутствует в редакции 2.0 и появляется только в 3.0 для унификации учета зарплаты.
Проанализируем ситуацию: почему поле не обнаруживается, если конфигурация типовая и обновлена корректно? Проблема кроется в том, что при «прыжке» через слишком большое количество релизов (например, с 2.0.66 сразу на 3.0.63) механизмы платформы и программный код обновления не успевают корректно инициализировать коллекцию Движения у создаваемых документов переноса данных. В некоторых случаях это связано с тем, что метаданные регистра еще не «закрепились» в базе данных на уровне платформы в момент вызова фонового задания обновления.
Как показывает практика и опыт участников обсуждения, наиболее эффективный способ решения — отказаться от попытки обновиться сразу на самый актуальный релиз. Мы применим стратегию «ступенчатого» перехода. Разберем этот процесс по шагам:
_upd20).Иногда корни проблемы уходят в логическую целостность данных старой редакции. Если в базе 2.0 есть «битые» ссылки в зарплатных регистрах, типовой механизм 3.0 не может корректно определить организацию или период для создания движений. Рассмотрим, что нужно сделать перед переходом:
Запустим процедуру Тестирование и исправление (ТиИ) со следующими настройками:
Очищать объекты или Создавать объекты (в зависимости от ситуации).Также полезно проверить, нет ли в базе 2.0 расширений или остатков доработок, которые могли затронуть объекты учета зарплаты. Конфигурация должна быть полностью на замке (типовая).
Выясним причину возможного влияния платформы. Ошибка Поле объекта не обнаружено при наличии самого объекта в метаданных — классический признак проблем с кэшем.
Проделаем следующие действия:
1C:Enterprise Server Administration для очистки серверного кэша.Если промежуточные релизы не помогают, а обновиться нужно срочно, мы можем временно модифицировать код общего модуля, чтобы пропустить проблемный участок. Посмотрим на пример того, как можно обезопасить код от вылета.
Найдем строку 19 в общем модуле ВзаиморасчетыССотрудникамиБазовый и добавим проверку существования регистра в коллекции движений:
// Было:
ЗарегистрироватьНачисленнуюЗарплатуВоВзаиморасчетах(Движения.БухгалтерскиеВзаиморасчетыССотрудниками, Организация, КонецМесяца(ПериодРегистрации), НачисленнаяЗарплата);
// Стало:
Если Движения.Содержит("БухгалтерскиеВзаиморасчетыССотрудниками") Тогда
ЗарегистрироватьНачисленнуюЗарплатуВоВзаиморасчетах(Движения.БухгалтерскиеВзаиморасчетыССотрудниками, Организация, КонецМесяца(ПериодРегистрации), НачисленнаяЗарплата);
Иначе
// Запись в журнал регистрации для последующего анализа
ЗаписьЖурналаРегистрации("Обновление.Зарплата", УровеньЖурналаРегистрации.Предупреждение, , , "Регистр БухгалтерскиеВзаиморасчетыССотрудниками не найден в движениях документа.");
КонецЕсли;
Важно: Этот метод является «костылем». После завершения обновления базы необходимо обязательно вернуться к типовому коду и проверить, заполнились ли данные в регистре БухгалтерскиеВзаиморасчетыССотрудниками. Если они остались пустыми, расчеты с персоналом в новой базе будут некорректными.
Часто программисты пытаются обновиться через .cfu файл (файл обновления). Однако при переходе между редакциями (2.0 -> 3.0) крайне рекомендуется использовать полный дистрибутив (файл .cf), который идет в комплекте поставки для перехода (дистрибутив с пометкой _upd20). При использовании .cfu некоторые связи между новыми объектами и обработчиками обновления могут инициализироваться некорректно, что и приводит к ошибкам «Поле объекта не обнаружено».
Подведем итог: если вы столкнулись с данной ошибкой, не пытайтесь «пробить» её на актуальном релизе. Вернитесь к копии, сделайте Тестирование и исправление в 2.0, обновитесь до 3.0.54.20, дайте системе завершить все фоновые задания, и только потом переходите на актуальную версию. Это сэкономит вам часы отладки и гарантирует сохранность данных учета.