Как исправить ошибку «Поле объекта не обнаружено (ОтсутствияСдвигающиеРабочийГод)» при переходе с ЗУП 2.5 на 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Бухгалтерский учет
← На главную

При переходе с конфигурации 1С:Зарплата и Управление Персоналом ред. 2.5 на ред. 3.1 многие сталкиваются с ошибкой на этапе выгрузки данных. Система прерывает процесс и выдает сообщение: Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML...}: Поле объекта не обнаружено (ОтсутствияСдвигающиеРабочийГод). Эта проблема часто носит «плавающий» характер: при выборе одной даты начала эксплуатации ошибка возникает, а при другой — нет. Разберем, в чем причина этой ошибки и как ее можно исправить.

Проанализируем ситуацию. Ошибка указывает на то, что правила конвертации не могут найти поле ОтсутствияСдвигающиеРабочийГод в выгружаемых данных из ЗУП 2.5. Это поле связано с новым, более сложным механизмом учета остатков отпусков и влиянием различных неявок (больничных, отпусков за свой счет) на сдвиг рабочего года сотрудника в ЗУП 3.1. Проблема чаще всего проявляется на релизах 3.1.7.x и связана с несовершенством правил обмена для определенных сценариев данных.

Ключевой фактор, провоцирующий ошибку — это попытка выполнить перенос данных с датой начала эксплуатации, которая не совпадает с текущим месяцем. Например, если вы в октябре пытаетесь запустить эксплуатацию новой базы с 1 августа. В данных за август могут быть «переходящие» документы (например, отпуск, начавшийся в августе и закончившийся в сентябре), которые обработка не может корректно интерпретировать.

Рассмотрим несколько способов решения этой проблемы, от самого простого к более технически сложному.

Решение 1: Изменение даты начала эксплуатации

Это самый простой и быстрый способ обойти ошибку, не требующий вмешательства в код. Его суть заключается в правильном выборе начального периода для работы в новой программе.

Логика метода: Ошибка возникает при обработке данных за прошлые, уже закрытые периоды. Если мы укажем в качестве месяца начала эксплуатации период, следующий за последним полностью рассчитанным месяцем в старой базе, то проблемный механизм обработки «переходящих» документов не будет задействован в полной мере.

Выполним следующие шаги:

  1. Определите последний месяц, за который в базе ЗУП 2.5 полностью начислена и выплачена зарплата. Например, если вы делаете перенос 15 октября, а зарплата за сентябрь полностью закрыта, то последним расчетным периодом является сентябрь.
  2. В помощнике перехода при настройке параметров переноса укажите дату начала эксплуатации на первый день месяца, следующего за последним закрытым. В нашем примере это будет 1 октября.

Этот метод в большинстве случаев помогает успешно завершить перенос. Технически, это обходной путь, но с точки зрения методологии он является наиболее правильным, так как исключает дублирование расчетов за один и тот же период в двух базах.

Решение 2: Обновление конфигурации

Проблема с полем ОтсутствияСдвигающиеРабочийГод является известной ошибкой, которая была зарегистрирована и исправлена фирмой «1С» в последующих релизах. Например, в обсуждениях пользователи отмечали, что в версии ЗУП КОРП 3.1.8.112 ошибка уже исправлена.

Рекомендация: Прежде чем начинать переход, убедитесь, что обе конфигурации (и исходная ЗУП 2.5, и целевая ЗУП 3.1) обновлены до последних актуальных версий. Вместе с обновлением конфигурации поставляются и новые, исправленные правила обмена данными, которые, скорее всего, уже не содержат этой ошибки.

Это самый надежный и правильный способ, который гарантирует не только исправление данной конкретной ошибки, но и многих других потенциальных проблем при переносе.

Решение 3: Внесение изменений в код обработки выгрузки

Если обновление по каким-либо причинам невозможно, а изменить дату начала эксплуатации нельзя, остается техническое решение — доработать обработку выгрузки данных. Этот способ требует навыков конфигурирования в 1С.

Суть доработки: Мы найдем в коде обработки место, где происходит обращение к данным об отпусках и отсутствиях, и добавим проверку. Если для какого-то документа этих данных нет, мы будем принудительно создавать пустые таблицы значений, чтобы у программы всегда было поле для обращения и ошибка «Поле объекта не обнаружено» не возникала.

Разберем по шагам:

  1. В конфигурации ЗУП 2.5 найдите обработку, отвечающую за выгрузку. Обычно она называется ПомощникВыгрузки_V8 или похожим образом и является частью механизма перехода. Откройте ее модуль объекта.
  2. Найдите в коде фрагмент, который работает с выборкой данных по отпускам. Он будет выглядеть примерно так:
    
    Если НайденныеСтроки.Количество > 0 Тогда
        ВыборкаПоДокументу.Вставить("ЕжегодныеОтпуска", НайденныеСтроки[0].ЕжегодныеОтпуска);
        ВыборкаПоДокументу.Вставить("ОстаткиОтпусковПоРабочимГодам", НайденныеСтроки[0].ОстаткиОтпусковПоРабочимГодам);
        // ... здесь может быть или не быть строка про ОтсутствияСдвигающиеРабочийГод
    КонецЕсли;
    
  3. Нам нужно доработать этот блок, добавив ветку Иначе. В этой ветке мы создадим пустые структуры данных для всех полей, которые могут отсутствовать.
  4. Приведите этот участок кода к следующему виду:
    
    Если НайденныеСтроки.Количество > 0 Тогда
        ВыборкаПоДокументу.Вставить("ЕжегодныеОтпуска", НайденныеСтроки[0].ЕжегодныеОтпуска);
        ВыборкаПоДокументу.Вставить("ОстаткиОтпусковПоРабочимГодам", НайденныеСтроки[0].ОстаткиОтпусковПоРабочимГодам);
        ВыборкаПоДокументу.Вставить("ОтсутствияСдвигающиеРабочийГод", НайденныеСтроки[0].ОтсутствияСдвигающиеРабочийГод);
    Иначе
        ВыборкаПоДокументу.Вставить("ЕжегодныеОтпуска", Новый ТаблицаЗначений);
        ВыборкаПоДокументу.Вставить("ОстаткиОтпусковПоРабочимГодам", Новый ТаблицаЗначений);
        ВыборкаПоДокументу.Вставить("ОтсутствияСдвигающиеРабочийГод", Новый ТаблицаЗначений);
    КонецЕсли;
    
    Важно: мы добавили не только обработку для проблемного поля ОтсутствияСдвигающиеРабочийГод, но и для связанных с ним полей ЕжегодныеОтпуска и ОстаткиОтпусковПоРабочимГодам, чтобы гарантировать целостность структуры.
  5. Сохраните изменения в обработке и попробуйте запустить выгрузку данных снова. Ошибка должна исчезнуть.

Дополнительное замечание

В процессе обсуждения проблемы пользователи также выяснили, что стандартный перенос (как полный, так и краткий) может не переносить некоторые специфичные документы, например, Корректировки НДФЛ. После завершения переноса данных обязательно проверьте корректность учета НДФЛ и будьте готовы к тому, что некоторые данные придется вводить или корректировать вручную в новой базе ЗУП 3.1.

← На главную