Почему не загружается дата рождения из Excel в справочник 1С:НСИ и как это исправить?

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

При работе с конфигурацией 1С:MDM Управление нормативно-справочной информацией (1С:НСИ) специалисты часто сталкиваются с задачей импорта данных в универсальные справочники. Одной из типичных проблем является ситуация, когда стандартные поля (например, Наименование) загружаются корректно, а пользовательские реквизиты, такие как Дата рождения, остаются пустыми. Проанализируем, почему так происходит, и разберем пошагово методы решения этой задачи.

Особенности архитектуры универсальных справочников в 1С:НСИ

Для начала разберем важный технический нюанс. В конфигурации 1С:НСИ универсальные справочники реализованы не как обычные объекты метаданных в конфигураторе. Они работают на базе механизма EAV (Entity-Attribute-Value). Это означает, что когда вы добавляете реквизит ДатаРождения в пользовательском режиме, система не создает физическую колонку в таблице базы данных. Вместо этого создается запись в специальном плане видов характеристик, а значения хранятся в подчиненной табличной части Дополнительные реквизиты.

Когда мы запускаем загрузку данных, встроенный механизм импорта должен четко сопоставить колонку из Excel с конкретной характеристикой. Если на каком-то этапе происходит сбой типизации (например, дата воспринимается как текст), система MDM «тихо» игнорирует запись, так как она не проходит внутреннюю валидацию типа данных.

Причина 1: Несоответствие типов данных при считывании

Выясним причину, по которой отладчик может показывать тип значения «Строка» для реквизита ДатаРождения. При чтении файла Excel через COM-объект или встроенные средства 1С, формат ячейки имеет решающее значение. Если в Excel ячейка имеет формат «Текстовый» или «Общий», 1С считывает ее как строку. Однако универсальный реквизит в 1С:НСИ строго ожидает тип Дата.

Рассмотрим, как принудительно преобразовать значение в правильный формат. В настройках загрузки данных 1С:НСИ для каждого поля предусмотрена возможность указать Алгоритм разбора или Выражение. Мы рекомендуем использовать явное приведение типов.

Проанализируем пример кода, который можно вставить в обработчик загрузки поля:


// Предположим, что ЗначениеИзФайла — это переменная, содержащая текст из Excel
Попытка
    Результат = Дата(ЗначениеИзФайла);
Исключение
    // Если формат даты в Excel нестандартный (например, ДД.ММ.ГГГГ), используем другой подход
    ЧастиДаты = СтрРазделить(ЗначениеИзФайла, ".");
    Если ЧастиДаты.Количество() = 3 Тогда
        Результат = Дата(ЧастиДаты[2], ЧастиДаты[1], ЧастиДаты[0]);
    КонецЕсли;
КонецПопытки;

Причина 2: Настройка маппинга в шаблоне импорта

Посмотрим на настройки заполнения. В 1С:НСИ импорт осуществляется через Шаблоны импорта. Важно убедиться, что для реквизита Дата рождения установлены правильные правила сопоставления. Проверьте следующие моменты:

  1. Идентификатор свойства: Убедитесь, что внутренний идентификатор (GUID) добавленного вами реквизита корректно подтянулся в настройки загрузки. Если реквизит был пересоздан, старая настройка в шаблоне может ссылаться на несуществующий объект.
  2. Обязательность заполнения: Если реквизит помечен как обязательный в метаданных MDM, но в Excel есть пустые строки, вся строка объекта может не загрузиться или загрузиться частично.
  3. Режим записи: При программном вмешательстве в процесс загрузки убедитесь, что используется метод ОбменДанными.Загрузка = Истина. Это отключает лишние проверки, которые могут блокировать запись в дополнительные реквизиты.

Причина 3: Специфика алгоритмов разбора

В конфигурации 1С:НСИ существует мощный инструмент — Алгоритмы разбора. Если стандартное сопоставление не работает, мы можем прописать логику поиска и записи значения вручную. Разберем ситуацию, когда реквизит является дополнительным свойством.

Для записи значения в дополнительный реквизит универсального справочника через алгоритм, нам необходимо найти ссылку на свойство в Плане видов характеристик (обычно это ДополнительныеРеквизитыИСведения) и добавить строку в табличную часть ДополнительныеРеквизиты объекта.

Посмотрим на пример логики, которую можно применить в алгоритме:


// Поиск свойства по наименованию или GUID
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата рождения");

// Поиск строки в табличной части объекта
НоваяСтрока = Объект.ДополнительныеРеквизиты.Добавить();
НоваяСтрока.Свойство = СвойствоСсылка;
НоваяСтрока.Значение = Дата(СтрокаИзExcel); 

Рекомендации по подготовке файла Excel

Чтобы минимизировать ошибки при загрузке, проанализируем требования к исходному файлу:

Итоги и выводы

Подводя итог, можно сказать, что проблема незаполнения даты рождения в 1С:НСИ чаще всего кроется в типизации данных. Поскольку универсальные справочники в MDM крайне чувствительны к типам хранимых характеристик, любая попытка записать строку в поле типа «Дата» будет отклонена системой без выдачи явной ошибки.

Для успешного решения задачи выполните следующие действия:

  1. Проверьте тип реквизита в 1С (он должен быть «Дата»).
  2. Убедитесь, что в Excel колонки имеют формат даты.
  3. В правилах загрузки (или алгоритмах разбора) примените явное преобразование функцией Дата().
  4. Используйте отладчик, чтобы поймать момент присвоения значения в табличную часть ДополнительныеРеквизиты и убедиться, что тип значения в этот момент — именно Дата, а не Строка.
← На главную