Сценарий Импорт записей справочников из xls-файла

19 21

Часто при внедрениях системы DIRECTUM требуется разово импортировать данные из другой системы. Это могут быть организации, работники, подразделения и др. В большинстве случаев заказчик может предоставить эти данные в виде xls-файла или группы xls-файлов. Для загрузки таких данных был разработан специальный сценарий. 
На вход сценарию подается xls-файл в специальном формате. На выходе получаем загруженные данные в DIRECTUM.
Формат файла должен быть следующим:
1. Данные каждого справочника располагаются на отдельном листе;
2. Наименование листа имеет формат <Код справочника>_<Код ключевого реквизита>;

3. Вторая строка в таблице с данными содержит имена реквизитов импортируемого справочника.



Данные всех загружаемых справочников должны быть в одном файле. Сценарий загружает данные рекурсивно.
Если в данных присутвует ссылка на запись из другого справочника, то сначала сценарий пытается просто найти запись по коду в существующих данных в системе. Если не находит, то ищет лист в xls-файле, соответствующий этому справочнику. При нахождении листа ищет запись, которую необходимо импортировать, импортирует её. Далее возвращается к обработке той записи, на которой остановились до этого.
Таким образом загружаются все данные из файла.
При импорте данных ведется лог-файл. В него записываютя все действия, выполняемые сценарием.

Разработчик сценария - Денис Баранов.
Работает в DIRECTUM начиная с версии 4.5.

dev.zip (8,63 Кб)

Андрей Рязанцев

Не знаю про 4.5 и более, но в 2007 при внедрении версии 4.4 в СЕВЕРГАЗБАНКе, Денис таким образом импортировал всех наших клиентов, экспортированных в Excell из АБС.

Дмитрий Тарасов

Тоже частенько приходится импортировать данные справочников из xls-файлов, но до формата листов в виде <Код справочника>_<Код ключевого реквизита> пока не додумался. Обычно импортировал: один справочник - один xls-файл. Забираю разработку для изучения и держи жирный

Андрей Манаков

За сценарии спасибо) Вот только небольшое дополнение к статье:

Наименование листа имеет формат:

<Код справочника>_<Код ключевого реквизита>_,

где наличие последнего аттрибута указывает на уникальность записей. Если же этот аттрибут опустить, то к "Наименованию" каждой записи в справочнике Директума добавится Код данной записи в скобках.

Александр Гуртяков

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

Кирилл Нагирный

Интересно, что сценарий сделает с записью, в поле которой присутствует ссылка на запись другого справочника, но самой этой записи нет?
 

Артем Пыхалов

Кто нибудь уже   импортировал  сценарий себе? пробовал?

Я часто пользуюсь данным сценарием. Только я кажется, что то в нем подкручивал. И я не пробовал загружать одной excel'кой сразу несколько связных справочников.

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

СТР_Наименование_UN

ОКР_Наименование_UN

 

И в листе, на котором находится содержимое справочника Округа, в колонке реквизита страна я указываю наименование страны.

Гульшат Ризатдинова

Пробую по даному сценарию загрузить справочник Договоры. Поля Организация, Подразделения, Работники и Категории договоров ссылаются на соответсвующие справочники. Но в log файле пишет, что " Пытаемся установить реквизит: "Организация". В значение: "Назмутдинов ИП".
 Запись с таким ИД не найдена в справочнике" . хотя во всех справочниках значения для загрузки есть. Не могу разобраться в чем проблема, помогите пожалуйста

Александр Дружинин
Гульшат Ризатдинова, 5 декабря 2011 в 17:06 Пробую по даному сценарию загрузить справочник Договоры. Поля Организация, Подразделения, Работники и Категории договоров ссылаются на соответсвующие справочники. Но в log файле пишет, что " Пытаемся установить реквизит: "Организация". В значение: "Назмутдинов ИП". Запись с таким ИД не найдена в справочнике" . хотя во всех справочниках значения для загрузки есть. Не могу разобраться в чем проблема, помогите пожалуйста
У меня такая же ситуация, при импорте справочника "Контактные лица организаций" в logtmp пишет:
 
 Имя ключевого реквизита: "Содержание"
 Импортируем запись справочника "КНТ" с ИД в другой системе:"Белоногова Елена Ивановна".
 Нашли запись справочника "КНТ" с ИД в другой системе:"Белоногова Елена Ивановна". Открываем.
 Всего реквизитов: 5
 Пытаемся установить реквизит: "Организация". В значение: "ООО "Автокар"".
 Запись с таким ИД не найдена в справочнике, ищем ее в данном файле импорта
 Не нашли лист для справочника: "ОРГ".
 Пытаемся установить реквизит: "Содержание". В значение: "Белоногова Елена Ивановна".
 Пытаемся установить реквизит: "Дополнение". В значение: "Бухгалтер".
 Пытаемся установить реквизит: "Дополнение4". В значение: "(342) xxx;".
 Пытаемся установить реквизит: "Строка2". В значение: "123".
 Объект не существует.
 Вызываем сохранение записи справочника "КНТ" с ИД в другой системе: "Белоногова Елена Ивановна".
 
Хотя в справочнике "Организации" така организация есть, и через поиск она находится...
 
Петр Федотов

Похоже, что запись для справочника <ОРГ> в DIRECTUM ищется по тому же ключевому реквизиту, который указан для справочника КНТ, т.е. <Содержание>, хотя искать нужно, судя по значению <ООО "Автокар">, по реквизиту <Наименование>. 

Александр Дружинин

Ага, так оно и было, изменил функцию ONImportRecordsFromXLS. Спасибо. 

Алексей Сметанин

А как быть с табличными реквизитами? Не импортирует

Алексей Немцев

>Не знаю про 4.5 и более, но в 2007 при внедрении версии 4.4 в СЕВЕРГАЗБАНКе, Денис таким образом импортировал всех наших клиентов, экспортированных в Excell из АБС.

Андрей, простите, риторический вопрос - сколько у вас на тот момент было записей в АБС? И какое время они заливались? Подойдет ли этот сценарий для импорта сотен тысяч записей?

Наталья Заверуха

Спасибо за информацию, сегодня будем пробовать как раз есть подходящая задача, импорт контрагентов из 1С.

Юлия Иннокентьева

Можно подробнее, пожалуйста, о формате excel-документа. Желательно ссылку на сам файл.

Юлия Иннокентьева

Вроде разобрались с некоторой частью.

Столбец телефонов надо указывать как "Дополнение4", сайт как "строка2". почему все так сложно?:) как тогда указать поле "примечание" из карточки организации? Логично предположить "Дополнение5", но ведь не подходит :(

Денис Великий

А как добавить сценарий в систему?

Константин Тарасов

Кто знает, как заставить сценарий загрузить из excel подразделения (ПОД) в котором имеются поля родительской записи (с иерархией)? Например, источник из внешней системы (ИДвнеш, ИДвнешродит, Наименование, Наименование родительского Подразделения).

Нужно ли создавать второй лист в этом excel? И если нужно, то какие имена должны быть у листов? 

Татьяна Кравченко

Добрый день. Пробовала использовать сценарий, но столкнулась с проблемой, что даже если поле является уникальным, то при импорте к "Наименованию" добавляется уникальное поле в круглых скобках. При этом я прописываю в названии листа Excel имя справочника_имя уникального поля из реквизитов справочника. Кто то знает как решить данную проблему?

Авторизуйтесь, чтобы написать комментарий