Как исправить ошибку «Значение не является значением объектного типа (Колонки)» в УПП 1.3.165.2?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет Промышленность, строительство и АПК
← На главную

Обновление конфигурации «Управление производственным предприятием» до версии 1.3.165.2 принесло пользователям и администраторам систем ряд критических проблем. Одной из самых острых стала невозможность проведения базовых документов — РеализацияТоваровУслуг (РТиУ) и ПоступлениеТоваровУслуг (ПТиУ). Ошибка возникает внезапно, даже если ваше предприятие не использует функционал прослеживаемости товаров.

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

Анализ причины ошибки в документе Реализация товаров и услуг

Рассмотрим ситуацию, с которой сталкивается большинство пользователей при попытке провести документ реализации. В окне сообщений появляется текст: {Документ.РеализацияТоваровУслуг.МодульОбъекта(3815)}: Значение не является значением объектного типа (Колонки). Это типичная ошибка для встроенного языка 1С, когда программа пытается обратиться к свойству объекта (в данном случае к коллекции Колонки), но сам объект равен Неопределено.

Выясним причину. В новом релизе разработчики добавили расширенный функционал для работы с прослеживаемыми товарами. В общем модуле была реализована функция ТекстЗапросаПрослеживаемыеТовары. Проанализируем её логику:


Функция ТекстЗапросаПрослеживаемыеТовары(НомераТаблиц, ПараметрыПроведения, Реквизиты) Экспорт
    Если Не Реквизиты.ЕстьТовары ИЛИ Не Реквизиты.ВедетсяУчетПрослеживаемыхТоваров Тогда
        ПараметрыПроведения.Вставить("ВТ_Прослеживаемость", Неопределено);
        ПараметрыПроведения.Вставить("ВТ_СуммыБезНДС", Неопределено);
        ПараметрыПроведения.Вставить("ПрослеживаемыеОперации", Неопределено);
        ПараметрыПроведения.Вставить("ПрослеживаемыеТовары", Неопределено);
        ПараметрыПроведения.Вставить("ПрослеживаемыеТоварыРеализованные", Неопределено);
        Возврат "";
    КонецЕсли;
    // ... дальнейший код формирования запроса
КонецФункции

Как мы видим, если в настройках программы отключен учет прослеживаемых товаров, функция заполняет структуру ПараметрыПроведения значениями Неопределено. Однако далее в модуле документа РеализацияТоваровУслуг код пытается обратиться к этим параметрам без предварительной проверки на пустоту:


Если НЕ ПараметрыПроведения.ПрослеживаемыеОперации.Колонки.Найти("НомерДокумента") = Неопределено Тогда
    // Код обработки
КонецЕсли;

Поскольку ПрослеживаемыеОперации является Неопределено, обращение к .Колонки вызывает аварийное завершение процедуры ОбработкаПроведения.

Вариант 1: Быстрое решение через настройки учета

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

  1. Переключитесь в интерфейс «Заведующий учетом».
  2. Перейдите в меню Настройка учета -> Настройка параметров учета.
  3. Выберите закладку Учет товаров.
  4. Установите флажок «Вести учет прослеживаемых товаров» и укажите дату начала (например, 01.07.2021).

Важно: Даже если вы фактически не используете прослеживаемость, активация этой настройки заставит систему инициализировать необходимые таблицы в памяти, и ошибка исчезнет. Однако это может незначительно повлиять на производительность при проведении документов, так как система будет выполнять дополнительные запросы.

Вариант 2: Программное исправление (рекомендация фирмы 1С)

Фирма 1С признала данную ошибку (зарегистрирована под номером 00-00397285). Рассмотрим официальный способ исправления кода в модуле объекта документа РеализацияТоваровУслуг. Нам необходимо найти процедуру, отвечающую за движения по регистрам прослеживаемости, и добавить в неё условие выхода.

