Как исправить ошибку «Дата окончания не может быть меньше даты начала» при переносе данных из ЗиК 7.7 в ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

Переход со старых платформ на современные решения «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» здесь не сработает, так как из-за прерывания транзакции документ даже не создается в базе-приемнике, а сама загрузка останавливается на полпути. Ниже мы детально разберем четыре практических метода обхода этой проблемы.

Способ 1. Исправление логических ошибок в исходной базе «ЗиК 7.7» (Рекомендуемый)

Этот метод является наиболее правильным и «чистым», так как он устраняет первопричину сбоя непосредственно в источнике данных. Выполним следующие шаги:

  1. Откроем базу данных «1С:ЗиК 7.7».
  2. Перейдем в журнал документов по учету кадров или воспользуемся поиском, чтобы найти конкретный документ, вызвавший ошибку. В нашем примере это Отпуск по уходу за ребенком 0000-000001 от 10.03.2016.
  3. Проанализируем заполненные реквизиты. Если сотрудница действительно вышла на работу досрочно, проверим, как это было оформлено. В «7.7» часто ошибочно меняли дату окончания в самом первичном приказе вместо ввода отдельного документа возврата.
  4. Временно скорректируем дату окончания отпуска в исходном документе «7.7» таким образом, чтобы она не была меньше дат окончания выплаты пособий (например, установим дату окончания отпуска равной 30.12.2018).
  5. Проведем документ в «7.7» и заново запустим обработку выгрузки данных в XML.
  6. После успешной загрузки данных в «1С:ЗУП 3.1» мы сможем зайти в базу-приемник и отразить реальный досрочный выход сотрудницы из отпуска красивым и методологически верным способом — с помощью штатного документа Возврат из отпуска по уходу.

Способ 2. Прямое редактирование файла выгрузки XML

Если повторная выгрузка из «7.7» невозможна (например, база-источник находится на удаленном сервере клиента, к которому нет оперативного доступа, или выгрузка длится много часов), мы можем исправить ошибку непосредственно «на лету» в текстовом XML-файле обмена. Разберем этот процесс по шагам:

  1. Установим продвинутый текстовый редактор, способный работать с большими файлами без зависаний (например, Notepad++ или VS Code).
  2. Откроем наш выгруженный XML-файл данных.
  3. Воспользуемся поиском (сочетание клавиш Ctrl + F) и найдем проблемный объект по его номеру или дате. Ищем строку 0000-000001 или дату 10.03.2016.
  4. Найдем структуру данных, описывающую узел нашего документа. В XML-файле это будет выглядеть примерно так:

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

Способ 3. Переход на «Рекомендованный» (краткий) вариант переноса данных

Очень часто подобные ошибки возникают из-за попытки выполнить так называемый «полный» перенос данных, при котором переносится вся многолетняя кадровая и расчетная история в виде документов. Фирма «1С» настоятельно рекомендует отказаться от этого подхода при переходе с устаревших конфигураций.

Рассмотрим преимущества и особенности **Рекомендованного (краткого) переноса**:

Способ 4. Выборочное исключение документа из правил выгрузки

Если вам по какой-то причине критически важен именно «полный» перенос, но конкретный старый документ блокирует весь процесс, мы можем временно исключить его из правил конвертации:

  1. В обработке выгрузки на стороне «1С:ЗиК 7.7» перейдем к настройке правил обмена данными.
  2. Найдем в списке правил конвертации объектов (ПКО) строчку, отвечающую за выгрузку документов Отпуск по уходу за ребенком.
  3. Мы можем либо полностью снять флаг (галочку) с этого правила (если в базе нет действующих на данный момент отпусков этого типа), либо настроить дополнительный фильтр.
  4. Установим отбор по периоду или конкретным физическим лицам, чтобы исключить из выгрузки проблемную сотрудницу, чей отпуск уже давно завершен и не влияет на текущие взаиморасчеты и кадровый учет.
  5. Проведем выгрузку. Документ не попадет в XML-файл, загрузка завершится без ошибок, а данные по этой сотруднице при необходимости внесем в ЗУП 3.1 точечно вручную.

Подводя итог, отметим, что наиболее системным решением при возникновении подобных ошибок является переход на рекомендованный краткий перенос данных. Это не только убережет вас от логических нестыковок в старых документах, но и обеспечит более быструю и стабильную работу новой информационной системы «1С:ЗУП 3.1».

← На главную