Ситуация, когда торговые компании получают прайсы от поставщиков в формате 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();