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



//Перем 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 = СоздГруппы.Код;
  КонецЕсли; 
  
 Исключение
  Сообщить(ОписаниеОшибки());
 КонецПопытки; 

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



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


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



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

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

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