//Перем ExcelПриложение;
&НаКлиенте
Процедура ФайлЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВыборФайла.Фильтр = "Документ Excel (*.xls, *.xlsx)|*.xls;*.xlsx|Документ Excel (*.xlsx)|*.xlsx";
ВыборФайла.ПроверятьСуществованиеФайла = Истина;
ВыборФайла.ПолноеИмяФайла = Объект.ФайлЗагрузки;
Выбор = ВыборФайла.Выбрать();
Если НЕ Выбор Тогда
Возврат;
КонецЕсли;
Объект.ФайлЗагрузки = ВыборФайла.ВыбранныеФайлы[0];
КонецПроцедуры
&НаКлиенте
Процедура Загрузить(Команда)
//Если Объект.НомерЛиста > 3 И Объект.НомерЛиста < 9 Тогда
ВыгрузкаДанныхИзЕксель();
//Иначе
// Сообщить("Укажите номера листов от 4х до 8ми!");
//КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузкаДанныхИзЕксель()
Если ПустаяСтрока(Объект.ФайлЗагрузки) Тогда
Предупреждение("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.");
Возврат;
КонецЕсли;
Попытка
// Загрузка Microsoft Excel
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
Попытка
// Открытие файла Microsoft Excel
Состояние("Открытие файла Microsoft Excel...");
ExcelФайл = ExcelПриложение.WorkBooks.Open(Объект.ФайлЗагрузки);
Исключение
Сообщить("Ошибка открытия файла Microsoft Excel." + Объект.ФайлЗагрузки + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
Попытка
// Обработка файла Microsoft Excel
Состояние("Обработка файла Microsoft Excel...");
// Читаем данные первого листа книги
ExcelЛист = ExcelФайл.Sheets(1); // Какой лист читаем
ЧтениеИзФайлаСервера(ExcelЛист);
ПрошлоЧтение = Истина;
Исключение
Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
// Закрыть COM соединение для экономии памяти
ExcelПриложение.Quit();
ПрошлоЧтение = Ложь;
КонецПопытки;
Если ПрошлоЧтение Тогда
ExcelПриложение.Quit();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЧтениеИзФайлаСервера(ExcelЛист)
Если не ЗначениеЗаполнено(Объект.ФайлЗагрузки) Тогда
Сообщить("Может сначала выбрать файл!");
Возврат;
КонецЕсли;
АнализВыполнен = 1;
Лист = ExcelЛист;//.WorkSheets(1);
НомПоляАртикул1 = 4;
НомПоляАртикул2 = 5;
НомПоляНаим = 9;
НомПоляЦена = 11;
//ПолеДо = 5;
НомСтроки = 3;
Артикул1 = СокрЛП(Лист.Cells(НомСтроки, НомПоляАртикул1).Text);
Артикул2 = СокрЛП(Лист.Cells(НомСтроки, НомПоляАртикул2).Text);
Артикул = Артикул1 + Артикул2;
ПустыеСтроки = 0;
КодГр = 0;
ЗаписьЭлемСпр = Ложь;
Пока ПустыеСтроки < 7 Цикл // И НомСтроки<27 +3 - ?????????? ИЛИ НомСтроки<24
Артикул1 = СокрЛП(Лист.Cells(НомСтроки, НомПоляАртикул1).Text);
Артикул2 = СокрЛП(Лист.Cells(НомСтроки, НомПоляАртикул2).Text);
Артикул = Артикул1 + Артикул2;
НаимНом = СокрЛП(Лист.Cells(НомСтроки, НомПоляНаим).Text);
ЦенаНом = СокрЛП(Лист.Cells(НомСтроки, НомПоляЦена).Text);
ОписНом = СокрЛП(Лист.Cells(НомСтроки, 6).Text) + " / "+СокрЛП(Лист.Cells(НомСтроки, 7).Text);
НайдСимвол = Найти(ЦенаНом, "р");
Если НайдСимвол <> 0 Тогда
КолСимволов = (СтрДлина(ЦенаНом)+1)-НайдСимвол;
ЦенаНом = Лев(ЦенаНом, СтрДлина(ЦенаНом)-КолСимволов);
КонецЕсли;
ТутАрт = Найти(НРег(Артикул), "арт");
ТутНаим = Найти(Нрег(НаимНом), "наим");
Если ТутАрт <> 0 ИЛИ ТутНаим <> 0 Тогда
НомСтроки = НомСтроки + 1;
ПустыеСтроки = ПустыеСтроки + 1;
Продолжить;
КонецЕсли;
// тут записываем элементы ном-ры
Если ЗначениеЗаполнено(Артикул) и ЗначениеЗаполнено(НаимНом) Тогда
НайденаяНоменклатура = ПоискЭлементаСпрНоменклатуры(Артикул);
ЗаписьЭлемСпр = Истина;
Если НайденаяНоменклатура <> Неопределено Тогда
ЗаписьЦен(НайденаяНоменклатура, ЦенаНом);
Иначе
НовНомеклатура = ЗаписьНовогоЭлемНоменклатуры(НаимНом, Артикул, ОписНом);
ЗаписьЦен(НовНомеклатура, ЦенаНом);
КонецЕсли;
Иначе
ПустыеСтроки = ПустыеСтроки + 1;
// КонецЕсли;
КонецЕсли;
НомСтроки = НомСтроки + 1;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПоискРодГруппы(КодГр)
НайдГр = Справочники.Номенклатура.НайтиПоКоду(КодГр).Родитель;
Возврат(НайдГр);
КонецФункции
&НаСервере
Функция ПоискЭлементаСпрНоменклатуры(ПоискПоАртиклу)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул
|
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул = &Артикул";
Запрос.УстановитьПараметр("Артикул", ПоискПоАртиклу);
Рез = Запрос.Выполнить();
Если Рез.Пустой() Тогда
Возврат(Неопределено);
ИначеЕсли Рез.Выбрать().Количество() = 1 Тогда
Выборка = Рез.Выбрать();
Выборка.Следующий();
Возврат(Выборка.Ссылка);
КонецЕсли;
КонецФункции
&НаСервере
Процедура ОбновитьЦеныНоменклатуры(НайденаяНоменклатура)
КонецПроцедуры
&НаСервере
Функция ЗаписьНовогоЭлемНоменклатуры(НаимНом, Артикул, ОписНом) //
Группа = Справочники.Номенклатура.НайтиПоНаименованию("Категория4");
Если Группа.Пустая() Тогда
СоздГруппы = Справочники.Номенклатура.СоздатьГруппу();
СоздГруппы.Наименование = "Категория4";
СоздГруппы.Записать();
КонецЕсли;
Если Не Артикул="" Тогда
НовЭлСпрНоменклатуры = Справочники.Номенклатура.СоздатьЭлемент();
НовЭлСпрНоменклатуры.Наименование = НаимНом;
НовЭлСпрНоменклатуры.НаименованиеПолное = НаимНом;
НовЭлСпрНоменклатуры.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт"); // будет наверное меняться
НовЭлСпрНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Запас;
НовЭлСпрНоменклатуры.НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Товары"); // будет меняться
НовЭлСпрНоменклатуры.Комментарий = ОписНом;
НовЭлСпрНоменклатуры.Артикул = Артикул;
НовЭлСпрНоменклатуры.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Категория4");
Попытка
НовЭлСпрНоменклатуры.Записать();
Сообщить("Записана номенклатура: "+ НовЭлСпрНоменклатуры.Наименование);
Возврат(НовЭлСпрНоменклатуры.Ссылка);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецФункции
&НаСервере
Функция ЗаписьГруппыНоменклатуры(Группа1=Неопределено, Группа2=Неопределено, КодГр, КодГруппа2) //
Группа = Справочники.Номенклатура.НайтиПоНаименованию("Категория3");
Если Группа.Пустая() Тогда
СоздГруппы = Справочники.Номенклатура.СоздатьГруппу();
СоздГруппы.Наименование = "Категория3";
СоздГруппы.Записать();
КонецЕсли;
Группа = Справочники.Номенклатура.НайтиПоНаименованию(Группа2);
СоздГруппы = Справочники.Номенклатура.СоздатьГруппу();
СоздГруппы.Наименование = Группа2;
Если Группа1 = Неопределено Тогда
СоздГруппы.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Категория3");
Группа1 = Группа2;
ИначеЕсли ТипЗнч(Группа1) = Тип("Строка") Тогда
СоздГруппы.Родитель = Справочники.Номенклатура.НайтиПоНаименованию(Группа1);
КодГр = Справочники.Номенклатура.НайтиПоНаименованию(Группа1).код;
Иначе
СоздГруппы.Родитель = Группа1;
КодГр = Группа1.код;
КонецЕсли;
Попытка
//Справочники.Номенклатура.НайтиПоНаименованию(СоздГруппы.Наименование,Истина,СоздГруппы.Родитель);
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование = &Наименование
| И Номенклатура.Родитель = &Родитель" ;
Запрос.УстановитьПараметр("Наименование", СоздГруппы.Наименование);
Запрос.УстановитьПараметр("Родитель", СоздГруппы.Родитель);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество()=0 ТОгда
СоздГруппы.Записать();
Группа2 = СоздГруппы.Ссылка;
КодГруппа2 = СоздГруппы.Код;
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецФункции
Процедура ЗаписьЦен(ЭлемНом, ЦенаНом)
НаборЗап = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗап.Отбор.Номенклатура.Установить(ЭлемНом);
НаборЗап.Отбор.Период.Установить(ТекущаяДата());
НовЗапись = НаборЗап.Добавить();
НовЗапись.Номенклатура = ЭлемНом.Ссылка;
НовЗапись.Период = ТекущаяДата();
НовЗапись.ВидЦен = Справочники.ВидыЦен.Оптовая;
НовЗапись.Цена = ЦенаНом;
НовЗапись.ЕдиницаИзмерения = ЭлемНом.ЕдиницаИзмерения;
НаборЗап.Записать(Истина);
КонецПроцедуры
Структура прайса
Комментариев нет :
Отправить комментарий