Как обновить измененный модуль ОбменДаннымиXDTOСервер в нетиповой конфигурации 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← К списку

При работе с нетиповыми конфигурациями 1С мы часто сталкиваемся с необходимостью обновления. Особенно остро проблема встает, когда доработки затрагивают критически важные общие модули, такие как ОбменДаннымиXDTOСервер. Этот модуль играет ключевую роль в механизмах обмена данными, в том числе в формате EnterpriseData, и его некорректное обновление может привести к серьезным сбоям в работе всей системы.

Давайте вместе разберем, как подойти к этой задаче, чтобы сохранить все наши доработки и успешно обновить конфигурацию.

Общие рекомендации перед началом обновления

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

  1. Создайте резервную копию информационной базы. Это самое первое и главное правило. Убедитесь, что резервная копия актуальна и работоспособна. Мы всегда должны иметь возможность вернуться к предыдущему состоянию.
  2. Подготовьте необходимые файлы. Нам понадобятся:
    • Исходная измененная конфигурация (.cf или .dt).
    • Типовая конфигурация до обновления.
    • Новая типовая конфигурация или файл обновления (.cfu).
  3. Документируйте доработки. Если мы еще не сделали этого, сейчас самое время зафиксировать, какие именно изменения были внесены в модуль ОбменДаннымиXDTOСервер: какие процедуры и функции были изменены, какие новые добавлены, какие участки кода затрагивают наши доработки. Это значительно упростит процесс переноса.
  4. Выполняйте обновление пошагово. Для нетиповых конфигураций, особенно при значительном изменении типового функционала, часто требуется выполнять обновление последовательно, через промежуточные ключевые релизы, а не сразу на самый последний. Это помогает разрешать конфликты поэтапно.

Теперь, когда мы готовы, давайте рассмотрим два основных подхода к решению нашей задачи.

Подход 1: Ручной перенос доработок после обновления

Этот подход является традиционным и требует внимательного ручного сравнения и объединения кода. Он особенно актуален, если мы работаем со старыми версиями платформы, где расширения еще не были доступны или не использовались для текущих доработок.

Рассмотрим подробнее шаги:

  1. Сохраняем текущие доработки. Если наш измененный модуль ОбменДаннымиXDTOСервер был переименован или заменен на нетиповой, как это часто бывает, нам необходимо сохранить его.

    Важный момент: предположим, что в нашей нетиповой конфигурации существует модуль с именем ОбменДаннымиXDTOСервер, который содержит наши доработки, а типовой модуль был изменен или вовсе удален в пользу нашего. В этом случае, перед началом обновления, мы должны переименовать наш измененный модуль. Например, назовем его ОбменДаннымиXDTOСервер_Нетиповой. Это позволит нам сохранить наш код.

  2. Возвращаем типовой модуль (при необходимости). Если типовой модуль ОбменДаннымиXDTOСервер был удален, мы можем восстановить его из предыдущей типовой конфигурации, чтобы процесс обновления мог корректно его обновить. В большинстве случаев, если мы правильно переименовали наш нетиповой модуль, система обновления сама создаст или обновит типовой модуль ОбменДаннымиXDTOСервер.
  3. Выполняем обновление конфигурации. Открываем конфигурацию в режиме "Конфигуратор", переходим в меню "Конфигурация" -> "Поддержка" -> "Обновить конфигурацию". Выбираем файл обновления или репозиторий.

    В процессе обновления мы увидим окно сравнения и объединения конфигураций. Внимательно просматриваем изменения, особенно те, что касаются модуля ОбменДаннымиXDTOСервер. На этом этапе мы должны принять изменения типового модуля, чтобы получить его новую версию.

  4. НЕ ЗАПУСКАЕМ базу в режиме "1С:Предприятие"! Это критически важный шаг. После обновления в конфигураторе, но до первого запуска в пользовательском режиме, необходимо перенести доработки. Запуск в режиме "1С:Предприятие" после обновления может привести к выполнению обработчиков, которые могут некорректно отработать без наших доработок или даже повредить данные.
  5. Переносим доработки вручную. Открываем новый типовой модуль ОбменДаннымиXDTOСервер и наш сохраненный модуль ОбменДаннымиXDTOСервер_Нетиповой. Используя ранее составленную документацию и функцию сравнения модулей ("Конфигурация" -> "Сравнить, объединить конфигурации" -> "Сравнить модули"), мы аккуратно переносим наши доработки из нетипового модуля в новый типовой.

    Обратите внимание: Возможно, некоторые типовые функции были изменены или переработаны. Нам придется адаптировать наши доработки под новую структуру типового кода. Это может включать изменение вызовов функций, использование новых параметров или переработку логики.

  6. Запускаем базу в режиме "1С:Предприятие". Только после успешного переноса всех доработок и сохранения конфигурации базы данных мы можем запустить базу в пользовательском режиме. Система выполнит необходимые обработчики обновления данных.
  7. Тестируем функционал. Тщательно проверяем работу всех затронутых доработками механизмов, особенно тех, что связаны с обменом данными.

