Как заполнить дополнительные реквизиты партнеров из Excel в 1С:Комплексная автоматизация 2 и ERP

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

При переходе на новые конфигурации 1С, такие как «1С:Комплексная автоматизация 2», «1С:ERP Управление предприятием» или «1С:Управление торговлей 11», пользователи часто сталкиваются с необходимостью массового переноса данных из внешних источников. Одной из наиболее трудоемких задач является заполнение пользовательских полей, которые в системе реализованы как дополнительные реквизиты. Например, когда нам нужно загрузить базу из 5 000 партнеров со специфическими аналитическими разрезами: формат торговой точки, территория торгового представителя, подразделение или канал продаж.

В этой статье мы подробно разберем, как устроен механизм дополнительных реквизитов в 1С, рассмотрим штатные инструменты импорта данных из файлов Excel, выясним причины возможных сбоев и предложим альтернативные программные решения.

Понимание структуры хранения дополнительных реквизитов в 1С

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

В отличие от типовых реквизитов (таких как Наименование, ИНН или Телефон), которые физически присутствуют в виде отдельных колонок в таблице справочника базы данных, дополнительные реквизиты хранятся иначе. В системе реализован механизм динамических свойств на базе Библиотеки стандартных подсистем (БСП). У каждого партнера в базе данных существует подчиненная табличная часть с именем ДополнительныеРеквизиты. Каждая строка этой таблицы состоит из двух основных полей:

  1. Свойство — ссылка на элемент плана видов характеристик ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения (например, свойство «Канал продаж»).
  2. Значение — конкретное значение этого свойства для данного партнера. Тип значения зависит от настроек свойства. Чаще всего это ссылка на подчиненный справочник Справочники.ЗначенияСвойствОбъектов (например, значение «Опт» или «Розница»).

Когда мы пытаемся загрузить таблицу Excel, где в одной строке сопоставлены партнер и несколько его дополнительных реквизитов в виде отдельных колонок, программа должна выполнить сложную трансформацию: найти партнера, зайти в его табличную часть, найти или создать строку с нужным свойством и записать туда соответствующее значение.

Способ 1. Использование встроенной обработки «Загрузка данных из файла»

Современные версии 1С:КА 2 и 1С:ERP содержат мощный встроенный инструмент, который умеет работать с дополнительными реквизитами напрямую. Давайте рассмотрим алгоритм работы с ним по шагам.

  1. Перейдем в раздел НСИ и администрирование, выберем справочник Партнеры.
  2. В верхней панели управления найдем и нажмем кнопку Загрузить из файла (в некоторых интерфейсах эта кнопка находится в меню «Еще»).
  3. В открывшемся окне нам будет предложено два варианта: заполнить таблицу в самой программе или скопировать данные через буфер обмена. Выберем вариант скопировать данные из подготовленного файла Excel.
  4. Подготовим файл Excel. Он должен содержать ключевую колонку для сопоставления партнеров (например, Наименование или Код) и колонки с названиями ваших дополнительных реквизитов: Территория ТП, Формат ТТ, Канал продаж.
  5. Выделим данные в Excel, скопируем их и вставим в таблицу обработки.
  6. Нажмем кнопку Далее. На этапе сопоставления колонок система автоматически проанализирует заголовки. Типовые реквизиты сопоставятся сразу. Для дополнительных реквизитов программа также автоматически создаст колонки, если названия в Excel в точности совпадают с наименованиями свойств в системе.

Важный нюанс: Если тип вашего дополнительного реквизита настроен как «Дополнительное значение» (ссылка на список), то при загрузке новых текстовых данных 1С попытается сопоставить их с существующими элементами. Чтобы система автоматически создавала новые значения свойств (например, если в базе еще нет региона «Север», указанного в Excel), в настройках сопоставления колонки обязательно установите флажок Создавать новые.

Почему стандартная загрузка может пропускать реквизиты?

Иногда пользователи сталкиваются с ситуацией, когда часть реквизитов загружается успешно, а два или три поля остаются незаполненными. Давайте проанализируем основные причины этой проблемы:

Способ 2. Групповое изменение реквизитов для однотипных данных

Если среди ваших 5 000 партнеров многие имеют одинаковые значения дополнительных свойств (например, у 2 000 клиентов канал продаж — «Дистрибуция», а у остальных — «Розничные сети»), нет необходимости загружать их построчно. Мы можем использовать стандартную обработку Групповое изменение реквизитов.

