Обработка прайса для 1С



//Перем 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 Тогда
  Выборка = Рез.Выбрать();
  Выборка.Следующий();
  Возврат(Выборка.Ссылка);
 КонецЕсли; 

КонецФункции

&НаСервере
Процедура ОбновитьЦеныНоменклатуры(НайденаяНоменклатура)
 
 
 
КонецПроцедуры 


&НаСервере
Функция ЗаписьНовогоЭлемНоменклатуры(НаимНом, Артикул)
 
 НовЭлСпрНоменклатуры = Справочники.Номенклатура.СоздатьЭлемент();
 НовЭлСпрНоменклатуры.Наименование = НаимНом;
 НовЭлСпрНоменклатуры.НаименованиеПолное =  НаимНом;
 НовЭлСпрНоменклатуры.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");  // будет наверное меняться
 НовЭлСпрНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Запас; 
 НовЭлСпрНоменклатуры.НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Товары"); // будет меняться
 НовЭлСпрНоменклатуры.Артикул=Артикул;
 
 Попытка
  
     //УправлениеСвойствами.ПередЗаписьюНаСервере(ЭлемФормы, НовЭлСпрНоменклатуры);
   НовЭлСпрНоменклатуры.Записать();
   Сообщить("Записана номенклатура: "+ НовЭлСпрНоменклатуры.Наименование);
   Возврат(НовЭлСпрНоменклатуры.Ссылка);
  Исключение
   Сообщить(ОписаниеОшибки());
  КонецПопытки;
  

КонецФункции 


Процедура ЗаписьЦен(ЭлемНом, ЦенаНом)
 
 НаборЗап = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
 НаборЗап.Отбор.Номенклатура.Установить(ЭлемНом);
 НаборЗап.Отбор.Период.Установить(ТекущаяДата());
 НовЗапись = НаборЗап.Добавить();
 НовЗапись.Номенклатура = ЭлемНом.Ссылка;
 НовЗапись.Период = ТекущаяДата();
 НовЗапись.ВидЦен = Справочники.ВидыЦен.Оптовая;
 НовЗапись.Цена = ЦенаНом;
 НовЗапись.ЕдиницаИзмерения = ЭлемНом.ЕдиницаИзмерения;
 НаборЗап.Записать(Истина);
 
 
КонецПроцедуры 
Структура прайса


Комментариев нет :

Отправить комментарий

Поиск по этому блогу