Загрузка данных из Excel 1С 8.1

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

Рассмотрим пример.
Допустим у нас есть файл Excel. На первом листе присутствует следующая таблица данных:

Код Наименование Розничная цена
6461 Ванна Evolution 180×102/87 525
39311 Ванна Evolution PU-PLUS 180×102/87 675
11225 Ванна Magnolia 1,7х0.75 800
3567 Ванна Magnolia 1,8х0.75 700

Для импорта данных используем следующую функцию:

//Номер листа в книге Excel для получения данных
НомерЛиста         = 1;

//Пытаемся подключиться к Excel
Попытка
Excel = новый COMОбъект("Excel.Application");
Исключение
Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.");
Возврат;
КонецПопытки;

//Подключились удачно, открываем файл
Excel.Workbooks.Open(ИмяФайла);

//Открываем необходимый лист
Excel.Sheets(НомерЛиста).select();

//Получим количество строк и колонок.
//В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);
Если Версия = "8" тогда
ФайлСтрок   = Excel.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок   = Excel.Cells(1,1).SpecialCells(11).Row;
ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column;
Конецесли;

//Для установки цен необходимо создать документ "Установка цен номенклатуры"
//Заполним шапку документа, в т.ч. заполним тип цены и валюту
ТипЦеныРозничный                 = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная");
НоваяСтрока                      = ДокументУстановкиЦенГривна.ТипыЦен.Добавить();
НоваяСтрока.ТипЦен               = ТипЦеныРозничный;
ДокументУстановкиЦенГривна.Дата  = ТекущаяДата();
ВалютаГривна                     = Справочники.Валюты.НайтиПоКоду("980");

//определим по файлу в каких колонках необходимые данные
НомерКолонкиКодаТовара             = 1;
НомерКолонкиНаименованияТовара     = 2;
НомерКолонкиЦеныТовара             = 3;

// Выбираем данные из файла
Для а = НомерСтрокиТЧ по ФайлСтрок Цикл

//Получим данные из соответсвующих ячеек
КодТовара             = СокрЛП(Excel.Cells(а,НомерКолонкиКодаТовара).Value);
НаименованиеТовара    = СокрЛП(Excel.Cells(а,НомерКолонкиНаименованияТовара).Value);
Цена                  = Число(Excel.Cells(а,НомерКолонкиЦеныТовара).Value);

Товар = Справочники.Номенклатура.ПустаяСсылка();

// Ищем товар в справочнике по коду
Товар = Справочники.Номенклатура.НайтиПоКоду(КодТовара);

// Если не нашли по коду, то ищем по наименованию
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.НайтиПоНаименованию(тНаименование, Истина);
Конецесли;

//Если не нашли создаем новый
Если Товар.Пустая() Тогда
Товар                      = Справочники.Номенклатура.СоздатьЭлемент();
Товар.Код                  = КодТовара;
Товар.Наименование         =  НаименованиеТовара;
Товар.НаименованиеПолное   =  НаименованиеТовара;
Товар.Записать();
Конецесли;

//Запишем товар и цену в документ установки цен
НоваяСтрока                     = ДокументУстановкиЦенГривна.Товары.Добавить();
НоваяСтрока.Валюта              = ВалютаГривна;
НоваяСтрока.Цена                = Цена;
НоваяСтрока.Номенклатура        = Товар.Ссылка;
НоваяСтрока.ТипЦен              = ТипЦеныРозничный;
Конеццикла;

//Если в документе есть товары записываем и проводим
Если Не(ДокументУстановкиЦенГривна.Товары.Количество() = 0) Тогда
ДокументУстановкиЦенГривна.Записать(РежимЗаписиДокумента.Запись);
ДокументУстановкиЦенГривна.Записать(РежимЗаписиДокумента.Проведение);
Конецесли;

//Закрываем Excel
Excel.ActiveWorkbook.Close();   

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *