Пример алгоритма синхронизации справочников по GUID

10.02.12

Задачи пользователя - Поиск данных

Порой при переводе систем с одной конфигурации на другую нужно часто переносить справочники из одних в другие.
При этом сложно завязываться на код или наименование.
Но! Можно завязаться на GUID элемента. 1С позволяет использовать один и тот же GUID в разных справочниках.

Порой при переводе систем с одной конфигурации на другую нужно часто переносить справочники из одних в другие.

При этом сложно завязываться на код или наименование.

Но! Можно завязаться на GUID элемента. 1С позволяет использовать один и тот же GUID в разных справочниках.

Причем в составных полях хранится не только GUID, но и тип, поэтому использование в одной базе ссылок с одинаковым GUID но разным типом безопасно!

Для примера рассмотрим алгоритм, который переносит один справочник в другой, используя синхронизацию по GUID.

Понятно, что его можно использовать многократно.

Алгоритм имеет следующие параметры:

   

Наименование

Направление передачи

ТипУчастникаКА

Внутренний

зпЗапрос

Вход

ИдентификаторРезСправочника

Вход

ПапкаНовых

Вход

ТолькоНовые

Вход

ГрузитьИерархию

Вход

ГрузитьПодчиненность

Вход

ВладелецНовых

Вход

ЧислоОбрабатываемых

Вход

ИерархияЭлементовВИерархиюГрупп

Вход

ПроставлятьСсылкуНаРезультатВРеквизите

Вход

 

//Запрос, которым получаем исходные элементы

Запрос = ПолучитьЗапрос(зпЗапрос);

ТЗ = Запрос.Выполнить().Выгрузить();

ТЗ.Колонки.Добавить("Уровень");

//Сортируем по уровню

//Чтобы группы создавались раньше элементов, в один проход тогда можно

Состояние("Индексация");

Для Каждого СтрокаТЧ ИЗ ТЗ Цикл

Попытка

СтрокаТЧ.Уровень = СтрокаТЧ.Ссылка.Уровень();

Исключение

Прервать; //Не индексируем

КонецПопытки;

ОбработкаПрерыванияПользователя();

КонецЦикла;

ТЗ.Сортировать("Уровень Возр");

//Загрузка

Состояние("Загрузка");

СчетчикСозданных= 0;

//Перебираем объекты

Для Каждого СтрокаТЧ ИЗ ТЗ Цикл

ОбработкаПрерыванияПользователя();

//Получаем GUID исходного элемента

СсылкаИсх = СтрокаТЧ.Ссылка;

МенеджерИсх = Справочники[СсылкаИсх.Метаданные().Имя];

ГуидИсх = СсылкаИсх.УникальныйИдентификатор();

Попытка

ГуидИсхРодитель = СсылкаИсх.Родитель.УникальныйИдентификатор();

Исключение

ГуидИсхВладелец = СсылкаИсх.Родитель.УникальныйИдентификатор();

КонецПопытки;

 

//Формируем GUID результирующего элемента и родителей, владельцев

СсылкаРез = Справочники[ИдентификаторРезСправочника].ПолучитьСсылку(ГуидИсх);

Попытка

СсылкаРезРодитель = Справочники[ИдентификаторРезСправочника].ПолучитьСсылку(ГуидИсхРодитель);

Исключение

СсылкаРезВладелец = Справочники[ИдентификаторРезСправочника].ПолучитьСсылку(ГуидИсхВладелец);

КонецПопытки;

//Находим элемент по GUID, если его нет, то формируем

ТекОбъект = СсылкаРез.ПолучитьОбъект();

Попытка

ЭтоГруппаИсх = СсылкаИсх.ЭтоГруппа;

Исключение

ЭтоГруппаИсх = ложь;

КонецПопытки;

Если ИерархияЭлементовВИерархиюГрупп Тогда

Выборка = МенеджерИсх.Выбрать(СсылкаИсх);

Если Выборка.Следующий() Тогда

ЭтоГруппаИсх = истина;

КонецЕсли;

КонецЕсли;

//Создаем объект или группу, в зависимости от того, был элемент группой или нет

Если ТекОбъект = Неопределено Тогда

Если ЭтоГруппаИсхТогда

Попытка

ТекОбъект = Справочники[ИдентификаторРезСправочника].СоздатьГруппу();

Исключение

ТекОбъект = Справочники[ИдентификаторРезСправочника].СоздатьЭлемент();

КонецПопытки;

Иначе

