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

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

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

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

Технический анализ проблемы в программном коде

Давайте проанализируем фрагмент кода, на который указывает стек ошибки. Как правило, это стандартный общий модуль ЗарплатаКадрыКлиентСервер. Ошибка возникает в следующей строке:


Возврат (КонецДня(ДатаОкончания) + 1 - НачалоДня(ДатаНачала)) / ДлительностьСутокВСекундах;

Разберем, что здесь происходит. Программа пытается рассчитать длительность периода в днях. Для этого она использует встроенные функции КонецДня и НачалоДня. Ошибка преобразования к типу Дата означает, что в одну из этих функций передано значение, которое не является датой (например, Неопределено, Null или пустая ссылка).

В контексте документа Возврат из отпуска по уходу за ребенком переменные ДатаНачала или ДатаОкончания инициализируются на основании данных из исходного документа Отпуск по уходу за ребенком или связанных с ним регистров сведений. Если в цепочке документов по сотруднику есть «разрыв» данных или незаполненные реквизиты, алгоритм получает пустое значение и «падает».

Причина №1: Незаполненные даты в исходном документе

Первым делом проанализируем первичный документ, на основании которого создается возврат. Это документ Отпуск по уходу за ребенком.

Часто ошибка возникает, если в исходном отпуске не заполнены или некорректно заполнены даты выплаты пособий (до 1.5 или до 3 лет). Даже если на момент возврата выплата пособия уже прекращена по сроку, программа при проведении возврата может пытаться пересчитать периоды.

Что нужно сделать:

  1. Откроем документ Отпуск по уходу за ребенком, по которому оформляется возврат.
  2. Проверим наличие флажков «Выплачивать пособие до...» и корректность указанных в них дат.
  3. Если даты были введены «руками» (текстовым вводом), попробуем перевыбрать их через стандартный календарь программы, чтобы исключить попадание лишних символов или некорректных форматов.

Причина №2: Конфликт в регистре «Плановые начисления»

Вторая и наиболее сложная причина связана с механизмом работы регистра сведений Плановые начисления. Документ Возврат из отпуска по уходу за ребенком делает две важные вещи: он прекращает начисление пособия и возобновляет начисление оклада (и других надбавок) сотрудника.

Если в системе уже существует другой документ, который зарегистрировал изменения начислений на ту же дату (или на дату, пересекающуюся с периодом возврата), возникает конфликт. В системном журнале это может отражаться как ошибка: «Запись с такими ключевыми полями существует! : Плановые начисления».

Рассмотрим ситуацию: сотруднику был оформлен Отпуск по уходу за ребенком. Позже был введен документ Изменение условий оплаты отпуска по уходу за ребенком, в котором была указана определенная дата окончания пособия. При попытке провести Возврат из отпуска программа пытается записать в регистр информацию о прекращении пособия, но наталкивается на уже существующую запись с аналогичными ключевыми полями (сотрудник, начисление, организация, дата).

Пошаговое решение через отладку и консоль запросов

Чтобы выяснить, какой именно документ блокирует проведение, пройдем по шагам:

  1. Проанализируем движения по сотруднику. Используем «Консоль запросов» или отчет «Движения документа» (если он доступен). Нам нужно посмотреть записи в регистре сведений Плановые начисления по конкретному физическому лицу.
  2. Найдем документ-виновник. В списке записей регистра ищем документы, тип которых отличается от текущего возврата. Часто это бывает документ Изменение условий оплаты отпуска по уходу за ребенком.
  3. Скорректируем даты. Если мы нашли, что Изменение условий... содержит запись, например, от 22.02.2019, а мы пытаемся сделать возврат на близкую дату, нужно убедиться, что эти документы не противоречат друг другу.
  4. Пример исправления:
    • В документе Изменение условий оплаты... устанавливаем дату окончания пособия на один день раньше даты планируемого возврата.
    • В документе Возврат из отпуска указываем дату, следующую за днем окончания пособия.
    • После такой корректировки программа сможет корректно «закрыть» старую запись в регистре и создать новую без конфликта ключей.

Дополнительные рекомендации

Посмотрим на ситуацию шире. Иногда проблема кроется не в датах, а в самом объекте. Рассмотрим дополнительные методы исправления:

  1. Перезаполнение табличных частей. В документе возврата перейдем на вкладку «Начисления». Нажмем кнопку «Обновить» или полностью очистим таблицу и заполним её заново. Это принудительно заставит программу пересчитать связи с показателями начислений.
  2. Проверка состояний сотрудника. Проанализируем регистр сведений Состояния сотрудников. У сотрудника не должно быть накладывающихся состояний (например, одновременно «Отпуск» и «Болезнь» или два «Отпуска по уходу» из-за ошибок миграции данных).
  3. Использование отладчика для программистов. Если вы имеете доступ к конфигуратору, установите точку останова в общем модуле ЗарплатаКадрыКлиентСервер на строке с расчетом. Посмотрите значение переменных ДатаНачала и ДатаОкончания. Если одна из них равна '00010101000000' (пустая дата), поднимитесь выше по стеку вызовов (в процедуру проведения документа), чтобы понять, из какого реквизита или регистра это пустое значение было считано.

Важный итог: Ошибка «Преобразование к типу Дата» — это лишь симптом того, что в алгоритм попала «пустота». В 90% случаев в 1С:ЗУП 3.1 это лечится проверкой цепочки документов: Отпуск по уходу -> Изменение условий (если было) -> Возврат из отпуска. Все даты в этой цепочке должны быть строго последовательными, а записи в регистре плановых начислений не должны дублироваться.

← На главную