Переход с редакции ЗУП 3.1.8 на 3.1.9 является одним из самых технически сложных этапов обслуживания данной конфигурации. В версии 3.1.9 разработчики внедрили масштабные изменения в архитектуру расчетов и структуру справочников. Часто пользователи сталкиваются с ошибкой: «В модуле такой функции нету», при этом сам модуль закрыт на «замок» (находится на поддержке), и визуально код изменить нельзя. Рассмотрим подробнее, почему это происходит и как правильно провести обновление, чтобы избежать критических сбоев в работе базы КОРП или ПРОФ версий.
Проанализируем ситуацию с платформой. В сообщениях темы упоминается версия 8.3.13.1690. На практике было замечено, что ветка 8.3.13 имела серьезные проблемы с кэшированием конфигурации и десериализацией объектов. Программа «видит» метаданные нового релиза, но пытается исполнить старый код из серверного кэша.
Для решения этой проблемы выполним следующие действия:
1C:Enterprise 8.3 Server Agent и очистить содержимое папки snaccxt в каталоге сервера приложений.Разберем по шагам правильный алгоритм обновления. Ошибка «метод не обнаружен» часто возникает, когда администратор пытается обновить конфигурацию «пачкой» через .cf файл, перескакивая через несколько релизов, или обновляет несколько релизов подряд в Конфигураторе, не заходя в саму программу.
В ЗУП 3.1.9 используются отложенные обработчики обновления. Это значит, что часть функций физически создается или переносится в другие модули в процессе первого запуска программы после обновления. Если этот шаг пропущен, следующий релиз не найдет нужных функций.
Рассмотрим правильный цикл обновления:
В релизе 3.1.9 произошла унификация способов выплат. Если в базе нарушена ссылочная целостность или присутствуют дубликаты предопределенных данных, обработчик обновления может «упасть» с ошибкой обращения к отсутствующему методу.
Посмотрим на пример кода, который помогает восстановить корректное заполнение справочника, если обновление «зависло» на этапе обработки данных о выплатах. Этот код можно использовать во внешней обработке для исправления структуры:
Процедура ДобавитьВыплатуНачисленияЗарплаты(ПараметрыОбновления = НеОпределено) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| СпособыВыплатыЗарплаты.Ссылка КАК Ссылка
|ИЗ
| Справочник.СпособыВыплатыЗарплаты КАК СпособыВыплатыЗарплаты
|ГДЕ
| СпособыВыплатыЗарплаты.ВидДокументаОснования = &НачислениеЗарплаты
| И СпособыВыплатыЗарплаты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.Зарплата)
| И СпособыВыплатыЗарплаты.Поставляемый";
Запрос.УстановитьПараметр("НачислениеЗарплаты", Перечисления.ВидыДокументовМежрасчетныхНачислений.НачислениеЗарплаты);
РезультатЗапроса = Запрос.Выполнить;
Если РезультатЗапроса.Пустой() Тогда
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ВидДокументаОснования", Перечисления.ВидыДокументовМежрасчетныхНачислений.НачислениеЗарплаты);
ПараметрыОтбора.Вставить("ХарактерВыплаты", Перечисления.ХарактерВыплатыЗарплаты.Зарплата);
// Внимание: ОписанияПоставляемых должно быть определено в контексте модуля обновления
ОписаниеНачисленияЗарплаты = ОписанияПоставляемых.НайтиСтроки(ПараметрыОтбора)[0];
СпособВыплатыОбъект = Справочники.СпособыВыплатыЗарплаты.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(СпособВыплатыОбъект, ОписаниеНачисленияЗарплаты,, "ИмяПредопределенныхДанных");
ОбновлениеИнформационнойБазы.ЗаписатьДанные(СпособВыплатыОбъект);
КонецЕсли;
КонецПроцедуры
Выясним причину популярности совета про отключение оптимизации. В ЗУП 3.1.9 был внедрен механизм, который рассчитывает только измененные строки в документах. Это значительно ускоряет работу, но на этапе перехода (с 3.1.8) старые данные в регистрах могут конфликтовать с новыми алгоритмами.
Если ошибка возникает непосредственно в режиме пользователя при попытке расчета:
Если вышеперечисленные методы не помогают, проанализируем состояние базы данных через стандартный механизм ТиИ. Перед обновлением на 3.1.9 крайне важно выполнить:
ОбновлениеИнформационнойБазы).Важный момент: Если вы уже получили ошибку «В модуле такой функции нету» и база находится в «полуобновленном» состоянии, не пытайтесь просто загрузить старый .cf файл версии 3.1.8. Структура таблиц SQL уже изменилась, и такой откат приведет к полной неработоспособности базы. В этой ситуации поможет только восстановление из резервной копии, созданной перед началом процесса, и повторный запуск обновления с учетом выбора стабильной платформы (8.3.12 или 8.3.14+).