Как исправить ошибку «В модуле такой функции нету» при обновлении ЗУП с версии 3.1.8 на 3.1.9?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

Переход с редакции ЗУП 3.1.8 на 3.1.9 является одним из самых технически сложных этапов обслуживания данной конфигурации. В версии 3.1.9 разработчики внедрили масштабные изменения в архитектуру расчетов и структуру справочников. Часто пользователи сталкиваются с ошибкой: «В модуле такой функции нету», при этом сам модуль закрыт на «замок» (находится на поддержке), и визуально код изменить нельзя. Рассмотрим подробнее, почему это происходит и как правильно провести обновление, чтобы избежать критических сбоев в работе базы КОРП или ПРОФ версий.

Причина 1: Нестабильная версия платформы 8.3.13

Проанализируем ситуацию с платформой. В сообщениях темы упоминается версия 8.3.13.1690. На практике было замечено, что ветка 8.3.13 имела серьезные проблемы с кэшированием конфигурации и десериализацией объектов. Программа «видит» метаданные нового релиза, но пытается исполнить старый код из серверного кэша.

Для решения этой проблемы выполним следующие действия:

  1. Сменим версию платформы. Рекомендуется либо использовать проверенную «старую» ветку 8.3.12 (например, последние сборки типа 8.3.12.1855), либо переходить на более современные версии 8.3.14 и выше.
  2. Очистим кэш сервера и клиента. Самый надежный способ очистки кэша на стороне пользователя — удалить базу из списка в стартовом окне 1С и добавить её заново. Это принудительно создаст новую директорию для временных файлов.
  3. Для серверных баз необходимо остановить службу 1C:Enterprise 8.3 Server Agent и очистить содержимое папки snaccxt в каталоге сервера приложений.

Причина 2: Нарушение последовательности «Конфигуратор — Пользователь»

Разберем по шагам правильный алгоритм обновления. Ошибка «метод не обнаружен» часто возникает, когда администратор пытается обновить конфигурацию «пачкой» через .cf файл, перескакивая через несколько релизов, или обновляет несколько релизов подряд в Конфигураторе, не заходя в саму программу.

В ЗУП 3.1.9 используются отложенные обработчики обновления. Это значит, что часть функций физически создается или переносится в другие модули в процессе первого запуска программы после обновления. Если этот шаг пропущен, следующий релиз не найдет нужных функций.

Рассмотрим правильный цикл обновления:

  1. Выполняем обновление в Конфигураторе строго на следующий по порядку релиз, рекомендованный 1С.
  2. Применяем изменения (F7).
  3. Обязательно запускаем программу в режиме «1С:Предприятие» от имени администратора.
  4. Дожидаемся окончания выполнения всех процедур обновления (раздел «Администрирование — Обслуживание — Результаты обновления»).
  5. Только после 100% завершения всех задач (включая дополнительные и отложенные) переходим к следующему релизу.

Причина 3: Проблемы в справочнике «Способы выплаты зарплаты»

В релизе 3.1.9 произошла унификация способов выплат. Если в базе нарушена ссылочная целостность или присутствуют дубликаты предопределенных данных, обработчик обновления может «упасть» с ошибкой обращения к отсутствующему методу.

Посмотрим на пример кода, который помогает восстановить корректное заполнение справочника, если обновление «зависло» на этапе обработки данных о выплатах. Этот код можно использовать во внешней обработке для исправления структуры:


Процедура ДобавитьВыплатуНачисленияЗарплаты(ПараметрыОбновления = НеОпределено) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    СпособыВыплатыЗарплаты.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.СпособыВыплатыЗарплаты КАК СпособыВыплатыЗарплаты
        |ГДЕ
        |    СпособыВыплатыЗарплаты.ВидДокументаОснования = &НачислениеЗарплаты
        |    И СпособыВыплатыЗарплаты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.Зарплата)
        |    И СпособыВыплатыЗарплаты.Поставляемый";

    Запрос.УстановитьПараметр("НачислениеЗарплаты", Перечисления.ВидыДокументовМежрасчетныхНачислений.НачислениеЗарплаты);
    РезультатЗапроса = Запрос.Выполнить;

    Если РезультатЗапроса.Пустой() Тогда
        ПараметрыОтбора = Новый Структура;
        ПараметрыОтбора.Вставить("ВидДокументаОснования", Перечисления.ВидыДокументовМежрасчетныхНачислений.НачислениеЗарплаты);
        ПараметрыОтбора.Вставить("ХарактерВыплаты", Перечисления.ХарактерВыплатыЗарплаты.Зарплата);
        
        // Внимание: ОписанияПоставляемых должно быть определено в контексте модуля обновления
        ОписаниеНачисленияЗарплаты = ОписанияПоставляемых.НайтиСтроки(ПараметрыОтбора)[0];
        СпособВыплатыОбъект = Справочники.СпособыВыплатыЗарплаты.СоздатьЭлемент();
        ЗаполнитьЗначенияСвойств(СпособВыплатыОбъект, ОписаниеНачисленияЗарплаты,, "ИмяПредопределенныхДанных");
        ОбновлениеИнформационнойБазы.ЗаписатьДанные(СпособВыплатыОбъект);
    КонецЕсли;
КонецПроцедуры

Причина 4: Механизм оптимизации расчета зарплаты

Выясним причину популярности совета про отключение оптимизации. В ЗУП 3.1.9 был внедрен механизм, который рассчитывает только измененные строки в документах. Это значительно ускоряет работу, но на этапе перехода (с 3.1.8) старые данные в регистрах могут конфликтовать с новыми алгоритмами.

Если ошибка возникает непосредственно в режиме пользователя при попытке расчета:

  1. Перейдем в раздел Настройка — Расчет зарплаты.
  2. Установим (или, в зависимости от ситуации, временно снимем) флаг «Выполнять расчет зарплаты без оптимизации».
  3. Это заставит систему использовать старые, более стабильные (хоть и медленные) алгоритмы пересчета, что позволит завершить процедуры обновления без ошибок в модулях.

Дополнительные рекомендации по Тестированию и Исправлению (ТиИ)

Если вышеперечисленные методы не помогают, проанализируем состояние базы данных через стандартный механизм ТиИ. Перед обновлением на 3.1.9 крайне важно выполнить:

Важный момент: Если вы уже получили ошибку «В модуле такой функции нету» и база находится в «полуобновленном» состоянии, не пытайтесь просто загрузить старый .cf файл версии 3.1.8. Структура таблиц SQL уже изменилась, и такой откат приведет к полной неработоспособности базы. В этой ситуации поможет только восстановление из резервной копии, созданной перед началом процесса, и повторный запуск обновления с учетом выбора стабильной платформы (8.3.12 или 8.3.14+).

← На главную