====== Импорт данных из Excel ====== С помощью функции «Импорт из Excel» можно импортировать и обновлять справочники НЭП из файлов Excel. Так же с помощью импорта можно заполнять табличные части документов НЭП. Рассмотрим работу данной функции на примере трех задач по импорту справочника «Номенклатура». ===== Задача 1 ===== Необходимо импортировать каталог (прайс-лист) нового поставщика. Условием задачи является то, что все позиции данного каталога загружаются первый раз. А) Откроем справочник «Номенклатура» (Окно «Склады» – закладка «Номенклатура». Сначала необходимо определить, в какую секцию будем импортировать позиции: либо в новую (необходимо создать в дереве секций), либо в существующую (т.е. просто щелкнуть мышкой по нужной секции в дереве). Чтобы не было путаницы, импортировать позиции лучше всегда в пустую (новую) секцию и только потом разносить по номенклатурному дереву. Так же с позициями в такой секции можно произвести групповые изменения. Б) В табличной части документ в контекстном меню выберем пункт «Импорт из Excel». {{:docs:import_from_excel_01.png?direct|}} Откроется окно «Импорт из Excel». {{:docs:import_from_excel_02.png?direct|}} Настроим параметры импорта под нашу Задачу 1: 1) **Путь к файлу Excel** – указываем файл Excel. Файл может быть открыт во время импорта. Если файл редактировался, то перед стартом импорта его нужно обязательно сохранить. 2) Здесь нужно указать в какой валюте будут импортироваться цены (при условии, что далее в списке полей для импорта будет указано как минимум одно поле для хранения цен). А) «**В текущей валюте ценообразования позиции**» – при первом импорте новых позиций лучше не использовать (пригодится при обновлении, например, цен). Б) «**Импортировать цены и устанавливать валюту ценообразования позиции в…**» – отмечаем этот пункт и выбираем валюту (2b), в которой будут импортироваться цены. (В нашем примере это будут Рубли [РУБ]). При выборе этого пункта у импортируемых позиций также будет установлена указанная валюта ценообразования. 3a) **Действие**. Выбираем //«Добавлять все строки области»//. 3b) **Добавлять в…** Если мы уже создали новую секцию и установили на нее курсор в дереве, то оставляем пункт //«в Текущую секцию склада»//. Так же можно выбрать из выпадающего списка опцию //«в Определенную секцию склада»// и перетащить мышкой, в появившееся справа окно нужную секцию из дерева в окне «Склады». 4) **Импортируемые поля** Из левого окна (4а) перетаскиваем в правое окно (4b) поля, которые будут заполнятся при вставке новых позиции в справочник. Напротив каждого поля указываем свой «столбец» Excel (буквенное Имя колонки Excel, из которой будут браться данные). По нашей задаче в файле Excel есть следующие колонки с данными: {{:docs:import_from_excel_03.png?direct|}} Заполняем колонки в соответствии c файлом Excel. Например, им будут соответствовать следующие добавленные в окно (4b) поля. Напротив каждого поля указываем соответствующий столбец «Excel». {{:docs:import_from_excel_04.png?nolink|}} 5) **Диапазон строк**: Указываем с какой по какую строку таблицы Excel, будут импортироваться позиции. В нашем примере указываем со 2-й строки (т.к. первая строка в Excel это заголовок) по 100-ю. Вместо указания диапазона строк можно присвоить именную область Excel, включающую в себя импортируемые строки. Для этого нужно выбрать второй пункт «задать область в Excel» и ввести имя области. 6) Все готово. Нажимаем кнопку «**Пуск**». 7) После выполнения импорта, о чем укажет строка статуса выполнения, активируются следующие кнопки: «**Результат**» – выводит окно с предварительным списком позиций, которые были импортированы и ждут подтверждения записи в базу данных. В этом окне можно увидеть, как импортировались позиции, и как они будут выглядеть в базе. «**Применить**» – при нажатии, импортируемые позиции запишутся в базу данных. «**Отмена**» – если что-то импортировалось не так, и нужно повторить попытку, можно нажать эту кнопку. ===== Задача 2 ===== Рассмотрим задачу посложнее. Теперь поставщик прислал новый прайс-лист с новыми ценами и нам нужно импортировать эти цены в базу, а именно – обновить старые цены. Для этого заполним параметры окна следующим образом: {{:docs:import_from_excel_05.png|}} 1) **Путь к файлу Excel** – указываем присланный файл Excel. 2) **Импорт цен справочника**: тут можно оставить пункт «**В текущей валюте ценообразования позиции**», т.к. позиции уже есть в базе, и у них стоит определенная ранее валюта ценообразования. Но если есть вероятность, что кто-то из пользователей поменял валюту ценообразования у этих позиции, то лучше выбрать пункт «**Импортировать цены и устанавливать валюту ценообразования**» и выбрать соответствующую валюту в окне (вв). В этом случае валюта ценообразования обновляемых позиций будут гарантировано перезаписана. Обратный случай, когда наоборот Ваша организация специально перешла на другую валюту ценообразования для этих позиции и при обновлении цен их менять не надо. В этом случае нужно так же оставить выбранным второй пункт «**Импортировать цены и устанавливать валюту ценообразования**». И дополнительно установить галочку «//При обновлении не менять валюту ценообразования (цену рассчитывать по курсу)//». В такой конфигурации цены запишутся в базу в нужной валюте ценообразования, предварительно пересчитавшись по текущему курсу, установленному в программе. Например, у позиции стоит валюта ценообразования Евро [EUR], а прайс-лист прислали в рублях. Следовательно, указываем пункт «**Импортировать цены и устанавливать валюту ценообразования**», указываем валюту импорта [РУБ]. А также отмечаем галочку «//При обновлении не менять валюту ценообразования (цену рассчитывать по курсу)//». 3) **Действие**: Выбираем «//Только обновление полей из списка, отмеченных галочкой//». 4) Теперь надо определить поля, которые необходимо использовать для обновления. С одной стороны, должно быть указано поле, которое будет использоваться в качестве идентификатора (ключа), по которому будет осуществляется сопоставление строк в Excel и позиции справочника «Номенклатура» в базе данных НЭП. В нашей задаче это будет поле «Артикул» (добавим его в окно (4) первым). С другой стороны, в это окно нужно добавить поля, которые нужно обновлять. В общем случае их может быть несколько, но в нашем примере только одно поле – «Цена поставщика». Вот как будет выглядеть эти настройки. 5) «**Поле для идентификации обновляемых строк (ключ)**» - вот тут как раз и определяем, какое поле из списка в окне (4) будет являться «идентификатором». Выбираем для нашей задачи поле «Артикул». Как видно из логики работы модуля импорта, поле «идентификатор» также надо переносить в окно (4), хотя обновляться оно не будет. Это необходимо для формирования списка (4а) для его выбора. 6) **Диапазон строк**. Заполняем область импорта аналогично предыдущей задаче. 7) Все готово. Нажимаем кнопку **Пуск**. ===== Задача 3 ===== Рассмотрим более сложную задачу. Пришел новый прайс-лист от поставщика с новыми ценами. Но в этом прайс-листе появились новые номенклатурные позиции, которые нужно импортировать в базу данных НЭП. Т.е. необходимо выполнить импорт по следующему алгоритму: позиции, которые есть в базе, нужно обновить, а которые не нашлись – добавить. Т.е. необходимо выполнить разом обе вышеизложенные задачи. Для этого укажем следующие параметры импорта. 1) **Путь к файлу Excel** – тут все аналогично. 2) **Импорт цен справочника** – тут тоже лучше указать явно валюту с опцией «**Импортировать цены и устанавливать валюту ценообразования**» и выбрать соответствующую валюту. А также отметить галочку «//При обновлении не менять валюту ценообразования (цену рассчитывать по курсу)//». 3) **Действие**: Тут выбираем третий пункт «//Обновление с добавлением (если не найдено, то добавление)//». 4) Окно с полями (4) заполняется по максимуму, как при «добавлении всех позициq» из первой задачи. Т.е. мы добавили поля и определили их соответствие колонкам Excel точно так же, как в первой задаче, так как логика импорта новых позиций остается прежней. Отличие только в том, что новыми они становятся после неудачной попытки найти их в базе по «Идентификатору» и обновить. Теперь разберемся в настройках, которые определяют первый этап импорта по поиску и обновлению позиций. Сначала надо указать, какие поля нужно обновлять в случае, если позиция уже присутствует в базе НЭП. Можно указать одно или несколько полей, а можно и все, если есть подозрение, что поставщик мог вносить изменения. Необходимые для обновления поля помечаются галочкой слева в том же окне (4). Единственное поле, которое нельзя обновлять и, следовательно, бесполезно отмечать – поле Идентификатор (ключ). Так как по нему будет происходить сопоставление обновляемых позиций. В то же время данное поле будет импортироваться при добавлении новых, отсутствующих в базе позиций. {{:docs:import_from_excel_06.png?direct|}} 5) Здесь так же, как и в задаче 2, указываем поле идентификатор: «Артикул». 6) Указываем Диапазон. 7) Жмем «**Пуск**». ===== Дополнительные опции в окне импорта ===== **«Ключ может быть составным через разделитель»** Опция может пригодится, когда одно физическое поле в базе данных, например Артикул, может содержать несколько артикулов. В этом случае можно хранить несколько Артикулов в одной строке через разделитель «/» или «;». Такие ситуации могут возникать, когда поставщик со временем меняет артикулы у позиции, но старые продолжают использоваться. Выходом из этой ситуации может быть использование составного артикула, который позволяет хранить в одном поле старые и новый артикулы через разделитель. Т.е. если мы при импорте указываем в качестве идентификатора поле, которое в базе уже может хранится как составное, то в окне (7a) необходимо указать символ разделителя. В опции (7b) можно указать разделитель ячейки Excel с ключом. В этом случае будет осуществятся сопоставление каждой части составного значения ячейки Excel с ключом из базы данных. В опции (7с) указываются символы, которые могут присутствовать в ключе и должны подменятся на разделитель (7a). **«Исключать дублирование (записи в Excel файле) при обновлении»** Проверка на дублирование строк в Excel относительно колонки с «Идентификатором», включая составные. Если есть дубль, то значения будут браться из верхней строчки. **Отмечать цветом в документе Excel статус импорта** Будет произведённая цветовая подсветка ячеек Excel, которые обновились, добавились. Или возникла ошибка. **Включить дополнительный фильтр импорта** Указывается колонка и ее значение, которое будет явятся фильтром обрабатываемых строк. Например, нам нужно импортировать строки с определенным условием. Добавляем новую колонку, и напротив нужных строк указываем цифру «1» (можно рассчитывать формулой). Далее в установках фильтра на форме импорта указываем колонки и значение «1». Перед импортом не забыть сохранить файл! **Кнопка УСТАНОВКИ** Настройка пресетов для типовых задач импорта: Сохранение в файл и загрузка из файлов настроек импорта. ===== Еще информация ===== * В справочники можно импортировать атрибуты: в соответствующих колонках Excel нужно проставить 1, если есть атрибут и 0, если нет. * При импорте номенклатурных позиций, одновременно можно импортировать подчиненные справочники, такие как «Вендор» и «Единицы измерения». Примеры импорта таких справочников как раз есть в вышеразобранных примерах. * Что бы сразу распределить позиции по секциям. Можно заполнить любую колонку в Excel, как ID секции, и указать ее при импорте. * Как известно, при добавлении позиции в секцию значения некоторых полей берутся «по умолчанию» из значений полей самой секции. При импорте заполнение происходит аналогичным образом. Если значение «по умолчанию» перекрывается значением из импорта, то будут приняты последние.