Что делать, если возникает ошибка "Недопустимое значение параметра Владелец" при открытии списка ЭСФ?

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

После обновления конфигурации «Бухгалтерия для Казахстана, редакция 3.0» пользователи могут столкнуться с ошибкой при попытке открыть список исходящих электронных счетов-фактур (ЭСФ). Система прерывает выполнение и выводит сообщение: «Недопустимое значение параметра Владелец в ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища. параметр должен содержать ссылку; передано значение: (тип Не определено)». Давайте подробно разберем, почему возникает эта ошибка и как ее правильно исправить.

Анализ причины ошибки

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

  1. Все начинается с команды ИсходящиеЭлектронныеСчетаФактуры, которая открывает форму списка.
  2. Далее открывается форма Документ.ЭСФ.Форма.ФормаСпискаИсходящих.
  3. При открытии этой формы (в процедуре ПриСозданииНаСервере или аналогичной) выполняется код УстановитьВидимостьСостоянияИТС().
  4. Эта процедура вызывает функцию ЭлектронноеВзаимодействиеССервисами.ПолучитьДатуОкончанияПодписки(), чтобы проверить статус подписки на сервисы 1С, включая сервис по работе с ЭСФ.
  5. Для проверки подписки система пытается получить данные для авторизации (логин, пароль или токен) из специального защищенного места — безопасного хранилища. Для этого вызывается функция ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища.

Ключевой момент — у функции ПрочитатьДанныеИзБезопасногоХранилища есть обязательный параметр Владелец. Этот параметр указывает, для какого именно объекта (например, для какой организации, пользователя или учетной записи) нужно получить данные. В нашем случае в этот параметр передается значение Неопределено. Система не может выполнить запрос, не зная, чьи данные искать, и генерирует исключение.

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

Поиск и устранение первопричины (рекомендуемый способ)

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

1. Проверка настроек Интернет-поддержки

Система пытается проверить статус подписки, используя данные учетной записи от портала 1С:ИТС. Если эти данные не заполнены или некорректны, она не может определить владельца.

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

  1. Перейдите в раздел «Администрирование» → «Интернет-поддержка и сервисы».
  2. Убедитесь, что интернет-поддержка подключена. Если нет, нажмите кнопку «Подключить» и введите логин и пароль от вашего аккаунта на портале portal.1c.ru.
  3. Если поддержка уже подключена, попробуйте ее отключить и подключить заново, чтобы обновить данные авторизации.

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

2. Проверка пользователя ИС ЭСФ

В настройках обмена с информационной системой ЭСФ должен быть указан основной пользователь, от имени которого выполняются операции. Система может пытаться использовать его в качестве «Владельца» для получения данных.

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

  1. Откройте раздел «Администрирование» → «Общие настройки» → «Электронные счета-фактуры».
  2. Перейдите по ссылке «Настройки электронных счетов-фактур».
  3. На вкладке «Пользователи ИС ЭСФ» проверьте, что для вашей организации назначен основной пользователь и его данные (сертификаты, пароли) корректны.

Отсутствие или некорректная настройка пользователя ИС ЭСФ — частая причина подобных сбоев.

3. Проверка настроек конкретного пользователя 1С

Иногда проблема может быть связана с правами или персональными настройками того пользователя, под которым вы работаете в 1С. Чтобы исключить этот фактор, попробуйте выполнить то же действие под пользователем с полными правами (администратором). Если под администратором ошибка не воспроизводится, значит, проблема в правах или настройках исходного пользователя.

Обход проблемы через изменение кода (не рекомендуется)

На форуме был предложен способ, который позволяет обойти ошибку, но не устраняет её причину. Он заключается в изменении кода общего модуля ОбщегоНазначения. Этот метод можно использовать как крайнюю временную меру, если нужно срочно получить доступ к форме, а на поиск причины времени нет.

Важно! Модификация типовой конфигурации — плохая практика. Любые изменения будут затерты при следующем обновлении, и конфигурацию будет сложнее поддерживать. Используйте этот способ на свой страх и риск.

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

Вот как выглядит измененный код функции ПрочитатьДанныеИзБезопасногоХранилища:


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

    Если РазделениеВключено() И ДоступноИспользованиеРазделенныхДанных() Тогда
        Если ОбщиеДанные = Истина Тогда
            ИмяБезопасногоХранилищаДанных = "БезопасноеХранилищеДанных";
        Иначе
            ИмяБезопасногоХранилищаДанных = "БезопасноеХранилищеДанныхОбластейДанных";
        КонецЕсли;
    Иначе
        ИмяБезопасногоХранилищаДанных = "БезопасноеХранилищеДанных";
    КонецЕсли;
    Результат = ДанныеИзБезопасногоХранилища(Владелец, ИмяБезопасногоХранилищаДанных, Ключи);
    
    Если Результат <> Неопределено И Результат.Количество() = 1 Тогда
        Возврат ?(Результат.Свойство(Ключи), Результат[Ключи], Неопределено);
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции

Этот код позволяет открыть форму, но функция проверки подписки ИТС не будет работать корректно. Это может привести к тому, что другие механизмы, зависящие от этой проверки, также перестанут функционировать.

Выводы

Ошибка «Недопустимое значение параметра Владелец» при работе с ЭСФ почти всегда указывает на проблемы с настройками интеграции: либо с Интернет-поддержкой, либо с пользователями ИС ЭСФ. Наиболее правильное решение — найти и исправить некорректную настройку. Это гарантирует стабильную работу всех связанных механизмов и не потребует вмешательства в типовой код конфигурации.

← На главную