Загрузка из Эксель: Ошибка при вызове метода контекста (ПолучитьОбъект) |
Я |
26.02.10 — 14:53
Загружаю из Эксель в спр.Номенклатура файл, содержащий два столбца:
«КодТовара» и «НовыйРеквизит» (этот реквизит мы завели в спр.Номенклатура и теперь его надо заполнить данными из файла). Все загружает нормально, только когда доходит до последнего элемента, выдает ошибку:
{Форма.Форма(114)}: Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран!
Товар = Товар.ПолучитьОбъект();
по причине:
Элемент не выбран!
И Эксель зависает, хотя все подгрузил без ошибок…
Вот мой код:
НомерЛиста = 1;
Попытка
Excel = новый COMОбъект(«Excel.Application»);
Исключение
Сообщить(«Excel на компьютере не установлен.»);
Возврат;
КонецПопытки;
Excel.Workbooks.Open(ИмяФайла);
Excel.Sheets(НомерЛиста).select();
Версия = Лев(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;
НомерКолонкиНовогоРеквизита = 2;
Для а = 2 По 469 Цикл
КодТовара = СокрЛП(Excel.Cells(а,НомерКолонкиКодаТовара).Value);
НовыйРеквизит = СокрЛП(Excel.Cells(а,НомерКолонкиНовогоРеквизита).Value);
Товар = Справочники.Номенклатура.НайтиПоКоду(КодТовара);
Сообщить(«Нашел Код номенклатуры» + КодТовара);
Товар = Товар.ПолучитьОбъект();
Товар.НовыйРеквизит = НовыйРеквизит;
Товар.Записать();
Конеццикла;
Excel.ActiveWorkbook.Close();
1 — 26.02.10 — 14:55
С чего это такая уверенность, что «Нашел Код номенклатуры»?
2 — 26.02.10 — 14:56
А кто будет проверять нашелся товар по коду или нет?
3 — 26.02.10 — 15:07
(2) а как?
4 — 26.02.10 — 15:09
Товар.ПустаяССылка()
5 — 26.02.10 — 15:09
СП:
Пример:
СтрокаКода = «840»;
Валюты = Справочники.Валюты;
НайденнаяСсылка = Валюты.НайтиПоКоду(СтрокаКода);
Если НайденнаяСсылка = Валюты.ПустаяСсылка() Тогда
Сообщить(«Валюты «»» + СтрокаКода + «»» еще нет»);
КонецЕсли;
6 — 26.02.10 — 15:10
(5)полный пипец
7 — 26.02.10 — 15:11
(6) Это пример из СП.
Полный пипец — это (4).
Если уж так, как ты предлагаешь проверять, то: Товар.Пустая()
8 — 26.02.10 — 15:11
(4), (6) а как надо правильно, применительно к моему коду в (0)???
9 — 26.02.10 — 15:12
(8) Ну-ну…
10 — 26.02.10 — 15:14
(7)ну да согласен … затупил с сылкой
11 — 26.02.10 — 15:16
Так будет правильно?
……
Товар = Справочники.Номенклатура.НайтиПоКоду(КодТовара);
Если Товар = Справочники.Номенклатура.ПустаяСсылка() Тогда
Сообщить(«Строка НЕ ЗАГРУЖЕНА. Код Номенклатуры «+КодТовара+» не найден в справочнике.»);
Продолжить;
КонецЕсли;
Сообщить(«Нашел Код номенклатуры» + КодТовара);
Товар = Товар.ПолучитьОбъект();
Товар.НовыйРеквизит = НовыйРеквизит;
Товар.Записать();
Конеццикла;
12 — 26.02.10 — 15:22
сойдет
13 — 26.02.10 — 15:36
Еще подскажите пож-та, т.к. даже если в файле меньше 469 строк, он все равно обрабатывал все 469 строчки, то я исправила строчки:
Было:
Для а = 2 По 469 Цикл
…
КонецЦикла;
Стало:
Для а = Excel.Cells(2,1).SpecialCells(21).Row по ФайлСтрок Цикл
…
КонецЦикла;
Стал выдавать ошибку:
{Форма.Форма(114)}: Ошибка при вызове метода контекста (SpecialCells): Произошла исключительная ситуация (Microsoft Office Excel): Unable to get the SpecialCells property of the Range class
Для а = Excel.Cells(2,1).SpecialCells(21).Row по ФайлСтрок Цикл
по причине:
Произошла исключительная ситуация (Microsoft Office Excel): Unable to get the SpecialCells property of the Range class
14 — 26.02.10 — 15:41
Вот мой текст итоговый:
НомерЛиста = 1;
Попытка
Excel = новый COMОбъект(«Excel.Application»);
Исключение
Сообщить(«Excel на компьютере не установлен.»);
Возврат;
КонецПопытки;
Excel.Workbooks.Open(ИмяФайла);
Excel.Sheets(НомерЛиста).select();
Версия = Лев(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;
НомерКолонкиНовогоРеквизита = 2;
//Для а = 2 По 469 Цикл
Для а = Excel.Cells(2,1).SpecialCells(21).Row по ФайлСтрок Цикл
КодТовара = СокрЛП(Excel.Cells(а,НомерКолонкиКодаТовара).Value);
НовыйРеквизит = СокрЛП(Excel.Cells(а,НомерКолонкиНовогоРеквизита).Value);
Товар = Справочники.Номенклатура.НайтиПоКоду(КодТовара);
Если Товар = Справочники.Номенклатура.ПустаяСсылка() Тогда
Сообщить(«Строка НЕ ЗАГРУЖЕНА. Код Номенклатуры «+КодТовара+» не найден в справочнике.»);
Продолжить;
КонецЕсли;
Сообщить(«Нашел Код номенклатуры» + КодТовара);
Товар = Товар.ПолучитьОбъект();
Товар.НовыйРеквизит = НовыйРеквизит;
Товар.Записать();
Конеццикла;
15 — 26.02.10 — 15:57
up!
16 — 26.02.10 — 16:00
SpecialCells(11)
17 — 26.02.10 — 16:01
Для а = 2 по ФайлСтрок Цикл
Попробуй так
18 — 26.02.10 — 16:01
хотя …
нафига Excel.Cells(2,1).SpecialCells(21).Row
просто 1
19 — 26.02.10 — 16:05
ИМХО
предположу что нет 21 колонки
КМК должно быть так:
Для а = 2 По ФайлСтрок Цикл
20 — 26.02.10 — 16:08
(19) это не колонка
21 — 26.02.10 — 16:08
(20) а что?
22 — 26.02.10 — 16:09
открой для себя справку по VBA )
23 — 26.02.10 — 16:11
(22) XlCellType constants Value
xlCellTypeAllFormatConditions. Cells of any format -4172
xlCellTypeAllValidation. Cells having validation criteria -4174
xlCellTypeBlanks. Empty cells 4
xlCellTypeComments. Cells containing notes -4144
xlCellTypeConstants. Cells containing constants 2
xlCellTypeFormulas. Cells containing formulas -4123
xlCellTypeLastCell. The last cell in the used range 11
xlCellTypeSameFormatConditions. Cells having the same format -4173
xlCellTypeSameValidation. Cells having the same validation criteria -4175
xlCellTypeVisible. All visible cells 12
ну и где там 21 ?
24 — 26.02.10 — 16:11
может надо было указать 12 ?
xlCellTypeVisible. All visible cells 12
25 — 26.02.10 — 16:11
или 4 ?
26 — 26.02.10 — 16:12
а вообще (14) сильно корявый код хоть и рабочий частично
Книга = Excel.Workbooks.Open(ИмяФайла);
Лист = Книга.Sheets(НомерЛиста);
НовыйРеквизит = СокрЛП(Лист.Cells(а,НомерКолонкиНовогоРеквизита).Value);
ФайлКолонок = Лист.SpecialCells(11).Column;
и т.д. и т.п.
27 — 26.02.10 — 16:12
(22) я смотрю ты открывать то умеешь, вот только пользоваться не очень
28 — 26.02.10 — 16:13
(23) XlCellType <> номер колонки? ))
29 — 26.02.10 — 16:15
))
30 — 26.02.10 — 16:18
(28) да я вообще VBA в глаза не видел ….
раза 2 за 10 лет открывал, откуда мне знать? я просто предположил..
31 — 26.02.10 — 16:18
и кстати угадал
тебе виднее )
Здравствуйте! Подскажите, пожалуйста! Загружаю из 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);
Товар = Справочники.Номенклатура.ПустаяСсылка();
// Ищем товар в справочнике по коду
Товар = Справочники.Номенклатура.НайтиПоКоду.Артикул;
// Если не нашли по коду, то ищем по наименованию
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.НайтиПоНаименованию.Наименование;
Конецесли;
//Если не нашли создаем новый
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.СоздатьЭлемент();
Товар.Наименование = НаименованиеТовара;
Товар.Артикул = Артикул;
Товар.БазоваяЕдиницаИзмерения = ЕдиницаИзмерения;
Товар.СтранаПроисхождения = НомерКолонкиСтрана;
Товар.Записать();
Конецесли;
КонецЦикла;
КонецПроцедуры
Добрый день. Столкнулся с такой проблемой: не могу найти пустые ячейки с помощью метода .SpecialCells(xlCellTypeBlanks) Но стоит сделать .Clear, как пустые ячейки начинают определяться, как пустые…. Но что это за бред, какими они были до этого? Как мне найти пустые ячейки? Изменено: Vhodnoylogin — 21.04.2017 09:34:43 |
|
AAF Пользователь Сообщений: 1000 |
Вы описываете как работали над чем-то… и это похоже был файлик со своими проблемами… Да? |
Vhodnoylogin Пользователь Сообщений: 44 |
#3 21.04.2017 09:36:08 Ничего не понял… Проблема либо есть, либо ее нет. Просто выберете Если нужен код (зачем?) — вот он:
Вставляйте любые диапазоны. Если Аксептор будет пустым полностью, то .SpecialCells(xlCellTypeBlanks) не сработает. И я спрашиваю — что делать? Изменено: Vhodnoylogin — 21.04.2017 09:53:11 |
||
kuklp Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Я сам — дурнее всякого примера! … |
Пытливый Пользователь Сообщений: 4680 |
Может в шаблоне, на основании которого создается новый лист чего этого… .того… не то? Кому решение нужно — тот пример и рисует. |
Vhodnoylogin Пользователь Сообщений: 44 |
#6 21.04.2017 09:46:28 Да возьмите любой пустой диапазон и
|
||
AAF Пользователь Сообщений: 1000 |
Vhodnoylogin, в пределах .UsedRange Изменено: AAF — 21.04.2017 10:10:13 |
V Пользователь Сообщений: 5055 |
зачем искать пустые ячейки на пустом листе? |
Vhodnoylogin Пользователь Сообщений: 44 |
#9 21.04.2017 10:14:20
Недостаточно… Ведь смысл кода в том, чтобы запилить форматы для выбранного рейнджа… Чтобы работало, нужно дополнить код этим:
|
||||
AAF Пользователь Сообщений: 1000 |
Вот если б Вы выложили файл… |
The_Prist Пользователь Сообщений: 14272 Профессиональная разработка приложений для MS Office |
#11 21.04.2017 14:39:47
возможно, повреждение книги. Такое поведение может быть в одном случае: в ячейках не пустые значения, а строки нулевой длины. Такое может наблюдаться при создании файлов путем выгрузки из 1С. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Юрий М Модератор Сообщений: 60810 Контакты см. в профиле |
#12 21.04.2017 15:07:09
Дим, я в новой книге в А1 записал единичку, выделяю А1:А5, выполняю макрос
и получаю ошибку с сообщением, что не найдено ни одной ячейки, удовлетворяющей указанным условиям. |
||||
The_Prist Пользователь Сообщений: 14272 Профессиональная разработка приложений для MS Office |
А, если вообще нет значений — это логично, т.к. диапазон рабочий пока еще только из одной ячейки(точнее — из ни одной ) и любая конструкция SpecialCells будет ломаться, т.к. не работает для ни одной ячейки. Изменено: The_Prist — 21.04.2017 15:17:15 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Юрий М Модератор Сообщений: 60810 Контакты см. в профиле |
#14 21.04.2017 15:21:42
Но у меня ведь одна заполнена ) |
||
Юрий М Модератор Сообщений: 60810 Контакты см. в профиле |
Заполнил А1 и А5, выделил А1:А5, выполнил макрос — выделено три ячейки А2:А4. Вывод: работает в пределах UsedRange. Так? ) |
The_Prist Пользователь Сообщений: 14272 Профессиональная разработка приложений для MS Office |
#16 21.04.2017 15:52:11
Да Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
AAF Пользователь Сообщений: 1000 |
#17 21.04.2017 17:43:49
Нет….
Изменено: AAF — 21.04.2017 18:02:08 |
||||
Ошибка при выборе листа эксель |
Я |
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)