ТекОбъект = Справочники[ИдентификаторРезСправочника].СоздатьЭлемент();

КонецЕсли;

ТекОбъект.УстановитьСсылкуНового(СсылкаРез);

Иначе

Если ТолькоНовые Тогда

Продолжить;

КонецЕсли;

КонецЕсли;

//Устанавливаем папку

Попытка

Если ЗначениеЗаполнено(ПапкаНовых) Тогда

ТекОбъект.Папка = ПапкаНовых;

КонецЕсли;

Исключение

КонецПопытки;

//Устанавливаем владельца

Попытка

Если ЗначениеЗаполнено(ВладелецНовых) Тогда

ТекОбъект.Владелец = ВладелецНовых;

КонецЕсли;

Исключение

КонецПопытки;

//Если переносим иерархию

Попытка

Если ГрузитьИерархию=истина Тогда

ТекОбъект.Родитель = СсылкаРезРодитель.ПолучитьОбъект().Ссылка;

КонецЕсли;

Исключение

КонецПопытки;

Попытка

Если ГрузитьПодчиненность=истина Тогда

ТекОбъект.Владелец = СсылкаРезВладелец.ПолучитьОбъект().Ссылка;

КонецЕсли;

Исключение

КонецПопытки;

//Устанавливаем наименование и код

ТекОбъект.Наименование = СсылкаИсх.Наименование;

//ТекОбъект.Код = СсылкаИсх.Код;

//Устанавливаем код синхронизации

Попытка

ТекОбъект.ИдВнешний = СсылкаИсх.Код6;

Исключение

Попытка

ТекОбъект.ИдВнешний = СсылкаИсх.ИдВнешний;

Исключение

КонецПопытки

КонецПопытки;

//Устанавливаем тип участника, если это справочник участников

Попытка

ТекОбъект.ТипУчастника = ТипУчастникаКА;

Исключение

КонецПопытки;

ТекОбъект.ПометкаУдаления = СсылкаИсх.ПометкаУдаления;

СчетчикСозданных= СчетчикСозданных + 1;

Сообщить(""+СчетчикСозданных+": "+ТекОбъект);

ТекОбъект.Записать();

Если СокрЛП(ПроставлятьСсылкуНаРезультатВРеквизите) <> "" Тогда

ОбъектИсх = СсылкаИсх.ПолучитьОбъект();

ОбъектИсх[СокрЛП(ПроставлятьСсылкуНаРезультатВРеквизите)] = ТекОбъект.Ссылка;

ОбъектИсх.Записать();

КонецЕсли;

Если ЧислоОбрабатываемых<>0 И СчетчикСозданных >= ЧислоОбрабатываемых Тогда

Прервать;

КонецЕсли;

//Обновляем элемент

//Ставим родителя

ОбработкаПрерыванияПользователя();

//Прервать;

КонецЦикла;

В коде используется функция ПолучитьЗапрос, которая получает объект запроса по его идентификатору (у нас в конфигурации ведется реестр запросов).
Есть также некоторые заточки по заполнению новых элементов определенного типа.

Но в целом, я использовал этот алгоритм достаточно универсально для переноса и синхронизации по ГУИД около пять-восьми справочников разного типа.
Надеюсь, вам тоже пригодится.

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Информационная безопасность Поиск данных ServiceDesk, HelpDesk Журналы и реестры данных 1С 8.3 Россия Бухгалтерский учет Бюджетный учет Налоговый учет Управленческий учет Платные (руб)

Полный контроль над изменениями в 1С без нагрузки на вашу базу. Мгновенный доступ к истории изменений, удобное сравнение и откат данных в один клик. Простой отчет с визуальным отображением изменений Откат на любую версию объекта в два клика История изменения данных хранится во внешней базе

180000 руб.

05.09.2025    5213    2    1    

3

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5. Работает на возможностях платформы, внешние компоненты не используются.

6000 руб.

25.02.2026    5221    17    1    

20

