Обновление конфигурации «Управление производственным предприятием» до версии 1.3.165.2 принесло пользователям и администраторам систем ряд критических проблем. Одной из самых острых стала невозможность проведения базовых документов — РеализацияТоваровУслуг (РТиУ) и ПоступлениеТоваровУслуг (ПТиУ). Ошибка возникает внезапно, даже если ваше предприятие не использует функционал прослеживаемости товаров.
В этой статье мы подробно разберем причины возникновения сбоев, проанализируем программный код и рассмотрим несколько способов решения: от простых настроек интерфейса до внесения правок в модули объектов.
Рассмотрим ситуацию, с которой сталкивается большинство пользователей при попытке провести документ реализации. В окне сообщений появляется текст: {Документ.РеализацияТоваровУслуг.МодульОбъекта(3815)}: Значение не является значением объектного типа (Колонки). Это типичная ошибка для встроенного языка 1С, когда программа пытается обратиться к свойству объекта (в данном случае к коллекции Колонки), но сам объект равен Неопределено.
Выясним причину. В новом релизе разработчики добавили расширенный функционал для работы с прослеживаемыми товарами. В общем модуле была реализована функция ТекстЗапросаПрослеживаемыеТовары. Проанализируем её логику:
Функция ТекстЗапросаПрослеживаемыеТовары(НомераТаблиц, ПараметрыПроведения, Реквизиты) Экспорт
Если Не Реквизиты.ЕстьТовары ИЛИ Не Реквизиты.ВедетсяУчетПрослеживаемыхТоваров Тогда
ПараметрыПроведения.Вставить("ВТ_Прослеживаемость", Неопределено);
ПараметрыПроведения.Вставить("ВТ_СуммыБезНДС", Неопределено);
ПараметрыПроведения.Вставить("ПрослеживаемыеОперации", Неопределено);
ПараметрыПроведения.Вставить("ПрослеживаемыеТовары", Неопределено);
ПараметрыПроведения.Вставить("ПрослеживаемыеТоварыРеализованные", Неопределено);
Возврат "";
КонецЕсли;
// ... дальнейший код формирования запроса
КонецФункции
Как мы видим, если в настройках программы отключен учет прослеживаемых товаров, функция заполняет структуру ПараметрыПроведения значениями Неопределено. Однако далее в модуле документа РеализацияТоваровУслуг код пытается обратиться к этим параметрам без предварительной проверки на пустоту:
Если НЕ ПараметрыПроведения.ПрослеживаемыеОперации.Колонки.Найти("НомерДокумента") = Неопределено Тогда
// Код обработки
КонецЕсли;
Поскольку ПрослеживаемыеОперации является Неопределено, обращение к .Колонки вызывает аварийное завершение процедуры ОбработкаПроведения.
Если вам необходимо срочно восстановить работоспособность базы и у вас нет возможности немедленно править код или обновлять конфигурацию, воспользуйтесь изменением настроек. Рассмотрим, как это сделать:
Важно: Даже если вы фактически не используете прослеживаемость, активация этой настройки заставит систему инициализировать необходимые таблицы в памяти, и ошибка исчезнет. Однако это может незначительно повлиять на производительность при проведении документов, так как система будет выполнять дополнительные запросы.
Фирма 1С признала данную ошибку (зарегистрирована под номером 00-00397285). Рассмотрим официальный способ исправления кода в модуле объекта документа РеализацияТоваровУслуг. Нам необходимо найти процедуру, отвечающую за движения по регистрам прослеживаемости, и добавить в неё условие выхода.
Выполним следующие шаги:
РеализацияТоваровУслуг.ДвиженияПоРегистрамПрослеживаемыхТоваров(УсловияПрослеживаемости, СтруктураШапкиДокумента).
Процедура ДвиженияПоРегистрамПрослеживаемыхТоваров(УсловияПрослеживаемости, СтруктураШапкиДокумента)
// Вставка кода для обхода ошибки
Если Не УсловияПрослеживаемости.ВедетсяУчетПрослеживаемыхТоваров Тогда
Возврат;
КонецЕсли;
// ... остальной код процедуры
КонецПроцедуры
Такая правка гарантирует, что если учет прослеживаемости выключен, программа просто выйдет из процедуры, не пытаясь обращаться к несуществующим колонкам таблиц.
Аналогичные проблемы были замечены и в других документах. В частности, в ПоступлениеТоваровУслуг и КорректировкаПриобретения возникает ошибка, связанная с переменной ПлательщикНДС. В релизе 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 невозможно (например, из-за большого количества доработок в вашей конфигурации), используйте описанные выше программные правки. Они позволят вам продолжить работу и успешно сдать отчетность по НДС.