Задача: импортировать справочник из CSV в битрикс Особенности: некоторые строки имеют одинаковые значения названия, но разные значения остальных свойств. Технологии и инструменты: Битрикс, Эксель Эксперимент №1. Захожу в админку, добавляю две записи с одинаковыми названиями, убеждаюсь что всё ок. Оно и логично - ID записи получают автоматом разные. Эксперимент №2. Создаю CSV из двух строк, названия одинаковые, свойства разные, IE_XML_ID и IE_ID не задаю, т.к. данные новые, нужно вставить. Импортирую, наблюдаю грустную картину, что записи склеились в одну, у множественных свойств всё ок, а вот обычные имеют значение последней записи. Читаю ещё раз документацию http://dev.1c-bitrix.ru/learning/cour...ON_ID=2012
Для загрузки данных для свойств с признаком множественности необходимо повторить строку с элементом столько раз, сколько будет значений множественного поля. ... Все строки должны быть одинаковыми по содержанию, за исключением множественных полей, которые изменяются указанием новых данных для этого свойства.
Замечательно, у меня свойства разные, а Битрикс решил, что это я так множественные поля подгружаю. Обращаюсь в техподдержку, выясняю новые и интересные вещи:
Идентификация одного элемента из списка в CSV-файле происходит по "Названию" или "XML_ID". У Вас одно название в двух строках, поэтому это один элемент, но с разными значениями множественного свойства, а значения остальных не множественных свойств определится из последней строки.
Значит нужны разные XML_ID. Есть идея проставить вручную от 1 до сколько нужно, но как это будет интерпретировать Битрикс неясно. Строк в справочнике под 1000, в следующем уже счёт идёт на десятки тысяч, в админке не посидишь... В результате подумав, решаю сделать всё 2-ступенчатым алгоритмом. Шаг 1. Вместо IE_NAME прописываю уникальные числа от 1 и далее в экселе, сохранив отдельно столбец со старыми названиями, соответствующими этим числам. Импортирую новые данные. Результат - загружены все данные кроме названий, ни одна из строк не склеилась Шаг 2. Экспортирую загруженные данные. На самом деле мне нужно лишь 2 столбца. При попытке экспортировать только XML_ID и IE_NAME, данных оказывается почему-то меньше. Экспортирую всё, вырезаю только эти два столбца. Функцией ВПР возвращаю в IE_NAME законные названия, ещё раз импортирую. Результат - у всех данных оказываются правильные имена.
Таким образом, без написания какого-либо кода или обработок задача решена, данные скормлены Битриксу, ура!
Вам достаточно было заполнить XML_ID строковыми уникальными значениями. Т.е. вот эта идея:
Есть идея проставить вручную от 1 до сколько нужно
была правильной. Если опасаетесь, что в этом инфоблоке уже могут быть использованы такие значения XML_ID - добавляйте какой-нибудь уникальный префикс. Вот и все.
Меня смутил ответ на другой мой вопрос "как экспортировать ID групп"
Вы хотите импортировать разделы инфоблока и чтобы эти разделы создавались с ID, который указан в файле? К сожалению, это невозможно, т.к. ID для любой записи в БД проставляется автоматически при создании, им управлять нельзя.
Я решил, что ID для инфоблоков тоже определяются системой в момент добавления нового инфоблока автоматом и управлять (присваивать им заранее значения) тоже нельзя. Сейчас проведу эксперимент с установкой XML_ID при первом импорте. Отпишусь по результату!
Да, всё получилось, каждая строка с неуникальным названием загрузилась нормально, в IE_XML_ID после обратной выгрузки остались записанные туда идентификаторы, в IE_ID - автоматически сгенерированные ID, шаг 2 в моей схеме получается лишний
у меня, к счастью, была возможность, поэтому я просто сгенерировал в файлике с табличкой абстрактный XML_ID вида xxxx-xxxx-xxxx-yyyy, где yyyy - последние цифры уникального артикула товара и все залилось наконец-то, а вообще странно, почему нельзя инсертить просто по строке, зачем определять, уникальное ли название?
Жуков Евгений, функция называется «Импорт», а не «Импорт с проверкой уникальности определённых полей и их последующим обновлением если это не так». И получается, вместо галочки «Проверять уникальность» или «Генерировать уникальный XML_ID» я вынужден искать программиста, что бы сотворить костыль для вашего решения или додумывать сам уникальные значения, тем самым усложняя казалось бы простой процесс экспорта csv из внешнего источника и его импорта в битру.
Тот же экспорт из таблицы в csv происходит без удаления дублей. Экспорт из ИБ в csv — тоже без удаления дублей. Так какого было принято решение удалять дубли при импорте, без возможности просто импорта, а?
Да у вас даже в документации написано «Сберегите свое время и силы. Подготовьте CSV-файл с данными, а встроенный инструмент импорта быстро загрузит ВСЕДАННЫЕ в инфоблок.» Враньё прямо в глаза — импорт не всех данных; время и силы такой импорт не бережёт.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».