(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С, поэтому если специалисты найдут неточности в этой статье, прошу отнестись к ним снисходительно и рассматривать статью лишь как пособие для решения конкретной прикладной задачи.

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


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Microsoft »
Обсудить материал в конференции Дизайн, графика, обработка изображений »
Написать редактору 
 Рекомендовать » Дата публикации: 26.12.2013 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft System Center Standard Core Sngl License/Software Assurance Pack OLP 2Licenses NoLevel CoreLic Qualified
Microsoft Visual Studio Professional 2017 Sngl OLP 1License NoLevel
Microsoft SQL CAL 2017 Sngl OLP 1License NoLevel UsrCAL
Microsoft Office 365 Бизнес. Подписка на 1 рабочее место на 1 год
Microsoft Office 365 Бизнес премиум. Подписка на 1 рабочее место на 1 год
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Работа в Windows и новости компании Microsoft
Новые программы для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Пишу программы на заказ профессионально (2942)
Пишу программы на заказ на языках Pascal (численные методы, списки, деревья, прерывания) под...
 
Подключение JavaScript (305)
Всем привет! Я подключаю JavaScript нижеприведенным образом. Код: <script...
 
Разработка устройств на микроконтроллерах (1)
Профессиональный программист. Основная специализация: МИКРОКОНТРОЛЛЕРЫ, АССЕМБЛЕР для любых...
 
Как восстановить рабочий стол? Помогите срочно надо! (3)
Windows 7 максимальная. В учетной записи сменила пароль и выключила комп, после включения...
 
Пять возможностей Windows, о которых вы могли не знать (5)
пыщпыщ
 
 
 



    
rambler's top100 Rambler's Top100