Рой

Рой

н

&НаКлиенте

Процедура ЗагрузитьТаблицу(Команда)

   ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

   

   ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";

   ДиалогВыбораФайла.Фильтр  = "Лист Excel (*.xls)|*.xls|";

   Если ДиалогВыбораФайла.Выбрать() Тогда

      

      ТабличныйДокумент = Объект.ТЧДокументов;

      ФайлНаДиске = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла);

      Если нРег(ФайлНаДиске.Расширение) = ".xls" Тогда

         мПрочитатьТабличныйДокументИзExcel(ДиалогВыбораФайла.ПолноеИмяФайла);

      КонецЕсли;

      

   КонецЕсли;

   

   

КонецПроцедуры

 

&НаКлиенте 

Функция мПрочитатьТабличныйДокументИзExcel(ИмяФайла, НомерЛистаExcel = 1) Экспорт

   

   ВыбФайл = Новый Файл(ИмяФайла);

   Если НЕ ВыбФайл.Существует() Тогда

      Сообщить("Файл не существует!");

      Возврат Ложь;

   КонецЕсли;

   

   Попытка

      Excel = Новый COMОбъект("Excel.Application");

      Excel.WorkBooks.Open(ИмяФайла);

      Сообщить("Обработка файла Microsoft Excel...");

      Лист = Excel.Sheets(НомерЛистаExcel);

   Исключение

      Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");

      Возврат ложь;

      

   КонецПопытки;

   

   //МОЙ КОД

   

   КолвоСтрок1 = Лист.UsedRange.Rows.Count;        

   //Сообщить("Количество строк: "+Строка(КолвоСтрок1));

   Индекс = 2; //Начинаем грузить со 2 строки

   Объект.ТЧДокументов.Очистить();   

   Пока Индекс<=(КолвоСтрок1) Цикл

      ОбработкаПрерыванияПользователя();

      Состояние("Читаю...");

      Сообщить(Строка(индекс-1)+"/"+Строка(КолвоСтрок1-1));

      //Сообщить("--------"+Лист.Cells(индекс,1).Value);

      

      СтрокаТЧ = Объект.ТЧДокументов.Добавить();   //Добавляем строку

      

      //НомерДок

      Если Лист.Cells(индекс,2).Value <> Неопределено и ЗначениеЗаполнено(СокрЛП(Лист.Cells(индекс,2).Value)) Тогда

         

         СтрокаТЧ.НомерДок = СокрЛП(Лист.Cells(индекс,2).Value);

      КонецЕсли;

      

      //ДатаДок

      Если Лист.Cells(индекс,3).Value <> Неопределено Тогда

         Год = Сред(Лист.Cells(индекс,3).Value,7,4);

         Месяц = Сред(Лист.Cells(индекс,3).Value,4,2);

         День = Лев(Лист.Cells(индекс,3).Value,2);

         Час = Сред(Лист.Cells(индекс,3).Value,12,2);

         Если Час = "0:" тогда

         Час = "00";//Сред(Лист.Cells(индекс,8).Value,11,2);

         Мин = Сред(Лист.Cells(индекс,3).Value,14,2);

         Сек = Сред(Лист.Cells(индекс,3).Value,17,2);

 

         Иначе

         Мин = Сред(Лист.Cells(индекс,3).Value,15,2);

         Сек = Сред(Лист.Cells(индекс,3).Value,18,2);

         КонецЕсли;

 

                  

         СтрокаТЧ.ДатаДок = Дата(Год,Месяц,День,Час,Мин,Сек);

      КонецЕсли;

      

      //Склад

      Если Лист.Cells(индекс,4).Value <> Неопределено и ЗначениеЗаполнено(СокрЛП(Лист.Cells(индекс,4).Value)) Тогда

         КодСклада = "00-000001";

         СкладОсн =  ПолучитьСкладНаСервере(КодСклада);

         

         Если СокрЛП(Лист.Cells(индекс,4).Value) = "Основной склад" Тогда

            СтрокаТЧ.Склад = СкладОсн;//Справочники.Склады.НайтиПоКоду("00-000001")

         Иначе СтрокаТЧ.Склад = СкладОсн;//Справочники.Склады.НайтиПоКоду("00-000001")

         КонецЕсли;

      КонецЕсли;

      

      //Контрагент

      Если Лист.Cells(индекс,6).Value <> Неопределено и ЗначениеЗаполнено(СокрЛП(Лист.Cells(индекс,6).Value)) Тогда

         ИНН = СтрЗаменить(СокрЛП(Лист.Cells(индекс,6).Value),Символы.нпп,""); //заменяем в ИНН разделитель числа на пустую строку

         СтрокаТЧ.Контрагент = ПолучитьКонтрагентаНаСервере(ИНН);

         

      КонецЕсли;

      

      //НомерВхДок

      Если Лист.Cells(индекс,7).Value <> Неопределено и ЗначениеЗаполнено(СокрЛП(Лист.Cells(индекс,7).Value)) Тогда

         СтрокаТЧ.НомервхДок = СокрЛП(Лист.Cells(индекс,7).Value);

      КонецЕсли;

      

      

      ////ДатаВхДок

      Если Лист.Cells(индекс,8).Value <> Неопределено Тогда

         Год = Сред(Лист.Cells(индекс,8).Value,7,4);

         Месяц = Сред(Лист.Cells(индекс,8).Value,4,2);

         День = Лев(Лист.Cells(индекс,8).Value,2);

         Час = Сред(Лист.Cells(индекс,8).Value,12,2);

         Если Час = "0:" тогда

         Час = "00";//Сред(Лист.Cells(индекс,8).Value,11,2);

         Мин = Сред(Лист.Cells(индекс,8).Value,14,2);

         Сек = Сред(Лист.Cells(индекс,8).Value,17,2);

 

         Иначе

         Мин = Сред(Лист.Cells(индекс,8).Value,15,2);

         Сек = Сред(Лист.Cells(индекс,8).Value,18,2);

         КонецЕсли;

         СтрокаТЧ.ДатаВхДок = Дата(Год,Месяц,День,Час,Мин,Сек);

      КонецЕсли;

      

      //Номенклатура

      Если Лист.Cells(индекс,10).Value <> Неопределено и ЗначениеЗаполнено(СокрЛП(Лист.Cells(индекс,10).Value)) Тогда

         КодНоменкл = "" + СтрЗаменить(СокрЛП(Лист.Cells(индекс,10).Value),Символы.нпп,""); //заменяем в ИНН разделитель числа на пустую строку

         СтрокаТЧ.Номенклатура = ПолучитьНоменклатуруНаСервере(КодНоменкл);

         

      КонецЕсли;

      

      //Колво

      Если Лист.Cells(индекс,11).Value <> Неопределено Тогда

         СтрокаТЧ.колво = Лист.Cells(индекс,11).Value;

      КонецЕсли;

      

      //Цена

      Если Лист.Cells(индекс,12).Value <> Неопределено Тогда

         СтрокаТЧ.цена = Лист.Cells(индекс,12).Value;

      КонецЕсли;

      

      //Сумма НДС

      Если Лист.Cells(индекс,14).Value <> Неопределено Тогда

         СтрокаТЧ.Суммандс = Лист.Cells(индекс,14).Value;

      КонецЕсли;

      

      //Сумма общая

      Если Лист.Cells(индекс,13).Value <> Неопределено Тогда

         СтрокаТЧ.Суммаобщ = Лист.Cells(индекс,13).Value;

      КонецЕсли;

      

      //Ставка НДС

      Если Лист.Cells(индекс,15).Value <> Неопределено и ЗначениеЗаполнено(СокрЛП(Лист.Cells(индекс,15).Value)) Тогда

         СтавкаСтрока = СокрЛП(Лист.Cells(индекс,15).Value);

         СтрокаТЧ.СтавкаНДС = ПолучитьСтавкуНаСервере(СтавкаСтрока);

         

               КонецЕсли;

      

      

      индекс = Индекс + 1;

   КонецЦикла;

   

   Excel.WorkBooks.Close();

   Excel = 0;

   

   Возврат Истина;

   

КонецФункции // ()

 

-- 


Report Page