Ошибка 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С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 Бухгалтерский учет Налоговый учет Управленческий учет Акцизы ЕНВД ЕСН Земельный налог ИП, ПБОЮЛ, КФХ Налог на имущество Налог на прибыль НДС НДФЛ ФОМС, ЕФС Транспортный налог УСН ПСН (патентная система налогообложения) Платные (руб)

Обновления для конфигураций: КА 1.1; ЗУП 2.5; БУХ 2.0; КА 1.1 Комплексная автоматизация торговли алкогольной продукцией; КА 1.1 Комплексный учет сельскохозяйственного предприятия

27900 руб.

01.04.2020    147755    653    362    

238

Обновление 1С Программист Платформа 1С v8.3 Бесплатно (free)

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

21.10.2024    2940    mixaeel    18    

17

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

Те кто объединял конфигурации находящиеся на поддержке, обновлял подсистемы БСП прекрасно помнят упражнение «10000 тысяч кликов мышкой» или, непонятное словесное заклинание, после которого конфигурация снимается с поддержки целиком.

1 стартмани

26.09.2024    579    5    milkers    2    

7

Обновление 1С Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

Вышел новый релиз для УТ11 5.19.63. На копии базы было выполнено обновление и вылезли проблемы с номенклатурой, подлежащей маркировке. В публикации описаны проблемы, обнаруженные в копии базы конкретной организации.

24.09.2024    1052    gull22    2    

8

Обновление 1С Программист Платформа 1С v8.3 Бесплатно (free)

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

17.09.2024    4514    vatkir    15    

10

Обновление 1С Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Упрощенное обновление конфигураций 1С (предпочтительно самописных) с помощью батника и Яндекс Диска (по публичной ссылке)

1 стартмани

22.08.2024    640    0    user1694357    0    

4

Обновление 1С Системный администратор Россия Абонемент ($m)

На ИТС есть статья, в которой поверхностно описан процесс автоматического обновления тонких клиентов. В качестве примера, что логично, представлены методы конфигурации 1С. Но, в отличие от того же управления списками баз, для обновления не требуется хранить информацию, потому я решил переписать код на php, чтобы можно было отвязаться от 1С. Не работает для файловых баз, подключенных как File="ПутьКПапкеБазы"; (а жаль), для опубликованных файловых - работает.

1 стартмани

20.08.2024    753    MikeSh    10    

2

Обновление 1С Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Бесплатно (free)

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

05.08.2024    926    NikiforovVA    0    

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


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

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

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

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