Обработка прайса для 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(Объект.НомерЛиста);  // Какой лист читаем
   ЧтениеИзФайлаСервера(ExcelЛист);
   ПрошлоЧтение = Истина;
  
   Исключение
      Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
      // Закрыть COM соединение для экономии памяти
      ExcelПриложение.Quit();
   ПрошлоЧтение = Ложь;
   КонецПопытки;
   Если ПрошлоЧтение Тогда
    ExcelПриложение.Quit();
   КонецЕсли;
   
КонецПроцедуры 

&НаКлиенте
Процедура ЧтениеИзФайлаСервера(ExcelЛист)
 
 Если не ЗначениеЗаполнено(Объект.ФайлЗагрузки) Тогда
  Сообщить("Может сначала выбрать файл!");
  Возврат;
 КонецЕсли;
 АнализВыполнен = 1;
 Лист = ExcelЛист;//.WorkSheets(1);
 
 НомПоляАртикул = 1;
 НомСтрокиАртикул = 1;
 КолАрт = 0 ;
 КатНом = "";
 ПерКатНом = "";
 НайденАртикул = ПоискСтрокиПоляАртикула(ExcelЛист, НомСтрокиАртикул, НомПоляАртикул);
 Пока НайденАртикул Цикл
     КолАрт = КолАрт + 1;
  Артикул = СокрЛП(Лист.Cells(НомСтрокиАртикул+1, НомПоляАртикул).Text);
  СледСтрока = Ложь;  
  Пока Артикул <> "" Цикл
   Если Не СледСтрока Тогда
    НомПоляЦена = НомПоляАртикул;
    НайденаЦена = ПоискСтрокиПоляЦена(ExcelЛист, НомСтрокиАртикул, НомПоляЦена);
    Если НайденаЦена Тогда
     ЦенаНом = СокрЛП(Лист.Cells(НомСтрокиАртикул+1, НомПоляЦена).Text);
     НайдСимвол = Найти(ЦенаНом, "р");
     Если НайдСимвол <> 0 Тогда 
      КолСимволов = (СтрДлина(ЦенаНом)+1)-НайдСимвол;
      ЦенаНом = Лев(ЦенаНом, СтрДлина(ЦенаНом)-КолСимволов);
     КонецЕсли;
    Иначе
     ЦенаНом = 0;
    КонецЕсли;
   КонецЕсли; 
   НайденаяНоменклатура = ПоискЭлементаСпрНоменклатуры(Артикул);
   Если Не СледСтрока Тогда
    НаимНом = СокрЛП(Лист.Cells(НомСтрокиАртикул-1, НомПоляАртикул).Text); 
    КатНом = СокрЛП(Лист.Cells(НомСтрокиАртикул-2, НомПоляАртикул).Text);
    Если КатНом <>"" Тогда
     ПерКатНом = КатНом;
    КонецЕсли; 
   КонецЕсли;
   Если НайденаяНоменклатура <> Неопределено Тогда
    ЗаписьЦен(НайденаяНоменклатура, ЦенаНом);
   Иначе
    НПоля = НомПоляАртикул + 1;
    ОписаниеНом = "";
    Пока НПоля < НомПоляЦена Цикл
     ОписаниеНом = ОписаниеНом + СокрЛП(Лист.Cells(НомСтрокиАртикул+1, НПоля).Text)+"/";  
     НПоля = НПоля + 1; 
    КонецЦикла;  
    НовНомеклатура = ЗаписьНовогоЭлемНоменклатуры(НаимНом, Артикул, ОписаниеНом, ПерКатНом);
    ЗаписьЦен(НовНомеклатура, ЦенаНом);
    
   КонецЕсли;
            НомСтрокиАртикул = НомСтрокиАртикул + 1;
   Артикул = СокрЛП(Лист.Cells(НомСтрокиАртикул+1, НомПоляАртикул).Text);
   СледСтрока = Истина;
  КонецЦикла; 
  //
  НомСтрокиАртикул = НомСтрокиАртикул + 1;
  НайденАртикул = ПоискСтрокиПоляАртикула(ExcelЛист, НомСтрокиАртикул, НомПоляАртикул);
 КонецЦикла; 
  
 Сообщить(КолАрт);
 
  
 
