Переход со старых платформ на современные решения «1С:Предприятие 8» — это всегда ответственный и технологически сложный процесс. Одной из наиболее частых проблем, с которыми сталкиваются специалисты при конвертации данных из конфигурации «Зарплата и Кадры 7.7» (ЗиК) в «Зарплата и Управление Персоналом 3.1» (ЗУП), являются ошибки валидации данных на стороне принимающей базы. Современная платформа предъявляет гораздо более строгие требования к логической целостности регистров и документов.
Типичным примером такой проблемы является сбой при загрузке XML-пакета с ошибкой в обработчике события ПриЗагрузкеОбъекта для правила конвертации объектов (ПКО) ОтпускПоУходуЗаРебенком. Платформа аварийно прерывает транзакцию с сообщением: «Дата окончания не может быть меньше даты начала». В этой статье мы подробно разберем, почему возникает данная ошибка, проанализируем внутренние механизмы платформ и рассмотрим несколько эффективных способов ее решения.
Для того чтобы понять природу ошибки, нам необходимо проанализировать различия в логике работы старой программы «1С:ЗиК 7.7» и современной «1С:ЗУП 3.1». В конфигурации «ЗиК 7.7» контроль за заполнением дат в документе Отпуск по уходу за ребенком был достаточно мягким. Пользователь мог установить дату окончания самого отпуска (например, в связи с досрочным выходом сотрудницы на работу) более ранним числом, но при этом оставить даты выплаты пособий (до 1,5 или до 3 лет) неизменными — уходящими далеко в будущее.
Давайте рассмотрим конкретный пример, который часто встречается на практике и обсуждается на форумах:
В «1С:ЗиК 7.7» такой документ успешно проводился и не вызывал нареканий у системы. Однако при переносе данных правила обмена пытаются транслировать эту структуру в один или несколько документов «1С:ЗУП 3.1» (таких как Отпуск по уходу за ребенком и сопутствующие регистры сведений). При попытке записать созданный объект в новой базе срабатывает строгая проверка бизнес-логики в общем модуле ЗарплатаКадрыОбщиеНаборыДанных.Модуль. Система обнаруживает, что дата окончания одного из связанных периодов (выплаты пособия) превышает фактическую дату окончания самого отпуска, либо даты интервалов пересекаются некорректным образом. Платформа воспринимает это как логическое противоречие, генерирует исключение, транзакция откатывается, и весь процесс загрузки XML-файла прерывается.
Важно понимать, что совет «просто исправить даты вручную в ЗУП 3.1» здесь не сработает, так как из-за прерывания транзакции документ даже не создается в базе-приемнике, а сама загрузка останавливается на полпути. Ниже мы детально разберем четыре практических метода обхода этой проблемы.
Этот метод является наиболее правильным и «чистым», так как он устраняет первопричину сбоя непосредственно в источнике данных. Выполним следующие шаги:
Отпуск по уходу за ребенком 0000-000001 от 10.03.2016.Возврат из отпуска по уходу.Если повторная выгрузка из «7.7» невозможна (например, база-источник находится на удаленном сервере клиента, к которому нет оперативного доступа, или выгрузка длится много часов), мы можем исправить ошибку непосредственно «на лету» в текстовом XML-файле обмена. Разберем этот процесс по шагам:
0000-000001 или дату 10.03.2016.
<Объект Нпп="125" Тип="ДокументСсылка.ОтпускПоУходуЗаРебенком">
<Ссылка>
<Свойство Имя="Номер" Тип="Строка">
<Значение>0000-000001</Значение>
</Свойство>
<Свойство Имя="Дата" Тип="Дата">
<Значение>2016-03-10T00:00:00</Значение>
</Свойство>
</Ссылка>
<Свойство Имя="ДатаОкончания" Тип="Дата">
<Значение>2016-10-30T00:00:00</Значение>
</Свойство>
<Свойство Имя="ДатаОкончанияПособияДоПолутораЛет" Тип="Дата">
<Значение>2017-06-30T00:00:00</Значение>
</Свойство>
</Объект>
ДатаОкончания (30.10.2016) меньше, чем ДатаОкончанияПособияДоПолутораЛет (30.06.2017).ДатаОкончания на непротиворечивое — например, установим там дату 2018-12-30T00:00:00.Очень часто подобные ошибки возникают из-за попытки выполнить так называемый «полный» перенос данных, при котором переносится вся многолетняя кадровая и расчетная история в виде документов. Фирма «1С» настоятельно рекомендует отказаться от этого подхода при переходе с устаревших конфигураций.
Рассмотрим преимущества и особенности **Рекомендованного (краткого) переноса**:
ПереносДанных.Если вам по какой-то причине критически важен именно «полный» перенос, но конкретный старый документ блокирует весь процесс, мы можем временно исключить его из правил конвертации:
Отпуск по уходу за ребенком.Подводя итог, отметим, что наиболее системным решением при возникновении подобных ошибок является переход на рекомендованный краткий перенос данных. Это не только убережет вас от логических нестыковок в старых документах, но и обеспечит более быструю и стабильную работу новой информационной системы «1С:ЗУП 3.1».