Рассмотрим ситуацию, с которой сталкиваются пользователи программы 1С:Бухгалтерия после обновления на релиз 3.0.82.40 (и смежные). При попытке провести документ Отражение зарплаты в Бух учете, загруженный из внешней программы (например, 1С:ЗУП или 1С:УТ), система выдает критическую ошибку в обработчике ПередЗаписью.
Текст ошибки выглядит следующим образом:
Не удалось зарегистрировать изменения на узлах плана обмена СинхронизацияДанныхЧерезУниверсальныйФормат по причине: Ошибка выполнения правил регистрации объектов для плана обмена СинхронизацияДанныхЧерезУниверсальныйФормат.
Описание ошибки:
Ошибка при получении списка узлов получателей. Ошибка выполнения запроса: {(10, 30)}: Поле не найдено "ПланОбменаОсновнаяТаблица.ВыгружатьДанныеОРасходахФОТ"
Проанализируем эту проблему подробно и разберем эффективные способы ее решения.
Выясним причину такого поведения базы. Ошибка вызвана рассинхронизацией структуры метаданных конфигурации 1С и применяемых в данный момент «Правил регистрации объектов» (ПРО).
Разработчики фирмы 1С в новых релизах (начиная с 3.0.82.x) оптимизировали структуру плана обмена СинхронизацияДанныхЧерезУниверсальныйФормат и удалили реквизит ВыгружатьДанныеОРасходахФОТ. Однако, правила регистрации, которые система использует «под капотом» при записи документов для определения того, нужно ли отправлять документ в узел ЗУП или УТ, автоматически не обновились.
Эти устаревшие правила продолжают обращаться к удаленному реквизиту. В итоге при проведении документа генерируется SQL-запрос, который падает с ошибкой, так как физически поля в базе данных уже нет.
Разберем по шагам несколько рабочих способов устранения этой неисправности.
Самый правильный и надежный путь — заставить систему использовать актуальные макеты правил из текущего релиза. Очень часто при обновлениях правила регистрации не перезаписываются автоматически, особенно если когда-то они загружались из внешнего файла.
Это действие заставит систему взять актуальный макет из текущего релиза, в котором разработчики уже убрали обращение к устаревшему полю.
Иногда спасает простой метод обновления регистрации узлов плана обмена, который пользователи называют «танцами с бубном». Посмотрим на пример выполнения этого метода:
СинхронизацияДанныхЧерезУниверсальныйФормат.В некоторых случаях при снятии пометки на удаление срабатывает внутренний обработчик, который переинициализирует кэши и настройки плана обмена, что временно решает проблему с проведением.
Если обновление базы или загрузка типовых правил в данный момент не помогает (например, если в самом типовом макете релиза 1С осталась ошибка), мы можем исправить правила вручную. Это временный, но очень эффективный метод.
Разберем процесс ручного редактирования:
ВыгружатьДанныеОРасходахФОТ.Кусок XML-кода, который необходимо найти и полностью удалить, выглядит так:
<ЭлементОтбора>
<ЭтоСтрокаКонстанты>true</ЭтоСтрокаКонстанты>
<ТипСвойстваОбъекта>Булево</ТипСвойстваОбъекта>
<СвойствоПланаОбмена>ВыгружатьДанныеОРасходахФОТ</СвойствоПланаОбмена>
<ВидСравнения>Равно</ВидСравнения>
<СвойствоОбъекта>true</СвойствоОбъекта>
<ТаблицаСвойствПланаОбмена>
<Свойство>
<Наименование>ВыгружатьДанныеОРасходахФОТ</Наименование>
<Тип>Булево</Тип>
<Вид>Реквизит</Вид>
</Свойство>
</ТаблицаСвойствПланаОбмена>
</ЭлементОтбора>
После удаления этого блока ЭлементОтбора сохраните файл. Затем вернитесь в 1С, выберите пункт Загрузить правила регистрации объектов, укажите вариант Загрузить из файла на компьютере и выберите ваш исправленный XML-документ.
Если после выполнения вышеописанных действий ошибка сохраняется, проанализируем дополнительные факторы:
ОбменДаннымиСобытия. При необходимости удалите устаревший патч.Выполнив один из предложенных вариантов, вы восстановите корректное проведение документа Отражение зарплаты в Бух учете и синхронизация между базами снова будет работать без сбоев.