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