Выполним следующие шаги:

  1. Откройте конфигуратор и найдите модуль объекта документа РеализацияТоваровУслуг.
  2. Найдите начало процедуры ДвиженияПоРегистрамПрослеживаемыхТоваров(УсловияПрослеживаемости, СтруктураШапкиДокумента).
  3. Добавьте в самом начале процедуры проверку:

Процедура ДвиженияПоРегистрамПрослеживаемыхТоваров(УсловияПрослеживаемости, СтруктураШапкиДокумента)
    // Вставка кода для обхода ошибки
    Если Не УсловияПрослеживаемости.ВедетсяУчетПрослеживаемыхТоваров Тогда
        Возврат;
    КонецЕсли;
    // ... остальной код процедуры
КонецПроцедуры

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

Исправление ошибок в документах Поступления и Корректировки

Аналогичные проблемы были замечены и в других документах. В частности, в ПоступлениеТоваровУслуг и КорректировкаПриобретения возникает ошибка, связанная с переменной ПлательщикНДС. В релизе 1.3.165.2 разработчики изменили логику определения системы налогообложения, что привело к ошибке типа: Значение не является значением объектного типа (СистемаНалогообложения).

Посмотрим на пример «заплатки» для модуля объекта ПТиУ (строка около 3591):


// Было (ошибочный вариант в 1.3.165.2):
// ПлательщикНДС = УчетнаяПолитикаРегл.СистемаНалогообложения = Перечисления.СистемыНалогообложения.Общая;

// Рекомендуемый возврат к стабильной логике:
ПлательщикНДС = СтруктураШапкиДокумента.УчитыватьНДС;

Это позволит корректно определять статус НДС на основе реквизитов самого документа, а не пытаться извлечь его из структуры учетной политики, которая в момент проведения может быть не инициализирована должным образом.

Проблема с Декларацией по НДС и Книгой покупок

Помимо ошибок проведения, релиз 1.3.165.2 затронул и отчетность. При попытке сформировать Раздел 8 декларации по НДС (Книга покупок) может возникнуть ошибка из-за несоответствия версий постановлений и используемых областей макета. Проанализируем решение для отчета КнигаПокупок1137 в процедуре СформироватьОсновнойРаздел.

Необходимо перенести управление видимостью строк в блок условия версии постановления. Разберем по шагам, что нужно изменить в коде отчета:


// Найдите блок:
Если СтруктураПараметров.ЗаполнениеДекларации Тогда
    ОбластьСтрокиДляПовтора = Макет.ПолучитьОбласть("СтрокиДляПовтора");
    // ...
    ОбластьСтрокиДляПовтора.Область("НомераГрафКнига").Видимость = Ложь; // Эту строку нужно перенести ниже
    
    Если СтруктураПараметров.ВерсияПостановленияНДС1137 >= 5 Тогда
        ОбластьСтрокиДляПовтора.Область("НомераГрафДекларация81").Видимость = Ложь;
    КонецЕсли;
КонецЕсли;

// Исправленный вариант:
Если СтруктураПараметров.ЗаполнениеДекларации Тогда
    ОбластьСтрокиДляПовтора = Макет.ПолучитьОбласть("СтрокиДляПовтора");
    // ...
    Если СтруктураПараметров.ВерсияПостановленияНДС1137 >= 5 Тогда
         ОбластьСтрокиДляПовтора.Область("НомераГрафКнига").Видимость = Ложь;
         ОбластьСтрокиДляПовтора.Область("НомераГрафДекларация81").Видимость = Ложь;
    КонецЕсли;
КонецЕсли;

Эта правка предотвращает обращение к областям макета НомераГрафКнига в тех случаях, когда они не предусмотрены текущей версией формы отчета.

Заключение и рекомендации

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

Если же оперативное обновление до 1.3.166.1 невозможно (например, из-за большого количества доработок в вашей конфигурации), используйте описанные выше программные правки. Они позволят вам продолжить работу и успешно сдать отчетность по НДС.

← На главную