Подход 2: Использование расширений для доработок

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

Разберем по шагам, как мы можем использовать расширения для решения нашей проблемы:

  1. Анализируем текущие доработки. Выясним, какие именно изменения были внесены в модуль ОбменДаннымиXDTOСервер. Можем ли мы вынести их в расширение, не меняя сам типовой модуль?
  2. Создаем новое расширение. В режиме "Конфигуратор" переходим в меню "Конфигурация" -> "Расширения конфигурации". Добавляем новое расширение.
  3. Заимствуем объекты. Если наши доработки затрагивают существующие процедуры или функции модуля ОбменДаннымиXDTOСервер, нам потребуется заимствовать этот модуль в расширение.

    Для этого в дереве объектов расширения находим "Общие модули", нажимаем правой кнопкой мыши и выбираем "Добавить" -> "Существующий общий модуль". Выбираем ОбменДаннымиXDTOСервер.

    Важный момент: Мы не можем полностью переопределить весь модуль в расширении. Мы можем переопределять процедуры и функции с директивами &НаКлиенте, &НаСервере, &НаСервереБезКонтекста и т.д., а также добавлять свои новые. Для переопределения существующей процедуры или функции в расширении мы используем директиву &Перед, &Вместо или &После.

    
    // Пример переопределения процедуры в расширении
    // Допустим, в типовом модуле ОбменДаннымиXDTOСервер есть процедура ЗаполнитьСтруктуруНастроекXDTO
    &После("ЗаполнитьСтруктуруНастроекXDTO")
    Процедура ЗаполнитьСтруктуруНастроекXDTO_Расширение(СтруктураНастроекXDTO)
        // Добавляем свои типы объектов или изменяем настройки
        // Например, добавляем новый тип для обмена
        СтруктураНастроекXDTO.Вставить("МойНовыйТипОбъекта", "http://www.v8.1c.ru/edi/edi_xdd_100");
    КонецПроцедуры
    

    Если наши доработки заключаются в добавлении новой функциональности или изменении логики в существующих процедурах, мы можем использовать директивы. Например, для добавления новых свойств к объектам обмена, мы можем использовать процедуру ПКО_{имяобъекта}_ПередЗаписьюПолученныхДанных, которая может быть реализована в расширении.

  4. Переносим доработки в расширение. Аккуратно переносим весь измененный код из нашего нетипового модуля ОбменДаннымиXDTOСервер_Нетиповой (или прямо из типового, если доработки были внесены туда) в соответствующие процедуры и функции расширения, используя механизмы переопределения.
  5. Возвращаем типовой модуль в исходное состояние. После переноса всех доработок в расширение, мы можем вернуться к нашему исходному типовому модулю ОбменДаннымиXDTOСервер и удалить из него все наши доработки, приведя его в соответствие с типовой конфигурацией. Если мы переименовывали наш модуль на шаге 1 предыдущего подхода, то теперь мы можем удалить ОбменДаннымиXDTOСервер_Нетиповой и убедиться, что типовой модуль ОбменДаннымиXDTOСервер полностью соответствует релизу.
  6. Обновляем конфигурацию. Теперь, когда типовой модуль ОбменДаннымиXDTOСервер не содержит наших доработок, мы можем выполнить типовое обновление конфигурации. Система без проблем обновит модуль, так как он будет считаться не измененным.
  7. Тестируем функционал. После обновления и применения расширения, тщательно проверяем работу всех механизмов обмена данными и другого функционала, который затрагивают наши доработки.

Особенности работы с ОбменДаннымиXDTOСервер через расширения:

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

В любом случае, тщательное планирование, документирование и тестирование — наши лучшие помощники в процессе нетипового обновления конфигурации 1С.

← К списку