Рой
н&НаКлиенте
Процедура ЗагрузитьТаблицу(Команда)
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";
ДиалогВыбораФайла.Фильтр = "Лист 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;
Возврат Истина;
КонецФункции // ()
--