При обновлении нетиповых конфигураций «1С:Предприятие 8» программисты часто сталкиваются с ситуацией, когда после успешного завершения процесса и принятия изменений данные в пользовательском режиме ведут себя странно. Одной из самых неприятных проблем является исчезновение движений по регистрам (проводок) у документов, которые были добавлены в конфигурацию вручную. Рассмотрим, почему это происходит и как правильно проводить процедуру обновления, чтобы сохранить целостность базы данных.
Для начала проанализируем внутреннюю структуру платформы 1С. Каждый объект метаданных (будь то справочник Номенклатура или ваш уникальный Документ.ПеремещениеИнвентаряЗабалансом) обладает уникальным внутренним идентификатором — UUID (или GUID). Этот идентификатор скрыт от глаз пользователя и даже разработчика в обычном интерфейсе, но именно на нем держится вся ссылочная целостность базы данных.
Выясним, как это работает на уровне таблиц БД: когда документ делает проводки, в регистре бухгалтерии Хозрасчетный создаются записи. В поле Регистратор этих записей записывается не текстовое название документа, а его GUID. Если вы удаляете документ из конфигурации и создаете его заново (даже с тем же именем и структурой), платформа присваивает ему новый GUID. В результате старые записи в регистре становятся «сиротами»: они по-прежнему ссылаются на старый идентификатор, которого больше нет в дереве метаданных. В пользовательском интерфейсе это выглядит как отсутствие проводок или появление надписей «Объект не найден».
Именно поэтому использование Ctrl-C / Ctrl-V для переноса объектов между конфигурациями при обновлении — это фатальная ошибка. Копирование создает новый объект с новым идентификатором.
Чтобы избежать потери данных, мы должны использовать штатные механизмы сравнения и объединения, которые позволяют сохранить существующие объекты метаданных «как есть». Проанализируем пошагово процесс правильного обновления на примере «1С:Бухгалтерия предприятия 2.0».
Документ.ПеремещениеИнвентаряЗабалансом).
Если вы уже обновились «грязным» способом (удалили и добавили объект заново) и обнаружили пропажу данных, рассмотрим методы восстановления связи. Ситуация сложная, но решаемая.
Способ 1: Использование тестирования и исправления (ТиИ)
Посмотрим, как нам поможет стандартный механизм диагностики. Запустите базу в режиме «Конфигуратор» и выберите Администрирование — Тестирование и исправление.
Установите флажки:
После выполнения система создаст пустые документы в тех местах, где раньше были ваши данные. Теперь у вас будет старый GUID в виде пустого документа и новый документ с новым GUID. Вам останется программно перенести данные из пустых объектов в новые и перепривязать регистратор в записях регистров.
Способ 2: Программное восстановление регистратора
Проанализируем пример кода, который поможет перепривязать записи регистра к новому документу. Допустим, мы нашли старые записи регистра бухгалтерии, где регистратор имеет тип «Объект не найден». Нам нужно заменить его на ссылку на новый документ с тем же номером и датой.
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаБитуюСсылку);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Здесь логика поиска нового документа по номеру и дате
Запись.Регистратор = НовыйДокументСсылка;
КонецЦикла;
НаборЗаписей.Записать();
Этот метод требует аккуратности и понимания того, что в SQL-таблицах 1С идентификатор типа объекта также может измениться, что потребует более глубокой обработки данных.
После объединения всегда проверяйте свойство регистра. Если вы добавили новый документ, он должен быть указан в списке Регистраторы у соответствующих регистров (например, Хозрасчетный или ПартииТоваровНаСкладах).
Рассмотрим порядок проверки:
Процесс обновления нетиповой конфигурации — это не просто нажатие кнопки «Далее». Это аналитическая работа со сравнением объектов. Чтобы проводки не пропадали, придерживайтесь следующих правил:
Справочник.Склады), используйте режим объединения, а не полной замены, чтобы сохранить свои реквизиты вместе с изменениями от фирмы «1С».Помните, что сохранение внутреннего идентификатора — это залог того, что ваши документы «узнают» свои проводки в базе данных после любого обновления платформы или конфигурации.