При миграции данных из системы «1С:Управление производственным предприятием» (УПП) в «1С:Управление холдингом» (УХ) часто возникает задача переноса исторической информации. Одной из таких задач является перенос истории событий основных средств (ОС). Однако бизнес-требования часто накладывают ограничения: не переносить весь массив первичных документов (принятие к учету, модернизация, перемещение), а ограничиться только записями в регистре сведений СобытияОСОрганизации. Проанализируем, насколько это технически возможно и какие риски несет в себе такой подход.
Разберем фундаментальную особенность платформы 1С:Предприятие 8. Регистр сведений События ОС в обеих конфигурациях (УПП и УХ) является подчиненным регистратору. Это означает, что каждая запись в таблице базы данных должна содержать ссылку на документ, который её породил, в поле Recorder. Попытка создать запись «в воздухе» без указания регистратора приведет к нарушению логической целостности БД.
Рассмотрим ситуацию, когда разработчики пытаются обойти это ограничение, записывая в поле регистратора «битую ссылку» (объект, которого не существует в базе). Выясним причину, почему это опасно:
Проанализируем самый распространенный технический способ переноса данных без создания реальных первичных документов. Для этого воспользуемся универсальным механизмом — документом КорректировкаРегистров. Разберем этот процесс по шагам:
Вместо того чтобы пытаться перенести каждый отдельный документ из УПП (например, «Модернизация ОС»), мы создаем в целевой базе УХ один или несколько документов КорректировкаРегистров. Этот объект выступает в роли «контейнера» для записей. Мы можем сгруппировать все исторические события по одному конкретному основному средству в один документ корректировки.
Посмотрим на пример логики формирования такой записи программным способом:
НовыйДок = Документы.КорректировкаРегистров.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата();
НовыйДок.Комментарий = "Перенос исторических событий ОС из УПП";
НовыйДок.Записать();
РегистрСобытий = РегистрыСведений.СобытияОС.СоздатьНаборЗаписей();
РегистрСобытий.Отбор.Регистратор.Установить(НовыйДок.Ссылка);
НоваяЗапись = РегистрСобытий.Добавить();
НоваяЗапись.ОсновноеСредство = СсылкаНаОС;
НоваяЗапись.Событие = СсылкаНаСобытие;
НоваяЗапись.Период = ДатаСобытияИзУПП;
РегистрСобытий.Записать();
Этот метод позволяет сохранить данные в регистре, не загромождая систему лишними типами документов, и при этом полностью удовлетворяет требованиям платформы к наличию регистратора.
В современных редакциях систем на базе ERP (включая УХ) существует более элегантный и методологически верный способ. Рассмотрим документ РегистрацияСобытийОС. Его прямое назначение — фиксация фактов в жизни объекта ОС, которые не влияют на его стоимость или амортизацию, но важны для учета.
Рекомендуем использовать именно этот объект вместо корректировки регистров по следующим причинам:
События ОС.Важно помнить, что структура справочников в УПП и УХ различается. Например, справочник СобытияОС в УПП может содержать виды событий, которые в УХ реализованы иначе. Перед переносом необходимо проанализировать состав перечисляемых типов и элементов справочников.
Рассмотрим алгоритм сопоставления:
СобытияОС в базе УХ.Важный нюанс: Простого переноса одного регистра События ОС может быть недостаточно. Если ваша задача — обеспечить полноту карточки ОС, проверьте также регистры сведений, отвечающие за местонахождение ОС и его состояния. В УХ учет ОС гораздо жестче завязан на жизненный цикл, и отсутствие записей в сопряженных регистрах может привести к тому, что событие в карточке отобразится, но текущий статус объекта будет неверным.
Подведем итог нашему анализу. Возможность интеграции без документов в чистом виде (через «битые ссылки») существует только как опасный «костыль», который мы категорически не рекомендуем использовать.
Чтобы выполнить задачу правильно, следуйте проверенному алгоритму:
РегистрацияСобытийОС).Таким образом, мы сохраним историю событий, выполним требования бизнеса по минимизации лишних документов и обеспечим техническую стабильность системы.