Рассмотрим этот процесс подробнее:

  1. Сначала загрузим базовую информацию о партнерах и те реквизиты, которые загружаются без проблем с помощью стандартного импорта.
  2. Откроем обработку Групповое изменение реквизитов (ее можно найти в разделе «Администрирование» — «Обслуживание» — «Корректировка данных»).
  3. Выберем объект изменения: Партнеры.
  4. Настроим отбор. Например, выберем только тех партнеров, у которых определенный регион или сегмент соответствует условию.
  5. В списке доступных для изменения реквизитов прокрутим таблицу в самый низ. Дополнительные реквизиты будут сгруппированы в отдельном блоке.
  6. Установим флажок напротив нужного свойства (например, «Канал продаж»), выберем требуемое значение из справочника и нажмем кнопку Изменить реквизиты. Программа пакетно запишет данные во все отобранные карточки.

Способ 3. Универсальная загрузка с программной обработкой событий

Для разработчиков и опытных администраторов самым надежным и гибким решением является использование универсальной обработки «Загрузка данных из табличного документа» (доступна на диске ИТС или портале 1С). Этот инструмент позволяет написать локальный код на встроенном языке 1С непосредственно в момент записи объекта.

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

В настройках обработки перейдем на вкладку «События» и в поле При записи объекта вставим следующий код:


// Очищаем старые значения дополнительных реквизитов, если требуется полная перезапись
Объект.ДополнительныеРеквизиты.Очистить();

// 1. Обработка реквизита "Канал продаж"
ТекСвойствоКанал = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Канал продаж");
Если ЗначениеЗаполнено(ТекСвойствоКанал) Тогда
    // Предположим, что в Excel колонка с каналом продаж идет под номером 4 (индекс 3 в массиве ТекстыЯчеек)
    ЗначениеИзExcel = ТекстыЯчеек[3]; 
    
    Если ЗначениеЗаполнено(ЗначениеИзExcel) Тогда
        // Ищем существующее значение в подчиненном справочнике
        НайденоЗначение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеИзExcel, Истина, , ТекСвойствоКанал);
        
        // Если значения нет в базе, создаем его программно
        Если Не ЗначениеЗаполнено(НайденоЗначение) Тогда
            НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
            НовоеЗначение.Владелец = ТекСвойствоКанал;
            НовоеЗначение.Наименование = ЗначениеИзExcel;
            НовоеЗначение.Записать();
            НайденоЗначение = НовоеЗначение.Ссылка;
        КонецЕсли;
        
        // Добавляем строку в табличную часть партнера
        НоваяСтрока = Объект.ДополнительныеРеквизиты.Добавить();
        НоваяСтрока.Свойство = ТекСвойствоКанал;
        НоваяСтрока.Значение = НайденоЗначение;
    КонецЕсли;
КонецЕсли;

// 2. Обработка реквизита "Формат ТТ"
ТекСвойствоФормат = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Формат ТТ");
Если ЗначениеЗаполнено(ТекСвойствоФормат) Тогда
    // Колонка с форматом торговой точки идет под номером 5 (индекс 4)
    ЗначениеИзExcelФормат = ТекстыЯчеек[4];
    
    Если ЗначениеЗаполнено(ValueИзExcelФормат) Тогда
        НайденоЗначениеФормат = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеИзExcelФормат, Истина, , ТекСвойствоФормат);
        
        Если Не ЗначениеЗаполнено(НайденоЗначениеФормат) Тогда
            НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
            НовоеЗначение.Владелец = ТекСвойствоФормат;
            НовоеЗначение.Наименование = ЗначениеИзExcelФормат;
            НовоеЗначение.Записать();
            НайденоЗначениеФормат = НовоеЗначение.Ссылка;
        КонецЕсли;
        
        НоваяСтрока = Объект.ДополнительныеРеквизиты.Добавить();
        НоваяСтрока.Свойство = ТекСвойствоФормат;
        НоваяСтрока.Значение = НайденоЗначениеФормат;
    КонецЕсли;
КонецЕсли;

// Фиксируем изменения в базе данных
Объект.Записать();

Этот код выполняет следующие важные действия:

  1. Находит в плане видов характеристик нужные свойства по их точному названию.
  2. Считывает текстовые значения из соответствующих ячеек строки Excel (индексация колонок в массиве ТекстыЯчеек начинается с нуля).
  3. Выполняет поиск значения в справочнике ЗначенияСвойствОбъектов с отбором по владельцу (конкретному свойству). Если такого значения нет (например, новый формат магазина), система автоматически создает его, чтобы избежать ошибок сопоставления.
  4. Заполняет табличную часть ДополнительныеРеквизиты загружаемого объекта.
  5. Записывает измененный объект партнера в базу данных.

Использование этого подхода гарантирует 100% заполнение любых сложных или нестандартных полей, независимо от настроек интерфейса конфигурации и ограничений БСП.

← На главную