Ошибка при вызове метода контекста cells неизвестная ошибка

твориться непонятная штука у клиентов время от времени вылетает сообщение цитирую полностью:

{Обработка.ИмпортСпецификации.Форма.Форма(178)}: Ошибка при вызове метода контекста (Cells): Неизвестная ошибка

Ячейки.Добавить(Лист.Cells(НомерСтроки, 1+НомерКолонки).Value);

эта обработка просто читает данные из экселя и ниче боле.. никокой записи в эксель не производит!!

причем один и тотже файл экселя если несколько раз подряд прогнать то не факт что это ошибка вылезет.. тоесть никокой логики..

пробовал у себя получить эту ошибку.. удалось только первый раз.. потом сколько не пробовал не получалось её сгенерить..

всю голову уже сломал..  нужен хелп или мне не жить..

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Olga3891

Дата регистрации: 10.10.2006
Сообщений: 497

внешняя обработка. читается файлик из ексель. база серверная, «100 лет» обработка работала, и вот вдруг перестала файлики читать, Ошибка при вызове метода контекста (Cells)
НомерИсследования=ТекЛист.Cells(2,3).Value;
по причине:
Неизвестная ошибка
причем вылетает то в одном месте при попытке cells, то в другом. на файловой базе все норм.
голову уже сломала, что еще предпринять.
сервер 1с перегружала.

ABell

Дата регистрации: 22.07.2007
Сообщений: 324

Аналогично. Если не стоит Микрософтовский Excel на машине.

Показывать по
10
20
40
сообщений

Здравствуйте! Подскажите, пожалуйста! Загружаю из Excel данные, хочу обратиться к именованной области, выдает следующую ошибку: «Ошибка при вызове метода контекста (Cells): Произошла исключительная ситуация (0x800a03ec)
ФайлСтрок = Excel.Cells(2,1).SpecialCells(21).Row;
по причине:
Произошла исключительная ситуация (0x800a03ec)»

Процедура ОсновныеДействияФормыЗагрузить(Кнопка)

