Рассмотрим проблему обратного переноса документов «Реализация товаров и услуг» из конфигурации «Бухгалтерия предприятия 3.0» (работающей на платформе 1С 8.3) в предыдущую редакцию «Бухгалтерия предприятия 2.0» (работающей на платформе 1С 8.2). Данная задача не имеет стандартного решения «из коробки», так как фирма «1С» поддерживает обновление метаданных только в прямом направлении — с версии 2.0 на 3.0. Все встроенные планы обмена рассчитаны на миграцию вперед.
Разберем три проверенных и наиболее эффективных способа решения этой задачи в зависимости от ваших навыков программирования и объема переносимых данных.
Если вам необходимо перенести относительно небольшое количество документов (например, около 100 штук), писать сложные правила обмена или программный код может быть нецелесообразно по времени. В этом случае мы рекомендуем воспользоваться промежуточным обменом через файлы табличных документов.
Рассмотрим этот процесс по шагам:
.xlsx (Excel).ЗагрузкаДанныхИзТабличногоДокумента.epf).Контрагенты крайне важно установить поиск по ИНН и КПП, а для справочника Номенклатура — по артикулу или коду, чтобы избежать появления дубликатов в базе 8.2.Если перенос документов требуется выполнять регулярно или объем данных велик, оптимальным решением будет создание правил обмена в конфигурации «Конвертация данных 2.0». Этот способ позволяет полностью сохранить ссылочную целостность (связи между документами, договорами, контрагентами и номенклатурой).
Проанализируем порядок действий:
MD82Exp.epf.Контрагенты, ДоговорыКонтрагентов, Номенклатура, Склады).Если обе базы находятся в одной локальной сети, мы можем написать внешнюю обработку, которая напрямую подключится из одной базы к другой и перенесет документы. Напишем код для запуска из базы-приемника (БП 2.0), которая будет подключаться к БП 3.0 на платформе 8.3.
Посмотрим на пример реализации подключения и создания документов:
// Создаем COM-соединение с базой БП 3.0
Connector = Новый COMОбъект("V83.COMConnector");
ПараметрыПодключения = "File=""C:\Base\BP3""; Usr=""Администратор""; Pwd="""";";
Попытка
Соединение = Connector.Connect(ПараметрыПодключения);
Исключение
Предупреждение("Не удалось подключиться к базе БП 3.0: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// Выбираем документы реализации из источника за период
ЗапросИсточник = Соединение.NewObject("Запрос");
ЗапросИсточник.Текст =
"ВЫБРАТЬ
| Реализация.Ссылка КАК Ссылка,
| Реализация.Дата КАК Дата,
| Реализация.Номер КАК Номер,
| Реализация.Контрагент.Наименование КАК КонтрагентНаименование,
| Реализация.ДоговорКонтрагента.Наименование КАК ДоговорНаименование
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода";
ЗапросИсточник.SetParameter("НачалоПериода", НачалоПериода);
ЗапросИсточник.SetParameter("КонецПериода", КонецПериода);
РезультатЗапроса = ЗапросИсточник.Execute();
Выборка = РезультатЗапроса.Choose();
Пока Выборка.Next() Цикл
// Создаем документ в текущей базе БП 2.0
НовыйДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДок.Дата = Выборка.Дата;
НовыйДок.Комментарий = "Перенесено из БП 3.0 по COM. Исходный номер: " + Выборка.Номер;
// Поиск контрагента в текущей базе по наименованию
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоНаименованию(Выборка.КонтрагентНаименование);
Если Не НайденныйКонтрагент.Пустая() Тогда
НовыйДок.Контрагент = НайденныйКонтрагент;
// Поиск договора контрагента
НовыйДок.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(Выборка.ДоговорНаименование, Истина, , НовыйДок.Контрагент);
КонецЕсли;
// Аналогичным образом заполняем табличную часть "Товары", считывая строки из источника
// ...
НовыйДок.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
Этот способ требует навыков программирования на встроенном языке 1С, однако он обеспечивает максимальную гибкость, позволяет избежать промежуточных файлов и незаменим при регулярной синхронизации небольших пакетов документов.