//Перем ExcelПриложение;
&НаКлиенте
Процедура ФайлЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВыборФайла.Фильтр = "Документ Excel (*.xls, *.xlsx)|*.xls;*.xlsx|Документ Excel (*.xlsx)|*.xlsx";
ВыборФайла.ПроверятьСуществованиеФайла = Истина;
ВыборФайла.ПолноеИмяФайла = Объект.ФайлЗагрузки;
Выбор = ВыборФайла.Выбрать();
Если НЕ Выбор Тогда
Возврат;
КонецЕсли;
Объект.ФайлЗагрузки = ВыборФайла.ВыбранныеФайлы[0];
КонецПроцедуры
&НаКлиенте
Процедура Загрузить(Команда)
ВыгрузкаДанныхИзЕксель();
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузкаДанныхИзЕксель()
Если ПустаяСтрока(Объект.ФайлЗагрузки) Тогда
Предупреждение("Для запуска обработки необходимо предварительно выбрать файл 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;
НомПоляНаим = 2;
НомПоляЦена = 5;
ПолеДо = 5;
НомСтроки = 8;
Артикул = СокрЛП(Лист.Cells(НомСтроки, НомПоляАртикул).Text);
Пока Артикул <> "" И НомСтроки<6000 data-blogger-escaped--="" data-blogger-escaped-ells="" data-blogger-escaped-ext=""> 0 Тогда
КолСимволов = (СтрДлина(ЦенаНом)+1)-НайдСимвол;
ЦенаНом = Лев(ЦенаНом, СтрДлина(ЦенаНом)-КолСимволов);
КонецЕсли;
Если ЗначениеЗаполнено(Артикул) Тогда
НайденаяНоменклатура = ПоискЭлементаСпрНоменклатуры(Артикул);
Если НайденаяНоменклатура <> Неопределено Тогда
ЗаписьЦен(НайденаяНоменклатура, ЦенаНом);
//ОбновитьЦеныНоменклатуры(НайденаяНоменклатура);
//НайденаПозиция = Истина;
Иначе
НовНомеклатура = ЗаписьНовогоЭлемНоменклатуры(НаимНом, Артикул);
// ЭлемФормы = НовНомеклатура.ПолучитьФорму("ФормаЭлемента");
//ЭлемФормы.ОсновнаяЦенаПродажи = 15;
// УправлениеСвойствами.ПередЗаписьюНаСервере(ЭлемФормы, НовНомеклатура);
ЗаписьЦен(НовНомеклатура, ЦенаНом);
//Сообщить(Артикул);
КонецЕсли;
//ПустыеКолонки = ПустыеКолонки + 1;
//
//Если ПустыеКолонки < 10 Тогда
// Продолжить;
//Иначе
// Прервать;
//КонецЕсли;
КонецЕсли;
НомСтроки = НомСтроки + 1;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПоискЭлементаСпрНоменклатуры(ПоискПоАртиклу)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул
|
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул = &Артикул";
Запрос.УстановитьПараметр("Артикул", ПоискПоАртиклу);
Рез = Запрос.Выполнить();
Если Рез.Пустой() Тогда
Возврат(Неопределено);
ИначеЕсли Рез.Выбрать().Количество() = 1 Тогда
Выборка = Рез.Выбрать();
Выборка.Следующий();
Возврат(Выборка.Ссылка);
КонецЕсли;
КонецФункции
&НаСервере
Процедура ОбновитьЦеныНоменклатуры(НайденаяНоменклатура)
КонецПроцедуры
&НаСервере
Функция ЗаписьНовогоЭлемНоменклатуры(НаимНом, Артикул)
НовЭлСпрНоменклатуры = Справочники.Номенклатура.СоздатьЭлемент();
НовЭлСпрНоменклатуры.Наименование = НаимНом;
НовЭлСпрНоменклатуры.НаименованиеПолное = НаимНом;
НовЭлСпрНоменклатуры.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт"); // будет наверное меняться
НовЭлСпрНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Запас;
НовЭлСпрНоменклатуры.НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Товары"); // будет меняться
НовЭлСпрНоменклатуры.Артикул=Артикул;
Попытка
//УправлениеСвойствами.ПередЗаписьюНаСервере(ЭлемФормы, НовЭлСпрНоменклатуры);
НовЭлСпрНоменклатуры.Записать();
Сообщить("Записана номенклатура: "+ НовЭлСпрНоменклатуры.Наименование);
Возврат(НовЭлСпрНоменклатуры.Ссылка);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецФункции
Процедура ЗаписьЦен(ЭлемНом, ЦенаНом)
НаборЗап = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗап.Отбор.Номенклатура.Установить(ЭлемНом);
НаборЗап.Отбор.Период.Установить(ТекущаяДата());
НовЗапись = НаборЗап.Добавить();
НовЗапись.Номенклатура = ЭлемНом.Ссылка;
НовЗапись.Период = ТекущаяДата();
НовЗапись.ВидЦен = Справочники.ВидыЦен.Оптовая;
НовЗапись.Цена = ЦенаНом;
НовЗапись.ЕдиницаИзмерения = ЭлемНом.ЕдиницаИзмерения;
НаборЗап.Записать(Истина);
КонецПроцедуры
Структура прайса Обработка прайса для 1С
Подписаться на:
Комментарии к сообщению
(
Atom
)
Комментариев нет :
Отправить комментарий