Файловый обмен (TXT, XML, DBF), FTP Поиск данных Инструменты администратора БД Корректировка данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная обработка позволит Вам легко и просто, а главное - быстро, выполнить сравнение данных между ЛЮБЫМИ базами (и РИБ, по правилам конвертаций) по контрольным суммам выбранных объектов баз 1С, работающих на платформах 8.3 и выше. Удобный и понятный интерфейс в виде "мастера". Высокая скорость сравнения достигается за счет специального алгоритма расчета контрольной суммы объекта/записи и сравнения по данным суммам объектов 2х баз через файл. Имеется возможность выбора реквизитов, по которым система будет сравнивать объекты. Сравнение количества записей в движениях документов, возможность сравнивать данные по правилам конвертации и не только! Выбор объектов конфигурации для КАЖДОГО узла в отдельности с индивидуальным отбором для каждого объекта конфигурации, работа с FTP, сохранение или загрузка настроек, сохранение или загрузка результата сравнения, регистрация на обмен объекта и его движений. (Обновление от 12.11.2024, версия 2.2-2.5)

24400 руб.

27.10.2017    47072    32    15    

50

Учетные задачи Поиск данных Подбор и обработка объектов 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

1.обработка позволяет автоматически вычислить дубли и привести их к единому наименованию во всех документах. 2.так же есть возможность в документах поменять счета учета для номенклатуры. Например разные бухгалтера оформляют поступление одного и того же товара - один занес на 10.01, второй на 41.01 в результате в ОСВ у нас минусы. В обработке есть возможность наглядно увидеть такие ошибки и тут же их поправить не бегая по всем документам. Достаточно поставить галочку у номенклатуры и указать счет учета который надо найти и счет учета на который надо его заменить. Обработка сама вычислит документы в которых номенклатура с галочкой была задействована и заменит счета учета. Что бы не было излишнего изменения документов, в обработке указываются типы документов, где операция замены счета разрешена (например Поступление ТМЦ, Реализация, Отчет о розничных продажах, возврат покупателю итд.)

7320 руб.

05.06.2026    603    2    0    

4

Поиск данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Платные (руб)

Обработки помогут Вам легко и, главное, быстро (в 5 раз и быстрее штатной обработки 1С), выполнить поиск дублирующих данных в Ваших базах 1С на платформах 8.1-8.3. Это позволит уменьшить объем лишней информации в справочниках и документах, планах видов характеристик и др., упростит работу с данными пользователям. А так же можно, одним нажатием, узнать в каких ссылочных объектах есть вообще дубли! Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. А так же обновления Вы получаете бесплатно в течение года с момента приобретения данных обработок! (Обновление от 27.11.2023, версия 6.12)

13420 руб.

14.05.2012    172050    359    253    

589

Поиск данных Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта Стажер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Беларусь Россия Казахстан Платные (руб)

Встройте искусственный интеллект прямо в вашу 1С за один вечер. «Цифровой сотрудник» - это чат с нейросетью внутри привычного интерфейса 1С, который умеет отвечать не «в общем», а по вашим данным: обучите его на регламентах, инструкциях и прайсах компании, подключите к данным информационной базы - и получите ассистента, который консультирует бухгалтера по учёту, отвечает менеджеру по прайсу и достаёт цифры из базы по запросу на обычном русском языке. Поддерживаются OpenAI, DeepSeek, Qwen и локальные LLM - включая вариант, когда данные вообще не покидают ваш контур.

3660 руб.

03.08.2026    197    1    0    

2

Поиск данных 1С:Предприятие 8 1С:Библиотека стандартных подсистем Абонемент ($m)

Расширение добавляет возможность в 1С в любых полях и отборах выбирать значения не только Код, Наименование или Номер, но и Уникальный идентификатор, Навигационную ссылку, Объект не найден, Представление документа.

2 стартмани

18.08.2025    8364    40    sapervodichka    14    

78
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pumbaE 10.02.12 13:28 Сейчас в теме
Гений1с конечно гениален, но перепечатывать старые статьи по мне неправильно.

Посмотрели бы уже в типовых на регистр сведений "СоответствиеОбъектовДляОбмена" и работу с ним.

Написал бы тогда и дополнительно как бороться с коллизиями.
2. fixin 4342 10.02.12 13:48 Сейчас в теме
(1) смотрел, знаю, но в нетиповых можно и такой метод юзать...
3. rus128 2 15.02.12 15:39 Сейчас в теме
Жаль, но код практически нечитабелен, поэтому "многабукф" и "ниасилил", то есть оценить полезность и применимость лично для себя затрудняюсь. А использование в статье слова "ГУИД" очень смутило.
4. fixin 4342 15.02.12 17:13 Сейчас в теме
(3) вы буквоед (по поводу ГУИД)
5. natarezn 20.10.16 11:18 Сейчас в теме
мне сложно завязываться на код и на наименование. надеюсь эта статья мне пригодится
Для отправки сообщения требуется регистрация/авторизация