Приветствуем вас, коллеги! Мы столкнулись с достаточно распространённой и весьма неприятной проблемой, когда при обновлении старых конфигураций, таких как Управление торговлей 10 с обычными формами, на новой платформе, например, 8.3.26.1540 или 8.3.26.1498, формы объектов начинают вести себя непредсказуемо и "ломаются". Это проявляется в появлении новых, нежелательных реквизитов формы, изменении положения существующих элементов, а также искажении содержимого табличных документов на форме.
Давайте вместе разберем, почему это происходит, и рассмотрим различные способы решения этой проблемы, чтобы вы могли эффективно обновить свои информационные базы без критических потерь функциональности.
Проблема, которую мы анализируем, чаще всего проявляется при выполнении стандартного алгоритма обновления конфигурации, а именно: при запуске сравнения и объединения, особенно когда мы прибегаем к детальному сравнению форм объекта. Это означает, что мы проваливаемся внутрь модуля формы, сравниваем процедуры, функции и другие элементы, а затем подтверждаем объединение. Именно на этом этапе, при попытке платформы интеллектуально объединить изменения на уровне модулей обычных форм, и происходят сбои.
Истоки этой проблемы лежат в нескольких аспектах:
Контрагент, Контрагент1, Контрагент2). Эти элементы могут мирно существовать, не проявляя себя, пока очередное обновление платформы не "растревожит" их, вызывая конфликт и "поломку" формы.НазваниеПоля_Статистика, связанный с реквизитом формы НазваниеПоля, то после некорректного объединения может появиться новый реквизит формы с именем НазваниеПоля_Статистика, и элемент формы автоматически "переключится" на этот новый, некорректный реквизит, что ломает всю логику работы.Прежде чем приступать к решению, обязательно создайте резервную копию вашей информационной базы! Это критически важный шаг перед любыми манипуляциями с конфигурацией.
Один из самых действенных методов, который был экспериментально выявлен и подтвержден на практике, заключается в изменении подхода к сравнению и объединению форм.
Рассмотрим по шагам, как это сделать:
Важный момент: Этот подход позволяет избежать конфликтов на уровне внутреннего представления модуля формы, когда платформа пытается "умно" объединить строки кода, что часто приводит к ошибкам. Если ваша форма типовая и не имеет доработок, то полная замена формы на типовую из новой конфигурации будет оптимальным решением. Если же форма сильно доработана, вам, возможно, придется вручную перенести ваши доработки в новую, типовую форму после ее замены.
Как мы выяснили, одной из причин "поломки" форм может быть накопление дублирующихся элементов. Давайте разберем, как их выявить и исправить.
Диагностика дубликатов вручную:
Мы можем провести простое самотестирование прямо в конфигураторе:
Ctrl+Home или выбрав его мышью).Tab или Стрелка вниз, чтобы переходить к следующему элементу формы.Контрагент1, Контрагент2), хотя визуально он один, это явный признак дублирования.Программное выявление дубликатов:
Для конфигураций с большим количеством форм ручная проверка становится неэффективной. В таких случаях мы можем написать обработку, которая поможет нам автоматизировать поиск дублирующихся элементов.
Проанализируем ситуацию: дублирующиеся элементы часто имеют одинаковые координаты на форме (Лево, Верх, Ширина, Высота) или очень близкие к ним. Мы можем использовать этот принцип для их обнаружения.
Рассмотрим пример концептуального кода для такой обработки:
// Примерный код для внешней обработки
// Эта обработка не является готовым решением, а лишь демонстрирует принцип поиска
Процедура НайтиДублирующиесяЭлементыФорм()
Сообщить("Начинаем поиск дублирующихся элементов форм...");
Для Каждого МетаданныеФорм Из Метаданные.ВсеФормы Цикл
Попытка
ФормаОбъект = МетаданныеФорм.ПолучитьОбъект();
Если ФормаОбъект = Неопределено Тогда
Продолжить;
КонецЕсли;
КартаЭлементовПоКоординатам = Новый Карта();
Для Каждого ЭлементФормы Из ФормаОбъект.Элементы Цикл
// Для обычных форм свойства могут быть доступны через ЭлементФормы.Свойства
// Или напрямую, если это элемент управления
Если ТипЗнч(ЭлементФормы) = Тип("ЭлементУправления") Тогда
Координаты = Строка(ЭлементФормы.Лево) + "_" + Строка(ЭлементФормы.Верх) + "_" + Строка(ЭлементФормы.Ширина) + "_" + Строка(ЭлементФормы.Высота);
Если КартаЭлементовПоКоординатам.Содержит(Координаты) Тогда
СписокДубликатов = КартаЭлементовПоКоординатам.Получить(Координаты);
СписокДубликатов.Добавить(ЭлементФормы.Имя);
КартаЭлементовПоКоординатам.Вставить(Координаты, СписокДубликатов);
Иначе
СписокДубликатов = Новый СписокЗначений();
СписокДубликатов.Добавить(ЭлементФормы.Имя);
КартаЭлементовПоКоординатам.Вставить(Координаты, СписокДубликатов);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого КлючЗначение Из КартаЭлементовПоКоординатам Цикл
Если КлючЗначение.Значение.Количество() > 1 Тогда
Сообщить("В форме " + МетаданныеФорм.Имя + " найдены дубликаты по координатам " + КлючЗначение.Ключ + ": " + Строка(КлючЗначение.Значение));
КонецЕсли;
КонецЦикла;
Исключение
Сообщить("Ошибка при обработке формы " + МетаданныеФорм.Имя + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Сообщить("Поиск завершен.");
КонецПроцедуры
Важно: Этот код является лишь примером. Для реальной работы с элементами обычных форм через метаданные могут потребоваться более сложные обходы, так как прямой доступ к свойствам типа Лево, Верх через ЭлементУправления в рантайме не всегда тривиален. Однако, принцип использования координат для поиска дубликатов остается актуальным.
После выявления дубликатов, их необходимо удалить из формы, оставив только один рабочий элемент, а затем проверить все связанные алгоритмы и свойства.
В случаях, когда форма сильно повреждена или имеет множество доработок, ручное исправление может быть наиболее надежным, хоть и трудоемким способом.
Некоторые разработчики и системные администраторы предпочитают использовать более старые, проверенные и стабильные версии платформы для работы с конфигурациями, использующими обычные формы. Например, платформа 8.3.13 часто упоминается как одна из таких версий, где глюков с обычными формами наблюдается меньше.
Наш совет: Если ваша конфигурация не требует для своей работы минимальную версию платформы 8.3.26 или выше, попробуйте запустить ее на предыдущей, более стабильной версии платформы, которая поддерживает вашу конфигурацию. Это может временно или постоянно решить проблему с "ломающимися" формами.
УТ 10.3, фирма 1С рекомендует переход на более новые версии (например, УТ 11, КА 2, ERP) путем переноса данных с использованием стандартных или авторских обработок, а не прямым обновлением. Это связано с кардинальными изменениями в структурах данных между версиями.Мы рассмотрели основные причины и методы решения проблемы "ломающихся" обычных форм при обновлении старых конфигураций на новой платформе 8.3.26. Помните, что работа с нетиповыми конфигурациями всегда требует особого внимания и, при необходимости, обращения к квалифицированным специалистам. Удачи в ваших обновлениях!
← К списку