После обновления конфигурации 1С:Документооборот до версии 3.0.16.30 на платформе 8.3.25 многие пользователи столкнулись с неприятной ситуацией: при попытке отклонить задачу или заявку система выдает сообщение «Заявка не согласована или не утверждена», а в журнале регистрации фиксируется техническая ошибка выполнения встроенного языка. Рассмотрим подробнее, почему это происходит и как мы можем исправить данную проблему самостоятельно или с помощью инструментов поддержки.
Для начала разберем ситуацию и проанализируем стек вызовов, который предоставляет система. Ошибка локализуется в общем модуле ДокументооборотПраваДоступа. Основная проблема заключается в следующем фрагменте кода:
{ОбщийМодуль.ДокументооборотПраваДоступа.Модуль(73)}:ТаблицаПрав.ЗагрузитьКолонку(СотрудникиОтбор, "Сотрудник");
...
по причине:
Ошибка при вызове метода контекста (ЗагрузитьКолонку)
по причине:
Несоответствие типов (параметр номер '1')
Выясним причину такого поведения. Метод ЗагрузитьКолонку объекта ТаблицаЗначений ожидает в качестве первого параметра объект типа Массив. Однако, в последних релизах (начиная с 3.0.16) разработчики изменили механизмы работы с правами и кэшированием сотрудников. Теперь, если в настройках программы отключено ограничение прав доступа на уровне записей (RLS), функция Сотрудники.ВсеСотрудникиТекущегоПользователя(Ложь) возвращает объект типа ФиксированныйМассив.
Важно понимать различие: ФиксированныйМассив — это неизменяемая коллекция, и современные версии платформы (включая 8.3.25) крайне строго относятся к передаче таких типов данных в методы, которые жестко ожидают стандартный динамический Массив. Именно этот конфликт типов и приводит к аварийному завершению процесса записи задачи.
Проанализируем самый простой способ «обхода» проблемы, не требующий вмешательства в программный код. Как было замечено в ходе обсуждения на форуме, ошибка проявляется только тогда, когда в системе выключены ограничения прав. Если ваша политика безопасности позволяет это сделать, попробуйте включить соответствующую опцию:
При включении этой настройки выполнение кода в общем модуле пойдет по другой ветке. Система начнет использовать более сложные механизмы расчета прав, где данные преобразуются в стандартные массивы перед загрузкой в таблицы, и ошибка исчезнет. Однако, если ваша база данных имеет очень большой объем, включение RLS может повлиять на производительность.
Фирма «1С» оперативно выпускает исправления для критических ошибок в виде патчей. Разберем, как проверить наличие нужного исправления. Для версии 3.0.16.30 стоит обратить внимание на патчи с префиксами EF_00_..., относящиеся к правам доступа и задачам.
Выполним следующие шаги:
Особое внимание обратите на патч EF_60014283 или аналогичные, в описании которых фигурирует «Ошибка при выполнении задачи». Установка патча — самый безопасный метод, так как он не снимает конфигурацию с поддержки.
Если патч еще не выпущен, а работать нужно сейчас, мы можем создать расширение конфигурации и внести исправление в логику работы модуля. Разберем по шагам, что именно нужно сделать в коде общего модуля ДокументооборотПраваДоступа.
Нам необходимо принудительно преобразовать ФиксированныйМассив в обычный Массив перед тем, как передать его методу ЗагрузитьКолонку. Посмотрим на пример кода, который решает проблему:
// В расширении, метод ПраваСотрудниковПоОбъекту (или аналогичный, где падает ошибка)
// Вместо:
// ТаблицаПрав.ЗагрузитьКолонку(СотрудникиОтбор, "Сотрудник");
// Используем конструктор нового массива для приведения типа:
МассивДляЗагрузки = Новый Массив(СотрудникиОтбор);
ТаблицаПрав.ЗагрузитьКолонку(МассивДляЗагрузки, "Сотрудник");
Почему это работает? Конструктор Новый Массив(), принимая на вход другой массив (даже фиксированный), создает его полную копию в виде стандартного массива. После такого преобразования метод ЗагрузитьКолонку отрабатывает без ошибок, так как типы данных теперь полностью соответствуют ожиданиям платформы.
Мы проанализировали ситуацию и выяснили, что ошибка носит чисто технический характер и связана с развитием платформы 1С:Предприятие 8.3 в части типизации данных. При использовании последних версий платформы (8.3.24, 8.3.25) подобные несоответствия становятся критичными.
Подведем итог действий, которые помогут восстановить работоспособность:
Новый Массив(ФиксированныйМассив).Помните, что внесение изменений в программный код через расширения требует осторожности. Всегда проверяйте работоспособность на копии базы данных перед применением в рабочей среде. Мы надеемся, что в будущих релизах (например, в анонсированном 3.0.17) эта ошибка будет исправлена разработчиками штатно, и необходимость в ручных правках отпадет.