Перенос данных из современной конфигурации «1С:Управление торговлей 11» обратно в «1С:Торговля и Склад 7.7» — задача нестандартная, но периодически возникающая на практике. Главная сложность такого переноса заключается в существенной разнице архитектуры платформ и структур данных: в УТ 11 реализована сложная объектная модель с раздельным учетом партнеров и контрагентов, упаковок, наборов единиц и характеристик, в то время как в ТиС 9.2 структура справочников является более плоской и компактной.
Рассмотрим основные архитектурные различия, технические ограничения, а также разберем по шагам три проверенных способа переноса нормативно-справочной информации (НСИ).
Прежде чем приступать к переносу, проанализируем различия в структурах хранения данных между базами:
Партнеры) и юридические лица (справочник Контрагенты). В ТиС 7.7 сущность только одна — справочник Контрагенты. При переносе необходимо сопоставлять юридические лица УТ 11 с контрагентами ТиС, перенося наименование партнера в рабочее наименование, а официальное название — в полное наименование.УпаковкиЕдиницыИзмерения и НаборыУпаковок с классификатором КлассификаторБанковскихЕдиниц (ОКЕИ). В ТиС 7.7 у каждой номенклатуры задается базовая единица (реквизит типа Справочник.ОКЕИ), а все остальные единицы хранятся в подчиненном справочнике Единицы с коэффициентами пересчета относительно базовой.КонтактнаяИнформация. В ТиС 7.7 контактные данные располагаются в строковых и периодических реквизитах (ЮрАдрес, ФактАдрес, Телефоны).Наиболее универсальным и гибким способом переноса является разработка правил обмена в конфигурации «Конвертация данных 2.1». Данный инструмент поддерживает выгрузку данных из платформы 1С:Предприятие 8 в формат XML и загрузку в платформу 1С:Предприятие 7.7.
Разберем процесс настройки по шагам:
MD83Exp.epf (или аналогичной для вашей версии платформы) и структуру ТиС 7.7 с помощью обработки MD77Exp.ert.Номенклатура. Настраиваем правила конвертации свойств (ПКС) для полей Код, Артикул, Наименование, ПолнНаименование. В обработчиках событий («После загрузки» или «Перед выгрузкой») прописываем поиск и сопоставление базовой единицы измерения по коду ОКЕИ.Контрагенты. В качестве источника указываем справочник Контрагенты из УТ 11. Настраиваем синхронизацию по полям ИНН и КПП, а также перенос контактных данных из табличной части в плоские реквизиты приемника.УниверсальныйОбменДаннымиXML и формируем файл выгрузки данных.V77Imp.ert, выбираем полученный файл данных и выполняем загрузку.Если требуется перенести только базовый состав полей без сложной подчиненной структуры, наиболее быстрым решением является перегрузка через промежуточный плоский файл (табличный документ Excel или формат DBF).
Рассмотрим порядок действий:
Единицы с коэффициентом 1.Для прямого переноса без создания промежуточных файлов можно написать обработку на стороне 1С:Предприятия 8, которая напрямую подключается к базе 1С 7.7 через COM-объект V77.Application или V77S.Application.
Важное техническое ограничение: Платформа 1С 7.7 является 32-разрядным приложением. Прямое создание COM-объекта V77.Application завершится ошибкой, если вы запускаете код в 64-разрядном клиенте или на 64-разрядном сервере 1С 8. Запуск обработки переноса необходимо выполнять строго в 32-разрядном толстом или тонком клиенте 1С:Предприятия 8.
Посмотрим на пример программного кода для выгрузки номенклатуры через COM-объект:
// Инициализация подключения к базе 1С 7.7
База77 = Новый COMОбъект("V77.Application");
КаталогБазы77 = "C:\Bases\Tis77\";
Пользователь = "Администратор";
Пароль = "";
ПараметрыПодключения = База77.Initialize(База77.RMTrade, "/D""" + КаталогБазы77 + """ /N""" + Пользователь + """ /P""" + Пароль + """", "NO_SPLASH_SHOW");
Если Не ПараметрыПодключения Тогда
ВызватьИсключение "Не удалось подключиться к базе 1С 7.7!";
КонецЕсли;
// Выборка номенклатуры из УТ 11
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.ЕдиницаИзмерения.Наименование КАК ЕдиницаНаименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
СпрНом77 = База77.CreateObject("Справочник.Номенклатура");
СпрОКЕИ77 = База77.CreateObject("Справочник.ОКЕИ");
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
СпрНом77.НоваяГруппа();
СпрНом77.Наименование = Выборка.Наименование;
СпрНом77.Записать();
Иначе
СпрНом77.Новый();
СпрНом77.Наименование = Выборка.Наименование;
СпрНом77.Артикул = Выборка.Артикул;
// Поиск базовой единицы в 7.7
Если СпрОКЕИ77.НайтиПоНаименованию(Выборка.ЕдиницаНаименование, 0, 1) = 1 Тогда
СпрНом77.БазоваяЕдиница = СпрОКЕИ77.ТекущийЭлемент();
КонецЕсли;
СпрНом77.Записать();
КонецЕсли;
КонецЦикла;