(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Импорт данных интернет-магазина в 1С: Управление торговлей

Источник: habrahabr
sadomovalex

Недавно знакомый попросил помочь с задачей импортировать данные небольшого интернет-магазина в 1С: Управление торговлей 11. Т.к. по основной работе я имею дело с SharePoint и стеком .Net, мне понравилась идея расширить свой кругозор и попробовать что-то новое. Задача была поставлена следующим образом:
- провести одноразовую загрузку данных в 1С с последующей односторонней синхронизацией из 1С в интернет-магазин;
- данные магазина хранятся в базе данных на MS SQL Server;
- экспорт данных из SQL Server и импорт в 1С желательно осуществлять штатными средствами с минимумом кода.

Эта статья написана на основе изучения форумов и документации 1С. В ней описывается процесс загрузки данных в 1С. Если тема будет востребована, в другой раз напишу, как настроить синхронизацию из 1С в интернет-магазин. Я попытался составить как можно более детальное описание процесса, чтобы его могли использовать люди, также как я не имеющие опыта работы с 1С. Надеюсь, что она поможет сэкономить время на выполнение этой типовой задачи и позволит избежать ошибок. Хотя в статье и говорится об экспорте данных из SQL Server, она будет полезна и с другими СУБД.

В стандартную поставку 1С: Управление торговлей входит обработка Загрузка данных из табличного документа (для тех, кто не имел опыта работы с 1С, поясню: это один файл ЗагрузкаДанныхИзТабличногоДокумента.epf, который можно найти на диске с дистрибутивом 1С), позволяющая загружать данные в различные справочники 1С, например, из файла MS Excel. Эту обработку мы и будем использовать для импорта. Преимущество использование стандартного функционала из коробки - экономия на разработке своего решения. В интернете можно найти несколько примеров использования этой обработки. Главным отличием данной статьи будет описание процедуры импорта не только стандартных реквизитов товаров, но и дополнительного реквизита, который мы создадим сами (см. ниже). Такого примера я не нашел, но в реальных сценариях он может быть очень востребованным. Например, нам потребуется дополнительный реквизит для товаров для хранения Id товара на сайте, чтобы потом можно было синхронизировать товары обратно из 1С в интернет-магазин. Можно было бы записать Id в один из стандартных реквизитов (использовать его не по назначению), но мы пойдем по более правильному, хотя и более сложному, пути.

Начнем с описания схемы базы данных. Нас интересуют таблицы c продуктами и категориями. Каждый продукт может относиться к нескольким категориям и каждая категория может содержать много продуктов. Кроме этого, каждая категория может иметь несколько подкатегорий, например, есть категория "Товары для спорта" и под ними категории для различных видов спорта. Для упрощения оставим только те аттрибуты, которые нам понадобятся для примера. Набор аттрибутов товаров у каждого магазина свой, но такие свойства как Название, Цена, Артикул возможно есть у большинства. Поэтому ограничимся 3 таблицами:

  1. Products
  2. Categories
  3. ProductCategories - промежуточная таблица в отношении многие ко многим между продуктами и категориями

Вот схема базы:

Сначала нам нужно выгрузить товары в файл из базы. Это сделать достаточно просто в SQL Management Studio: можно выполнить запрос в файл с фиксированной шириной колонок и потом открыть его как csv файл в Excel. Также можно просто скопировать результаты из таблицы с результатами Management Studio в Excel. Осталось написать нужный запрос.

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

Чтобы написать запрос нам потребуется работать с иерархическими данными в таблице категорий. Для подобных запросов в SQL Server есть специальный механизм обобщенные табличные выражения (Common Table Expressions), но мы пойдем более простым и понятным путем, используя пользовательские функции (User Defined Functions). Сначала определим рекурсивную функцию для выборки категории 1-го уровня по заданному categoryId:

create function dbo.get_parent_category(@categoryId int) returns nvarchar(256) begin declare @parentId int set @parentId = (select ParentCategoryId from dbo.Category where CategoryId = @categoryId) if @parentId is null begin return @categoryId end return dbo.get_parent_category(@parentId) end

Затем функцию, которая вернет название первой категории 1-го уровня для заданого товара:
create function dbo.get_parent_product_category(@productId int) returns nvarchar(256) begin declare @categoryId int, @parentCategory int declare @categoryName nvarchar(256) set @categoryId = (select top 1 c.CategoryId from dbo.Product p inner join dbo.ProductCategory pc on p.ProductId = pc.ProductId inner join dbo.Category c on pc.CategoryId = c.CategoryId where p.ProductId = @productId) set @parentCategory = dbo.get_parent_category(@categoryId) return (select Name from dbo.Category where CategoryId = @parentCategory) end

Осталось написать сам запрос для экспортируемых товаров. С описанными функциями это просто:
select Name, Price, Articul, Vendor, dbo.get_parent_product_category(ProductId), ProductId from Product order by p.Name

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

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

В открывшемся окне выбираем Добавить > Общие свойства > Подбор > Создать и вводим название нового реквизита, например "Id товара на сайте":

После того, как мы добавили новый реквизит в набор, нужно переоткрыть форму редактирования товара. Форма редактирования реквизита должна появиться на форме:

Для запуска обработки ЗагрузкаДанныхИзТабличногоДокумента необходимо открыть 1С в режиме Обычное приложение (по умолчанию 1С УТ 11 открывается в режиме Управляемое приложение). Чтобы переключиться в режим обычного приложения в конфигураторе необходимо выбрать Администрирование > Пользователи > выбрать пользователя и на форме редактирования на вкладке Прочие в поле Режим запуска установить Обычное приложение. Также в настройках запуска информационной базы в поле Основной режим запуска должно стоять Выбирать автоматически.

Теперь открываем информационную базу в режиме Обычное приложение и загружаем обработку ЗагрузкаДанныхИзТабличногоДокумента (Файл > Открыть). В открывшемся окне выбираем открыть Excel файл, который мы экспортировали из базы данных магазина:

Перед импортом товаров нужно импортировать данные в зависимые справочники Производители и Виды номенклатуры, иначе эти поля останутся пустыми. Для импорта производителей вверху выбираем Режим загрузки = Загрузка в справочник, Вид справочника = Производители. На вкладке Настройка устанавливаем следующие значения:

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

По аналогии проводим импорт данных в справочник Виды номенклатуры. Только в отличие от производителей в стандартной конфигурации на вкладке Настройки необходимо установить также Вариант оформления продажи и Тип номенклатуры:

Теперь можно приступать к импорту товаров. Устанавливаем настройки как показано на следующем рисунке:

Для загрузки данных в дополнительный реквизит "Id товара на сайте", который мы создали выше, добавляем следующий обработчик в События > При записе объекта:
Объект.ДополнительныеРеквизиты.Очистить(); свойствоИдентификатор = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Id товара на сайте", Истина); идентификаторНаСайте = Объект.ДополнительныеРеквизиты.Добавить(); идентификаторНаСайте.Свойство = свойствоИдентификатор; идентификаторНаСайте.Значение = ТекстыЯчеек[6]; Объект.Записать();

После этого выполняем загрузку товаров. Если все сделано правильно, импорт пройдет успешно и при открытии формы редактирования с одним из товаров вы увидете его свойства, которые должны быть такими же, как в excel-е.

Остался один шаг - импорт цены. Этот шаг сильно зависит от конкретной конфигурации и типа цен. Из общих шагов можно выделить следующие. На форме обработки выбираем Режим загрузки = Загрузка в табличную часть, Ссылка = Установка цен номенклатуры. Затем опять нажимаем Ссылка еще раз и добавляем новый документ:

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

Здесь важно, что мы указали из какого столбца будут браться цены при импорте. После этого можно загружать цены. Как я уже написал, процесс загрузки цен сильно зависит от конкретной конфигурации, поэтому здесь я не буду вдаваться в детали. Отмечу еще, что еще, возможно, потребуется согласовать созданный документ установки цен номенклатуры.

Таким образом мы загрузили данные из базы данных интернет-магазина в 1С для последующего использования в учете. Надеюсь, что эта статья поможет кому-нибудь сэкономить время и деньги на выполнение похожей задачи. Я не работаю с 1С, поэтому если специалисты найдут неточности в этой статье, прошу отнестись к ним снисходительно и рассматривать статью лишь как пособие для решения конкретной прикладной задачи.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 26.12.2013 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office для дома и учебы 2019 (лицензия ESD)
Microsoft 365 Business Standard (corporate)
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год.
Microsoft 365 Apps for business (corporate)
Microsoft 365 Business Basic (corporate)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Программирование на Visual Basic/Visual Studio и ASP/ASP.NET
Программирование на Visual С++
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100