Как исправить ошибку «Преобразование значения к типу Число не может быть выполнено» и некорректное заполнение табеля в 1С:ЗУП 3.1?

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

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

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

Анализ причин сбоя в учете отсутствий

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


{ОбщийМодуль.ОстаткиОтпусков.Модуль(6485)}: Преобразование значения к типу Число не может быть выполнено
КоличествоДнейПродления = Макс(СтрокаОтклонения.КоличествоДнейОтсутствия - КоличествоДнейВключаемых, 0);

Данная ситуация возникает из-за совокупности факторов:

  1. Несовместимость исторических данных: при переносе информации из редакции 2.5 в регистры Фактические отпуска, Состояния сотрудников и Периоды отсутствия сотрудников могли попасть строки с незаполненными числовыми полями (значения Неопределено или NULL вместо нуля).
  2. Изменение типовых алгоритмов расчета: в ряде релизов ветки 3.1 модуль ОстаткиОтпусков рассчитывает продления и стаж без предварительной явной проверки полей на числовой тип, что приводит к аварийному завершению работы при вычислении арифметических выражений.
  3. «Зависшие» состояния: если документ-отклонение из прошлой базы был перенесен не полностью либо не содержал даты завершения, сотрудник в регистре сведений Данные состояний сотрудников остается в бессрочном статусе «Отпуск» или «Болен». В результате автозаполнение табеля продолжает считывать активное отсутствие даже в текущих периодах.

Способ 1. Проверка и корректировка документов «Перенос данных»

Если база данных была получена путем переноса из редакции 2.5, проанализируем созданные при конвертации служебные документы:

  1. Перейдем в главное меню: Администрирование → См. также → Переносы данных (или откроем список через меню Функции для технического специалиста / Все функции).
  2. Найдем документы с кодами регистров, отвечающих за отпуска и кадровые отклонения:
    • Регистр сведений Состояния сотрудников
    • Регистр сведений Данные состояний сотрудников
    • Регистр накопления Фактические отпуска
    • Регистр сведений Периоды отсутствия сотрудников
  3. Отфильтруем записи по проблемным сотрудникам. Проверим, чтобы в числовых колонках (количество дней, остатки) не было пустых значений, а все периоды имели корректные даты окончания.
  4. При обнаружении пустых полей укажем явные нулевые значения или удалим некорректные дублирующие записи.

Способ 2. Ввод начальных остатков отпусков

Для инициализации корректной структуры данных регистра отпусков и очистки системных ошибок расчета прав применим механизм ввода начальных остатков:

  1. Откроем журнал документов: раздел Кадры → См. также → Остатки отпусков (в некоторых версиях интерфейса документ доступен непосредственно из карточки сотрудника по кнопке Оформить документ → Ввод остатков отпусков).
  2. Создадим новый документ Ввод начальных остатков отпусков на дату приема проблемного сотрудника или на дату начала ведения учета в новой базе.
  3. Укажем нулевой или фактический остаток дней отпуска на выбранную дату и проведем документ.
  4. Проверим формирование отчета по остаткам отпусков. Создание этой записи пересчитывает кэшированные остатки и устраняет исключение типизации в общем модуле ОстаткиОтпусков.
  5. В ряде случаев после успешной инициализации структуры документ можно отменить или скорректировать под фактические показатели согласно личной карточке Т-2.

Способ 3. Сброс зависших состояний сотрудников и перепроведение документов

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

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

Способ 4. Обновление конфигурации и регламентные процедуры

Разработчики регулярно выпускают исправления ошибок типизации данных в общих модулях расчета отпусков:

  1. Проверим наличие свежих релизов 1С:ЗУП и выполним последовательное обновление конфигурации.
  2. После завершения обновления конфигурации обязательно убедимся в успешном выполнении отложенных фоновых процедур: перейдем в Администрирование → Обслуживание → Результаты обновления программы и дождемся статуса завершения всех дополнительных обработок данных.
  3. При сохранении ошибок выполним тестирование и исправление информационной базы через Конфигуратор (пункт меню Администрирование → Тестирование и исправление...) с установленными флагами Реиндексация таблиц информационной базы и Проверка логической целостности.
← На главную