Ошибка src\frntend\src\MergeModuleUtil.cpp или как не потерять недели работы при обновлении конфигурации

26.11.24

База данных - Обновление 1С

Расследование ошибки [fntend - src\frntend\src\MergeModuleUtil.cpp] при сравнении/объединении. Восстанавливаем утерянные недели работы.

Одной из задач программиста 1С является обновление релиза типовой конфигурации. Вот и у нас настал момент, когда одновременно с обновлением релиза ERP потребовалось обновить и версию платформы.

Установив новую платформу 1С (8.3.24.1691), перешли к процессу обновления с ERP 2.5.12.270 на ERP 2.5.17.141. Процесс обновления не быстрый, поэтому в окне сравнения/объединения периодически сохраняли настройки объединения в .xml файл MergeSettings. Спустя примерно 2 недели кропотливой работы все-таки пришлось перезагрузить компьютер и установить обновления операционной системы, не завершив обновление релиза до конца.

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

Но что-то пошло не так, и мы получили следующее сообщение:

 

Недопустимое значение аргумента функции [fntend - src\frntend\src\MergeModuleUtil.cpp]

 

После которого пробил холодный пот... Все сроки были согласованы, планы были построены, даты технологического окна были выбраны, дедлайн был уже близок.

Перспектива начинать всю работу по объединению заново начала прорисовываться. Шансы переноса  даты перехода на новый релиз в январь 2025 года резко увеличились.

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

Вооружившись текстовым редактором который сможет переварить XML файл MergeSettings размером в 20Мб и поддерживает функции сворачивания/разворачивания веток, что позволяет удалять целые блоки в xml файле, приступил к работе хирурга... Удалял из файла объекты с настройками и пытался заново грузить в конфигуратор каждый раз заново запуская обновление, т.к. платформа дает на выбор лишь 2 варианта: "Завершить работу" и "Перезапустить". Какие-то файлы грузились, какие-то снова приводили к падению Конфигуратора. Ушло около 30 попыток прежде чем удалось локализовать проблемный участок.

 

Причины

 

Обнаружилось 2 процедуры с одинаковым наименованием и стало понятно, что Конфигуратор 1С переварить это не может по какой-то причине.

 

 

Сначала была мысль, что 2 процедуры образовались в следствии неудачного объединения или копирования участка из одного места в другой в окне с результатом объединения кода.

Но оказалось, что в обеих конфигурациях поставщика (старой и новой) этот код присутствует.

Располагается он в модуле менеджера справочника "Номенклатура" в ERP и вполне себе типовой.

В сокращенном виде это выглядит таким образом:

 

#Если НЕ МобильныйАвтономныйСервер Тогда
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
	//
КонецПроцедуры
#Иначе
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	Поля.Добавить("Наименование");
КонецПроцедуры
#КонецЕсли
#КонецЕсли

 

Т.е. процедуры с одинаковым наименованием вполне себе имеют право на существование в различных контекстах.

 

Как вылечить

Чтобы спасти несколько недель работы в данной ситуации единственное что вы можете сделать - удалить проблемные настройки для процедур из xml файла MergeSettings. Закончить процедуру объединения конфигураций полностью и не пытаться больше ничего сохранять или загружать из файла настроек. При повторном сохранении проблемные настройки возвращаются обратно. Т.е. придется каждый раз удалять эти строки, если без сохранений вообще никуда.

 

Как быстро найти проблемный участок

Предположим, что вы объединяете совсем другую конфигурацию и проблема в неизвестном модуле, но файл настроек тоже большой. Глазами найти место ошибку может быть трудно.

Открываем инструмент "Конструктор выражения XPath" из "Инструменты Разработчика" от Сергея Старых. Далее находим команду "Редактировать текст в отдельном окне". В открывшемся диалоге загружаем xml файл MergeSettings. Жмем "ОК" и содержимое переносится в основное окно инструмента. Переходим в поле "Выражение" и копируем "магическое" выражение ниже:

//t:Method[(@name = following-sibling::t:Method/@name and @nameInSecondConfiguration = following-sibling::t:Method/@nameInSecondConfiguration) or (@name = preceding-sibling::t:Method/@name and @nameInSecondConfiguration = preceding-sibling::t:Method/@nameInSecondConfiguration)]/ancestor-or-self::*

Это выражение XPath, которое ищет последовательность узлов с одинаковым наименованием атрибута "name", которое есть ниже или выше от текущего узла. Затем возвращает всех предков (узлы), чтобы найти конкретный объект, которому принадлежат функции/процедуры.

Результат на скриншоте:

 

 

Далее открываем в редакторе, который хорошо работает с большими xml файлами и находим найденный объект с его настройками методов. Удаляем методы, пробуем грузить.

Ошибка присутствует в следующих версиях платформ, которые мне удалось протестировать:

  • 8.3.24.1691
  • 8.3.24.1758
  • 8.3.25.1394

 

Выводы

Правы те, кто говорит, что необходимо не только делать бэкапы, но еще и проверять их работоспособность. Ставка на XML формат для сохранения настроек объединения компанией 1С сделана удачно, т.к в случае с двоичным форматом хранения можно было бы потерять очень много человеко-часов.

 

Обновление от 26.11.2024:

- ошибка была зарегистрирована в 1С еще 14.10.24 - 000164583

См. также

