Конец года для любого практикующего специалиста 1С и бухгалтера — это период повышенной ответственности. Именно в это время традиционно выпускаются критически важные обновления конфигураций, связанные с изменениями в законодательстве, новыми формами отчетности и алгоритмами учета. Однако спешка при выпуске релизов иногда приводит к неприятным последствиям. Ярким примером стал выход обновления конфигурации «Бухгалтерия предприятия» редакции 3.0 (версия 3.0.75.48) в конце декабря 2019 года.
Этот релиз принес немало хлопот тем, кто поспешил обновиться перед самыми новогодними праздниками. В конфигурации обнаружились критические ошибки, из-за которых фирма 1С была вынуждена экстренно отозвать релиз из финальных публикаций и перевести его обратно в статус тестовых. Проанализируем возникшие технические проблемы, выясним причины их появления и разберем по шагам, как исправить последствия неудачного обновления.
Первое, на что обратили внимание внимательные специалисты при выходе релиза 3.0.75.48, — это явное противоречие в сопроводительной документации относительно минимальной версии технологической платформы. Рассмотрим подробнее эту ситуацию:
1cv8upd.htm содержалась совершенно другая информация: конфигурация предназначена для использования с версией системы 1С:Предприятие 8.3 не ниже 8.3.15.1747, а рекомендуется версия не ниже 8.3.15.1778.Подобная путаница вызвала замешательство среди администраторов. Попытка обновить рабочую базу на тестовую платформу перед самым Новым годом — крайне рискованный шаг. Практика показала, что конфигурация запускалась и функционировала на более ранних стабильных версиях платформы (например, на ветке 8.3.14), однако настоящие проблемы крылись внутри самого прикладного решения.
Основной причиной экстренного отзыва релиза 3.0.75.48 разработчиками стала критическая ошибка в механизме прямого обмена с банками. Проанализируем ее суть.
При использовании встроенного сервиса 1С:ДиректБанк для интеграции со Сбербанком (при авторизации по токену или по паре логин/пароль), а также с любыми банками, использующими технологическую компоненту iBank2, система полностью блокировала отправку и получение платежных документов. При попытке выполнить сеанс обмена программа выдавала системное сообщение:
Поле объекта не обнаружено (Идентификатор)
Поскольку эта ошибка парализовала расчеты организаций с контрагентами и выплату зарплат в преддверии праздников, публикация релиза была остановлена, а сам дистрибутив убран из общего доступа.
Те пользователи, которые все же успели установить версию 3.0.75.48 (особенно на базовых версиях программы), столкнулись со второй серьезной проблемой при ведении оперативного учета. При попытке провести документ «Поступление (акты, накладные)» система аварийно завершала работу со следующим стеком вызовов:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
Предопределенное значение "Справочник.СтатьиЗатрат.СлужебныйАвтотранспорт" не найдено.
{ОбщийМодуль.ОбщегоНазначенияСлужебныйКлиентСервер.Модуль(313)}: ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного);
{ОбщийМодуль.ОбщегоНазначения.Модуль(571)}: Возврат ОбщегоНазначенияСлужебныйКлиентСервер.ПредопределенныйЭлемент(
{Справочник.СтатьиЗатрат.МодульМенеджера(32)}: Возврат ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.СтатьиЗатрат." + НазначениеСтатьиЗатрат);
{Документ.ПоступлениеТоваровУслуг.МодульМенеджера(1429)}: Запрос.УстановитьПараметр("СтатьяЗатратРасходыГСМ",
{Документ.ПоступлениеТоваровУслуг.МодульОбъекта(454)}: ПараметрыПроведения = Документы.ПоступлениеТоваровУслуг.ПодготовитьПараметрыПроведения(Ссылка, Отказ);
Выясним причину этой ошибки. В данном обновлении разработчики добавили новый функционал для учета путевых листов и расходов на горюче-смазочные материалы (ГСМ). Для обеспечения работы новых алгоритмов в структуру метаданных справочника СтатьиЗатрат был добавлен новый предопределенный элемент — СлужебныйАвтотранспорт.
Однако из-за программного сбоя в дефектном релизе фоновые обработчики обновления информационной базы не отрабатывали до конца или завершались некорректно. В результате в конфигурации (в коде) обращение к этому элементу уже существовало, а физически в таблицах базы данных (в СУБД или файловой БД) этот элемент еще не был создан. Это полностью блокировало проведение любых документов поступления, где задействованы механизмы распределения ГСМ.
Если вы столкнулись с описанными выше сбоями, рассмотрим основные варианты восстановления работоспособности информационной базы.
Самый надежный и правильный метод — это уйти с отозванной версии 3.0.75.48 на исправленные официальные релизы, которые оперативно выпустила фирма 1С сразу после праздников:
08.04.1 по доп. расходам, а также обеспечили корректное создание предопределенного элемента СлужебныйАвтотранспорт при первом запуске программы.Если быстро обновить конфигурацию на более новый релиз нет возможности, а документы нужно проводить прямо сейчас, попробуем запустить отложенное обновление базы данных вручную. Это поможет создать недостающую статью затрат.
Для этого нам понадобится запустить программу с дополнительным параметром. Выполним следующие действия:
/C СтартОтложенногоОбновленияВОбщемПотоке.Также мы можем проверить статус выполнения процедур обновления непосредственно в интерфейсе программы. Для этого перейдем по пути: «Администрирование» — «Обслуживание» — «Результаты обновления программы». Если там присутствуют невыполненные обработчики, запустите их выполнение вручную.
В исключительных случаях, если предопределенный элемент заблокирован, но база экстренно требует его наличия в коде, разработчик может программно инициализировать создание предопределенных данных.
Проанализируем пример кода, который можно запустить во внешней обработке для принудительного обновления и восстановления предопределенных элементов справочника СтатьиЗатрат:
&НаСервере
Процедура ВосстановитьПредопределенныеЭлементыНаСервере()
// Инициализируем заполнение предопределенных элементов
Справочники.СтатьиЗатрат.ВыполнитьИнициализациюПредопределенныхДанных();
// Проверим, появился ли нужный элемент в базе
ЭлементСтатьи = Справочники.СтатьиЗатрат.СлужебныйАвтотранспорт;
Если ЗначениеЗаполнено(ЭлементСтатьи) Тогда
Сообщить("Предопределенный элемент 'Служебный автотранспорт' успешно найден и инициализирован.");
Иначе
Сообщить("Не удалось инициализировать элемент программно. Требуется обновление конфигурации.");
КонецЕсли;
КонецПроцедуры
Использование этого метода позволяет быстро снять блокировку проведения документов поступления без полной переустановки релиза, если у вас сильно измененная (кастомизированная) конфигурация, быстрое обновление которой затруднено.
Подводя итог, напомним главное правило любого администратора и программиста 1С: никогда не выполняйте необязательные обновления платформы и конфигураций перед праздниками или сдачей важной отчетности. Всегда дожидайтесь отзывов коллег на профессиональных форумах и используйте только проверенные временем стабильные сборки.