Первым делом, конечно, повышаем версию платформы конфигурации - режим совместимости.
Режим совместимости конфигурации существенно влияет и на работу приложения и на структуру конфигурации. Обнаружено, что после переключения режима совместимости с 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 (сколько человек в команде для рационального использования), которая выйдет позже.