При работе с нетиповыми конфигурациями 1С мы часто сталкиваемся с необходимостью обновления. Особенно остро проблема встает, когда доработки затрагивают критически важные общие модули, такие как ОбменДаннымиXDTOСервер. Этот модуль играет ключевую роль в механизмах обмена данными, в том числе в формате EnterpriseData, и его некорректное обновление может привести к серьезным сбоям в работе всей системы.
Давайте вместе разберем, как подойти к этой задаче, чтобы сохранить все наши доработки и успешно обновить конфигурацию.
Прежде чем приступать к каким-либо действиям, крайне важно выполнить подготовительные шаги, которые помогут нам избежать потери данных и минимизировать риски:
.cf или .dt)..cfu).ОбменДаннымиXDTOСервер: какие процедуры и функции были изменены, какие новые добавлены, какие участки кода затрагивают наши доработки. Это значительно упростит процесс переноса.Теперь, когда мы готовы, давайте рассмотрим два основных подхода к решению нашей задачи.
Этот подход является традиционным и требует внимательного ручного сравнения и объединения кода. Он особенно актуален, если мы работаем со старыми версиями платформы, где расширения еще не были доступны или не использовались для текущих доработок.
Рассмотрим подробнее шаги:
ОбменДаннымиXDTOСервер был переименован или заменен на нетиповой, как это часто бывает, нам необходимо сохранить его.
Важный момент: предположим, что в нашей нетиповой конфигурации существует модуль с именем ОбменДаннымиXDTOСервер, который содержит наши доработки, а типовой модуль был изменен или вовсе удален в пользу нашего. В этом случае, перед началом обновления, мы должны переименовать наш измененный модуль. Например, назовем его ОбменДаннымиXDTOСервер_Нетиповой. Это позволит нам сохранить наш код.
ОбменДаннымиXDTOСервер был удален, мы можем восстановить его из предыдущей типовой конфигурации, чтобы процесс обновления мог корректно его обновить. В большинстве случаев, если мы правильно переименовали наш нетиповой модуль, система обновления сама создаст или обновит типовой модуль ОбменДаннымиXDTOСервер.В процессе обновления мы увидим окно сравнения и объединения конфигураций. Внимательно просматриваем изменения, особенно те, что касаются модуля ОбменДаннымиXDTOСервер. На этом этапе мы должны принять изменения типового модуля, чтобы получить его новую версию.
ОбменДаннымиXDTOСервер и наш сохраненный модуль ОбменДаннымиXDTOСервер_Нетиповой. Используя ранее составленную документацию и функцию сравнения модулей ("Конфигурация" -> "Сравнить, объединить конфигурации" -> "Сравнить модули"), мы аккуратно переносим наши доработки из нетипового модуля в новый типовой.
Обратите внимание: Возможно, некоторые типовые функции были изменены или переработаны. Нам придется адаптировать наши доработки под новую структуру типового кода. Это может включать изменение вызовов функций, использование новых параметров или переработку логики.
Современный и предпочтительный способ внесения доработок в конфигурацию 1С — это использование расширений. Этот подход позволяет сохранять конфигурацию на поддержке поставщика, что значительно упрощает будущие обновления и снижает затраты на сопровождение.
Разберем по шагам, как мы можем использовать расширения для решения нашей проблемы:
ОбменДаннымиXDTOСервер. Можем ли мы вынести их в расширение, не меняя сам типовой модуль?ОбменДаннымиXDTOСервер, нам потребуется заимствовать этот модуль в расширение.
Для этого в дереве объектов расширения находим "Общие модули", нажимаем правой кнопкой мыши и выбираем "Добавить" -> "Существующий общий модуль". Выбираем ОбменДаннымиXDTOСервер.
Важный момент: Мы не можем полностью переопределить весь модуль в расширении. Мы можем переопределять процедуры и функции с директивами &НаКлиенте, &НаСервере, &НаСервереБезКонтекста и т.д., а также добавлять свои новые. Для переопределения существующей процедуры или функции в расширении мы используем директиву &Перед, &Вместо или &После.
// Пример переопределения процедуры в расширении
// Допустим, в типовом модуле ОбменДаннымиXDTOСервер есть процедура ЗаполнитьСтруктуруНастроекXDTO
&После("ЗаполнитьСтруктуруНастроекXDTO")
Процедура ЗаполнитьСтруктуруНастроекXDTO_Расширение(СтруктураНастроекXDTO)
// Добавляем свои типы объектов или изменяем настройки
// Например, добавляем новый тип для обмена
СтруктураНастроекXDTO.Вставить("МойНовыйТипОбъекта", "http://www.v8.1c.ru/edi/edi_xdd_100");
КонецПроцедуры
Если наши доработки заключаются в добавлении новой функциональности или изменении логики в существующих процедурах, мы можем использовать директивы. Например, для добавления новых свойств к объектам обмена, мы можем использовать процедуру ПКО_{имяобъекта}_ПередЗаписьюПолученныхДанных, которая может быть реализована в расширении.
ОбменДаннымиXDTOСервер_Нетиповой (или прямо из типового, если доработки были внесены туда) в соответствующие процедуры и функции расширения, используя механизмы переопределения.ОбменДаннымиXDTOСервер и удалить из него все наши доработки, приведя его в соответствие с типовой конфигурацией. Если мы переименовывали наш модуль на шаге 1 предыдущего подхода, то теперь мы можем удалить ОбменДаннымиXDTOСервер_Нетиповой и убедиться, что типовой модуль ОбменДаннымиXDTOСервер полностью соответствует релизу.ОбменДаннымиXDTOСервер не содержит наших доработок, мы можем выполнить типовое обновление конфигурации. Система без проблем обновит модуль, так как он будет считаться не измененным.ОбменДаннымиXDTOСервер является центральным для работы с форматом EnterpriseData. Этот формат является расширяемым, что позволяет нам добавлять новые элементы в состав XDTO-пакетов без снятия их с поддержки.AdditionalInfo, которое передается с каждым объектом в пакете обмена. Логика обработки этих данных может быть встроена в процедуры, например, ПКО_{имяобъекта}_ПередЗаписьюПолученныхДанных внутри расширения.ЗаполнитьСтруктуруНастроекXDTO в модуле ОбменДаннымиXDTOСервер используется для добавления типов допустимых объектов при настройке обмена EnterpriseData. Мы можем использовать директиву &После для этой процедуры в расширении, чтобы добавить свои типы объектов.Выбирая между этими двумя подходами, мы всегда должны стремиться к использованию расширений, так как это значительно упрощает процесс сопровождения и обновления конфигурации в долгосрочной перспективе. Однако, если ситуация требует быстрого решения или версия платформы не позволяет использовать расширения в полной мере, ручной перенос остается рабочим вариантом.
В любом случае, тщательное планирование, документирование и тестирование — наши лучшие помощники в процессе нетипового обновления конфигурации 1С.
← К списку