Что делать, если после обновления 1С:Бухгалтерии 3.0 возникает ошибка "Значение не является значением объектного типа (ПолучитьВыделенныеОбласти)"?

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

После обновления конфигурации 1С:Бухгалтерия 3.0 пользователи и программисты могут столкнуться с ошибкой, которая возникает либо сразу при запуске программы, либо при формировании некоторых отчетов. Текст ошибки обычно выглядит так:


Значение не является значением объектного типа (ПолучитьВыделенныеОбласти)
{ОбщийМодуль.БухгалтерскиеОтчетыКлиент.Модуль(1724)}: ВыделенныеОбласти = ПолеРезультат.ПолучитьВыделенныеОбласти;
{ОбщийМодуль.БухгалтерскиеОтчетыКлиент.Модуль(1671)}: Если НеобходимоОбновитьСумму(ПолеРезультат, КэшВыделеннойОбласти) Тогда
{Отчет.ИмяВашегоОтчета.Форма.ФормаОтчета.Форма(340)}: БухгалтерскиеОтчетыКлиент.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(

Эта проблема чаще всего затрагивает нетиповые или доработанные отчеты, но иногда может проявляться и в стандартных. Разберем по шагам, почему возникает эта ошибка и как ее исправить.

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

Корень проблемы кроется в изменениях, которые разработчики 1С внесли в типовые общие модули в новых релизах конфигурации. В частности, изменилась сигнатура (набор передаваемых параметров) функции ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента, расположенной в общем модуле БухгалтерскиеОтчетыКлиент.

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

Когда ваш старый, доработанный отчет вызывает эту функцию по-старому, без нового параметра, происходит несоответствие. Внутрь типовой функции на место элемента формы попадает другое значение (например, сам объект табличного документа). У этого значения, естественно, нет метода ПолучитьВыделенныеОбласти, так как этот метод принадлежит именно элементу формы. В результате система и выдает ошибку "Значение не является значением объектного типа".

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

Решение 1: Очистка кэша (первый шаг)

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

  1. Закройте все сеансы 1С.
  2. Найдите и удалите папки с кэшем для вашей информационной базы. Обычно они находятся в каталогах %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8.
  3. Запустите 1С заново. Кэш будет создан автоматически.

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

Решение 2: Корректировка кода в нетиповых отчетах (основное решение)

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

Разберем по шагам:

  1. Определите отчет. Посмотрите на стек вызовов в тексте ошибки. Самая нижняя строка обычно указывает на объект, который инициировал проблему. Например, строка {Отчет.НаличиеВозвращенныхТорг12.Форма...} прямо говорит, что виноват отчет "НаличиеВозвращенныхТорг12".

  2. Откройте форму отчета в конфигураторе. Найдите в конфигурации указанный отчет и откройте его основную форму.

  3. Найдите вызов функции. В модуле формы найдите процедуру, которая отвечает за обработку действий пользователя в табличном документе. Часто она называется Подключаемый_РезультатПриАктивизацииОбластиПодключаемый или содержит в названии "ПриАктивизацииОбласти". Внутри этой процедуры найдите строку с вызовом функции БухгалтерскиеОтчетыКлиент.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента.

  4. Исправьте вызов. Проанализируем, как изменился вызов.

Старый вызов выглядел так:


БухгалтерскиеОтчетыКлиент.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(
    ПолеСумма, 
    Результат, 
    КэшВыделеннойОбласти, 
    НеобходимоВычислятьНаСервере);

Новый, правильный вызов должен выглядеть так:


БухгалтерскиеОтчетыКлиент.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(
    ПолеСумма, 
    Результат, 
    Элементы.Результат, 
    КэшВыделеннойОбласти, 
    НеобходимоВычислятьНаСервере);

Как мы видим, добавился третий параметр — Элементы.Результат.

Что это за параметр? Это прямое обращение к элементу формы, который имеет тип "Табличный документ" и в котором отображается отчет. В большинстве типовых и доработанных отчетов этот элемент называется "Результат". Если в вашем отчете он называется иначе (например, "ТабличныйДокументОтчета"), то и обращаться к нему нужно соответственно: Элементы.ТабличныйДокументОтчета. Посмотреть имя элемента можно в редакторе формы, выделив поле с отчетом и посмотрев его свойства.

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

Решение 3: Проблема с отчетом при запуске системы

Если ошибка возникает сразу после входа в программу, это означает, что проблемный отчет настроен на автоматическое открытие и формирование при старте системы. При этом его код пытается вычислить сумму выделенных ячеек еще до того, как пользователь успел что-либо выделить мышью.

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

Возможно, стоит отключить автоматическое формирование таких "интерактивных" отчетов при запуске.

Временное решение: комментирование кода

Если вам нужно срочно восстановить работоспособность системы, а на полноценный анализ нет времени, можно прибегнуть к быстрому, но временному решению. Просто закомментируйте строку, вызывающую ошибку.


// БухгалтерскиеОтчетыКлиент.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(...);

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

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

← На главную