Обновление 1С Программист Платформа 1С v8.3 1С:ERP. Управление холдингом Абонемент ($m)

Описан практический пример обновления через копию конфигурации 1С:ERP. Управление холдингом с версии 3.2.6.6 на версию 3.2.6.7, который можно применять на других конфигурациях и версиях.

10 стартмани

18.02.2025    323    PetrovAnton    2    

2

Обновление 1С Программист Платформа 1С v8.3 Абонемент ($m)

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

10 стартмани

18.02.2025    402    1    kalyaka    0    

5

Обновление 1С Программист Платформа 1С v8.3 Абонемент ($m)

При длительном обновлении из конфигуратора следим за процентом загрузки ПК и отправляем письмо на почту при завершении.

1 стартмани

17.02.2025    188    0    slavik27    0    

3

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

2 стартмани

06.02.2025    1542    8    XilDen    24    

34

Групповая разработка (Git, хранилище) Обновление 1С Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

05.02.2025    1219    Nonik    10    

17

Обновление 1С Программист Бухгалтер Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Бухгалтерский учет НДС Абонемент ($m)

Обновление для конфигурации Управление торговлей 10.3.88.3 добавляет поддержку ставок НДС 5% и 7%, обеспечивает корректную печать этих ставок на актуальных моделях торгового оборудования (АТОЛ, ШТРИХ, ревизия 4004), содержит актуальные правила обмена с конфигурацией "Бухгалтерия предприятия 3.0" для передачи новых ставок. Новые ставки НДС поддерживается в печатных формах УПД, ТТН и т.д. В состав дистрибутива включены обработки для обслуживания торгового оборудования ККТ нового формата (Штрих-М и АТОЛ)

5 стартмани

31.01.2025    1876    30    karpik666    28    

22
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. o.nikolaev 216 15.11.24 02:09 Сейчас в теме
Всегда отдавал обновление на откуп ИжТиСи (не реклама).
3. RustIG 1836 15.11.24 09:22 Сейчас в теме
Спустя примерно 2 недели кропотливой работы все-таки пришлось перезагрузить компьютер и установить обновления операционной системы, не завершив обновление релиза до конца.


не завершив обновление релиза до конца - это что имеется в виду?

Но что-то пошло не так
2. user900380 15.11.24 07:58 Сейчас в теме
Здравствуйте! У меня произошла такая же проблема. Открыл "Конструктор выражения XPath", загрузил xml по кнопке "Редактировать текст в отдельном окне", скопировал "магическое" выражение в поле "Выражение", нажал на кнопку "Вычислить" над основным окном инструмента, но дальше в крайнем правом поле ничего не появилось. Может что сделал не так. Ранее не было опыта работы с "Конструктор выражения XPath". Если не сложно подскажите что делать дальше. Иначе, неделя работы была напрасной. Прилагаю скрин.
Прикрепленные файлы:
12. PerlAmutor 157 17.11.24 19:16 Сейчас в теме
(2) Файл настроек лучше приложите. А так, удаляйте блоками и пытайтесь грузить. Если загрузит, то возвращаете удаленный блок в сокращенном виде и снова грузите, до тех пор пока не найдете проблемное место. Может дополним статью еще какой-нибудь ситуацией.
4. RustIG 1836 15.11.24 09:23 Сейчас в теме
поэтому в окне сравнения/объединения периодически сохраняли настройки объединения в .xml файл MergeSettings

а для чего нужны настройки МерджСеттингс?
5. RustIG 1836 15.11.24 09:29 Сейчас в теме
(0) Зачем вы отключили показывать картинки в статье? Стало не удобно, с одной стороны.
В тексте статьи картинки мелкие, и их можно было бы посмотреть в отдельном окне в разделе картинок....
6. RustIG 1836 15.11.24 09:34 Сейчас в теме
(0)
Правы те, кто говорит, что необходимо не только делать бэкапы, но еще и проверять их работоспособность.

о чем речь? как вы проверите работоспособность бэкапов? особенно ЕРП или многолетних УТ
7. roman72 395 15.11.24 12:50 Сейчас в теме
(6) Авторазвёрткой бэкапа в базу и запуском автотестов?
8. RustIG 1836 15.11.24 14:42 Сейчас в теме
(7) это какой-то поднебесный уровень развития :)
у кого так все круто настроено?
9. roman72 395 16.11.24 01:52 Сейчас в теме
(8) Авторазвёртка бэкапов не поднебесый уровень развития, а банальщина.
Автотесты запускают те, кто и так делает автотесты для проверки качества кода.
Тот же автотест можно и для проверки базы, развёрнутой из бэкапа, запустить.
10. RustIG 1836 16.11.24 09:35 Сейчас в теме
(9) Спасибо, Роман за разъяснение.
Я вот понимаю, что в теории можно сделать. А с практической точки зрения - в какой компании так настроено -
чтобы бэкапы тестами проверять?
Считаю, что это поднебесный уровень развития - бэкапы автоматически разворачивать и проверять автотестами.
ПС. Ожидал, что вы скажете "мы у себя так делаем с ЕРП" или примеры известных компаний приведете. Я бы позавидовал по-хорошему. :)
11. roman72 395 16.11.24 12:50 Сейчас в теме
(10) Я смотрю, вы везде в комментах контролером работаете - "чё сказал? а если у тебя в компании не найду?" )))))))
Оставьте свое сообщение