Почему отчет "Штатное расписание (Т-3)" не формируется в ЗУП 3.1.28.35 и как это исправить?

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

После обновления конфигурации 1С:Зарплата и управление персоналом (ЗУП) до актуальных версий, таких как 3.1.27.129 или 3.1.28.35, пользователи нередко сталкиваются с проблемой при попытке сформировать стандартный отчет "Штатное расписание (Т-3)". Отчет, который ранее работал без нареканий, вдруг перестает формироваться, выдавая критичную ошибку. Давайте подробно разберем эту ситуацию и найдем эффективные решения.

Суть проблемы: Отчет "Штатное расписание (Т-3)" не формируется

Пользователи сообщают, что после обновления системы 1С:ЗУП до версии 3.1.28.35 (и схожих релизов) при попытке построить отчет "Штатное расписание (Т-3)" на экране появляется следующее сообщение об ошибке:

"В настройку отчета Т-3 внесены критичные изменения. Отчет не будет сформирован. Преобразование значения к типу Число не может быть выполнено."

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

Причина возникновения ошибки: Изменения в логике запроса

Мы выяснили, что описанная проблема является зарегистрированной ошибкой в продуктах 1С под номером 60011328. Глубокий анализ ситуации, проведенный опытными пользователями и специалистами, показал, что корневая причина кроется в изменении логики запроса, используемого для формирования отчета "Штатное расписание (Т-3)" в новых релизах. Если ранее в запросе использовалось ВНУТРЕННЕЕ СОЕДИНЕНИЕ (INNER JOIN), то в проблемных версиях оно было заменено на ЛЕВОЕ СОЕДИНЕНИЕ (LEFT JOIN).

Что это означает на практике? ЛЕВОЕ СОЕДИНЕНИЕ позволяет включать в выборку строки из левой таблицы даже в том случае, если для них не найдено соответствующих записей в правой таблице. В контексте отчета о штатном расписании это приводит к тому, что в результат запроса могут попадать строки с пустыми (NULL) значениями для таких ключевых полей, как Организация или Количество ставок. Когда система пытается преобразовать это NULL-значение поля Количество ставок в числовой тип для выполнения расчетов или группировок, возникает ошибка "Преобразование значения к типу Число не может быть выполнено".

Таким образом, наличие закрытых позиций или активная история штатного расписания, по сути, увеличивают вероятность появления таких "пустых" строк в выборке при использовании ЛЕВОГО СОЕДИНЕНИЯ, что и провоцирует ошибку.

Решение 1: Установка официального патча EF_60011328

Наиболее корректным и рекомендованным способом устранения данной ошибки является установка официального исправления, выпущенного фирмой "1С". Для данной проблемы был разработан и опубликован патч с идентификатором EF_60011328.

Мы видим подтверждения от многих пользователей, что установка этого патча полностью решает проблему, и отчет "Штатное расписание (Т-3)" начинает формироваться корректно, даже при наличии истории штатного расписания и закрытых позиций.

Давайте пошагово разберем процесс установки патча в вашей конфигурации 1С:ЗУП:

  1. Запустите 1С:ЗУП: Убедитесь, что вы работаете под пользователем с полными правами (например, администратором).
  2. Перейдите в раздел Администрирование: В главном меню программы найдите и откройте пункт "Администрирование".
  3. Откройте "Интернет поддержка и сервисы": В разделе "Администрирование" найдите и выберите "Интернет поддержка и сервисы".
  4. Найдите "Монитор портала 1С ИТС": В этом окне вам понадобится блок, связанный с обновлением и поддержкой, обычно это "Монитор портала 1С ИТС" или "Обновление программы".
  5. Нажмите "Установить обновление": В соответствующем разделе нажмите кнопку "Установить обновление".
  6. Перейдите в "Подробнее": В окне обновления может появиться кнопка "Подробнее" или аналогичная, которая позволит вам получить доступ к списку доступных патчей. Нажмите на нее.
  7. Отфильтруйте по патчам: Установите флажок или выберите опцию, которая позволяет отображать только патчи (например, "Только патчи", "Исправления"). Это упростит поиск нужного исправления среди всех обновлений.
  8. Найдите нужный патч: В списке доступных патчей найдите патч по коду ошибки 60011328 или по его имени EF_60011328. Возможно, для удобства поиска можно использовать строку поиска.
  9. Выберите и установите патч: Установите флажок напротив найденного патча и нажмите кнопку "Установить".
  10. Перезапустите программу: После успешной установки патча система предложит перезапустить 1С:ЗУП. Обязательно выполните это действие, чтобы изменения вступили в силу.

