Как определить все процедуры и функции типовой конфигурации, вызываемые из измененной части конфигурации при обновлении

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

Обновление нетиповой конфигурации 1С — это всегда ответственный процесс, требующий внимательного анализа зависимостей. Одна из самых острых проблем заключается в том, что разработчики фирмы «1С» в новых релизах могут изменять названия процедур, состав их параметров или вовсе удалять устаревшие функции. Если ваш доработанный код обращается к таким методам, после обновления система выдаст ошибку в самый неподходящий момент. Рассмотрим подробно, как выявить такие связи и минимизировать риски.

Метод 1: Анализ через встроенную проверку конфигурации

Этот метод основан на использовании штатного механизма поиска неиспользуемых процедур. Разберем по шагам, как превратить этот инструмент в средство поиска зависимостей:

  1. Откроем исходную конфигурацию (до обновления).
  2. Перейдем в меню Конфигурация — Проверка конфигурации.
  3. В появившемся окне установим флаг Поиск неиспользуемых процедур и функций. Важно понимать, что система считает «неиспользуемыми» те функции, на которые нет ссылок внутри самой конфигурации.
  4. Выполним проверку и сохраним результат в текстовый файл.
  5. Повторим ту же операцию после наката обновления, но до внесения правок в доработанный код.
  6. Сравним два полученных файла с помощью инструментов сравнения текстов (например, встроенное сравнение в Total Commander или KDiff3).

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

Метод 2: Метод «шоковой» терапии (удаление объектов)

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

  1. Создадим копию базы данных (обязательно!).
  2. В конфигураторе удалим все объекты, которые являются типовыми и не подвергались изменениям. Оставим только те объекты, которые были добавлены вами или существенно изменены.
  3. Запустим Синтаксический контроль (клавиши Ctrl + F7) или попробуем сохранить конфигурацию (F7).
  4. Система выдаст массив сообщений об ошибках, указывая на все отсутствующие методы, переменные и объекты метаданных, к которым обращается ваш код.

Рассмотрим пример ситуации: у вас есть добавленная кнопка в типовой форме, которая вызывает функцию ОбщегоНазначения.ОпределитьСтатусДокумента(). При удалении общего модуля ОбщегоНазначения конфигуратор сразу подсветит это место как ошибку.

Метод 3: Использование 1C:Enterprise Development Tools (EDT)

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

В EDT мы можем воспользоваться функцией Find References (Поиск ссылок) или Call Hierarchy (Иерархия вызовов). Выделив измененный модуль, мы увидим все исходящие вызовы в типовые модули. Проанализируем преимущества:

Метод 4: Выгрузка в файлы и использование внешних инструментов

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

  1. Выгрузим конфигурацию в файлы (Конфигурация — Выгрузить конфигурацию в файлы...).
  2. Откроем папку с выгрузкой в продвинутом текстовом редакторе, например, Visual Studio Code.
  3. Используем глобальный поиск по регулярным выражениям. Например, чтобы найти все обращения к общим модулям из ваших объектов, можно искать шаблоны вида ИмяВашегоМодуля\. или обращения к стандартным библиотекам.

Проанализируем ситуацию с помощью Git. Если вести разработку в репозитории, то при слиянии (merge) нового типового релиза с вашей веткой, инструменты контроля версий наглядно покажут конфликты в тех местах, где типовой код изменился, а ваш код на него опирается.

Метод 5: Автоматизация контроля через расширения

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

Когда мы используем расширение, мы можем перехватывать вызовы типовых функций с помощью аннотаций &Вместо, &Перед или &После. Посмотрим на пример кода в расширении:


&После("ЗаполнитьРеквизитыПродажи")
Процедура Мой_ЗаполнитьРеквизитыПродажи(Параметры)
    // Наша логика, которая опирается на типовой контекст
    Если Параметры.Свойство("СпецУсловие") Тогда
        // Действие
    КонецЕсли;
КонецПроцедуры

После наката обновления основной конфигурации в 1С есть штатный механизм: Конфигурация — Расширения конфигурации — Проверить применимость. Система сама проанализирует, не изменилась ли сигнатура (название или параметры) типовой процедуры ЗаполнитьРеквизитыПродажи. Если изменения критичны, расширение просто не применится, и вы получите четкий список мест, требующих адаптации.

Метод 6: Синтаксический контроль после обновления

Не стоит забывать и о самом простом, но действенном методе. Сразу после того, как вы объединили конфигурации (выполнили Сравнение/Объединение):

  1. Не открывая предприятие, запустите полную проверку конфигурации: Конфигурация — Проверка конфигурации.
  2. Обязательно включите флажки: Проверка логической целостности, Поиск некорректных ссылок и Проверка синтаксиса (для сервера, тонкого и толстого клиента).
  3. В списке ошибок появятся все вызовы процедур, которые в новом релизе были переименованы или удалены.

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

Резюме

Для качественного обновления нетиповой конфигурации мы рекомендуем комбинированный подход: используйте расширения для изоляции своего кода, EDT для быстрого анализа связей и обязательную полную проверку конфигурации после каждого этапа обновления. Это позволит избежать ситуаций, когда после обновления пользователи сталкиваются с ошибками вида {ОбщийМодуль...}: Процедура или функция с указанным именем не определена.

← На главную