Имя: Пароль:
1C
1С v8
v8: Помощь в загрузке из Excel в ТЗ
,
0 Popkorm
 
27.02.12
14:43
Знаю, заезжаная тема но все же
нужна помощь,ошибка такая:
{Форма.ФормаОтчета.Форма(1939)}: Ошибка при вызове метода контекста (Cells)
           Если ЗначениеЗаполнено(СокрЛП(Excel.Cells(ТекСтрока,ЕксНаименование).Value)) Тогда //Номенклатура
по причине:
Произошла исключительная ситуация (0x800a03ec)

   ВыбФайл = Новый Файл(ИмяФайла);
   Если НЕ ВыбФайл.Существует() Тогда
       Сообщить("Файл не существует!");
       Возврат Ложь;
   КонецЕсли;
   Попытка
       Excel = Новый COMОбъект("Excel.Application");
       Excel.WorkBooks.Open(ИмяФайла);
       Состояние("Обработка файла Microsoft Excel...");
       ExcelЛист = Excel.Sheets(НомерЛистаExcel);
   Исключение
       Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
       Возврат ложь;
   КонецПопытки;
   
   ЕксНаименование = 0;
   ЕксКод = 0;
   ЕксТОРпродаж = 0;
   ЕксОстаток = 0;
   ЕксISBN = 0;
   ЕксЦена = 0;
   ЕксEAN  = 0;
   
   Для ТекКолонка = 1 по 30 Цикл
       ТекЯчейка = Нрег(СокрЛП(Excel.Cells(1,ТекКолонка).Value));
       Если ТекЯчейка="Наименование" Тогда
           ЕксНаименование = ТекКолонка;
       ИначеЕсли ТекЯчейка="Код" Тогда
           ЕксКод = ТекКолонка;
       ИначеЕсли ТекЯчейка="ТОР продаж" Тогда
           ЕксОстаток = ТекКолонка;
       ИначеЕсли ТекЯчейка="ISBN / ISMN" Тогда
           ЕксISBN = ТекКолонка;
       ИначеЕсли ТекЯчейка="Цена" Тогда
           ЕксЦена = ТекКолонка;
       ИначеЕсли ТекЯчейка="EAN" Тогда
           ЕксEAN = ТекКолонка;
       КонецЕсли;
   КонецЦикла;
       
   
   КолСтрокЕкс = Excel.ActiveSheet.UsedRange.Rows.Count;
   Для ТекСтрока = 1 по КолСтрокЕкс Цикл
       Состояние("Обработка файла XLS: " + ТекСтрока + " из " + КолСтрокЕкс);
           Если ЗначениеЗаполнено(СокрЛП(ExcelЛист.Cells(ТекСтрока,ЕксНаименование).Value)) Тогда //Номенклатура
               Если ЗначениеЗаполнено(СокрЛП(ExcelЛист.Cells(ТекСтрока,ЕксКод).Value)) Тогда //Код
                   ОфигКод      = СокрЛП(ExcelЛист.Cells(ТекСтрока,ЕксНаименование).Value);
                   НайдНом      = Справочники.Номенклатура.НайтиПоКоду("TD_"+ОфигКод);
1 Popkorm
 
27.02.12
14:45
если в заместо .Value поставить .Text такая же ошибка
2 mehfk
 
27.02.12
14:51
ТекЯчейка = Нрег(СокрЛП(Excel.Cells(1,ТекКолонка).Value));

ниже ведь правильно пишешь
3 Popkorm
 
27.02.12
14:55
(2)что нет так??!!
4 155153144627
 
27.02.12
14:59
Бл. пизнец :-)

ТекЯчейка = Нрег(СокрЛП(Excel.Cells(1,ТекКолонка).Value));
       Если ТекЯчейка="Наименование" Тогда

Переведено в нижний регистр, а сравнивается с верхним :-)
5 Alex S D
 
27.02.12
14:59
что у тебя в переменной ЕксНаименование?
6 155153144627
 
27.02.12
15:01
(5) null :-)
Или Неопределено?
7 Alex S D
 
27.02.12
15:01
(4) + , поэтому там красуется 0.. и ошибка..
8 155153144627
 
27.02.12
15:02
(7) А да 0, выше присвоено.
9 Popkorm
 
