Каталог решений - 1C: EDT: фиксим баги доработанной и устаревшей конфигурации УТ

1C: EDT: фиксим баги доработанной и устаревшей конфигурации УТ

1C: EDT: фиксим баги доработанной и устаревшей конфигурации УТ

В наличии

В этом году у меня появилась возможность использовать 1С: EDT весь рабочий день. В работе конфигурация УТ 11.1, прилично доработанная. Целиком перейти на актуальную конфигурацию УТ 11.4 проблематично, поэтому переходим кусочками в ходе текущих работ.

Категория:

Описание

Первым делом, конечно, повышаем версию платформы конфигурации — режим совместимости.

Режим совместимости конфигурации существенно влияет и на работу приложения и на структуру конфигурации. Обнаружено, что после переключения режима совместимости с 8.3.8 на 8.3.14 (платформа 8.3.18)  в УТ 11.1 перестала работать загрузка адресного классификатора. Появилось сообщение типа "Ошибка доступа к файлу 01.zip"

Ошибка трудно локализуется, так как возникает внутри метода платформы.

Расставляем точки останова в предполагаемых местах возникновения ошибки. Обнаруживаем, что ошибка возникает  при выполнении команды Файл.НачатьПолучениеУниверсальногоВремениИзменения(ОписаниеОповещения); в процедуре модуля формы

ЗапуститьФоновуюЗагрузкуИзКаталогаКлиентаПослеИнициализации(Файл, ДополнительныеПараметры) Экспорт

Поиск в интернет ничего не дает о том, что не так в методе платформы НачатьПолучениеУниверсальногоВремениИзменения.

Зато кнопка "Инспектировать" в режиме отладки на переменной "Файл" показывает пустое свойство "ПолноеИмя". То есть файлы не скопированы.

Ошибка возникает в модуле формы ЗагрузкаАдресногоКлассификатора в Процедуре ЗапуститьФоновуюЗагрузкуИзКаталогаКлиентаПродолжение(). Не выполняется метод платформы НачатьПомещениеФайлов.

Лечится довольно просто. Комментируем переставшую работать процедуру НачатьПомещениеФайлов.

  //    НачатьПомещениеФайлов(ОписаниеОповещения, ПомещаемыеФайлы,, Ложь, УникальныйИдентификатор);

Копипастим код из УТ11.4:

  ПараметрыЗагрузкиФайла = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
  ПараметрыЗагрузкиФайла.ИдентификаторФормы = УникальныйИдентификатор;
  ПараметрыЗагрузкиФайла.Интерактивно = Ложь;
  ФайловаяСистемаКлиент.ЗагрузитьФайлы(ОписаниеОповещения,ПараметрыЗагрузкиФайла , ПомещаемыеФайлы);

Так это выглядит в среде разработки:

 

 

В 1С: EDT удобно: сразу два проекта  в одной среде открыты, и перепиленная устаревшая конфигурация и текущая актуальная версия. Можно сравнивать, объединять, например, две формы между собой. Именно эта фишка EDT позволяет быстро найти решение.

Внимательный читатель замети на скриншоте выше в левом нижнем углу в окне "трассировка стеков" сообщение: "Поле объекта не обнаружено (Интерактивно)". Сообщение осталось от предыдущего шага багофикса.

При работе в 1c EDT есть возможность автоматически сравнить/объединить выбранные объекты двух конфигураций, сразу увидеть синтаксические ошибки, устранить их и запустить отладку.

Если выскочат ошибки, тогда уже откатить изменения и погрузиться в детали кода и вдумчиво его объединить. В случае с загрузкой классификатора автоматическое объединение не сработало. После объединения появилось обилие синтаксических ошибок (контактная информация существенно переработана на уровне БСП). Откатываемся легко благодаря связке 1c EDT+Git. Переходим в окно "Индексирование Git", выделяем все неиндексированные изменения и нажимаем в подменю выделения "Заменить на Head ревизию". Конфигурация возвращается в состояние перед объединением. Переходим к ручному копипасту.

Поменяем НачатьПомещениеФайлов на ФайловаяСистемаКлиент.ЗагрузитьФайлы и обнаруживаем в отладке, что замена вызвала ошибку: Поле объекта не обнаружено (Интерактивно)". Описание ошибки сразу дает информацию, чего не хватает, и приводит к финальному исправлению, описанному выше.

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

Вот например, в этой же УТ 11.1 в обработке регистрации объектов для обмена при попытке зарегистрировать объекты по отбору возникала ошибка:

Ошибка отображения типов:
Отсутствует отображение для типа ‘ДинамическийСписок’
{Обработка.РегистрацияИзмененийДляОбменаДанными.Форма.Форма.Форма(1079)}:    ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы", 
{Обработка.РегистрацияИзмененийДляОбменаДанными.Форма.Форма.Форма(379)}:        ДобавитьРегистрациюВСписокОтбор();

по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘param’:
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘ДинамическийСписок’

Кликаем удерживая Ctrl на обработку РегистрацияИзмененийДляОбменаДанными в обеих проектах конфигураций, в подменю выделения выбираем сравнить/объединить. Обнаруживаем, что объединение произошло по 20 объектам без синтаксических ошибок (ни одной пиктограмки ):

 

 

Запускаем отладку, убеждаемся, что регистрация работает:

 

 

Описанным методом выполнена адаптация модулей интеграции 1С Sbis и 1С Диадок — в текущую конфигурацию подгружены модули контактной информации, в которых происходили ошибки. Таким же образом добавлен обмен с БП 3.0 в формате EnterpriseData_1_3_2. 

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

 

 

Внимательный читатель, знакомый с Git, заметил прямую линию с точками коммитов, вместо ветвления и слияния веток. Почему так вышло, тема отдельной статьи: 1С:EDT + Git (сколько человек в команде для рационального использования), которая выйдет позже.

has been added to your cart:
Оформление заказа