Импорт данных интернет-магазина в 1С: Управление торговлейИсточник: habrahabr sadomovalex
Недавно знакомый попросил помочь с задачей импортировать данные небольшого интернет-магазина в 1С: Управление торговлей 11. Т.к. по основной работе я имею дело с SharePoint и стеком .Net, мне понравилась идея расширить свой кругозор и попробовать что-то новое. Задача была поставлена следующим образом:
- провести одноразовую загрузку данных в 1С с последующей односторонней синхронизацией из 1С в интернет-магазин; - данные магазина хранятся в базе данных на MS SQL Server; - экспорт данных из SQL Server и импорт в 1С желательно осуществлять штатными средствами с минимумом кода. Эта статья написана на основе изучения форумов и документации 1С. В ней описывается процесс загрузки данных в 1С. Если тема будет востребована, в другой раз напишу, как настроить синхронизацию из 1С в интернет-магазин. Я попытался составить как можно более детальное описание процесса, чтобы его могли использовать люди, также как я не имеющие опыта работы с 1С. Надеюсь, что она поможет сэкономить время на выполнение этой типовой задачи и позволит избежать ошибок. Хотя в статье и говорится об экспорте данных из SQL Server, она будет полезна и с другими СУБД. Начнем с описания схемы базы данных. Нас интересуют таблицы c продуктами и категориями. Каждый продукт может относиться к нескольким категориям и каждая категория может содержать много продуктов. Кроме этого, каждая категория может иметь несколько подкатегорий, например, есть категория "Товары для спорта" и под ними категории для различных видов спорта. Для упрощения оставим только те аттрибуты, которые нам понадобятся для примера. Набор аттрибутов товаров у каждого магазина свой, но такие свойства как Название, Цена, Артикул возможно есть у большинства. Поэтому ограничимся 3 таблицами:
Вот схема базы: Сначала нам нужно выгрузить товары в файл из базы. Это сделать достаточно просто в SQL Management Studio: можно выполнить запрос в файл с фиксированной шириной колонок и потом открыть его как csv файл в Excel. Также можно просто скопировать результаты из таблицы с результатами Management Studio в Excel. Осталось написать нужный запрос. В интернет-магазине товар может относиться к нескольким категориям, но в 1С в стандартной настройке товары относятся к одной категории (Вид номенклатуры). Вероятно в 1С можно при желании настроить отношение многие ко многим между номенклатурой и видами номенклатуры, но мы ограничимся стандартной конфигурацией. Поэтому при экспорте для каждого товара будем брать первую категорию, у которой нет родительской категории (категория 1-го уровня). Чтобы написать запрос нам потребуется работать с иерархическими данными в таблице категорий. Для подобных запросов в SQL Server есть специальный механизм обобщенные табличные выражения (Common Table Expressions), но мы пойдем более простым и понятным путем, используя пользовательские функции (User Defined Functions). Сначала определим рекурсивную функцию для выборки категории 1-го уровня по заданному categoryId:
Затем функцию, которая вернет название первой категории 1-го уровня для заданого товара: Осталось написать сам запрос для экспортируемых товаров. С описанными функциями это просто: Возможно знатоки SQL смогут привести более простые решения и без использования пользовательских функций, но для данного примера нам будет достаточно приведенного выше решения. Итак, мы экспортировали данные в Excel. Следующий шаг - импорт в 1С. Товары в 1С: Управление торговлей (УТ) хранятся в справочнике Номенклатура. Для начала в этот справочник необходимо добавить дополнительный реквизит для хранения Id товара в базе данных интернет-магазина (как уже упоминалось, это нужно для последующей синхронизации товаров из 1С в интернет-магазин). Сделать это можно следующим образом: открываем любой товар в режиме редактирования и выбираем кнопку Дополнительные сведения (неприметная иконка сверху формы): В открывшемся окне выбираем Добавить > Общие свойства > Подбор > Создать и вводим название нового реквизита, например "Id товара на сайте": После того, как мы добавили новый реквизит в набор, нужно переоткрыть форму редактирования товара. Форма редактирования реквизита должна появиться на форме: Для запуска обработки ЗагрузкаДанныхИзТабличногоДокумента необходимо открыть 1С в режиме Обычное приложение (по умолчанию 1С УТ 11 открывается в режиме Управляемое приложение). Чтобы переключиться в режим обычного приложения в конфигураторе необходимо выбрать Администрирование > Пользователи > выбрать пользователя и на форме редактирования на вкладке Прочие в поле Режим запуска установить Обычное приложение. Также в настройках запуска информационной базы в поле Основной режим запуска должно стоять Выбирать автоматически. Теперь открываем информационную базу в режиме Обычное приложение и загружаем обработку ЗагрузкаДанныхИзТабличногоДокумента (Файл > Открыть). В открывшемся окне выбираем открыть Excel файл, который мы экспортировали из базы данных магазина: Перед импортом товаров нужно импортировать данные в зависимые справочники Производители и Виды номенклатуры, иначе эти поля останутся пустыми. Для импорта производителей вверху выбираем Режим загрузки = Загрузка в справочник, Вид справочника = Производители. На вкладке Настройка устанавливаем следующие значения: Здесь важно указать номер столбца и выбрать Поле поиска (иначе будут созданы дубликаты). После нажатия на Загрузить производители будут импортированы в справочник. По аналогии проводим импорт данных в справочник Виды номенклатуры. Только в отличие от производителей в стандартной конфигурации на вкладке Настройки необходимо установить также Вариант оформления продажи и Тип номенклатуры: Теперь можно приступать к импорту товаров. Устанавливаем настройки как показано на следующем рисунке: Для загрузки данных в дополнительный реквизит "Id товара на сайте", который мы создали выше, добавляем следующий обработчик в События > При записе объекта: После этого выполняем загрузку товаров. Если все сделано правильно, импорт пройдет успешно и при открытии формы редактирования с одним из товаров вы увидете его свойства, которые должны быть такими же, как в excel-е. Остался один шаг - импорт цены. Этот шаг сильно зависит от конкретной конфигурации и типа цен. Из общих шагов можно выделить следующие. На форме обработки выбираем Режим загрузки = Загрузка в табличную часть, Ссылка = Установка цен номенклатуры. Затем опять нажимаем Ссылка еще раз и добавляем новый документ: Таким образом мы загрузили данные из базы данных интернет-магазина в 1С для последующего использования в учете. Надеюсь, что эта статья поможет кому-нибудь сэкономить время и деньги на выполнение похожей задачи. Я не работаю с 1С, поэтому если специалисты найдут неточности в этой статье, прошу отнестись к ним снисходительно и рассматривать статью лишь как пособие для решения конкретной прикладной задачи. |