НомерКолонкиАртикул = ЭлементыФормы.ТабличныйДокумент.Область(«R2C1»;
НомерКолонкиНаименованияТовара = ЭлементыФормы.ТабличныйДокумент.Область(«R2C2»;
НомерКолонкиЕдиницаИзмерения = ЭлементыФормы.ТабличныйДокумент.Область(«R2C3»;
НомерКолонкиСтрана = ЭлементыФормы.ТабличныйДокумент.Область(«R2C4»;

//В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
Excel = новый COMОбъект(«Excel.Application»;

Версия = Лев(Excel.Version,Найти(Excel.Version,».»-1);
Если Версия = «8» тогда
ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Excel.Cells(2,1).SpecialCells(21).Row;
ФайлКолонок = Excel.Cells(2,1).SpecialCells(21).Column;
Конецесли;

// Выбираем данные из файла
Для а = Excel.Cells(2,1).SpecialCells(21).Row по ФайлСтрок Цикл

//Полуим данные из соответсвующих ячеек
Артикул = СокрЛП(Excel.Cells(а,Артикул).Value);
НаименованиеТовара = СокрЛП(Excel.Cells(а,НомерКолонкиНаименованияТовара).Value);
ЕдиницаИзмерения = СокрЛП(Excel.Cells(а,НомерКолонкиЕдиницаИзмерения).Value);

Товар = Справочники.Номенклатура.ПустаяСсылка();

// Ищем товар в справочнике по коду
Товар = Справочники.Номенклатура.НайтиПоКоду.Артикул;

// Если не нашли по коду, то ищем по наименованию
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.НайтиПоНаименованию.Наименование;
Конецесли;

//Если не нашли создаем новый
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.СоздатьЭлемент();
Товар.Наименование = НаименованиеТовара;
Товар.Артикул = Артикул;
Товар.БазоваяЕдиницаИзмерения = ЕдиницаИзмерения;
Товар.СтранаПроисхождения = НомерКолонкиСтрана;
Товар.Записать();
Конецесли;
КонецЦикла;

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

Heltarion

2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

1

02.12.2011, 11:18. Показов 8319. Ответов 11

Метки нет (Все метки)


Добрый день!
Посмотрите пожалуйста. Есть в обработке таблица значений, в которую я выгружаю данные их XML, после этого я корректирую таблицу и хочу чтобы программа сохранила ее в новый документ эксель. Для этого я создал процедуру «Процедура СохранитьНажатие(Элемент) Экспорт». При сохранении выскакивает: «Ошибка при установке значения атрибута контекста (Value)». Насколько я понимаю, программе не нравится тип значения, который я передаю.
Переменные:

ТПП — «табличное поле правил», в ней уже занесены некотрые значения из XML
НоменклатураЗагрузки, НоменклатураБазы — имена столбцов ТПП
СтолбЗагр, СтолбБаз — столбцы в экселе

Код процедуры:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
СтолбЗагр = 1;
СтолбБаз = 2;
 
Если ИнициализацияЭкселя() Тогда
      Книга = Excel.WorkBooks.Add();
      Sheet = Книга.Sheets(1);
    
      Для каждого стр из ТПП Цикл
              Sheet.Cells(стр,СтолбЗагр).Value=стр.НоменклатураЗагрузки;
              Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБазы;
      КонецЦикла;
 
      Попытка
              Книга.SaveAs("F:1CBaseВнешнии обработкиправила.xls");
      Исключение
              Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
              Возврат;
      КонецПопытки;
КонецЕсли;
Сообщить("Готово");

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

308 / 308 / 1

Регистрация: 16.01.2011

Сообщений: 1,073

02.12.2011, 11:32

2

СохранитьНажатие(Элемент) это событие формы
в этой процедуре пропиши вызов другой процедуры, например СохранитьВЭксель();
саму же процедуру СохранитьВЭксель() добавь в модуль объекта и сделай её экспортной. Вставь свой код представленный выше.
обращение из формы будет ЭтотОбъект.СохранитьВЭксель();

1

2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

02.12.2011, 11:56

 [ТС]

3

СохранитьНажатие(Элемент) это событие формы
в этой процедуре пропиши вызов другой процедуры, например СохранитьВЭксель();
саму же процедуру СохранитьВЭксель() добавь в модуль объекта и сделай её экспортной. Вставь свой код представленный выше.
обращение из формы будет ЭтотОбъект.СохранитьВЭксель();

В МодулеОбъекта создал функцию «Процедура СохранитьВЭксель(ТПП) Экспорт»
Прописал в ней тотже код, что выше. В событии формы написал: ЭтотОбъект.СохранитьВЭксель(ТПП);
Выскочила ошибка: Ошибка при вызове метода контекста (Cells)
Что я нетак сделал?

0

308 / 308 / 1

Регистрация: 16.01.2011

Сообщений: 1,073

02.12.2011, 12:10

4

процедуру ИнициализацияЭкселя() тоже закинь в модуль объекта
СохранитьВЭксель(ТПП), параметр ТПП скорее всего не нужен

1

2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

02.12.2011, 12:19

 [ТС]

5

Да я именно так и сделал, просто забыл упомянуть, ТПП нужна в противном случае он не понимает что это за переменная

Добавлено через 4 минуты
Проблема вот в чем:
Sheet.Cells(стр,СтолбЗагр).Value=1;
Sheet.Cells(стр,СтолбБаз).Value=2;

Так работает, но если я поставлю
Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБа зы;
Выдает ошибку «Ошибка при установке значения атрибута контекста (Value)».

Дело в том что «стр.НоменклатураБазы» — это справочник ссылка, если у нее текстовый тип то программа глотает и записывает.

0

19 / 18 / 1

Регистрация: 15.11.2011

Сообщений: 54

02.12.2011, 12:22

6

чет вы мудрено делаете.
У вас не правильно указывается адресс ячейки в cell. Если стр — это коллекция или массив записей, то он не может нести в себе номер ячейки.
Не знаком с 1C, но програмлю в Excel и делаю выгрузки из других систем.

1

2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

02.12.2011, 12:28

 [ТС]

7

В данный момент ему не нравится присваемое значение к ячейке экселя (если я правильно понимаю сообщение «Ошибка при установке значения атрибута контекста (Value)» )

Причем если тип значения строка, то он его получает без вопросо, если тип значения СправочникССсылка, то он руегается на «Ошибка при установке значения атрибута контекста (Value)».

Я просто не понимаю как обратиться к такому типу переменных чтобы получить значение типа строка.

0

19 / 18 / 1

Регистрация: 15.11.2011

Сообщений: 54

02.12.2011, 12:30

8

а принудительно все значения в текст перевести нельзя?

1

308 / 308 / 1

Регистрация: 16.01.2011

Сообщений: 1,073

02.12.2011, 12:30

9

стр.НоменклатураБазы.Наименование например

1

2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

02.12.2011, 12:32

 [ТС]

10

стр.НоменклатураБазы — это уже есть наименование интересующего меня поля (имя столбца), в некотрых случаях можно писать: стр.НоменклатураБазы.Значение, но это нетот случай

Добавлено через 56 секунд
Спасибо вам большое, вы меня на правильный путь направили, мне сейчас только понять как получить значение из данного элемента

0

308 / 308 / 1

Регистрация: 16.01.2011

Сообщений: 1,073

02.12.2011, 12:34

11

значение из Excel?

1

Heltarion

2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

02.12.2011, 12:43

 [ТС]

12

Рабочий код:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Функция ИнициализацияЭкселя()
 
    //Пытаемся подключиться к Excel
    Попытка
        Excel = новый COMОбъект("Excel.Application");
        Сообщить("=====> Загрузка производится через MS Excel...");
        Возврат Истина;
    Исключение
        Возврат Ложь                
    КонецПопытки;     
    
КонецФункции
 
 
Процедура СохранитьНажатие(Элемент) Экспорт
    СтолбЗагр = 1; // задаю номер столбца№1 в эксель
    СтолбБаз = 2;  // задаю номер столбца№2 в эксель
    
    Если ИнициализацияЭкселя() Тогда
        Книга = Excel.WorkBooks.Add(); // создал новый документ
        Sheet = Книга.Sheets(1);          // открыл страницу 1
   
// цикл для заполнения таблицы эксель данными из табличного поля (по двум полям)     
        Для каждого стр из ТПП Цикл
            Sheet.Cells(стр,СтолбЗагр).Value=стр.НоменклатураЗагрузки;
            Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБазы.Наименование;
        КонецЦикла;
 
//выполняю сохранение документа       
        Попытка
            Книга.SaveAs("F:1CBaseВнешнии обработкиправила12.xlsx");
        Исключение
            Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
            Возврат;
        КонецПопытки;
    КонецЕсли;
    Книга.Application.Quit();
    Сообщить("Готово");
КонецПроцедуры

0

  1. 20.12.2016, 13:59

    #1

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию COM-объект и Excel

    Создаю COM-объект и пытаюсь открыть файл Excel:
    ex=Новый ComОбъект(«Excel.Application»);
    ex.WorkBooks.Open(Файл);
    Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:

    Ошибка при вызове метода контекста (Open)
    ex.WorkBooks.Open(Файл);
    по причине:
    Неизвестная ошибка
    Сталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
    Если что-то с Excel, то что?


  2. 20.12.2016, 15:25

    #2

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: COM-объект и Excel

    Цитата Сообщение от lilyapo
    Посмотреть сообщение

    Создаю COM-объект и пытаюсь открыть файл Excel:
    ex=Новый ComОбъект(«Excel.Application»);
    ex.WorkBooks.Open(Файл);
    Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:

    Ошибка при вызове метода контекста (Open)
    ex.WorkBooks.Open(Файл);
    по причине:
    Неизвестная ошибка
    Сталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
    Если что-то с Excel, то что?

    Ты открываешь Апликайшон — а как ты это открываешь (интерактивно или же на сервере)? Опять же у тебя какой эксель (32-х разрядный или же 64-х разрядный) и в каком контексте пытаешься открыть (в 32-х разрядном клиенте или же на стороне 64-х разрядного сервера)?


  3. 20.12.2016, 15:55

    #3

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Все очень просто.
    Файловая база.
    Excel 2010. Файл лежит на том же диске, что и база и открывающая его обработка.
    Никакого клиент-серверного режима нет.


  4. 20.12.2016, 16:31

    #4

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: COM-объект и Excel

    А попробуй «завернуть» в Попытку

    Что выдаст?

    Попытка
    Excel = Новый COMОбъект(«Excel.Application»);
    Excel.WorkBooks.Open(ИмяФайла);
    Состояние(«Обработка файла Microsoft Excel…»);
    Исключение
    Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;


  5. 20.12.2016, 17:04

    #5

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Все то же самое.
    Ошибка при вызове метода контекста (Open): Неизвестная ошибка
    ОписаниеОшибки()=»»


  6. 20.12.2016, 17:25

    #6

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: COM-объект и Excel

    [QUOTE=lilyapo;469920]Все то же самое.
    Ошибка при вызове метода контекста (Open): Неизвестная ошибка

    похоже у тебя проблема с com-ом. А у тебя Excel нормально в реестре зареген? Ты его видишь в com-объектах?

    Попробуй подключиться к открытому «ручками» экселю

    Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна

    Excel = ПолучитьCOMОбъект(, «Excel.Application»);
    При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
    Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.


  7. Пользователь сказал cпасибо:


  8. 20.12.2016, 17:41

    #7

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Все получилось!
    Спасибо огромное, фантастика!:dance:


  9. 13.09.2018, 12:20

    #8

    KrisLis вне форума


    Гость форума


    По умолчанию Re: COM-объект и Excel

    Цитата Сообщение от lilyapo
    Посмотреть сообщение

    Все получилось!
    Спасибо огромное, фантастика!:dance:

    Пожалуйста. расскажите, как решили проблему.
    Такая же ситуация на одном из компьютеров. Перепробовали все рекомендации из интернета. Ничего не помогает.


  10. 13.09.2018, 13:10

    #9

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Попробуй подключиться к открытому «ручками» экселю

    Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна

    Excel = ПолучитьCOMОбъект(, «Excel.Application»);
    При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
    Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.
    Так я справилась с проблемой


В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


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

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


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

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник

Рис.3 Синтакс-помощник

В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Здравствуйте! Подскажите, пожалуйста! Загружаю из Excel данные, хочу обратиться к именованной области, выдает следующую ошибку: «Ошибка при вызове метода контекста (Cells): Произошла исключительная ситуация (0x800a03ec)
ФайлСтрок = Excel.Cells(2,1).SpecialCells(21).Row;
по причине:
Произошла исключительная ситуация (0x800a03ec)»

Процедура ОсновныеДействияФормыЗагрузить(Кнопка)

НомерКолонкиАртикул = ЭлементыФормы.ТабличныйДокумент.Область(«R2C1»;
НомерКолонкиНаименованияТовара = ЭлементыФормы.ТабличныйДокумент.Область(«R2C2»;
НомерКолонкиЕдиницаИзмерения = ЭлементыФормы.ТабличныйДокумент.Область(«R2C3»;
НомерКолонкиСтрана = ЭлементыФормы.ТабличныйДокумент.Область(«R2C4»;

//В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
Excel = новый COMОбъект(«Excel.Application»;

Версия = Лев(Excel.Version,Найти(Excel.Version,».»-1);
Если Версия = «8» тогда
ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Excel.Cells(2,1).SpecialCells(21).Row;
ФайлКолонок = Excel.Cells(2,1).SpecialCells(21).Column;
Конецесли;

// Выбираем данные из файла
Для а = Excel.Cells(2,1).SpecialCells(21).Row по ФайлСтрок Цикл

//Полуим данные из соответсвующих ячеек
Артикул = СокрЛП(Excel.Cells(а,Артикул).Value);
НаименованиеТовара = СокрЛП(Excel.Cells(а,НомерКолонкиНаименованияТовара).Value);
ЕдиницаИзмерения = СокрЛП(Excel.Cells(а,НомерКолонкиЕдиницаИзмерения).Value);

Товар = Справочники.Номенклатура.ПустаяСсылка();

// Ищем товар в справочнике по коду
Товар = Справочники.Номенклатура.НайтиПоКоду.Артикул;

// Если не нашли по коду, то ищем по наименованию
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.НайтиПоНаименованию.Наименование;
Конецесли;

//Если не нашли создаем новый
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.СоздатьЭлемент();
Товар.Наименование = НаименованиеТовара;
Товар.Артикул = Артикул;
Товар.БазоваяЕдиницаИзмерения = ЕдиницаИзмерения;
Товар.СтранаПроисхождения = НомерКолонкиСтрана;
Товар.Записать();
Конецесли;
КонецЦикла;

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

Ошибка при выборе листа эксель

Я

  

falselight

21.03.19 — 10:34

Использую обработку для загрузки данных с эксель листов.

На форме появилось дерево, файла эксель и его листов. Выбираю лист.

Жму прочитать, в тз появляются данные.

Но если выбрать другой лист и нажать прочитать, то, выходит ошибка

{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(319)}: Ошибка при вызове метода контекста (Sheets)

    Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();  

по причине:

Произошла исключительная ситуация (0x800a03ec)

То есть как её исключить? Что бы перечитывался другой выбранный лист?

  

falselight

1 — 21.03.19 — 10:39

Вижу ошибку, Excel — не определена в этом случае. Наверное в этом дело.

  

falselight

2 — 21.03.19 — 10:44

Все же ошибка идет, не подскажете почему?

{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(329)}: Ошибка при вызове метода контекста (Sheets)

    Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();  

по причине:

Произошла исключительная ситуация (0x800a03ec)

  

Дмитрий

3 — 21.03.19 — 10:44

ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы чему равно?

  

falselight

4 — 21.03.19 — 10:51

Почему вот это бывает пустое?????

При первой загрузке там COMОбъект

(3) Названию выбранного листа.

  

falselight

5 — 21.03.19 — 10:51

(4+) Excel.Sheets

  

falselight

6 — 21.03.19 — 10:57

Точку останова ставлю, вроде как обновляются данные

без точки останова ошибка, как будто COMОбъект не успевает считаться, как тут быть?

  

falselight

7 — 21.03.19 — 10:58

как с этим быть? Что то не понятно!!!!

  

falselight

8 — 21.03.19 — 11:06

Почему не видна функция в 1с ТекущееВремя() ?

  

falselight

9 — 21.03.19 — 11:08

Хотел вот такую функцию использовать, паузу. но она не работает.

Процедура Пауза(Время)

чЧас=0; чМин=0; чСек=0;

ТекущееВремя(чЧас,чМин,чСек);

чТекВремя = чЧас*3600+чМин*60+чСек;

чВремяЗавершения = чТекВремя+Время;

Пока чТекВремя<чВремяЗавершения Цикл

ТекущееВремя(чЧас,чМин,чСек);

чТекВремя = чЧас*3600+чМин*60+чСек;

КонецЦикла;

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

  

falselight

10 — 21.03.19 — 12:17

Ставлю точку останова на этой строке.

// ЧТЕНИЕ ЛИСТА

Процедура КоманднаяПанель1ПрочитатьДанныеСЛиста(Кнопка)

    Если ОбрЗавершена = 1 Тогда

        Сообщить(«Данный файл уже был обработан. Перезапустите обработку и выберите новый файл для загрузки!»);

        Возврат;

    КонецЕсли;

    //

    // Необходимый лист

    Если Найти(СокрЛП(Строка(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы)), «xls») > 0 Тогда

        Предупреждение(«Выберите конкретный лист для загрузки, а не сам файл!»);

        Возврат;

    КонецЕсли;

    //

    Если Excel = неопределено Тогда

        Попытка

            Excel = новый COMОбъект(«Excel.Application»);

        Исключение

            Сообщить(«Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.»);

            Возврат;

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

        //НашФайл = Excel.Workbooks.Open(ИмяФайла);

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

    КонецЕсли;

    //

    //ПаузаПустымЦиклом(5);

    //

    Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();  

Читаю листы, у загруженного файла в дерево. Читается как и один так и другой.

Останавливаясь на точке останова. Как только я убираю точку останова, при этих же действиях вываливается ошибка.

{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(333)}: Ошибка при вызове метода контекста (Sheets)

    Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();  

по причине:

Произошла исключительная ситуация (0x800a03ec)

Что нужно поправить? Подскажите пожалуйста!

  

falselight

11 — 21.03.19 — 12:21

Решил вопрос.

Нужно было сделать так, —

    Excel = Неопределено;

    //

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

Ошибка при выборе листа эксель

Я

falselight

21.03.19 — 10:34

Использую обработку для загрузки данных с эксель листов.

На форме появилось дерево, файла эксель и его листов. Выбираю лист.

Жму прочитать, в тз появляются данные.

Но если выбрать другой лист и нажать прочитать, то, выходит ошибка

{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(319)}: Ошибка при вызове метода контекста (Sheets)

    Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();  

по причине:

Произошла исключительная ситуация (0x800a03ec)

То есть как её исключить? Что бы перечитывался другой выбранный лист?

falselight

1 — 21.03.19 — 10:39

Вижу ошибку, Excel — не определена в этом случае. Наверное в этом дело.

falselight

2 — 21.03.19 — 10:44

Все же ошибка идет, не подскажете почему?

{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(329)}: Ошибка при вызове метода контекста (Sheets)
    Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();   

по причине:

Произошла исключительная ситуация (0x800a03ec)

Дмитрий

3 — 21.03.19 — 10:44

ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы чему равно?

falselight

4 — 21.03.19 — 10:51

Почему вот это бывает пустое?????

При первой загрузке там COMОбъект

(3) Названию выбранного листа.

falselight

5 — 21.03.19 — 10:51

(4+) Excel.Sheets

falselight

6 — 21.03.19 — 10:57

Точку останова ставлю, вроде как обновляются данные

без точки останова ошибка, как будто COMОбъект не успевает считаться, как тут быть?

falselight

7 — 21.03.19 — 10:58

как с этим быть? Что то не понятно!!!!

falselight

8 — 21.03.19 — 11:06

Почему не видна функция в 1с ТекущееВремя() ?

falselight

9 — 21.03.19 — 11:08

Хотел вот такую функцию использовать, паузу. но она не работает.

Процедура Пауза(Время) 
чЧас=0; чМин=0; чСек=0; 
ТекущееВремя(чЧас,чМин,чСек); 
чТекВремя = чЧас*3600+чМин*60+чСек; 
чВремяЗавершения = чТекВремя+Время; 
Пока чТекВремя<чВремяЗавершения Цикл 
ТекущееВремя(чЧас,чМин,чСек); 
чТекВремя = чЧас*3600+чМин*60+чСек; 
КонецЦикла; 
КонецПроцедуры;

falselight

10 — 21.03.19 — 12:17

Ставлю точку останова на этой строке.

// ЧТЕНИЕ ЛИСТА

Процедура КоманднаяПанель1ПрочитатьДанныеСЛиста(Кнопка)
    Если ОбрЗавершена = 1 Тогда 
        Сообщить("Данный файл уже был обработан. Перезапустите обработку и выберите новый файл для загрузки!");
        Возврат;
    КонецЕсли;
    //

    // Необходимый лист

    Если Найти(СокрЛП(Строка(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы)), "xls") > 0 Тогда
        Предупреждение("Выберите конкретный лист для загрузки, а не сам файл!");
        Возврат;
    КонецЕсли;
    //

    Если Excel = неопределено Тогда 
        Попытка
            Excel = новый COMОбъект("Excel.Application");
        Исключение
            Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.");
            Возврат;
        КонецПопытки;     
        //НашФайл = Excel.Workbooks.Open(ИмяФайла);

        Excel.Workbooks.Open(ИмяФайла);
    КонецЕсли;
    //

    //ПаузаПустымЦиклом(5);

    //

    Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();   


Читаю листы, у загруженного файла в дерево. Читается как и один так и другой.

Останавливаясь на точке останова. Как только я убираю точку останова, при этих же действиях вываливается ошибка.

{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(333)}: Ошибка при вызове метода контекста (Sheets)
    Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();   
по причине:
Произошла исключительная ситуация (0x800a03ec)


Что нужно поправить? Подскажите пожалуйста!

  

falselight

11 — 21.03.19 — 12:21

Решил вопрос.

Нужно было сделать так, -

    Excel = Неопределено;
    //

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

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

  • shtucer-igor 04.03.2009 at 12:54

    однозначно плюс !

    а можно тоже самое но чтобы грузило в установку цен номенклатуры контрагента ?

    Reply

  • softbear 11.03.2009 at 00:25

    однозначно плюс !

    Reply

  • COMPER 19.03.2009 at 11:51

    не работает. Но красиво

    Reply

  • COMPER 19.03.2009 at 11:53

  • Pim 19.03.2009 at 19:10

    не работает :-(. Самый главный минус всех подобных обработок в том, что они грузят только одну цену в УТ. По крайней мере, я других не видел. Эта обработка похоже тоже грузит только одну цену, да ещё и запоролена…

    А что делать, если мне надо загружать сразу четыре разных типов цен в один документ. (Не надо предлагать загружать по-одному — заказчик не хочет).

    Reply

  • egorover 20.03.2009 at 16:26

    внимательней, там загрузка идёт по всем типам цен в строку

    Reply

  • olee 23.03.2009 at 00:40

    У меня пишет:

    {ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)

    по причине:

    Произошла исключительная ситуация (0x8002000b)

    Reply

  • egorover 23.03.2009 at 08:03

    всё времени нет, укажите имя листа excel Лист1

    Reply

  • olee 23.03.2009 at 10:39

    Создался пустой документ с комментарием из какого файла загружен.

    Пытаюсь снова загрузить цены — пишет в регистре есть такая строка.

    Захожу в регистр сведений — нет такой записи:(

    Reply

  • olee 25.03.2009 at 00:44

    Разобрался, все работает!

    Очень нужная обработка.

    Плюс.

    Reply

  • dev_gen 31.03.2009 at 13:35

    Ищу по всему инету такую разработку уже неделю.

    Огромное спасибище

    Reply

  • kozakm 11.04.2009 at 08:26

  • VikFx 28.04.2009 at 11:00

    то, что нужно, спасибо

    Reply

  • 4emodan 06.05.2009 at 01:22

    Большое спасибо! Давно искал.

    Reply

  • 4emodan 06.05.2009 at 01:39

    А можно сделать, чтоб находило товары не по артикулу, а по коду?

    Reply

  • petrash 06.06.2009 at 11:50

    Выручил! Спасибо большое!

    Reply

  • qwertylion@rambler.ru 07.06.2009 at 19:01

    Обработка хорошее но вот только документ пустой создается, не подскажите как быть?

    Reply

  • steelrat1976 20.06.2009 at 15:19

    нужно обязательно вводить коэффициент, если цена равна базовой, то коэффициент = 1 и тогда поля не пустые. Хотя можно было бы сказать сразу, а то сам часа два мучался пока не понял

    Reply

  • qwertylion@rambler.ru 26.06.2009 at 22:20

    при записи в ценообразование пустой лист

    Reply

  • qwertylion@rambler.ru 26.06.2009 at 22:22

    все нормально разобрался нужно обязательно вводить коэффициент, если цена равна базовой, то коэффициент = 1 и тогда поля не пустые. Хотя можно было бы сказать сразу, а то сам часа два мучался пока не понял СПАСИБО steelrat1976

    Reply

  • Dimka74 21.07.2009 at 04:29

    Пожалуй повторюсь: «А можно сделать, чтоб находило товары не по артикулу, а по коду?»

    Reply

  • sly99 07.10.2009 at 21:25

    можно поподробнее, что где писать?

    выдает ошибку

    {ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)

    по причине:

    Произошла исключительная ситуация (0x8002000b)

    Reply

  • cooldanie 06.11.2009 at 15:51

    Автор зачет! а можно по наименованию товара а не по артикулу? или сделайте универсально — по коду, по наименованию, по артикулу — и цены не будет вашей обработке. А если 2 колонки цены? опт и розница — 2я и 3я?

    Reply

  • helloworld 09.11.2009 at 14:31

    {ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)

    по причине:

    Произошла исключительная ситуация (0x8002000b)

    Это наверное когда страница Екселя названа не Лист1. Автор, выбрал бы просто первую страницу — Excel.Sheets(1).select();

    Reply

  • labuh 26.11.2009 at 03:38

    Автору респект и уважуха.

    А как быть с одинаковыми ценами номенклатуры? Обработка не читает одинаковые цены из экселя, — пишет «не нашли артикул ……..»

    Reply

  • labuh 27.11.2009 at 23:51

    Здесь что, больше никто не живет???

    Reply

  • meser 06.12.2009 at 22:22

    Спасибо, действительно обработка нужная, я бы добавил еще поиск не только по артиклу, но и по коду, наименованию.

    Reply

  • nikser 11.01.2010 at 18:40

    Ничего не понимаю . у кого она работает??? документ изменения цен то создался , но пустой .

    Reply

  • Epishko 14.02.2010 at 22:04

    Потратил массу времени — вбил артикулы, а в результате создает пустой документ. Жаль убитого воскресенья! Все-таки несмотря на обильные ссылки по поиску — эту задачку так пока никто и не решил качественно.

    Reply

  • Родная 14.04.2010 at 10:56

    изначально все получается, но при загрузке, выбранных цен в 1С выдается ошибка

    {ВнешняяОбработка.ЗагрузкаЦен(120)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : Закупочная : ******* (Регистр сведений: Цены номенклатуры; Номер строки: 43)

    по причине:

    Запись с такими ключевыми полями существует! : Закупочная :**********(Регистр сведений: Цены номенклатуры; Номер строки: 43)

    при том что справочник «Установка цен номенклатуры» пуст.

    Что я не так делаю?

    Reply

  • provnick 24.01.2011 at 21:39

    Да уж, было б описание, то немного времени потратить на заполнение формы, оказывается нужно файлик подготовить Excelский, страница Екселя названа должна Лист1 и артикул форматнуть в текстовой, а цены в числовой и заполняется таблица для передачи в документ. Но вопрос вот в чем: как две цены закинуть, поле то одно для выбора цены, у кого получилось? egorover пишет (6) «внимательней, там загрузка идёт по всем типам цен в строку» , но выходит только одна цена, что и как? Да еще пароль, понятно, а то…, что ж мышает второе поле для второй цены сделать, а? хоть бы приходную да расходную. В целом гуд и +, ще б поправить.

    Reply

  • Glenas 28.01.2011 at 14:46

    Здравсвуйте. Помогайте, очень надо. Версия 8,2, УТ 11. При открытии выдавал ошибку, поменял ТипыЦенНоменклатуры на ВидыЦен. Обработка открывается, загружает файл xls, корректно находит цены. При попытке загрузки выдаёт {ВнешняяОбработка.ЗагрузкаЦен.МодульОбъекта(90)}: Поле объекта не обнаружено (НеПроводитьНулевыеЗначения) А код модуля запаролен! Что делать, автор? Спасибо

    Reply

  • egorover 29.07.2011 at 10:03

  • lenka-nes@mail.ru 13.10.2011 at 10:19

    спасибо!пригодилось

    Reply

  • wwizard 01.11.2011 at 17:05

    Пишет Ошибка при вызове метода контекста (Sheets)

    Что делать?

    Reply

  • tgnike 08.11.2011 at 12:30

    Она со всеми екселями работате?

    Reply

  • w22u 21.11.2011 at 14:54

    Спасибо, протестируем Вашу обработку.

    Reply

  • Belka063 30.11.2011 at 09:30

    Работает.Спасибо.Помогло

    Reply

  • AruslanM 07.12.2011 at 10:41

    Спасибо за идею, пригодилось.

    Reply

  • Ibrogim 19.12.2011 at 10:51

    Спасибо за обработку, помогла как пример

    Reply

  • ASoft 18.01.2012 at 22:14

  • maratsat 21.01.2012 at 17:44

    Во-первых, хорошая обработка. Спасибо. Значительно сокращает время ввода документа.

    Во-вторых, предложения по улучшению

    Думаю было бы еще лучше, сделать ввод нескольких типов цен за один раз.

    Или как вариант сделать возможным добавлять разные типы цен к одному документу.

    А иначе получается, что розничные, оптовые и крупнооптовые цены в разных документах, что не удобно.

    Reply

  • wwizard 21.01.2012 at 23:25

    (35) так что делать то

    Reply

  • egorover 23.01.2012 at 21:18

    (42) так для этого и создавалось, колонки в таблице excel и есть различные типы цен

    Reply

  • egorover 23.01.2012 at 21:19

    (43) имя листа в книге excel

    Reply

  • FE_D_OR83 31.01.2012 at 15:11

    Спасибо за обработку,сэкономила время. Радует что каждый может доработать под себя.

    Кстати неплохо бы в неё добавить возможность указывать цены для номенклатуры с характеристиками.

    Reply

  • fonomo0 31.01.2012 at 15:24

    Автор С какими версиями Excel работает ваша отработка?

    Reply

  • AlexxxMksv 29.04.2012 at 12:17

    Скажите ваша обработка может проверять соответствие единицы измерения из файла не с базовой единицей, не с единицей хранения остатков, не с единицей для отчетов, не с единицей мест, а с единицами по классификатору?

    Reply

  • TitanLuchs 17.06.2012 at 13:20

    Замечательная штука, спасибо автору, помог сэкономить время на написание своего подобного «велосипеда»!

    Reply

  • MyPuK_OLD 19.11.2013 at 15:46

    Есть какое-то описание или инструкция по использованию данной обработки? Подойдет ли она для работы с Комплексной автоматизацией редакция 1.1?

    Reply

  • egorover 19.11.2013 at 21:23

    Пробуйте, не пробовал, код открыт

    Reply

  • Здравствуйте! Подскажите, пожалуйста! Загружаю из Excel данные, хочу обратиться к именованной области, выдает следующую ошибку: «Ошибка при вызове метода контекста (Cells): Произошла исключительная ситуация (0x800a03ec)
    ФайлСтрок = Excel.Cells(2,1).SpecialCells(21).Row;
    по причине:
    Произошла исключительная ситуация (0x800a03ec)»

    Процедура ОсновныеДействияФормыЗагрузить(Кнопка)

    НомерКолонкиАртикул = ЭлементыФормы.ТабличныйДокумент.Область(«R2C1»;
    НомерКолонкиНаименованияТовара = ЭлементыФормы.ТабличныйДокумент.Область(«R2C2»;
    НомерКолонкиЕдиницаИзмерения = ЭлементыФормы.ТабличныйДокумент.Область(«R2C3»;
    НомерКолонкиСтрана = ЭлементыФормы.ТабличныйДокумент.Область(«R2C4»;

    //В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
    Excel = новый COMОбъект(«Excel.Application»;

    Версия = Лев(Excel.Version,Найти(Excel.Version,».»-1);
    Если Версия = «8» тогда
    ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count;
    ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
    ФайлСтрок = Excel.Cells(2,1).SpecialCells(21).Row;
    ФайлКолонок = Excel.Cells(2,1).SpecialCells(21).Column;
    Конецесли;

    // Выбираем данные из файла
    Для а = Excel.Cells(2,1).SpecialCells(21).Row по ФайлСтрок Цикл

    //Полуим данные из соответсвующих ячеек
    Артикул = СокрЛП(Excel.Cells(а,Артикул).Value);
    НаименованиеТовара = СокрЛП(Excel.Cells(а,НомерКолонкиНаименованияТовара).Value);
    ЕдиницаИзмерения = СокрЛП(Excel.Cells(а,НомерКолонкиЕдиницаИзмерения).Value);

    Товар = Справочники.Номенклатура.ПустаяСсылка();

    // Ищем товар в справочнике по коду
    Товар = Справочники.Номенклатура.НайтиПоКоду.Артикул;

    // Если не нашли по коду, то ищем по наименованию
    Если Товар.Пустая() Тогда
    Товар = Справочники.Номенклатура.НайтиПоНаименованию.Наименование;
    Конецесли;

    //Если не нашли создаем новый
    Если Товар.Пустая() Тогда
    Товар = Справочники.Номенклатура.СоздатьЭлемент();
    Товар.Наименование = НаименованиеТовара;
    Товар.Артикул = Артикул;
    Товар.БазоваяЕдиницаИзмерения = ЕдиницаИзмерения;
    Товар.СтранаПроисхождения = НомерКолонкиСтрана;
    Товар.Записать();
    Конецесли;
    КонецЦикла;

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

    Народ, помогите, не могу понять почему на одном и том компе под разными пользователями работает и не работает, вываливает ошибку «Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)»? гуглом пользоваться умею, но ответа так и не нашел.

    поправка, ексель 2010, работаем на терминалах по РДП, есть домен.

    Sheets — лист книги. может обращается к несущствующему?

    коллекция листов вообще-то

    от этого сильно смысл последнего предложения поменялся? код покажи-то. и где именно валится

    в смысле, от того что ты неправильное определение свойству дала? кстати, автор, Sheets — это не метод

    самое интересное, что под одним пользователем работает нормально, а под другим пользователем вываливает ошибку

    Тэги: 1С 8

    Комментарии доступны только авторизированным пользователям

  • shtucer-igor 04.03.2009 at 12:54

    однозначно плюс !

    а можно тоже самое но чтобы грузило в установку цен номенклатуры контрагента ?

    Reply

  • softbear 11.03.2009 at 00:25

    однозначно плюс !

    Reply

  • COMPER 19.03.2009 at 11:51

    не работает. Но красиво

    Reply

  • COMPER 19.03.2009 at 11:53

  • Pim 19.03.2009 at 19:10

    не работает :-(. Самый главный минус всех подобных обработок в том, что они грузят только одну цену в УТ. По крайней мере, я других не видел. Эта обработка похоже тоже грузит только одну цену, да ещё и запоролена…

    А что делать, если мне надо загружать сразу четыре разных типов цен в один документ. (Не надо предлагать загружать по-одному — заказчик не хочет).

    Reply

  • egorover 20.03.2009 at 16:26

    внимательней, там загрузка идёт по всем типам цен в строку

    Reply

  • olee 23.03.2009 at 00:40

    У меня пишет:

    {ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)

    по причине:

    Произошла исключительная ситуация (0x8002000b)

    Reply

  • egorover 23.03.2009 at 08:03

    всё времени нет, укажите имя листа excel Лист1

    Reply

  • olee 23.03.2009 at 10:39

    Создался пустой документ с комментарием из какого файла загружен.

    Пытаюсь снова загрузить цены — пишет в регистре есть такая строка.

    Захожу в регистр сведений — нет такой записи:(

    Reply

  • olee 25.03.2009 at 00:44

    Разобрался, все работает!

    Очень нужная обработка.

    Плюс.

    Reply

  • dev_gen 31.03.2009 at 13:35

    Ищу по всему инету такую разработку уже неделю.

    Огромное спасибище

    Reply

  • kozakm 11.04.2009 at 08:26

  • VikFx 28.04.2009 at 11:00

    то, что нужно, спасибо

    Reply

  • 4emodan 06.05.2009 at 01:22

    Большое спасибо! Давно искал.

    Reply

  • 4emodan 06.05.2009 at 01:39

    А можно сделать, чтоб находило товары не по артикулу, а по коду?

    Reply

  • petrash 06.06.2009 at 11:50

    Выручил! Спасибо большое!

    Reply

  • qwertylion@rambler.ru 07.06.2009 at 19:01

    Обработка хорошее но вот только документ пустой создается, не подскажите как быть?

    Reply

  • steelrat1976 20.06.2009 at 15:19

    нужно обязательно вводить коэффициент, если цена равна базовой, то коэффициент = 1 и тогда поля не пустые. Хотя можно было бы сказать сразу, а то сам часа два мучался пока не понял

    Reply

  • qwertylion@rambler.ru 26.06.2009 at 22:20

    при записи в ценообразование пустой лист

    Reply

  • qwertylion@rambler.ru 26.06.2009 at 22:22

    все нормально разобрался нужно обязательно вводить коэффициент, если цена равна базовой, то коэффициент = 1 и тогда поля не пустые. Хотя можно было бы сказать сразу, а то сам часа два мучался пока не понял СПАСИБО steelrat1976

    Reply

  • Dimka74 21.07.2009 at 04:29

    Пожалуй повторюсь: «А можно сделать, чтоб находило товары не по артикулу, а по коду?»

    Reply

  • sly99 07.10.2009 at 21:25

    можно поподробнее, что где писать?

    выдает ошибку

    {ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)

    по причине:

    Произошла исключительная ситуация (0x8002000b)

    Reply

  • cooldanie 06.11.2009 at 15:51

    Автор зачет! а можно по наименованию товара а не по артикулу? или сделайте универсально — по коду, по наименованию, по артикулу — и цены не будет вашей обработке. А если 2 колонки цены? опт и розница — 2я и 3я?

    Reply

  • helloworld 09.11.2009 at 14:31

    {ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)

    по причине:

    Произошла исключительная ситуация (0x8002000b)

    Это наверное когда страница Екселя названа не Лист1. Автор, выбрал бы просто первую страницу — Excel.Sheets(1).select();

    Reply

  • labuh 26.11.2009 at 03:38

    Автору респект и уважуха.

    А как быть с одинаковыми ценами номенклатуры? Обработка не читает одинаковые цены из экселя, — пишет «не нашли артикул ……..»

    Reply

  • labuh 27.11.2009 at 23:51

    Здесь что, больше никто не живет???

    Reply

  • meser 06.12.2009 at 22:22

    Спасибо, действительно обработка нужная, я бы добавил еще поиск не только по артиклу, но и по коду, наименованию.

    Reply

  • nikser 11.01.2010 at 18:40

    Ничего не понимаю . у кого она работает??? документ изменения цен то создался , но пустой .

    Reply

  • Epishko 14.02.2010 at 22:04

    Потратил массу времени — вбил артикулы, а в результате создает пустой документ. Жаль убитого воскресенья! Все-таки несмотря на обильные ссылки по поиску — эту задачку так пока никто и не решил качественно.

    Reply

  • Родная 14.04.2010 at 10:56

    изначально все получается, но при загрузке, выбранных цен в 1С выдается ошибка

    {ВнешняяОбработка.ЗагрузкаЦен(120)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : Закупочная : ******* (Регистр сведений: Цены номенклатуры; Номер строки: 43)

    по причине:

    Запись с такими ключевыми полями существует! : Закупочная :**********(Регистр сведений: Цены номенклатуры; Номер строки: 43)

    при том что справочник «Установка цен номенклатуры» пуст.

    Что я не так делаю?

    Reply

  • provnick 24.01.2011 at 21:39

    Да уж, было б описание, то немного времени потратить на заполнение формы, оказывается нужно файлик подготовить Excelский, страница Екселя названа должна Лист1 и артикул форматнуть в текстовой, а цены в числовой и заполняется таблица для передачи в документ. Но вопрос вот в чем: как две цены закинуть, поле то одно для выбора цены, у кого получилось? egorover пишет (6) «внимательней, там загрузка идёт по всем типам цен в строку» , но выходит только одна цена, что и как? Да еще пароль, понятно, а то…, что ж мышает второе поле для второй цены сделать, а? хоть бы приходную да расходную. В целом гуд и +, ще б поправить.

    Reply

  • Glenas 28.01.2011 at 14:46

    Здравсвуйте. Помогайте, очень надо. Версия 8,2, УТ 11. При открытии выдавал ошибку, поменял ТипыЦенНоменклатуры на ВидыЦен. Обработка открывается, загружает файл xls, корректно находит цены. При попытке загрузки выдаёт {ВнешняяОбработка.ЗагрузкаЦен.МодульОбъекта(90)}: Поле объекта не обнаружено (НеПроводитьНулевыеЗначения) А код модуля запаролен! Что делать, автор? Спасибо

    Reply

  • egorover 29.07.2011 at 10:03

  • lenka-nes@mail.ru 13.10.2011 at 10:19

    спасибо!пригодилось

    Reply

  • wwizard 01.11.2011 at 17:05

    Пишет Ошибка при вызове метода контекста (Sheets)

    Что делать?

    Reply

  • tgnike 08.11.2011 at 12:30

    Она со всеми екселями работате?

    Reply

  • w22u 21.11.2011 at 14:54

    Спасибо, протестируем Вашу обработку.

    Reply

  • Belka063 30.11.2011 at 09:30

    Работает.Спасибо.Помогло

    Reply

  • AruslanM 07.12.2011 at 10:41

    Спасибо за идею, пригодилось.

    Reply

  • Ibrogim 19.12.2011 at 10:51

    Спасибо за обработку, помогла как пример

    Reply

  • ASoft 18.01.2012 at 22:14

  • maratsat 21.01.2012 at 17:44

    Во-первых, хорошая обработка. Спасибо. Значительно сокращает время ввода документа.

    Во-вторых, предложения по улучшению

    Думаю было бы еще лучше, сделать ввод нескольких типов цен за один раз.

    Или как вариант сделать возможным добавлять разные типы цен к одному документу.

    А иначе получается, что розничные, оптовые и крупнооптовые цены в разных документах, что не удобно.

    Reply

  • wwizard 21.01.2012 at 23:25

    (35) так что делать то

    Reply

  • egorover 23.01.2012 at 21:18

    (42) так для этого и создавалось, колонки в таблице excel и есть различные типы цен

    Reply

  • egorover 23.01.2012 at 21:19

    (43) имя листа в книге excel

    Reply

  • FE_D_OR83 31.01.2012 at 15:11

    Спасибо за обработку,сэкономила время. Радует что каждый может доработать под себя.

    Кстати неплохо бы в неё добавить возможность указывать цены для номенклатуры с характеристиками.

    Reply

  • fonomo0 31.01.2012 at 15:24

    Автор С какими версиями Excel работает ваша отработка?

    Reply

  • AlexxxMksv 29.04.2012 at 12:17

    Скажите ваша обработка может проверять соответствие единицы измерения из файла не с базовой единицей, не с единицей хранения остатков, не с единицей для отчетов, не с единицей мест, а с единицами по классификатору?

    Reply

  • TitanLuchs 17.06.2012 at 13:20

    Замечательная штука, спасибо автору, помог сэкономить время на написание своего подобного «велосипеда»!

    Reply

  • MyPuK_OLD 19.11.2013 at 15:46

    Есть какое-то описание или инструкция по использованию данной обработки? Подойдет ли она для работы с Комплексной автоматизацией редакция 1.1?

    Reply

  • egorover 19.11.2013 at 21:23

    Пробуйте, не пробовал, код открыт

    Reply

  • Автор beztrud, 19 июн 2014, 23:26

    0 Пользователей и 1 гость просматривают эту тему.

    Цитировать
    1. Создаем реквизит формы Таблица
    2. Заполняем ее на клиенте (отключаемся от ADO)

    А если без реквизита Таблица — то я так понимаю можно использовать таблицу значений, а затем в табличную часть грузить из нее?


    Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!


    Цитировать
    Все что надо это:
    1. Начальная строка
    2. Количество колонок
    3. Признак когда остановиться

    Можете привести код с пояснениями, пожалуйста.



    Попытка
    ФайлЭксель = ПолучитьCOMОбъект(ИмяФайла);
    Исключение
    ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке());
    Отказ = Истина;
    Возврат;
    КонецПопытки;

    СписокИмпорта.Очистить();

    счСтроки = НачальнаяСтрока;
    НомСтр = 0;

    Пока ИСТИНА Цикл 

    НомСтр = НомСтр + 1;

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

    ПроверочнаяЯчейка = СокрЛП(ФайлЭксель.Sheets(1).Cells(СчСтроки,1).Value);

    Если ПроверочнаяЯчейка = "#" Тогда

    Прервать;

    КонецЕсли;

    Если ПроверочнаяЯчейка = "" Тогда

    Прервать;

    КонецЕсли;

    Состояние("Загрузка: строка №"+счСтроки);

    НоваяСтрока = СписокИмпорта.Добавить();

    НоваяСтрока.НомерСтроки = НомСтр;

    Для Ш=1 По СписокИмпорта.Колонки.Количество()-1 Цикл

    мКолонка = СписокИмпорта.Колонки.Получить(Ш);

    ЗначениеЯчейки = ФайлЭксель.Sheets(1).Cells(СчСтроки,Ш).Value;

    ЗаполнитьЗначениеПоТипуКолонки(ЗначениеЯчейки, НоваяСтрока[мКолонка.Имя], мКолонка);

    ОтформатироватьЗначениеПоля(ЗначениеЯчейки, НоваяСтрока[мКолонка.Имя], Ш); //очистим от ненужных символов и пр.

    КонецЦикла;

    счСтроки = счСтроки + 1;

    КонецЦикла;

    ФайлЭксель.Application.Quit();

    Получил помощь — скажи СПАСИБО.
    Разобрался сам — расскажи другим.


    ФайлЭксель = ПолучитьCOMОбъект(ИмяФайла);

    Если выбираем xls, то всё нормально, ну а если xlsx — то
    {Обработка.ВычислениеПластика.Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект)
          ФайлЭксель = ПолучитьCOMОбъект(ИмяФайла);
    по причине:
    Ошибка получения объекта COM: -2147467259(0x80004005): Неопознанная ошибка

    Добавлено: 20 июн 2014, 21:31


    Кстати эта ошибка появляется при повторном выборе файла. При первом выборе ошибки нет, хоть и подгружает дольше, чем xls. Может быть проблема в

    ФайлЭксель.Application.Quit();

    Добавлено: 20 июн 2014, 21:59


    После многократных попыток выяснилось, что ошибка не имеет последовательности. Т.е. может вылезти а может и нет.


    Да такое поведение нормальное для конструкции

    ПолучитьCOMОбъект(ИмяФайла); если открыть файл закрыть и тут же снова открыть, на медленных компах процесс не успевает завершиться и ПолучитьCOMОбъект() подключается к существующему процессу снова, ну а процесс то уже не рабочий…

    СП
    Основное применение функции ПолучитьCOMОбъект — это получение COM-объекта, соответствующего файлу. Для этого следует в качестве первого параметра функции задать имя файла, который будет определять COM-объект. Например, фрагмент кода:
    Таб = ПолучитьCOMОбъект(«C:DATADATA.XLS»);
    создает объект Excel.Application и открывает с его помощью файл документа «C:DATADATA.XLS». Если указанный файл во время выполнения данного фрагмента уже открыт с помощью MS Excel, то будет получена ссылка на уже существующий объект.
    Для файлов, указываемых в качестве параметра данной функции, должно быть установлено соответствие расширения имени файла и класса COM.

    Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!


    cska-fanat-kz

    ПроверочнаяЯчейка = СокрЛП(ФайлЭксель.Sheets(1).Cells(СчСтроки,1).Value);
    Выдает
    {Обработка.ВычислениеПластика.Форма.Форма.Форма(72)}: Ошибка при вызове метода контекста (Cells)
          ПроверочнаяЯчейка = Эксель.Sheets(1).Cells(СчСтроки,2).Value;   
    по причине:
    Произошла исключительная ситуация (0x800a03ec)

    Dethmontt

    ЦитироватьДля файлов, указываемых в качестве параметра данной функции, должно быть установлено соответствие расширения имени файла и класса COM.

    Это как?


    Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!


    cska-fanat-kz

    ЗаполнитьЗначениеПоТипуКолонки(ЗначениеЯчейки, НоваяСтрока[мКолонка.Имя], мКолонка);

    А это что за функция?

    Добавлено: 21 июн 2014, 08:43


    Вернемся все-таки к ADO. Уважаемый Dethmontt просьба помочь. У меня на форме есть ТабличнаяЧасть.Вычисления. Реквизиты этой табличной части — ЧастьИзделия, ВысотаФасада, ШиринаФасада, КоличествоФасадов. Есть файл эксель без наименования столбцов в первой строке, т.е в первой строке уже находятся данные. Структура файла эксель всегда одинакова во второй колонке файла эксель всегда содержится ЧастьИзделия, в четвертой колонке всегда ВысотаФасада, в пятой — ШиринаФасада и в шестой — КоличествоФасадов. Вы писали — 1. Создаем реквизит формы Таблица — т.е нужно создать на форме ТабличныйДокумент с именем Таблица и грузить в него? Или как?
    Все что пришло мне в голову это выбрать файл на клиенте а на сервере считать с него данные и передать на клиент. Но вот моя функция с переменной СтрокаТабличнойЧасти ругается, хоть и грузит данные. У меня к Вам просьба, если не сложно, выложите пожалуйста клиентскую и серверную процедуры для загрузки файла, применимо к моим реквизитам.


    Получил помощь — скажи СПАСИБО.
    Разобрался сам — расскажи другим.


    Автор Sweety Bell, 24 ноя 2015, 12:44

    0 Пользователей и 1 гость просматривают эту тему.

    Здравствуйте! Мне надо загрузить данные из excel в 8.2 обычное приложение. В цикле вывода возникает ошибка в методе Добавить. Первые 2 итерации пропускает нормально, потом выдает ошибку:
    НоваяКолонка=ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов,ИмяКолонки);
    по причине:
    Недопустимое значение параметра (параметр номер ‘1’)

    Процедура ОкрытьФайлНажатие(Элемент)
       ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
       ДиалогВыбора.Заголовок ="Выберите файл";
       
    Если ДиалогВыбора.Выбрать()Тогда
       ИмяФайла=ДиалогВыбора.ПолноеИмяФайла;
      КонецЕсли ;

       Таблица.Очистить();
    Таблица.Колонки.Очистить();

    Попытка
    Excel=Новый COMОбъект("Excel.Application");
    Excel.WorkBooks.Open(ИмяФайла);
    Состояние("Обработка файла Excel");
    ExcelЛист=Excel.Sheets(1);
    Исключение
    Сообщить("шибка при открытии файла");
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;


    Версия =Лев(Excel.Version,Найти(Excel.Version,".")-1);
    Если Версия="8" Тогда
    ФайлСтрок =Excel.Cells.CurrentRegion.Rows.Count;
    ФайлКолонок =Макс(Excel.Cells.CurrentRegion.Columns.Count,13);
    Иначе
    ФайлСтрок =Excel.Cells(1,1).SpecialCells(11).Row;
    ФайлКолонок =Excel.Cells(1,1).SpecialCells(11).Column;
    КонецЕсли;

    Счетчик=1;
    Пока ЗначениеЗаполнено(Excel.Cells(1,Счетчик).Text)Цикл
    ИмяКолонки=Excel.Cells(1,Счетчик).Text;
    ИмяБезПробелов=СтрЗаменить(ИмяКолонки," ","");
    //Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяКолонки);
    Таблица.Колонки.Добавить(ИмяКолонки);
    НоваяКолонка=ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов,ИмяКолонки);
    НоваяКолонка.Данные=ИмяБезПробелов;
    Счетчик=Счетчик+1;
    КонецЦикла;

    Для нс=2 по Файлстрок Цикл
    НоваяСтрока=Таблица.Добавить();
    Для НомерКолонки=1 По Таблица.Колонки.Количество()Цикл
    ТекущееЗначение=Excel.Cells(нс.НомерКолонки).Text;
      ИмяКолонки=Таблица.Колонких[НомерКолонки-1].Имя;
      НоваяСтрока[ИмяКолонки]=ТекущееЗначение;



      КонецЦикла;
       КонецЦикла;

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


    Смело запускайте отладчик. Он вам покажет название колонки.


    показал колонку Наименование.
    После этого на форме появляются 3 пустые колонки.
    Помогите, пожалуйста, вывести на экран. Начальство убивает:fdbsdfbsd:


    Вы слово «отладчик» сознательно не видите?


    Вижу. Он показывает на эту строку
    НоваяКолонка=ЭлементыФормы.Таблица.Колонки.Добавить(ИмяКолонки);


    Цитата: Sweety Bell от 24 ноя 2015, 13:12
    Вижу. Он показывает на эту строку
    НоваяКолонка=ЭлементыФормы.Таблица.Колонки.Добавить(ИмяКолонки);

    В приведенном вами коде нет такой строки. Есть такая:

    НоваяКолонка=ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов,ИмяКолонки);


    Скажите, а что такое отладчик вы вообще знаете? Вывод строки с ошибкой и отладчик — это знаете ли, очень разные вещи.


    Цитата: vitasw от 24 ноя 2015, 13:25
    Скажите, а что такое отладчик вы вообще знаете? Вывод строки с ошибкой и отладчик — это знаете ли, очень разные вещи.

    инструмент для пошаговой отладки. Я им и пользуюсь. Значение смотрю на табло

    Добавлено: 24 ноя 2015, 13:47


    Оно зависает на этом месте кода

    ИмяКолонки=Excel.Cells(1,Счетчик).Text;


    ИмяКолонки=СокрЛП(Excel.Cells(1,Счетчик).Value);


    исправила. Теперь другая ошибка: Ошибка при вызове метода контекста (Cells)
          Пока ЗначениеЗаполнено(Excel.Cells(1,Счетчик).Value)Цикл
    по причине:
    Произошла исключительная ситуация (0x800a03ec)


    • Форум База

    • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

    • Конфигурирование, программирование в 1С Предприятие 8

    • загрузка данных из excel в 8.2

    Похожие темы (5)

    Рейтинг@Mail.ru

    Rambler's Top100

    Поиск

  • Ошибка при вызове конструктора сомобъект unknown error 0x80131700
  • Ошибка при вызове метода контекста bookmarks
  • Ошибка при вызове конструктора сомобъект 2147467262 0x80004002 интерфейс не поддерживается
  • Ошибка при вызове метода контекста authenticate
  • Ошибка при вызове конструктора сомобъект 2147221164 0x80040154 класс не зарегистрирован