После перезапуска программы повторите попытку формирования отчета "Штатное расписание (Т-3)". Мы ожидаем, что проблема будет устранена, и отчет сформируется без ошибок.

Важно отметить, что патчи обычно становятся доступны на портале технической поддержки 1С (users.v8.1c.ru). Если вы не можете найти патч через интерфейс программы, возможно, вам потребуется скачать его вручную с портала и установить по инструкции, но чаще всего процесс автоматизирован, как описано выше.

Решение 2: Временное исправление через расширение конфигурации (для программистов)

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

Как мы уже выяснили, корень проблемы заключается в изменении типа соединения в запросе отчета с ВНУТРЕННЕГО СОЕДИНЕНИЯ на ЛЕВОЕ СОЕДИНЕНИЕ, что приводит к появлению NULL-значений и ошибке преобразования типа. Соответственно, логика временного решения через расширение будет заключаться в следующем:

  1. Создание расширения: В первую очередь, мы создаем новое расширение конфигурации. Это позволяет вносить изменения в поведение типовых объектов без модификации самой конфигурации, что является лучшей практикой.
  2. Заимствование процедуры формирования отчета: В расширение мы заимствуем процедуру или функцию, которая отвечает за формирование запроса для отчета "Штатное расписание (Т-3)". Обычно это делается с помощью механизма "Переопределение" (для процедур/функций) или "После" / "Вместо" (для событий).
  3. Изменение логики запроса: В заимствованной процедуре мы находим место, где формируется проблемный запрос. Наша задача – модифицировать этот запрос таким образом, чтобы он использовал ВНУТРЕННЕЕ СОЕДИНЕНИЕ (INNER JOIN) вместо ЛЕВОГО СОЕДИНЕНИЯ (LEFT JOIN) для тех таблиц, где возникает проблема с NULL-значениями.
  4. Контроль NULL-значений: В дополнение к изменению типа соединения, мы можем добавить явные проверки на NULL-значения для полей, которые участвуют в преобразовании к типу Число, и, при необходимости, присваивать им значение 0 (ноль) или другое подходящее значение по умолчанию, прежде чем они будут преобразованы. Это можно сделать с помощью функций типа ЕСТЬNULL() в языке запросов 1С.
  5. Тестирование: После внесения изменений в расширение и его применения к базе, необходимо тщательно протестировать формирование отчета в различных условиях, чтобы убедиться в отсутствии новых ошибок и корректности данных.

Важно понимать, что создание и поддержка такого расширения – это задача для квалифицированного специалиста. Расширение может потребовать адаптации при выходе новых версий конфигурации, если в них будут существенно меняться структуры отчетов. Это решение является временным и должно использоваться до момента установки официального патча или обновления до версии, где проблема уже исправлена. В качестве альтернативы можно использовать внешний отчет штатного расписания Т-3 для ЗУП 3.1.

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

Помимо основных решений, мы рассмотрим несколько дополнительных аспектов, которые могут быть полезны при работе с отчетом "Штатное расписание (Т-3)":

  1. Очистка кэша: Хотя в данном конкретном случае очистка кэша не помогла, в целом это является хорошей практикой при возникновении любых аномалий в работе 1С. Поврежденный кэш может вызывать самые разнообразные ошибки. Мы рекомендуем регулярно выполнять очистку кэша, особенно после обновлений.
  2. Проверка пользовательских доработок: Если в вашей системе есть какие-либо пользовательские доработки, связанные с отчетом "Штатное расписание (Т-3)" или объектами, на которых он строится, мы рекомендуем временно отключить их (или протестировать на тестовой базе без доработок). Это поможет убедиться, что проблема не вызвана конфликтом с вашими изменениями.
  3. Актуальность платформы: Убедитесь, что используемая версия платформы 1С:Предприятие соответствует требованиям обновленной конфигурации. Например, для ЗУП 3.1.28.35 требуется платформа не ниже 8.3.21.1775 или 8.3.22.1923. Несоответствие версий может приводить к непредсказуемому поведению.
  4. Учет действующих позиций: Отчеты по штатному расписанию обычно строятся только по действующим позициям, утвержденным и не закрытым на дату его формирования. Если вы ожидаете увидеть в отчете закрытые позиции или позиции на будущие даты, убедитесь, что настройки отчета и параметры даты формирования позволяют это.
  5. Последовательность дат в документах "Изменение штатного расписания": Мы также обратили внимание, что некорректное формирование отчета (например, пустой отчет) может быть связано с последовательностью дат изменений в документах "Изменение штатного расписания". Если последующий документ изменяет данные на более позднюю дату, то при попытке сформировать отчет для предыдущего документа он может оказаться пустым или некорректным. Всегда проверяйте актуальность и последовательность введенных документов.

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

← На главную