Переход с устаревшей конфигурации «Управление торговлей», редакция 10.3 на современную «Управление торговлей», редакция 11.4 — это масштабный проект. Часто пользователи и руководство компании требуют перенести из старой базы не только справочники и остатки, но и всю историю документов за последние несколько лет. При попытке сделать это стандартными средствами разработчики сталкиваются с серьезными трудностями.
В этой статье мы подробно разберем, почему фирма «1С» не создала типового механизма для переноса документов, с какими архитектурными препятствиями вы столкнетесь и как решить эту задачу с помощью программных инструментов и конфигурации «Конвертация данных 2.1».
При запуске стандартного помощника перехода из дистрибутива УТ 11.4 (использующего обработку Выгрузка данных.epf для УТ 10.3) вы быстро обнаружите, что программа предлагает перенести только нормативно-справочную информацию (НСИ) и остатки на определенную дату. Попытка перенести документы «как есть» через этот интерфейс не предусмотрена. Это обусловлено кардинальными различиями в архитектуре двух конфигураций:
Контрагенты. В УТ 11 внедрена двухзвенная система управленческого и регламентированного учета. Справочник Партнеры отвечает за управленческий учет (холдинги, клиенты, поставщики), а справочник Контрагенты содержит только юридические лица. Перенос любого документа требует сложного сопоставления и автоматического создания связей между партнерами и контрагентами.ДоговорыКонтрагентов.ПоступлениеТоваровУслуг используется ПриобретениеТоваровУслуг, а логика отражения услуг в корне изменилась.Именно поэтому правильным и методологически верным решением от «1С» является перенос справочников и остатков на дату начала ведения учета. Но если перенос документов за текущий квартал или год жизненно необходим, эту задачу придется решать самостоятельно.
Для создания собственных правил обмена нам понадобится специализированная конфигурация «Конвертация данных», редакция 2.1 (КД 2.1). Обратите внимание, что для обмена между УТ 10.3 и УТ 11.4 используется именно редакция 2.1, а не 3.0, поскольку УТ 10.3 построена на старой архитектуре без использования встроенной библиотеки стандартных подсистем (БСП) последних версий, на которых базируется формат EnterpriseData.
Разберем по шагам процесс подготовки и разработки правил переноса:
Для начала работы в КД 2.1 необходимо получить xml-файлы описания метаданных обеих баз. Для этого используем внешние обработки выгрузки структуры:
MD82exp.epf (так как база работает на платформе 1С 8.2/8.3 в режиме обычного приложения).MD83exp.epf (управляемое приложение).Запускаем обработки в соответствующих информационных базах, сохраняем файлы структуры и загружаем их в КД 2.1 через меню «Загрузка структуры конфигурации».
Проанализируем сопоставление основных документов. Создаем новые ПКО в КД 2.1. Рассмотрим на примере документа «Реализация товаров и услуг»:
ДокументСсылка.РеализацияТоваровУслугДокументСсылка.РеализацияТоваровУслугПри настройке Правил конвертации свойств (ПКС) мы столкнемся с необходимостью заполнения обязательных реквизитов УТ 11.4, которых не было в УТ 10.3. Например, реквизит ХозяйственнаяОперация. В УТ 10.3 вид операции определялся структурой документа или перечислением, а в УТ 11 это строгое системное перечисление. Нам необходимо прописать обработчик события «Перед выгрузкой» для данного ПКС:
// В обработчике ПКС ХозяйственнаяОперация "Перед выгрузкой"
Значение = "РеализацияКлиенту";
При переносе контрагентов в документах реализации или поступления крайне важно правильно заполнить реквизиты Партнер (управленческий) и Контрагент (юридический). Если справочники ранее уже переносились стандартной обработкой, необходимо настроить поиск по Уникальному Идентификатору (GUID) или по ИНН/КПП.
Проанализируем пример создания связи при переносе документа. Нам потребуется передавать партнера, связанного с контрагентом. Для этого в ПКО документа в обработчике события При загрузке или непосредственно в правилах конвертации свойств контрагента можно прописать программный поиск партнера, если он не был перенесен явно:
// Пример алгоритма в обработчике ПКО "РеализацияТоваровУслуг" -> "При загрузке"
Если ЗначениеЗаполнено(Объект.Контрагент) Тогда
// Пытаемся найти партнера, привязанного к этому контрагенту в УТ 11.4
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПартнерыИКонтрагенты.Партнер КАК Партнер
|ИЗ
| РегистрСведений.ПартнерыИКонтрагенты КАК ПартнерыИКонтрагенты
|ГДЕ
| ПартнерыИКонтрагенты.Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", Объект.Contragent); // Имя переменной или реквизита
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Объект.Партнер = Выборка.Партнер;
Иначе
// Если партнер не найден, устанавливаем предопределенного "Розничный покупатель" или создаем нового
Объект.Партнер = Справочники.Партнеры.ШаблонПартнера;
КонецЕсли;
КонецЕсли;
В документах продажи УТ 11.4 обязательным реквизитом является Соглашение. В УТ 10.3 его аналога не было. Нам необходимо принудительно создавать или подбирать типовое соглашение при загрузке документов. Без этого перенесенный документ просто не проведется.
Рассмотрим, как это реализовать в ПКС для реквизита Соглашение:
// В обработчике ПКС "Соглашение" -> "Перед выгрузкой"
// Ищем или подставляем действующее индивидуальное/типовое соглашение
// Для примера выгрузим фиксированное значение или настроим алгоритм поиска по Контрагенту
ВыгрузитьОбъект = Невостребовано;
Для надежности проще написать программный подбор соглашения на стороне приемника (в обработчике ПКО документа При загрузке):
// Поиск подходящего соглашения в УТ 11.4
Если Не ЗначениеЗаполнено(Объект.Соглашение) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| СоглашенияСКлиентами.Ссылка КАК Ссылка
|ИЗ
| Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
|ГДЕ
| СоглашенияСКлиентами.Партнер = &Партнер
| И СоглашенияСКлиентами.ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("Партнер", Объект.Партнер);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Объект.Соглашение = Выборка.Ссылка;
Иначе
// Если индивидуального нет, берем любое предопределенное типовое
Объект.Соглашение = Справочники.СоглашенияСКлиентами.ПолучитьИндивидуальноеСоглашениеПоУмолчанию(); // Пример функции
КонецЕсли;
КонецЕсли;
Разработка собственных правил обмена «с нуля» для десятков типов документов (Заказы, Реализации, Поступления, Платежные поручения, Счета-фактуры) — это огромный труд, требующий сотен часов работы программиста высокой квалификации. Вам придется столкнуться с рекурсивными ссылками, выгрузкой единиц измерения (которые в УТ 11 хранятся по-другому), сопоставлением складов, видов цен и т.д.
Если бюджет проекта позволяет, рекомендуется рассмотреть приобретение готовых правил переноса документов на профильных маркетплейсах (например, Инфостарт). Преимущества такого подхода очевидны:
Если вы приняли решение переносить документы, придерживайтесь следующей проверенной методологии, чтобы избежать хаоса в новой базе:
Соблюдение этих правил и грамотное использование программных возможностей КД 2.1 позволит вам успешно решить задачу по переносу документов и обеспечить плавный переход сотрудников в новую современную систему учета.