КонецПроцедуры 


&НаКлиенте
Функция  ПоискСтрокиПоляЦена(Лист, НомСтрокиАртикул, НомПоляЦена)
 
 ПустыеСтроки = 0;
 ПустыеПоля = 0;
 
 Пока  ПустыеПоля < 3 Цикл //+3 - ??????????  ИЛИ НомСтроки<24 
  
  НаверноеЦена = СокрЛП(Лист.Cells(НомСтрокиАртикул, НомПоляЦена).Text); 
  ТутЦена = Найти(НРег(НаверноеЦена), "цен");
   
  Если ТутЦена <> 0 Тогда
   Возврат(Истина);
  ИначеЕсли НаверноеЦена = "" Тогда
   ПустыеПоля = ПустыеПоля + 1;
   
  Иначе 
   НомПоляЦена = НомПоляЦена + 1;
     
  КонецЕсли; 
   
 КонецЦикла; 
 Возврат(Ложь);
 
КонецФункции 


&НаКлиенте
Функция  ПоискСтрокиПоляАртикула(Лист, НомСтрокиАртикул, НомПоляАртикул)
 
 ПустыеСтроки = 0;
 ПустыеПоля = 0;
 
 Пока  ПустыеСтроки < 7 ИЛИ ПустыеПоля < 7 Цикл //+3 - ??????????  ИЛИ НомСтроки<24 
  
  НаверноеАртикул = СокрЛП(Лист.Cells(НомСтрокиАртикул, НомПоляАртикул).Text); 
  ТутАрт = Найти(НРег(НаверноеАртикул), "арт");
   
  Если ТутАрт <> 0 Тогда
   Возврат(Истина);
  ИначеЕсли НаверноеАртикул = "" Тогда
   ПустыеСтроки = ПустыеСтроки + 1;
   НомСтрокиАртикул = НомСтрокиАртикул + 1;
   Если ПустыеСтроки = 7 Тогда
    Если ПустыеПоля < 8 Тогда
     ПустыеСтроки = 0;
    КонецЕсли; 
    ПустыеПоля = ПустыеПоля + 1;
    НомПоляАртикул = НомПоляАртикул + 1;
    НомСтрокиАртикул = 1;
   КонецЕсли; 
  Иначе 
   НомСтрокиАртикул = НомСтрокиАртикул + 1;
     
  КонецЕсли; 
   
 КонецЦикла; 
 Возврат(Ложь);
 
КонецФункции 

&НаСервере
Функция ПоискЭлементаСпрНоменклатуры(ПоискПоАртиклу)

 Запрос = Новый Запрос;
 Запрос.Текст = 
 "ВЫБРАТЬ
 | Номенклатура.Ссылка КАК Ссылка,
 | Номенклатура.Наименование КАК Наименование,
 | Номенклатура.Артикул
 | 
 |ИЗ
 | Справочник.Номенклатура КАК Номенклатура
 |ГДЕ
 | Номенклатура.Артикул = &Артикул";
 Запрос.УстановитьПараметр("Артикул", ПоискПоАртиклу);
 Рез = Запрос.Выполнить();
 Если Рез.Пустой() Тогда
  Возврат(Неопределено);
 ИначеЕсли Рез.Выбрать().Количество() = 1 Тогда
  Выборка = Рез.Выбрать();
  Выборка.Следующий();
  Возврат(Выборка.Ссылка);
 КонецЕсли; 

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

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


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

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


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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
 Объект.НомерЛиста = 1;
КонецПроцедуры



Структура прайса


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

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

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