После обновления конфигурации 1С:Бухгалтерия 3.0 пользователи и программисты могут столкнуться с ошибкой, которая возникает либо сразу при запуске программы, либо при формировании некоторых отчетов. Текст ошибки обычно выглядит так:
Значение не является значением объектного типа (ПолучитьВыделенныеОбласти)
{ОбщийМодуль.БухгалтерскиеОтчетыКлиент.Модуль(1724)}: ВыделенныеОбласти = ПолеРезультат.ПолучитьВыделенныеОбласти;
{ОбщийМодуль.БухгалтерскиеОтчетыКлиент.Модуль(1671)}: Если НеобходимоОбновитьСумму(ПолеРезультат, КэшВыделеннойОбласти) Тогда
{Отчет.ИмяВашегоОтчета.Форма.ФормаОтчета.Форма(340)}: БухгалтерскиеОтчетыКлиент.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(
Эта проблема чаще всего затрагивает нетиповые или доработанные отчеты, но иногда может проявляться и в стандартных. Разберем по шагам, почему возникает эта ошибка и как ее исправить.
Корень проблемы кроется в изменениях, которые разработчики 1С внесли в типовые общие модули в новых релизах конфигурации. В частности, изменилась сигнатура (набор передаваемых параметров) функции ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента, расположенной в общем модуле БухгалтерскиеОтчетыКлиент.
Эта функция отвечает за подсчет суммы в выделенных пользователем ячейках табличного документа (отчета). В старых версиях для ее вызова было достаточно передать несколько параметров, но в новых версиях был добавлен новый обязательный параметр — сам элемент формы, который отображает табличный документ.
Когда ваш старый, доработанный отчет вызывает эту функцию по-старому, без нового параметра, происходит несоответствие. Внутрь типовой функции на место элемента формы попадает другое значение (например, сам объект табличного документа). У этого значения, естественно, нет метода ПолучитьВыделенныеОбласти, так как этот метод принадлежит именно элементу формы. В результате система и выдает ошибку "Значение не является значением объектного типа".
Рассмотрим несколько способов решения этой проблемы, от самого простого до наиболее правильного.
Иногда, особенно после обновления платформы или конфигурации, подобные ошибки могут быть вызваны устаревшим или поврежденным кэшем. Прежде чем вносить изменения в код, всегда стоит выполнить эту простую процедуру.
%APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8.В некоторых случаях этого бывает достаточно для решения проблемы.
Если очистка кэша не помогла, значит, проблема точно в коде. Чаще всего ошибка возникает в доработанных отчетах, которые используют типовой механизм подсчета суммы в ячейках. Необходимо найти вызов проблемной функции и привести его в соответствие с новым форматом.
Разберем по шагам:
Определите отчет. Посмотрите на стек вызовов в тексте ошибки. Самая нижняя строка обычно указывает на объект, который инициировал проблему. Например, строка {Отчет.НаличиеВозвращенныхТорг12.Форма...} прямо говорит, что виноват отчет "НаличиеВозвращенныхТорг12".
Откройте форму отчета в конфигураторе. Найдите в конфигурации указанный отчет и откройте его основную форму.
Найдите вызов функции. В модуле формы найдите процедуру, которая отвечает за обработку действий пользователя в табличном документе. Часто она называется Подключаемый_РезультатПриАктивизацииОбластиПодключаемый или содержит в названии "ПриАктивизацииОбласти". Внутри этой процедуры найдите строку с вызовом функции БухгалтерскиеОтчетыКлиент.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента.
Исправьте вызов. Проанализируем, как изменился вызов.
Старый вызов выглядел так:
БухгалтерскиеОтчетыКлиент.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(
ПолеСумма,
Результат,
КэшВыделеннойОбласти,
НеобходимоВычислятьНаСервере);
Новый, правильный вызов должен выглядеть так:
БухгалтерскиеОтчетыКлиент.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(
ПолеСумма,
Результат,
Элементы.Результат,
КэшВыделеннойОбласти,
НеобходимоВычислятьНаСервере);
Как мы видим, добавился третий параметр — Элементы.Результат.
Что это за параметр? Это прямое обращение к элементу формы, который имеет тип "Табличный документ" и в котором отображается отчет. В большинстве типовых и доработанных отчетов этот элемент называется "Результат". Если в вашем отчете он называется иначе (например, "ТабличныйДокументОтчета"), то и обращаться к нему нужно соответственно: Элементы.ТабличныйДокументОтчета. Посмотреть имя элемента можно в редакторе формы, выделив поле с отчетом и посмотрев его свойства.
После внесения этого изменения сохраните конфигурацию и проверьте работу отчета. Ошибка должна исчезнуть.
Если ошибка возникает сразу после входа в программу, это означает, что проблемный отчет настроен на автоматическое открытие и формирование при старте системы. При этом его код пытается вычислить сумму выделенных ячеек еще до того, как пользователь успел что-либо выделить мышью.
В этом случае, помимо исправления кода (как в Решении 2), рекомендуется пересмотреть логику:
ПриНачалеРаботыСистемы).Возможно, стоит отключить автоматическое формирование таких "интерактивных" отчетов при запуске.
Если вам нужно срочно восстановить работоспособность системы, а на полноценный анализ нет времени, можно прибегнуть к быстрому, но временному решению. Просто закомментируйте строку, вызывающую ошибку.
// БухгалтерскиеОтчетыКлиент.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(...);
Важно понимать: это не исправление, а "костыль". Программа перестанет выдавать ошибку, но функция подсчета суммы в выделенных ячейках в этом отчете перестанет работать. Используйте этот метод только как крайнюю меру с обязательным планом по дальнейшему исправлению кода по методу из Решения 2.
Таким образом, устранение ошибки "Значение не является значением объектного типа" после обновления сводится к адаптации доработанного кода под изменения в типовой конфигурации. Внимательный анализ стека ошибки и сравнение вызовов функций с актуальными типовыми отчетами помогут быстро найти и исправить проблему.