27.02.12
15:10
вот так в 7.7 у меня работает:
   Екс    = СоздатьОбъект("Excel.Application");
   Екс.workbooks.Open(ВыбФайлКлиент);
   // анализ заголовка
   ЕксИД = 0;
   ЕксИСБН = 0;
   ЕксЕАН = 0;
   ЕксКоличество = 0;
   ЕксПродажи = 0;
   Для ТекКолонка = 1 по 10 Цикл
       ТекЯчейка = Нрег(СокрЛП(Екс.Cells(1,ТекКолонка).Value));
       Если ТекЯчейка="isbn" Тогда
           ЕксИСБН = ТекКолонка;
       ИначеЕсли ТекЯчейка="id" Тогда
           ЕксИД = ТекКолонка;
       ИначеЕсли ТекЯчейка="ean" Тогда
           ЕксЕАН = ТекКолонка;
       ИначеЕсли ТекЯчейка="quantity" Тогда
           ЕксКоличество = ТекКолонка;
       ИначеЕсли ТекЯчейка="sale" Тогда
           ЕксПродажи = ТекКолонка;
       КонецЕсли;
   КонецЦикла;
   ТабКолКлиент = СоздатьОбъект("ТаблицаЗначений");
   ТабКолКлиент.НоваяКолонка("ИД","Строка",8);
   ТабКолКлиент.НоваяКолонка("ИСБН","Строка",17);
   ТабКолКлиент.НоваяКолонка("ЕАН","Строка",13);
   ТабКолКлиент.НоваяКолонка("Количество","Число",15,0);
   ТабКолКлиент.НоваяКолонка("Продажи","Число",15,0);

   КолСтрокЕкс = Екс.ActiveSheet.UsedRange.Rows.Count;
   
   Для ТекСтрока = 2 по КолСтрокЕкс Цикл
       
       Состояние("Обработка файла XLS: " + ТекСтрока + " из " + КолСтрокЕкс);
       
       Если ЕксКоличество <> 0 Тогда
           ТекКоличество = Число(Екс.Cells(ТекСтрока,ЕксКоличество).Value);
       Иначе
           ТекКоличество = 0;
       КонецЕсли;
       Если ЕксПродажи <> 0 Тогда
           ТекПродажи = Число(Екс.Cells(ТекСтрока,ЕксПродажи).Value);
       Иначе
           ТекПродажи = 0;
       КонецЕсли;
       
       Если ТекКоличество + ТекПродажи = 0 Тогда Продолжить;
       КонецЕсли;
       
       ТабКолКлиент.НоваяСтрока();
       Если ЕксИД <> 0 Тогда
           ТабКолКлиент.Ид = СокрЛП(Строка(Екс.Cells(ТекСтрока,ЕксИД).Value));
       КонецЕсли;
       Если ЕксИСБН <> 0 Тогда
           ТабКолКлиент.ИСБН = СокрЛП(Строка(Екс.Cells(ТекСтрока,ЕксИСБН).Value));
       КонецЕсли;
       Если ЕксЕАН <> 0 Тогда
           ТабКолКлиент.ЕАН = СокрЛП(Строка(Екс.Cells(ТекСтрока,ЕксЕАН).Value));
       КонецЕсли;

       ТабКолКлиент.Количество = ТекКоличество;
       ТабКолКлиент.Продажи = ТекПродажи;
   
   КонецЦикла;
   
   
   Екс.ActiveWindow.Close();
10 155153144627
 
27.02.12
15:14
Так у тебя в 7.7, ТекЯчейка погляди с какими значениями сравнивается.
И с какими ты сравниваешь в восьмерке.
Если еще не понял, то пиши так:




Для ТекКолонка = 1 по 30 Цикл
       ТекЯчейка = Нрег(СокрЛП(Excel.Cells(1,ТекКолонка).Value));
       Если ТекЯчейка="наименование" Тогда
           ЕксНаименование = ТекКолонка;
       ИначеЕсли ТекЯчейка="код" Тогда
           ЕксКод = ТекКолонка;
       ИначеЕсли ТекЯчейка="ТОР продаж" Тогда
           ЕксОстаток = ТекКолонка;
       ИначеЕсли ТекЯчейка="isbn / ismn" Тогда
           ЕксISBN = ТекКолонка;
       ИначеЕсли ТекЯчейка="цена" Тогда
           ЕксЦена = ТекКолонка;
       ИначеЕсли ТекЯчейка="ean" Тогда
           ЕксEAN = ТекКолонка;
       КонецЕсли;
   КонецЦикла;
11 Alex S D
 
27.02.12
15:15
+ в семерке идет еще проверка на 0, а где она у тебя?
12 Popkorm
 
27.02.12
15:18
(11)не усмотрел чета,щас попробую