Как корректно загрузить иерархический справочник из файла JSON в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

Загрузка иерархических данных — одна из классических задач при обмене данными между информационными системами. Часто разработчики сталкиваются с ошибками при попытке последовательной записи элементов из JSON, так как «родитель» может оказаться в файле позже, чем «дочерний» элемент. Рассмотрим, как построить надежный алгоритм для решения этой задачи.

Почему поиск по наименованию — это ошибка

Распространенным подходом является поиск родителя методом НайтиПоНаименованию(). Это ненадежно по двум причинам: во-первых, наименования в справочниках могут дублироваться, а во-вторых, они часто меняются пользователями. В профессиональной разработке 1С для идентификации объектов всегда необходимо использовать Уникальный идентификатор (UUID/GUID). Если источник данных (например, 1С:Документооборот) может предоставить UUID элемента и его родителя, используйте их — это самый быстрый и стабильный способ связи.

Алгоритм работы с таблицей значений

Для эффективной обработки данных рекомендуем преобразовать СтруктураJSON в ТаблицаЗначений. Это позволит манипулировать данными в памяти, что значительно быстрее, чем множественное обращение к базе данных в цикле.

Рассмотрим пошаговую логику обработки:

  1. Загрузите данные из JSON в ТаблицаЗначений.
  2. Если вы загружаете данные впервые, создайте новые объекты. При повторных загрузках ищите существующий элемент по его UUID.
  3. Для установки родителя преобразуйте строковое представление UUID из JSON в тип УникальныйИдентификатор.

Использование уникальных идентификаторов

Для получения ссылки на объект по его строковому UUID в 1С используется конструктор Новый УникальныйИдентификатор(СтрокаUUID). После этого вы можете получить ссылку с помощью метода Справочники.ИмяСправочника.ПолучитьСсылку(Идентификатор).

Для контроля корректности данных применяйте следующую конструкцию:


// Пример получения объекта по UUID
Попытка
    Идентификатор = Новый УникальныйИдентификатор(СтрокаГУИД);
    СсылкаНаОбъект = Справочники.Арт_НоменклатурныеГруппы.ПолучитьСсылку(Идентификатор);
    Объект = СсылкаНаОбъект.ПолучитьОбъект();
Исключение
    // Если объект не найден, обрабатываем ситуацию как создание нового
    Объект = Справочники.Арт_НоменклатурныеГруппы.СоздатьЭлемент();
    Объект.УстановитьСсылкуНового(СсылкаНаОбъект);
КонецПопытки;

Работа с корневыми элементами и иерархией

Если в данных JSON поле «Родитель» пустое, это сигнализирует системе, что элемент является корневым. В 1С корневой уровень определяется через Справочники.ИмяСправочника.ПустаяСсылка(). При создании иерархии учитывайте следующее:

Оптимизация производительности

Чтобы избежать медленной записи данных, выполняйте все операции внутри транзакции. Использование методов НачатьТранзакцию() и ЗафиксироватьТранзакцию() сокращает время записи в десятки раз. Кроме того, перед началом цикла загрузки рекомендуется один раз получить все существующие элементы справочника в таблицу, чтобы исключить лишние обращения к базе данных при поиске связей.

Рекомендация по подходу

Если вы планируете регулярный обмен данными, старайтесь избегать написания ручных парсеров JSON, если это возможно. В корпоративной среде лучше использовать механизмы Плана обмена или Конвертации данных. Однако, если ручная загрузка необходима, используйте предложенный алгоритм: загрузка -> сопоставление по UUID -> запись в транзакции. Это обеспечит надежность и чистоту ваших справочников в 1С.

← На главную