После обновления конфигурации «Бухгалтерия для Казахстана, редакция 3.0» пользователи могут столкнуться с ошибкой при попытке открыть список исходящих электронных счетов-фактур (ЭСФ). Система прерывает выполнение и выводит сообщение: «Недопустимое значение параметра Владелец в ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища. параметр должен содержать ссылку; передано значение: (тип Не определено)». Давайте подробно разберем, почему возникает эта ошибка и как ее правильно исправить.
Чтобы понять суть проблемы, проанализируем стек вызовов, который система предоставляет в момент ошибки. Это последовательность функций, которые вызывали друг друга, пока не произошло исключение.
ИсходящиеЭлектронныеСчетаФактуры, которая открывает форму списка.Документ.ЭСФ.Форма.ФормаСпискаИсходящих.ПриСозданииНаСервере или аналогичной) выполняется код УстановитьВидимостьСостоянияИТС().ЭлектронноеВзаимодействиеССервисами.ПолучитьДатуОкончанияПодписки(), чтобы проверить статус подписки на сервисы 1С, включая сервис по работе с ЭСФ.ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища.Ключевой момент — у функции ПрочитатьДанныеИзБезопасногоХранилища есть обязательный параметр Владелец. Этот параметр указывает, для какого именно объекта (например, для какой организации, пользователя или учетной записи) нужно получить данные. В нашем случае в этот параметр передается значение Неопределено. Система не может выполнить запрос, не зная, чьи данные искать, и генерирует исключение.
Таким образом, корень проблемы — не в самой функции, а в том, что на предыдущих этапах не удалось определить, для какой учетной записи нужно проверять подписку ИТС. Вероятнее всего, это связано с некорректными или отсутствующими настройками после обновления конфигурации.
Вместо того чтобы вносить изменения в код типовой конфигурации, правильнее всего найти и исправить настройку, которая приводит к передаче некорректного параметра. Рассмотрим основные возможные причины.
Система пытается проверить статус подписки, используя данные учетной записи от портала 1С:ИТС. Если эти данные не заполнены или некорректны, она не может определить владельца.
Что нужно сделать:
Зачастую этот простой шаг решает проблему, так как система "находит" нужного пользователя для проверки подписки.
В настройках обмена с информационной системой ЭСФ должен быть указан основной пользователь, от имени которого выполняются операции. Система может пытаться использовать его в качестве «Владельца» для получения данных.
Что нужно сделать:
Отсутствие или некорректная настройка пользователя ИС ЭСФ — частая причина подобных сбоев.
Иногда проблема может быть связана с правами или персональными настройками того пользователя, под которым вы работаете в 1С. Чтобы исключить этот фактор, попробуйте выполнить то же действие под пользователем с полными правами (администратором). Если под администратором ошибка не воспроизводится, значит, проблема в правах или настройках исходного пользователя.
На форуме был предложен способ, который позволяет обойти ошибку, но не устраняет её причину. Он заключается в изменении кода общего модуля ОбщегоНазначения. Этот метод можно использовать как крайнюю временную меру, если нужно срочно получить доступ к форме, а на поиск причины времени нет.
Важно! Модификация типовой конфигурации — плохая практика. Любые изменения будут затерты при следующем обновлении, и конфигурацию будет сложнее поддерживать. Используйте этот способ на свой страх и риск.
Идея заключается в том, чтобы обернуть проверку параметра Владелец в конструкцию Попытка ... Исключение. В этом случае, если проверка вызовет ошибку, она будет перехвачена, и функция просто вернет Неопределено, не останавливая работу программы.
Вот как выглядит измененный код функции ПрочитатьДанныеИзБезопасногоХранилища:
Функция ПрочитатьДанныеИзБезопасногоХранилища(Владелец, Ключи = "Пароль", ОбщиеДанные = Неопределено) Экспорт
//+++ ДОРАБОТКА - ДОБАВЛЕН ВЫЗОВ ИСКЛЮЧЕНИЯ - ВОЗВРАТ НЕОПРЕДЕЛЕНО
Попытка
ОбщегоНазначенияКлиентСервер.Проверить(ЗначениеЗаполнено(Владелец),
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недопустимое значение параметра %1 в %2.
|параметр должен содержать ссылку; передано значение: %3 (тип %4).'"),
"Владелец", "ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища", Владелец, ТипЗнч(Владелец)));
Исключение
// При возникновении исключения просто выходим из функции,
// не прерывая работу пользователя.
Возврат Неопределено;
КонецПопытки;
Если РазделениеВключено() И ДоступноИспользованиеРазделенныхДанных() Тогда
Если ОбщиеДанные = Истина Тогда
ИмяБезопасногоХранилищаДанных = "БезопасноеХранилищеДанных";
Иначе
ИмяБезопасногоХранилищаДанных = "БезопасноеХранилищеДанныхОбластейДанных";
КонецЕсли;
Иначе
ИмяБезопасногоХранилищаДанных = "БезопасноеХранилищеДанных";
КонецЕсли;
Результат = ДанныеИзБезопасногоХранилища(Владелец, ИмяБезопасногоХранилищаДанных, Ключи);
Если Результат <> Неопределено И Результат.Количество() = 1 Тогда
Возврат ?(Результат.Свойство(Ключи), Результат[Ключи], Неопределено);
КонецЕсли;
Возврат Результат;
КонецФункции
Этот код позволяет открыть форму, но функция проверки подписки ИТС не будет работать корректно. Это может привести к тому, что другие механизмы, зависящие от этой проверки, также перестанут функционировать.
Ошибка «Недопустимое значение параметра Владелец» при работе с ЭСФ почти всегда указывает на проблемы с настройками интеграции: либо с Интернет-поддержкой, либо с пользователями ИС ЭСФ. Наиболее правильное решение — найти и исправить некорректную настройку. Это гарантирует стабильную работу всех связанных механизмов и не потребует вмешательства в типовой код конфигурации.