Переход с конфигурации «Управление торговлей», редакция 10.3 (работающей на обычных формах) на современную «Управление торговлей», редакция 11 (на управляемых формах) — это масштабная задача, с которой сталкивается практически каждый программист 1С. Очень часто при попытке выполнить перенос стандартным способом (через выгрузку данных во внешний XML-файл с использованием типовой обработки) процесс завершается ошибками совместимости схем данных. Особенно остро эта проблема проявляется, когда релиз источника и релиз приемника сильно различаются по времени выпуска.
В этой статье мы подробно разберем, почему ломается типовой механизм переноса данных, как обойти эти ограничения без ручного переписывания сотен строк XML-кода, и какую стратегию перехода выбрать для получения гарантированно корректного результата.
Основная причина сбоев кроется в рассинхронизации релизов. Разработчики фирмы 1С создают правила переноса под конкретные пары релизов «Источник-Приемник». Если вы пытаетесь выполнить выгрузку из давно не обновлявшейся базы УТ 10.3 в самый свежий релиз УТ 11, метаданные конфигураций гарантированно не совпадут. Программа начнет выдавать ошибки о несуществующих реквизитах, пропущенных типах или неверной структуре XML-файла.
Кроме того, в современных релизах УТ 11.5 кардинально изменились механизмы ведения учета. Например, полностью переработана архитектура комиссионной торговли (документы теперь работают по иным регистрам накопления) и изменен партионный учет. Прямой перенос остатков в такие конфигурации стандартными обработками практически невозможен.
---
Рассмотрим наиболее надежный и проверенный на практике сценарий обхода проблемы несовместимости правил без привлечения программы «Конвертация данных».
Вместо того чтобы пытаться загрузить данные напрямую в актуальный релиз УТ 11, мы выполним перенос в промежуточную («транзитную») базу более старого релиза, а затем последовательно обновим ее до нужной версии.
Разберем этот процесс по шагам:
11.3.4 или ранних релизов 11.4).---
Если вам требуется перенести строго определенные данные (например, только справочники номенклатуры и контрагентов без документов и остатков), и вы не хотите тратить время на многократные обновления конфигурации, оптимальным решением будет точечная доработка правил обмена.
Для этого нам понадобится конфигурация «Конвертация данных 2.0» (КД 2). Давайте разберем, где взять исходные правила и как с ними работать:
...\AppData\Roaming\1C\1cv8\tmplts\1c\trade\[Номер_Релиза_УТ11]\AddFiles\Переходы с других конфигураций\УТ103\Выгрузка данных.epf. Откройте эту обработку в конфигураторе. В макетах обработки будут лежать сами XML-схемы правил обмена.MD83Exp.epf).Номенклатура, Контрагенты, Партнеры и связанных с ними классификаторов.---
Большинство ошибок при выгрузке данных происходит из-за логических несоответствий в исходной базе данных. Перед запуском процесса экспорта обязательно выполните следующие регламентные операции:
1. Полное удаление помеченных на удаление объектов. Если в базе останутся ссылки на удаленные элементы, правила обмена все равно попытаются их выгрузить. В результате в новой базе УТ 11 вы получите огромное количество «битых» ссылок с наименованием вида <Объект не найден>....
Для качественной очистки базы можно воспользоваться следующим программным кодом для поиска и удаления помеченных объектов:
// Программный поиск и удаление помеченных объектов в УТ 10.3
МассивПомеченных = Новый Массив;
ВыборкаНоменклатуры = Справочники.Номенклатура.Выбрать();
Пока ВыборкаНоменклатуры.Следующий() Цикл
Если ВыборкаНоменклатуры.ПометкаУдаления Тогда
МассивПомеченных.Добавить(ВыборкаНоменклатуры.Ссылка);
КонецЕсли;
КонецЦикла;
// Выполняем попытку удаления объектов с контролем ссылочной целостности
ТаблицаСвязей = НайтиПоСсылкам(МассивПомеченных);
Если ТаблицаСвязей.Количество() = 0 Тогда
УдалитьОбъекты(МассивПомеченных, Истина);
Сообщить("Успешно удалено объектов: " + МассивПомеченных.Количество());
Иначе
Сообщить("Некоторые объекты не могут быть удалены, так как на них есть ссылки в базе!");
КонецЕсли;
2. Проверка заполнения ключевых реквизитов. Убедитесь, что у всех контрагентов заполнены ИНН/КПП, а у номенклатуры присутствуют базовые единицы измерения. Проанализируем базу на предмет незаполненных критических реквизитов с помощью простого запроса:
// Запрос для выявления незаполненных реквизитов контрагентов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Контрагент,
| Контрагенты.Код КАК Код
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| (Контрагенты.ИНН = """" ИЛИ Контрагенты.ИНН ИСЛУЛЛ)
| И Контрагенты.ЭтоГруппа = ЛОЖЬ";
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("Ошибка заполнения данных: у контрагента " + Выборка.Контрагент + " (Код: " + Выборка.Код + ") отсутствует ИНН!");
КонецЦикла;
КонецЕсли;
3. Восстановление последовательности партионного учета. Если вы планируете переносить остатки товаров, в УТ 10.3 обязательно должно быть выполнено полное перепроведение документов и расчет себестоимости. В противном случае остатки по регистрам партий не сойдутся с остатками по регистру товаров на складах, и выгрузка сформирует некорректные документы ввода остатков.
---
Очень распространенная техническая ошибка: загрузка XML-файла прерывается аварийно с системным сообщением Поле объекта не обнаружено (НалогообложениеНДС) или аналогичным сбоем при записи соглашений или договоров контрагентов.
Выясним причину этой проблемы. В конфигурации УТ 11 огромное количество реквизитов и табличных частей доступно для записи только тогда, когда в системе включены соответствующие функциональные опции. Если в чистой базе-приемнике эти опции выключены по умолчанию, то при попытке записи объектов через правила обмена платформа физически не видит эти реквизиты, что и приводит к падению загрузчика.
Перед тем как запускать загрузку данных из XML, обязательно откройте базу-приемник УТ 11 и вручную включите в разделе НСИ и администрирование -> Настройка разделов следующие опции (в зависимости от того, что использовалось в вашей УТ 10.3):
После включения всех необходимых опций рекомендуется перезапустить сеанс загрузки данных. Это позволит избежать большинства программных исключений при разборе XML-пакета.